Page 61 - เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์เบื้องต้น
P. 61
เอกสารประกอบการเรียนวิชาไมโครคอนโทรลเลอร์เบื้องต้น 28
uint16_t dist_mm; // distance in mm.
char sbuf[32]; // used for sprintf()
uint16_t read_ultrasonic_sensor() {
digitalWrite( LED_PIN, HIGH );
digitalWrite( TRIG_PIN, HIGH );
delayMicroseconds( 12 );
digitalWrite( TRIG_PIN, LOW );
pulse_width = 0;
while (pulse_width == 0 ) {} // wait until pulse_width > 0
digitalWrite( LED_PIN, LOW );
return DURATION_TO_DISTANCE( pulse_width );
}
void loop() {
d_ultrasonic_sensor();
if ( dist_mm > MAX_DISTANCE_IN_MM ) {
Serial.println( "Out of range." );
} else {
sprintf( sbuf, "Distance: %d.%1d cm", (dist_mm/10), (dist_mm%10) );
Serial.println( sbuf );
}
delay( 200 );
}
volatile uint32_t timestamp;
void eint_isr() { // ISR for Ext. Interrupt
timestamp = micros(); // read the timestamp (in microseconds)
if ( digitalRead( ECHO_PIN ) ) { // HIGH
tH = timestamp;
} else { // LOW
tL = timestamp;
pulse_width = (tL-tH);
}}
หน่วยที่ 10 การใช้งาน Arduino กับไอซีวัดอุณภูมิและโมดูลตรวจจับสัญญาณอินพุต เรียบเรียงโดยครูทันพงษ์ ภู่รักษ์