2013-02-28 252 views
0

我編寫了這個程序,它從串口讀取信息並將值寫入6個LED。我不覺得這是最簡單或最快的方式,而這正是我真正需要的。我的代碼如下所示:從串口讀取字節

boolean enable = false; 

void setup() 
{ 
    for (int i = 2; i < 8; i++) 
    { 
    pinMode(i, OUTPUT); 
    } 
} 

void loop() 
{ 
    if (Serial.available() > 0) 
    { 
    enable = true; 
    } 
    if (enable) 
    { 
    while (Serial.available() > 0) 
    { 
     byte b = Serial.parseInt(); 
     b = constrain(b, 0, 63); 
     byte val = b; 
     for (int i = 7; i >= 2; i--) 
     { 
     if (pow(2, (i-2)) <= val) 
     { 
      digitalWrite(i, HIGH); 
      val -= pow(2, (i-2)); 
     } 
     else 
     { 
      digitalWrite(i, LOW); 
     } 
     } 
    } 
    enable = false; 
    } 
    delay(100); 
} 

一個有效的代碼示例會很好。我嘗試過使用PORTD,但它不起作用。

+0

的'使='位無用的混亂(除非你打算做更多的事情它)。更簡單的做'while(Serial.available()> 0)'並且在那裏管理你的LED狀態。 – 2013-02-28 18:38:47

+0

我是,但我發現比使用while循環和布爾「啓用」更好的解決方案。不管怎樣,謝謝你。 – 2013-03-01 07:15:29

回答

1

使用二進制運算

for(int i = 0 ; i < 8 ; i++) { 
    val = (b >> i) & 0x1; 
    digitalWrite(i, val == 1 ? HIGH : LOW); 
} 

如果你計劃一些嚴重的串行通信看看到圖書館,我創建https://github.com/lukaszkujawa/arduino-serial-helper

+0

謝謝,我來看看。 :) – 2013-02-28 16:55:43

+0

快樂,我希望它會有所幫助。 – 2013-02-28 17:26:21