2014-01-08 89 views
0

我想通過串口與我的Arduino通過USB端口進行通信溝通:與Arduino的串行

int previous; 
int current = 0; 
void turnOn(int pinNumber){ 
    previous = current; 
    current = pinNumber; 
    if(previous!=0){ 
    digitalWrite(previous, LOW); 
    digitalWrite(current, HIGH); 
    }else{ 
    digitalWrite(current, HIGH); 
    } 

} 
void setup(){ 
    pinMode(8, OUTPUT); 
    pinMode(9, OUTPUT); 
    pinMode(10, OUTPUT); 
    Serial.begin(9600); 
    Serial.write(1); 
} 
void loop(){ 
    delay(1); 
    if(Serial.available()>0){ 
    switch(Serial.read()){ 
    case 0: 
     turnOn(8); 
     break; 
    case 1: 
     turnOn(9); 
     break; 
    case 2: 
     turnOn(10); 
     break; 
    default: 
     Serial.println(Serial.read()); 
     } 
    } 
} 

我想這樣,如果我發送一個0最右邊的指示燈會亮起,如果我送1,中間一個會,如果我發送一個2最左邊的意志。但是,當我發送0,1或其他任何內容時,它會打印-1表示默認開關已被觸發。我如何解決它?

回答

3

嘗試......

void loop(){ 
    if (Serial.available()) { 
    char input = Serial.read(); 

    if(input == '0'){ 
     turnOn(8); 
    }else if(input == '1'){ 
     turnOn(9); 
    }else if(input == '2'){ 
     turnOn(10); 
    } 
    } 
} 

告訴我,如果它工作還是不那麼我們可以繼續:)

+0

由於它的工作! –

+2

您的代碼無法工作的原因是因爲您比較的數字在ASCII表中並不是真正的數字。所以你應該把它們放在引號中,以表示你想直接比較字符。如果你想比較數字,那麼你應該找到數字48,49,50,它們是ASCII表中的'0','1','2'。 –

+0

哦,我明白了。非常感謝! –