2013-08-30 2 views
1

프로그래밍 초보자입니다. 요청 (0x01에서 msb 및 0x02에서 lsb) 후 직렬 (serial)을 통해 오는 2 바이트 (msb/lsb)를 읽는 데 도움이 필요합니다. 수학 연산 및 2x16 디스플레이에 표시. 나는 잘 작동하는 1 바이트 만 사용하는 프로젝트의 기능을 가지고있다. 한 예 :arduino 2 바이트 serial.read

void funcao4() 
{ 
int MAP; 
float MAP1; 
delay(600); 
lcd.clear(); 
lcd.setCursor(0,0); 
lcd.print("MAP[mmHG]"); 


Serial.write(0x06); //request 

if (Serial.available() > 0) 
{ 

MAP = Serial.read() ; //read 
MAP1 = (MAP * 2.8759 + 91); //operation 

lcd.setCursor(0,1); 
lcd.print(MAP1); //display 

} 
} 

시리얼 버퍼는 2 바이트를 가질 때까지

+0

머리 글자 어의 약자를 설명 할 수 있습니까? –

+0

MAP는 전자 분사 시스템 (diag)의 절대 압력 센서입니다. – marv

답변

2

대기, 다음을 읽을 :이 코드는 그래서 차단

void funcao4() 
{ 
int MAP; 
float MAP1; 
delay(600); 
lcd.clear(); 
lcd.setCursor(0,0); 
lcd.print("MAP[mmHG]"); 


Serial.write(0x06); //request 

while(Serial.available() < 2); //wait until there are two bytes in the buffer 


MAP = Serial.read() << 8 ; //read MSB into MAP 
MAP += Serial.read();  //read LSB into MAP 
MAP1 = (MAP * 2.8759 + 91); //operation 

lcd.setCursor(0,1); 
lcd.print(MAP1); //display 


} 

당신이 잠시 동안의 지연에 루프 일부 if 문에서 변경할 수 있습니다. 또한 귀하의 LCD가 MSB 또는 LSB를 먼저 인쇄하는지 확신 할 수 없으므로 MSB로 간주했습니다.

1
if (Serial.available() >= 2) 
{ 
    MAP = Serial.read() << 8; 
    MAP |= Serial.read(); 
} 
관련 문제