2015-02-07 100 views
1

您好首先im新到Arduino。但我有一些Java的經驗。Arduino不會循環

我得到了一個void設置和一個void循環。我想要的是它保持循環我的LED模式。如果我發送1或2給arduino,它會告訴他運行LED模式。但我希望它能夠保持循環選擇模式。在void循環中,我得到了val = Serial.read() - '0';我認爲循環中的這個東西會將它重新設置爲0.但是,如果我把它放在全局變量中,我不能發送1或2給Arduino Uno控制器。

這是到目前爲止我的代碼:

//Pins initaliseren in de setup d.m.v. for loop. 
int ledPins[] = {2,3,4,5,6,7,8,9,10}; 
int pinCount = 9; 

//Patronen voor de knipper leds 
int patroonEen[] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 9, 8, 7, 6, 5, 4, 3}; 
int patroonEenLength = 16; 
int patroonTwee[] = {2,3,4,5,6,5,4,3}; 
int patroonDrie[] = {10,9,8,7,6,7,8,9}; 
int patroonTweeDrieLength = 9; 

int val = 0; 

void setup() { 
    Serial.begin(9600); 

    //Inladen van de pins die we gebruiken. 
    for (int i = 0; i < pinCount; i++) { 
    pinMode(ledPins[i], OUTPUT); 
    } 
} 

void loop() { 
    while (Serial.available() == 0); 
    val = Serial.read() - '0'; 

    if (val == 1) { 
    for (int i = 0; i < patroonEenLength; i++) { 
     digitalWrite(patroonEen[i], HIGH); 
     delay(100); 
     digitalWrite(patroonEen[i], LOW); 
    } 
    } else if (val == 2) { 
    for (int i = 0; i < patroonTweeDrieLength; i++) { 
     digitalWrite(patroonTwee[i], HIGH); 
     digitalWrite(patroonDrie[i], HIGH); 
     delay(100); 
     digitalWrite(patroonTwee[i], LOW); 
     digitalWrite(patroonDrie[i], LOW); 
    } 
    } else { 
    Serial.print("Ongeldige input"); 
    } 
    Serial.flush(); 
} 

我期待着能儘快聽到任何人:)。歡迎任何評論。

回答

2

您的代碼

while (Serial.available() == 0); 

塊的主循環,除非有從串行接口數據速效。因此它不會循環。您需要解析串行輸入而不會阻塞。例如像這樣:

while (Serial.available() > 0) { 
    val = Serial.read() - '0'; 
} 

更多示例如何解析沒有阻止可以在我的博客中找到。

Parsing NumbersParsing different modes of operation

+0

嗨烏克萊恩,謝謝你幫我出去!我的程序現在工作正常!非常感謝!! – 2015-02-08 15:28:29