Advertisement
Guest User

Untitled

a guest
Feb 6th, 2022
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.83 KB | None | 0 0
  1. #include <Arduino.h>
  2. #include <GyverButton.h>
  3. #include <EEPROMex.h>
  4.  
  5. /*
  6. Arduino pins
  7. */
  8. #define RELAY_1 9
  9. #define RELAY_2 8
  10. #define RELAY_3 7
  11. #define RELAY_4 6
  12. #define RELAY_5 5
  13. #define RELAY_6 4
  14. #define RELAY_7 3
  15. #define RELAY_8 2
  16.  
  17. #define AMP_SWITCH_BTN_PIN 12
  18.  
  19. #define LED_1 A1
  20. #define LED_2 A2
  21. #define LED_3 A3
  22.  
  23. GButton ampSwitchBtn(AMP_SWITCH_BTN_PIN);
  24. byte currentMode = 1;
  25.  
  26. void turnOffTheLights()
  27. {
  28.   digitalWrite(LED_1, LOW);
  29.   digitalWrite(LED_2, LOW);
  30.   digitalWrite(LED_3, LOW);
  31. }
  32.  
  33. void turnOnLight(uint8_t pin)
  34. {
  35.   digitalWrite(pin, HIGH);
  36. }
  37.  
  38. void mode1()
  39. {
  40.   turnOffTheLights();
  41.   digitalWrite(RELAY_1, HIGH);
  42.   digitalWrite(RELAY_2, HIGH);
  43.   digitalWrite(RELAY_3, HIGH);
  44.   digitalWrite(RELAY_4, HIGH);
  45.   digitalWrite(RELAY_5, HIGH);
  46.   digitalWrite(RELAY_6, HIGH);
  47.   digitalWrite(RELAY_7, HIGH);
  48.   digitalWrite(RELAY_8, HIGH);
  49.   turnOnLight(LED_1);
  50. }
  51.  
  52. void mode2()
  53. {
  54.   turnOffTheLights();
  55.   digitalWrite(RELAY_1, LOW);
  56.   digitalWrite(RELAY_2, LOW);
  57.   digitalWrite(RELAY_3, LOW);
  58.   digitalWrite(RELAY_4, LOW);
  59.   digitalWrite(RELAY_5, HIGH);
  60.   digitalWrite(RELAY_6, HIGH);
  61.   digitalWrite(RELAY_7, HIGH);
  62.   digitalWrite(RELAY_8, HIGH);
  63.   turnOnLight(LED_2);
  64. }
  65.  
  66. void mode3()
  67. {
  68.   turnOffTheLights();
  69.   digitalWrite(RELAY_1, HIGH);
  70.   digitalWrite(RELAY_2, HIGH);
  71.   digitalWrite(RELAY_3, HIGH);
  72.   digitalWrite(RELAY_4, HIGH);
  73.   digitalWrite(RELAY_5, LOW);
  74.   digitalWrite(RELAY_6, LOW);
  75.   digitalWrite(RELAY_7, LOW);
  76.   digitalWrite(RELAY_8, LOW);
  77.   turnOnLight(LED_3);
  78. }
  79.  
  80. void switchToCurrentMode()
  81. {
  82.   switch (currentMode)
  83.   {
  84.   case 1:
  85.     mode1();
  86.     break;
  87.   case 2:
  88.     mode2();
  89.     break;
  90.   case 3:
  91.     mode3();
  92.     break;
  93.   default:
  94.     break;
  95.   }
  96.   saveCurrentModeToEEPROM();
  97. }
  98.  
  99. void processAmpSwitchButtonClick()
  100. {
  101.   if (ampSwitchBtn.isSingle())
  102.   {
  103.     currentMode++;
  104.     if (currentMode > 3)
  105.     {
  106.       currentMode = 1;
  107.     }
  108.     switchToCurrentMode();
  109.   }
  110. }
  111.  
  112. void setup()
  113. {
  114.   pinMode(RELAY_1, OUTPUT);
  115.   pinMode(RELAY_2, OUTPUT);
  116.   pinMode(RELAY_3, OUTPUT);
  117.   pinMode(RELAY_4, OUTPUT);
  118.   pinMode(RELAY_5, OUTPUT);
  119.   pinMode(RELAY_6, OUTPUT);
  120.   pinMode(RELAY_7, OUTPUT);
  121.   pinMode(RELAY_8, OUTPUT);
  122.   pinMode(LED_1, OUTPUT);
  123.   pinMode(LED_2, OUTPUT);
  124.   pinMode(LED_3, OUTPUT);
  125.  
  126.   ampSwitchBtn.setTickMode(MANUAL);
  127.   ampSwitchBtn.setClickTimeout(600); // настройка таймаута между кликами (по умолчанию 300 мс)
  128.  
  129.   readModeFromEEPROM();
  130.   switchToCurrentMode();
  131. }
  132.  
  133. void loop()
  134. {
  135.   ampSwitchBtn.tick();
  136.   processAmpSwitchButtonClick();
  137. }
  138.  
  139. void saveCurrentModeToEEPROM()
  140. {
  141.   EEPROM.writeByte(0, currentMode);
  142. }
  143.  
  144. void readModeFromEEPROM()
  145. {
  146.   byte savedMode = EEPROM.readByte(0);
  147.   if (savedMode == 0)
  148.   { // first run
  149.     currentMode = 1;
  150.   }
  151.   else
  152.   {
  153.     currentMode = savedMode;
  154.   }
  155. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement