SuperSensor.cpp 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. #include "SuperSensor.h"
  2. SuperSensor::SuperSensor(Scheduler* aScheduler, int aPin, Calculator* aC, StatusRequest* aS) : Task(TASK_MILLISECOND, TASK_FOREVER, aScheduler, false) {
  3. iPin = aPin;
  4. iC = aC;
  5. iS = aS;
  6. }
  7. SuperSensor::~SuperSensor() {
  8. iValue = -1;
  9. }
  10. void SuperSensor::begin() {
  11. iDelay = random(300, 1500);
  12. iValue = -1;
  13. }
  14. void SuperSensor::stop() {
  15. //nothing to do
  16. }
  17. long SuperSensor::trigger() {
  18. iStart = millis();
  19. return iDelay;
  20. }
  21. bool SuperSensor::measurementReady() {
  22. if ( millis() - iStart > iDelay ) {
  23. iValue = random(501);
  24. return true;
  25. }
  26. return false;
  27. }
  28. long SuperSensor::value() {
  29. return iValue;
  30. }
  31. bool SuperSensor::OnEnable() {
  32. int i = getId();
  33. Serial.print(millis()); Serial.print(":\t");
  34. Serial.print("SEnable: TaskID=");
  35. Serial.println(i);
  36. Serial.print("Triggering sensor. Delay=");
  37. long dly = trigger();
  38. Serial.println( dly );
  39. return true;
  40. }
  41. bool SuperSensor::Callback() {
  42. if ( measurementReady() ) {
  43. int i = getId();
  44. Serial.print(millis()); Serial.print(":\t");
  45. Serial.print("SCallback: TaskID=");
  46. Serial.println(i);
  47. Serial.print("Emulating measurement. d=");
  48. long d = value();
  49. iC->reportDistance(d);
  50. Serial.println(d);
  51. iS->signal();
  52. disable();
  53. delete this;
  54. return true;
  55. }
  56. return false;
  57. }
  58. void SuperSensor::OnDisable() {
  59. int i = getId();
  60. Serial.print(millis()); Serial.print(":\t");
  61. Serial.print("SDisable: TaskID=");
  62. Serial.println(i);
  63. stop();
  64. }