我是新的Arduino,正在尝试构建交互式交通信号灯。此代码无法编译。请帮忙。
int rPin = 12;
int yPin = 11;
int gPin = 10;
int r1Pin = 9;
int g2Pin = 8;
int button = 2;
int crossTime = 5000;
unsigned long changeTime;
void setup ()
{
pinMode ( rPin, OUTPUT );
pinMode ( yPin, OUTPUT );
pinMode ( gPin, OUTPUT );
pinMode ( r1Pin , OUTPUT );
pinMode ( g2Pin, OUTPUT );
pinMode ( button , INPUT );
digitalWrite ( gPin ,HIGH) ;
digitalWrite ( r1Pin , HIGH);
}
void loop()
{
int state = digitalRead ( button);
if (state == HIGH && ( millis() - changetime ) > 5000))
{
changeLights();
}
}
void chngeLight()
{
digitalWrite ( gPin , LOW );
digitalWrite ( yPin, HIGH );
delay ( 2000);
digitalWrite ( yPin, LOW );
digitalWrite ( rPin , HIGH );
delay(crossTime) ;
for ( int x=0; x<10 , x++);
{
digitalWrite ( g2Pin , HIGH );
delay ( 250);
digitalWrite ( g2Pin , LOW );
delay ( 250);
}
digitalWrite ( g2Pin , HIGH );
delay (500) ;
digitalWrite ( yPin , HIGH );
digitalWrite ( rPin , LOW );
delay ( 2000);
digitalWrite ( yPin , LOW );
digitalWrite ( gPin , HIGH );
changeTime = millis ();
}
我唯一的问题是在void循环中。 Arduino编译器不接受 changeLights 作为函数。所以我创建了一个名为“changeLights”的新 unsigned long ,但它仍然不起作用。
答案 0 :(得分:1)
如果您在编译时遇到问题,请包含编译器的输出和错误消息。
您的代码中存在一些语法和相关错误。
for ( int x=0; x<10 , x++);
一个'for'语句后面有一个分号,表示它没有正文。由于你在for语句之后有一段代码,我认为这不是你想要的。删除';'在末尾。还有,和;是不同的运营商,他们做不同的事情。将','替换为';'。
if (state == HIGH && ( millis() - changetime ) > 5000))
该陈述有不平衡的括号:3个右边的parens和4个左边的parens。它不会编译。即使它确实如此,它也不会做你想要的。 尝试:
if ((state == HIGH) && ((millis() - changetime) > 5000))
您定义的函数chngeLight
与您调用的函数changeLights
不匹配。
名称需要匹配,或者编译器认为它们是不同的函数。
答案 1 :(得分:0)
您将函数声明为
void chngeLight()
但你用
来称呼它changeLights()
(注意一个有“s”而另一个没有)。尝试将您的调用更改为changeLight()并查看它是否有效。
答案 2 :(得分:0)
<强>要点:强>
首先,您的changeLights方法拼写错误。
其次,在C ++中,您需要create a prototype
OR
将要调用的方法放在实际调用之上。
<强>详细信息:强>
为ChangeLights()
方法
将光标放在setup()
方法上方并将其放在
void ChangeLights();
这将告诉你的文件的其余部分这个方法调用是否存在,并且它不接受任何参数或返回任何内容。
另一种方法是将ChangeLights()方法物理移动到调用它的方法之上。这是一个更多的贫民窟,而不是首选的方式。