2014-09-25 73 views
-3

你好Stackoverflow用戶!函數參數中的多個引腳

這是行trafiksignal(redLed & & yellowLed,1000);我不能去上班,我試圖創建使用功能的TRAFIC信號,我的想法是用這張照片作爲指導:http://upload.wikimedia.org/wikipedia/commons/thumb/f/f8/Traffic_lights_4_states.png/220px-Traffic_lights_4_states.png (不能發表由於代表< 10張圖片)

我的代碼:http://pastebin.com/MTGsYeXs


/* 
* @Author: Kristian Nymann 
* @Date: 2014-09-25 22:46:39 
* @Last Modified by: Kristian Nymann 
* @Last Modified time: 2014-09-25 23:23:19 
* @Description: Lav et program der får de tre lysdioder til at skifte som et trafiklys. Du kan brugeprogrammet "Blink" som eksempel. 
*/ 

const byte greenLed = 2; 
const byte yellowLed = 3; 
const byte redLed = 4; 

void setup() { 
pinMode(greenLed, OUTPUT); 
pinMode(yellowLed, OUTPUT); 
pinMode(redLed, OUTPUT); 
} 

void loop() { 
    trafiksignal(redLed, 3000); 
    trafiksignal(redLed && yellowLed, 1000); 
    trafiksignal(greenLed, 3000); 
    trafiksignal(yellowLed, 1000); 
} 

void trafiksignal(byte pin, unsigned int duration) 
{ 
    digitalWrite(pin, HIGH); 
    delay(duration); 
    digitalWrite(pin, LOW); 
} 

眼下正在發生的事情是: 紅色指示燈亮燈3秒。然後綠燈亮起3秒,然後是黃色打開1秒。

那麼如何讓黃色和紅色LED同時打開? (爲什麼不trafiksignal(REDLED & & yellowLed,1000);工作?)

+2

<10代表不會妨礙您將代碼放入問題中,或解釋代碼如何工作。 – 2014-09-25 21:38:26

+0

對不起,我很新這個..我想我已經編輯了OP來包含什麼是缺少的:-) – Akudo 2014-09-25 21:45:19

回答

0

據我所知& &在C是唯一合乎邏輯的比較。

trafiksignal(redLed && yellowLed, 1000); 

什麼這條線,基本上是做,如果REDLED和yellowLed是真的還是假的檢查,如果他們倆都是真的,那將發出一個1或者這兩個都是假的,它將發送一個0。由於兩者的他們不是0它應該把它們看作是真的,所以你實際上最有可能告訴1號針高1秒而不是3號和4號。

幾個簡單的解決方法是創建一個單獨的用於關閉紅色和黃色燈光或在快速信號功能中添加快速if子句。 Bellow是一個很快的骯髒的if語句,添加到trafiksignal中,可以讓你使用當前的代碼運行。

if (pin == 1) { 
    digitalWrite(3, HIGH); 
    digitalWrite(4, HIGH); 
    delay(duration) 
    digitalWrite(3, LOW); 
    digitalWrite(4, LOW); 
} 
else { 
    digitalWrite(pin, HIGH); 
    delay(duration); 
    digitalWrite(pin, LOW); 
} 

鍵入我的ipad的代碼,所以我會證明在複製和粘貼之前讀取它。

從我的電腦編輯:

一個更好的解決辦法是引腳發送到函數作爲數組,我不是普通的C超經驗的,所以我不知道如果我做了什麼波紋管100%準確,但應該相當接近。

const byte greenLed = 2; 
const byte yellowLed = 3; 
const byte redLed = 4; 
const byte redYellow[2] = {redLed, yellowLed} // create an array of 2 pins 


void setup() { 
pinMode(greenLed, OUTPUT); 
pinMode(yellowLed, OUTPUT); 
pinMode(redLed, OUTPUT); 
} 

    void loop() { 
    // the middle number is the number of LEDs the function will need to control. 
     trafiksignal(redLed, 1, 3000); 
     trafiksignal(redYellow, 2, 1000); 
     trafiksignal(greenLed, 1, 3000); 
     trafiksignal(yellowLed, 1, 1000); 
    } 

    void trafiksignal(byte pin[], unsigned int numberOfLeds, unsigned int duration) 
    { 
     for (int i =0; i < numberOfLeds; ++i { 
     digitalWrite(pin[i], HIGH); 
     } 
     delay(duration); 
     for (int i = 0; i < numberOfLeds; ++i) { 
     digitalWrite(pin[i], LOW); 
     } 
    }