Arduino上的交互式交通灯

时间:2013-12-17 01:35:25

标签: c arduino

我是新的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 ,但它仍然不起作用。

Here is the link to screenshot of the image

3 个答案:

答案 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()方法物理移动到调用它的方法之上。这是一个更多的贫民窟,而不是首选的方式。