2013-12-17 102 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()方法移動到您調用它的方法的上方。這是一個更少的貧民窟,而不是最好的方式。