我在勤奋的cerebot Mx4cK中使用微控制器PIC 32。 我在原型板上安装了开关,我想在启动开关后打开一个LED,然后LED必须处于这种状态2秒钟,然后必须再关闭3秒钟,然后重新开始( > 2秒关 - > 3秒)Arduino打开领先2秒,然后关闭并等待3秒,然后重新开始
这是我的代码到目前为止,我认为它缺少一个条件,但我找不到它...你能帮助我吗?
const int led=PIN_LED1;
const int pinSwitch1=16;
void setup()
{
pinMode(pinSwitch1,INPUT);
pinMode(led,OUTPUT);
digitalWrite(led,LOW);
}
void loop()
{
unsigned long actual_time=millis();
static unsigned long cicle_time=0;
static unsigned long off_time=0;
static int switch_state1=0;
switch_state1=digitalRead(pinSwitch1);
if (switch_state1==HIGH)
{
if((actual_time-cicle_time)<5000)
{
digitalWrite(led,HIGH);
cicle_time=actual_time;
}
if((actual_time-off_time)>2000)
{
digitalWrite(led,LOW);
off_time=actual_time;
}
}
else
{
digitalWrite(led,LOW);
}
}
其实我的代码,blincks 2秒,它不认为它必须关闭3秒。
[这是我的新代码,我缺少的初始条件,以光首次]
const int的LED = PIN_LED1; const int pinSwitch1 = 16;
void setup()
{
pinMode(pinSwitch1,INPUT);
pinMode(led,OUTPUT);
digitalWrite(led,LOW);
}
void loop()
{
unsigned long actual_time=millis();
static unsigned long cicle_time=0;
static unsigned long off_time=0;
static int switch_state1=0;
static int cicle_on=0;
switch_state1=digitalRead(pinSwitch1);
if (switch_state1==HIGH)
{
if((actual_time-cicle_time)>5000)
{
digitalWrite(led,HIGH);
cicle_time=actual_time;
cicle_on=HIGH;
}
}
else
{
digitalWrite(led,LOW);
}
if((actual_time-off_time)>2000)
{
digitalWrite(led,LOW);
off_time=actual_time;
cicle_on=LOW;
}
}
这是完整的代码?如果不是那么millis()会返回什么? – Harsha 2014-09-13 07:10:18
Millis()这是一个函数,如果arduino:返回从Arduino开始运行当前程序以来的毫秒数。大约50天后,这个数字会溢出(回到零)。 – cotita 2014-09-13 13:34:05
尝试下面我发布的解决方案.. – Harsha 2014-09-13 13:36:37