Page 43 - เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์เบื้องต้น
P. 43
เอกสารประกอบการเรียนวิชาไมโครคอนโทรลเลอร์เบื้องต้น 10
unsigned long t1, t0 = micros();
while (1) {
new_state = digitalRead( DATA_PIN );
if ( state != new_state ) {
t1 = micros();
if ( (state == HIGH) && (i > 2) ) {
byte b = ( (t1-t0) > 40 ) ? 1 : 0;
data[j/8] <<= 1;
data[j/8] |= b;
j++;
}
i++;
state = new_state;
t0 = t1;
count = 0;
} else {
count++;
if ( count > 1000 ) // timeout
break;
}
}
byte check_sum = 0x00;
for (byte x=0; x < 4; x++) {
check_sum += data[x];
}
if ( check_sum != data[4] ) {
Serial.println( "CHECKSUM error" );
} else {
Serial.print( ((data[0] << 8) | data[1])/10.0 );
Serial.print( "%RH, " );
Serial.print( ((data[2] << 8) | data[3])/10.0 );
Serial.println( " C" ); } delay(2500);}
หน่วยที่ 10 การใช้งาน Arduino กับไอซีวัดอุณภูมิและโมดูลตรวจจับสัญญาณอินพุต เรียบเรียงโดยครูทันพงษ์ ภู่รักษ์