-1
閃爍的部分和顯示屏正常工作,除了重複一段時間然後停止。請幫我弄清楚什麼是錯的。這是一個while循環問題還是我在計時部分犯了一些錯誤?Arduino上的交通信號燈控制<looping
#include <stdio.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //declaring the Lcd display pins
//pins declarations for each Leds
int red1 = 13;
int yellow1 = 10;
int green1 = 9;
int red2 = 8;
int yellow2 = 7;
int green2 = A4;
const long ti = 0;
unsigned long interval4 = 60000UL;
unsigned long interval1 = 9;
unsigned long interval2 = 6000UL;
unsigned long interval3 = 3000UL;
// setting
void setup()
{
lcd.setCursor(0, 0);
lcd.print("\0");
lcd.setCursor(0, 1);
lcd.print("\0");
lcd.begin(16, 2);
delay(2000);
lcd.setCursor(0, 0);
lcd.print("HARIRI and JACOB\0");
lcd.setCursor(0, 1);
lcd.print("PROJECT\0");
delay(3000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("traffic light\0");
lcd.setCursor(0, 1);
lcd.print("simulation\0");
delay(2000);
lcd.clear();
Serial.begin(9600);
delay(50);
pinMode(red1, OUTPUT);
pinMode(red2, OUTPUT);
pinMode(yellow1, OUTPUT);
pinMode(yellow2, OUTPUT);
pinMode(green1, OUTPUT);
pinMode(green2, OUTPUT);
}
//the main loop
void loop()
{
int ti = millis();
while((millis() - ti) < interval1)
{
digitalWrite(red1, HIGH);
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Way1: stop\0");
int ti = millis();
while((millis() - ti) < interval2)
{
digitalWrite(green2, HIGH);
lcd.setCursor(0, 1);
lcd.print("Way2: go\0");
}
digitalWrite(green2, LOW);
{
ti = millis();
while((millis() - ti) < interval3)
{
digitalWrite(yellow2, HIGH);
lcd.setCursor(0, 1);
lcd.print("Way2: wait\0");
}
digitalWrite(yellow2, LOW);
}
}
digitalWrite(red1, LOW);
ti = millis();
while((millis() - ti) < interval1)
{
digitalWrite(red2, HIGH);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("Way2: stop\0");
ti = millis();
while((millis() - ti) < interval2)
{
digitalWrite(green1, HIGH);
lcd.setCursor(0, 0);
lcd.print("Way1: go\0");
}
digitalWrite(green1, LOW);
while((millis() - ti) < interval3 + interval2)
{
digitalWrite(yellow1, HIGH);
lcd.setCursor(0, 0);
lcd.print("Way1: wait\0");
}
digitalWrite(yellow1, LOW);
}
digitalWrite(red2, LOW);
ti = millis();
}
}
一致的和常規的縮進和空格幫助您讀取代碼的可讀性和可理解性。如果您要求他人審覈您的代碼,這一點尤其重要 - 不要讓它變得不必要的困難,否則沒有人會打擾。你的全是這個地方 - 我已經爲你修好了。 – Clifford
在'loop()'中,你有一個沒有控制語句的支撐('{...}')塊;這是有效的但不尋常的;它將「int ti」的第二個聲明「本地化」 - 最好鬆開塊並聲明具有不同名稱的計時器變量。 – Clifford