DHT12.cpp 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. /*
  2. DHT12.cpp - Library for DHT12 sensor.
  3. v0.0.1 Beta
  4. Created by Bobadas, July 30,2016.
  5. Released into the public domain.
  6. */
  7. #include "DHT12.h"
  8. #include "Arduino.h"
  9. #include "Wire.h"
  10. DHT12::DHT12(byte scale, byte id) {
  11. if (id == 0 || id > 126)
  12. _id = 0x5c;
  13. else
  14. _id = id;
  15. if (scale == 0 || scale > 3)
  16. _scale = CELSIUS;
  17. else
  18. _scale = scale;
  19. }
  20. byte DHT12::read() {
  21. Wire.beginTransmission(_id);
  22. Wire.write(0);
  23. if (Wire.endTransmission() != 0) return 1;
  24. Wire.requestFrom(_id, 5);
  25. for (int i = 0; i < 5; i++) {
  26. datos[i] = Wire.read();
  27. };
  28. delay(50);
  29. if (Wire.available() != 0) return 2;
  30. if (datos[4] != (datos[0] + datos[1] + datos[2] + datos[3])) return 3;
  31. return 0;
  32. }
  33. float DHT12::readTemperature(byte scale) {
  34. float resultado = 0;
  35. byte error = read();
  36. if (error != 0) return (float)error / 100;
  37. if (scale == 0) scale = _scale;
  38. switch (scale) {
  39. case CELSIUS:
  40. resultado = (datos[2] + (float)datos[3] / 10);
  41. break;
  42. case FAHRENHEIT:
  43. resultado = ((datos[2] + (float)datos[3] / 10) * 1.8 + 32);
  44. break;
  45. case KELVIN:
  46. resultado = (datos[2] + (float)datos[3] / 10) + 273.15;
  47. break;
  48. };
  49. return resultado;
  50. }
  51. float DHT12::readHumidity() {
  52. float resultado;
  53. byte error = read();
  54. if (error != 0) return (float)error / 100;
  55. resultado = (datos[0] + (float)datos[1] / 10);
  56. return resultado;
  57. }