正好手头上有个DHT11温湿度传感器,在Mbed下初步试着用了一下,代码相当简单
- include "mbed.h"
- //------------------------------------
- // Hyperterminal configuration
- // 115200 bauds, 8-bit data, no parity
- //------------------------------------
- Serial pc(SERIAL_TX, SERIAL_RX);
- DigitalOut myled(LED1);
- DigitalInOut data_pin(A0); // Activate digital in as dht11 Pin
- Timer tmr; //initialize timer
- uint64_t adat; // 64 bit variable for temporary data
- int i;
- 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("Hello World !\r\n");
- pc.baud(115200);
- pc.printf("Read the DHT11 temperature and humidity sensor!\r\n"); //Welcome message
- while(1) {
-
- adat = 0;
- myled = !myled; // LED is ON/OFF
- dht_read(); // Call the function
- // Send result through UART result
- pc.printf("Humidity: ");
- pc.printf("%d", (adat & 0x000000ff00000000) >> 32); // Humidity
- pc.printf("\n\r"); // Send a new line and carriage return.
- pc.printf("Temperature: ");
- pc.printf("%d", (adat & 0x0000000000ff0000) >> 16 ); // Temperature
- pc.printf("\n\r");
- pc.printf("Checksum: ");
- pc.printf("%d", adat & 0x00000000000000ff); // Checksum.
- pc.printf("\n\r");
- wait(2); // Wait 2 sec till continue.
-
- }
- }
复制代码
|
谢谢鼓励
是的,不再过多关注底层了,方便在不同板子之间移植
初始化由mbed替你代劳了,不用再关注这些了
感谢支持