2013-12-17 65 views
1

我是新的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。所以我创建了一个新的unsigned long,叫做“changeLights”,但它仍然不起作用。

Here is the link to screenshot of the image

+0

'所以我创建了一个新的无符号长整型称为“changeLights” - 为什么要这样做?看起来你想调用chngeLight(),而是调用不存在的函数changeLights()来代替。不要猜测;如果你在编程中不理解某些东西,那就逻辑地理解它。 –

回答

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功能。 名称需要匹配,或者编译器认为它们是不同的函数。

0

你声明的功能

void chngeLight() 

但你

changeLights() 

调用它(注意:一个有一个 “s” 和其他没有)。尝试改变你的电话changeLight(),看看它是否工作。

0

摘要:

首先你changeLights方法是拼写错误。

其次,在C++中,你需要或者create a prototype

OR

把你想要的实际调用上面要调用的方法。

详情:

要为ChangeLights()方法

,将光标置于上述setup()方法创建一个原型,并把这个

void ChangeLights(); 

这是要告诉其余你的文件,这个方法调用存在,并且它没有任何参数或返回任何东西。

另一种方法是将您的ChangeLights()方法移动到您调用它的方法的上方。这是一个更少的贫民窟,而不是最好的方式。