dht.ino 1003 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #include <EEPROM.h>
  2. #include <SPI.h>
  3. #include <GD2.h>
  4. #define DHTPIN A0
  5. #define RISE() do {} while (digitalRead(DHTPIN) == 0)
  6. #define FALL() do {} while (digitalRead(DHTPIN) == 1)
  7. void setup()
  8. {
  9. Serial.begin(1000000);
  10. pinMode(DHTPIN, OUTPUT);
  11. digitalWrite(DHTPIN, HIGH);
  12. delay(1000);
  13. }
  14. int getbit()
  15. {
  16. RISE();
  17. uint32_t t0 = micros();
  18. FALL();
  19. return (micros() - t0) > 48;
  20. }
  21. void loop()
  22. {
  23. pinMode(DHTPIN, OUTPUT);
  24. digitalWrite(DHTPIN, LOW);
  25. delay(18);
  26. digitalWrite(DHTPIN, HIGH);
  27. delayMicroseconds(40);
  28. pinMode(DHTPIN, INPUT_PULLUP);
  29. FALL();
  30. getbit();
  31. int bits[40];
  32. for (int i = 0; i < 40; i++)
  33. bits[i] = getbit();
  34. for (int i = 0; i < 40; i++) {
  35. Serial.print(i);
  36. Serial.print(' ');
  37. Serial.println(bits[i]);
  38. }
  39. int bytes[5] = {0};
  40. for (int i = 0; i < 40; i++)
  41. bytes[i / 8] = (bytes[i / 8] << 1) | bits[i];
  42. for (int i = 0; i < 5; i++) {
  43. Serial.print(bytes[i]);
  44. Serial.print(' ');
  45. }
  46. Serial.println();
  47. delay(6000);
  48. }