2013-02-28 3 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 상태를 관리하십시오. –

+0

나는 while 루프와 부울 "enable"을 모두 사용하는 것보다 나은 해결책을 찾았습니다. 어쨌든 고맙습니다. –

답변

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

고맙습니다, 저것 좀보세요. :) –

+0

기쁨, 나는 그것이 도움이되기를 바랍니다. –