Advertisement
Guest User

Untitled

a guest
Apr 9th, 2020
244
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.11 KB | None | 0 0
  1. #include "sensor.h"
  2. #include "timer.h"
  3. #include "user.h"
  4.  
  5. enum AlarmState
  6. {
  7.   OFF,
  8.   ON,
  9.   ALARMED
  10. } ;
  11.  
  12. enum AlarmEvent
  13. {
  14.   NONE,
  15.   BUTTON,
  16.   TIMERELAPSED,
  17.   ALARMTRIGGER
  18. };
  19.  
  20. /*-------------------------------------------------------*/
  21. void setup()
  22. {
  23.   Serial.begin(9600);
  24.  
  25.   sensor_begin();
  26.   user_begin();
  27. }
  28.  
  29. /*-------------------------------------------------------*/
  30. void loop()
  31. {
  32.   static AlarmState state = OFF;
  33.   static AlarmState newState = OFF;
  34.   static AlarmEvent currentEvent = NONE;
  35.  
  36.   currentEvent = checkForNewEvent();
  37.  
  38.   if (currentEvent != NONE) {
  39.     handleEvent(state, currentEvent, &newState);
  40.  
  41.     if (newState != state)
  42.     {
  43.       state = newState;
  44.       Serial.print("State: "); Serial.println(state);
  45.     }
  46.   }
  47. }
  48.  
  49. /*-------------------------------------------------------*/
  50. AlarmEvent checkForNewEvent()
  51. {
  52.   AlarmEvent event = NONE;
  53.  
  54.   if (sensor_isTriggered() ) {
  55.     event = ALARMTRIGGER;
  56.   }
  57.   else if (timer_hasElapsed() ) {
  58.     event = TIMERELAPSED;
  59.   }
  60.   else if (user_button_isPressed() ) {
  61.     event = BUTTON;
  62.   }
  63.  
  64.   return event;
  65. }
  66.  
  67. /*-------------------------------------------------------*/
  68. void handleEvent(AlarmState state,
  69.                  AlarmEvent event,
  70.                  AlarmState* newState)
  71. {
  72.   switch (state) {
  73.     case OFF:
  74.       {
  75.         if (event == BUTTON)
  76.         {
  77.           user_showAlarmOn();
  78.           *newState = ON;
  79.         }
  80.       }
  81.       break;
  82.     case ON:
  83.       {
  84.         if (event == ALARMTRIGGER)
  85.         {
  86.           user_turnAlarmSignalsOn();
  87.           timer_start();
  88.           *newState = ALARMED;
  89.         }
  90.         else if (event == BUTTON)
  91.         {
  92.           user_showAlarmOff();
  93.           *newState = OFF;
  94.         }
  95.       }
  96.       break;
  97.     case ALARMED:
  98.       {
  99.         if ((event == BUTTON) || (event == TIMERELAPSED))
  100.         {
  101.           *newState = ON;
  102.           timer_reset();
  103.           user_turnAlarmSignalsOff();
  104.         }
  105.       }
  106.       break;
  107.     default:
  108.       {
  109.         Serial.print("State is unknown: ");
  110.         Serial.println(state);
  111.       }
  112.       break;
  113.   }
  114. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement