-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