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);
}
}
}