DHT11 and EEPROM together
Dependencies: mbed
main.cpp
- Committer:
- kaliczp
- Date:
- 2016-01-13
- Revision:
- 0:8253de48776b
File content as of revision 0:8253de48776b:
#include "mbed.h" #define EEPROM_ADDR (0b10100000) // EEPROM address I2C i2c(I2C_SDA, I2C_SCL); DigitalOut myled(LED1); // Activate LED DigitalIn mybutton(USER_BUTTON); // Activate button DigitalInOut data_pin(A0); // Activate digital in Serial pc(SERIAL_TX, SERIAL_RX); // Initialize UART connection // Use a terminal program (eg. putty). Timer tmr; //initialize timer uint64_t adat; // 64 bit variable for temporary data int i; char data_write[4]; //Array for address and data char eeprom_read_address[2] = {0, 0}; char data_read[2]; // Function to initialize DHT11 void dht_read(void) { data_pin.output(); // Set A0 as output // Initialize measurement > 18 ms low data_pin = 0; wait_ms(20); // After high and release the pin switch input mode data_pin = 1; data_pin.input(); // Wait until the end of 80 us low while(!data_pin.read()) {} // Wait until end of 80 us high while(data_pin.read()) {} // 40 bit, 40 read out cycle for(i=0; i<40; i++) { adat = adat << 1; // Shift for new number tmr.stop(); // Stop timer if runs tmr.reset(); // Reset timer // Wait until pin while(!data_pin.read()) {} tmr.start(); while(data_pin.read()) {} // If DHT11 HIGH longer than 40 micro seconds (hopefully 70 us) if(tmr.read_us() > 40) { // bit is 1 adat++; } } } int main() { pc.printf("Log the DHT11 temperature and humidity sensor!\n\r"); //Welcome message while(1) { if (mybutton == 0) { // Button is pressed pc.printf("\n\rLogged humidity and temperature:\n\r"); //Welcome message myled = 1; // LED is ON i2c.write(EEPROM_ADDR, eeprom_read_address, 2, true); for( i=0; i < 30; i++ ) { i2c.read(EEPROM_ADDR, data_read, 2); pc.printf("%d %d\n\r",data_read[0], data_read[1]); } wait(3); // Wait 0.2 sec till continue. } else { myled =1; wait(0.1); adat = 0; // Resed global adat variable dht_read(); // Call the function // Save data to EEPROM data_write[2] = (adat & 0x000000ff00000000) >> 32; // Humidity data_write[3] = (adat & 0x0000000000ff0000) >> 16 ; // Temperature i2c.write(EEPROM_ADDR, data_write, 4); myled = 0; // LED is OFF wait(1.8); } } }