Page 76 - เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์เบื้องต้น
P. 76

เอกสารประกอบการเรียนวิชาไมโครคอนโทรลเลอร์เบื้องต้น    43



                              pinMode( DATA_PIN, OUTPUT );             // change direction to output

                              digitalWrite( DATA_PIN, LOW );           // output low (send the start bit)
                              delayMicroseconds( 1000 );

                              digitalWrite( DATA_PIN, HIGH );          // output high

                              delayMicroseconds( 40 );
                              pinMode( DATA_PIN, INPUT );              // change direction to input

                              digitalWrite( DATA_PIN, HIGH );          // enable internal pull-up
                              attachInterrupt( 0, eint_isr, CHANGE ); }  // enable EINT0 interrupt

                              boolean dht22_read_data( int16_t *humidity, int16_t *temperature ) {
                        if (!flag) { return false; } // data not available

                              flag = false;  // clear flag

                              detachInterrupt( 0 ); // disable EINT on data pin
                              uint8_t check_sum = 0x00;

                       for ( int x=0; x < 4; x++) { // calculate checksum

                              check_sum += data[x];
                              }

                       if ( check_sum == data[4] ) {

                              *humidity    = (data[0] << 8) | data[1];
                              *temperature = (data[2] << 8) | data[3];

                              return true; // checksum OK
                              }

                              return false; // checksum error

                              }
                              char buf[20]; // used for sprintf()

                       void loop() {
                              int16_t h, t;

                              dht22_send_start_bit();

                              while (!flag) { delay(10); }
                              if ( dht22_read_data( &h, &t ) ) {

                              sprintf( buf, "%d.%d%cRH, %d.%d C", h/10, h%10, '%', t/10, t%10 );

                              Serial.println( buf );
                        } else {





               หน่วยที่ 10  การใช้งาน Arduino กับไอซีวัดอุณภูมิและโมดูลตรวจจับสัญญาณอินพุต                 เรียบเรียงโดยครูทันพงษ์  ภู่รักษ์
   71   72   73   74   75   76   77   78   79   80   81