我在勤奮的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