Advertisement
Guest User

Untitled

a guest
Jan 21st, 2020
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.16 KB | None | 0 0
  1. #include "esphome.h"
  2.  
  3. const int PIN_METER = D3;
  4.  
  5. int previousState = 0;
  6. int currentState = 0;
  7.  
  8. long pulseCount = 0;
  9.  
  10. unsigned long pulseTime, lastTime;
  11. unsigned long debounceDelay = 50000;
  12.  
  13. double power, elapsedkWh;
  14.  
  15. int ppkWh = 1500;
  16.  
  17. class EnergyMeterSensor : public Component, public Sensor {
  18. public:
  19. Sensor *power_sensor = new Sensor();
  20. Sensor *elapsedkWh_sensor = new Sensor();
  21.  
  22. void setup() override
  23. {
  24. pinMode(PIN_METER, INPUT);
  25. digitalWrite(PIN_METER, HIGH);
  26. }
  27. void loop() override {
  28. currentState = digitalRead(PIN_METER);
  29. if (currentState != previousState)
  30. {
  31. digitalWrite(LED_BUILTIN, currentState);
  32. if (currentState == LOW)
  33. {
  34. lastTime = pulseTime;
  35. pulseTime = micros();
  36.  
  37. if ((pulseTime - lastTime) > debounceDelay) {
  38. pulseCount++;
  39.  
  40. power = (3600000000000.0 / (pulseTime - lastTime)) / ppkWh;
  41.  
  42. elapsedkWh = (1.0 * pulseCount / (ppkWh));
  43.  
  44. power_sensor->publish_state(power);
  45. elapsedkWh_sensor->publish_state(elapsedkWh);
  46. }
  47. }
  48. previousState = currentState;
  49. }
  50. }
  51. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement