2014-12-12 3 views
0

Arduino (Arduino-Mega 2560) 직렬 통신 에서 정수의 시퀀스를 읽는 데 다음 코드를 사용했지만 쓰레기 (또는 잘못된 값)를 제공하고 버그를 찾아 내도록 도와줍니다 제발 ...Arduino 직렬 통신이 정수를 읽을 수 없습니다

int time=0,i; 
void setup() { 
    pinMode(6,OUTPUT); 
    Serial.begin(9600); 
} 

void loop(){ 
    i=0; 
    while(Serial.available()>0) { 
    time=Serial.parseInt(); 
    } 
    for(i=1;i<=time;i++){ 
    digitalWrite(6,1); 
    delay(150); 
    digitalWrite(6,0); 
    delay(100); 
    } 
    time=0; 
} 
+0

Arduino에 보내는 데이터는 무엇입니까? 어떤 숫자 범위입니까? –

+0

은 모두 1-99 사이의 정수 범위입니다. –

답변

0

코드가 잘못되었습니다. 또는 적어도 논리가 잘못되었습니다. 그것은 작동해야처럼

void loop(){ 
    if(Serial.available()) { 
    time=Serial.parseInt(); 

    for(i=1;i<=time;i++){ 
     digitalWrite(6,1); 
     delay(150); 
     digitalWrite(6,0); 
     delay(100); 
    } 
    time=0; 
    } 
} 
0

귀하의 코드가 보이지만, 어쩌면 문제는 당신이 보내는 데이터에 있습니다 :

이보십시오.

Serial.parseInt()은 숫자를 나타내는 아스키 문자가 필요합니다. char 문자열로 인코딩 된 번호를 보내시겠습니까? Serial.write(99)은 값 99의 단일 바이트를 전송합니다.

숫자의 범위는 0에서 99까지이므로 1 바이트가 적합합니다. 왜 그냥 바이트를 보내고 다른 쪽 끝에서 바이트를 읽지 않는가?

void setup() { 
    pinMode(6,OUTPUT); 
    Serial.begin(9600); 
} 

void loop(){ 
    int time=0; 
    if(Serial.available()>0) { // using while will read all the bytes and use the last one 
    time = Serial.read(); 
    } 
    for(int i=1; i<=time; i++){ 
    digitalWrite(6,1); 
    delay(150); 
    digitalWrite(6,0); 
    delay(100); 
    } 
} 
관련 문제