按键控制LED开关,有定时功能
按键控制LED开关,有定时功能有个程序不知道怎么编写,请大侠指教;我用按键控制LED开和关,但当LED亮时同时有一个定时控制,不按关机,自动停机。谢谢了! const int buttonPin = 12; //button pin number
const int ledPin =13; //LED pin number
int buttonState = 2; //button state1,2,3
unsigned long currentMillis; //record the current time for blinking
long previousMillis = 0; //store the last time LED was updated
long interval = 1000; //interval at which to blink (milliseconds)
/////////////////////////////////////////////////////////////////////////////////////////
void setup()
{
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT);
digitalWrite(buttonPin, HIGH); //use internal pull up resistor
}////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////
void loop()
{
if (digitalRead(buttonPin) == LOW) //Not pressed - HIGH; Pressed - LOW
{
buttonState++;
if (buttonState > 2) buttonState = 1;//button State from 1 to 3
//
delay(450); /////handle debouncing//////////////
}// end if digitalRead(buttonPin)
///////////////////////////////////
switch (buttonState)
{
当按键按下时有一个定时90秒,不按按键到时间停止,但按按键还可以关
case 1:
想在这个位置加一个LED闪烁10秒钟后执行下面的功能循环,但是只循环下面的这个程序
currentMillis = millis(); //start the timer
if (currentMillis - previousMillis > interval) //timer moved forward by the preset interval
{
previousMillis = currentMillis;
digitalWrite( ledPin, digitalRead( ledPin ) ^ 1 ); //read the state of the Led, reverse it and turn it on or off accordingly
}
break;
case 2:
digitalWrite(ledPin, LOW);
break;
}//end switch
}/////end loop
这个程序不知道怎么加请各位帮帮忙,谢谢! //定義你要關機的定時時間,比方說 1 小時=1秒*60*60
#define AUTO_OFF 1000*60*60
//設定時間記錄變數
unsigned long START_TIME;
//當 LED 亮時(比方用 I/O 13)記錄下當時的系統時間
digitalWrite( 13 ,HIGH );
START_TIME=millis();
//在 loop() 中比對時間是否已達你要關掉的時間,達到的話就關掉 13 的輸出
if ( millis() - START_TIME > (unsigned long) AUTO_OFF )
digitalWrite( 13 ,LOW );
大致上就是這樣子 shouzama 发表于 2017-12-16 23:34
//定義你要關機的定時時間,比方說 1 小時=1秒*60*60
#define AUTO_OFF 1000*60*60
#define AUTO_OFF 1000*60*60 这个1000指的是毫秒? 書雲 发表于 2017-12-18 17:33
#define AUTO_OFF 1000*60*60 这个1000指的是毫秒?
對,以 millis() 以 0.001 秒為基本單位, 1秒=1000ms shouzama 发表于 2017-12-16 23:34
//定義你要關機的定時時間,比方說 1 小時=1秒*60*60
#define AUTO_OFF 1000*60*60
你好,能来个详细的历程吗?谢谢!! shouzama 发表于 2017-12-16 23:34
//定義你要關機的定時時間,比方說 1 小時=1秒*60*60
#define AUTO_OFF 1000*60*60
请教!为何我的程序根据您的提示加入时间控制,LED灯无法自动熄灭,请指点谢谢
程序代码如下:
// 人体热释感应开关控制LED灯
#define AUTO_OFF 1000*60 //定義你要關機的定時時間,比方說 1 分钟=1秒*60*60
#define LED 7 //定义LED引脚为13
#define BUTTON 2 //定义按钮开关引脚
unsigned long START_TIME; //設定時間記錄變數
int val=0; //变量用来储存按钮状态
int old_val=0; //暂存val变量的上一个时间单位
int state=0; //0表示LED关闭,1表示打开
void setup()
{
pinMode(LED,OUTPUT); //设定LED引脚为输出状态
pinMode(BUTTON,INPUT); //设定按钮引脚为输入状态
}
void loop()
{
val=digitalRead(BUTTON); //读取按钮状态并储存
if((val==HIGH)&&(old_val==LOW)) //检查按钮的变化情况
{
state=1-state;
delay(40); //延时简单抗抖动
}
old_val=val; //VAL下载已经是旧的,让我们暂存一下
if(state==1)
{ digitalWrite(LED,HIGH); //开启LED
}
else
{
digitalWrite(LED,LOW); //关闭LED
}
START_TIME=millis();
if ( millis() - START_TIME > (unsigned long) AUTO_OFF )
{
digitalWrite(LED,LOW);
}
}
qqboy1978 发表于 2018-6-13 16:55
请教!为何我的程序根据您的提示加入时间控制,LED灯无法自动熄灭,请指点谢谢
程序代码如下:
// 人 ...
根據我的提示... :L
我說:
//當 LED 亮時(比方用 I/O 13)記錄下當時的系統時間
digitalWrite( 13 ,HIGH );
START_TIME=millis();
二條程式碼是相鄰的喔,LED 作動後立即記錄作動的時間
而您卻在條件判斷式前記錄時間,條件判斷可能成立嗎? :funk:
START_TIME=millis();
if ( millis() - START_TIME > (unsigned long) AUTO_OFF )
{
digitalWrite(LED,LOW);
}
谢谢指点!!!
页:
[1]