AdamJS

demo one button mode.ino

May 6th, 2022 (edited)
401
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.57 KB | None | 0 0
  1. // You can use this code on:
  2. // https://wokwi.com/projects/new/arduino-uno
  3. // name: demo__one_button_mode.ino
  4. // settings: diagram.json
  5.  
  6. const byte BUTTON_PIN = 2;
  7. const byte LEDS_PIN[5] = { 13, 12, 11, 10, 9 };
  8. const byte LEDS_PIN_REVERS[5] = { 9, 10, 11, 12, 13 };
  9. const byte LEDS_PIN_COUNT = 5;
  10. const byte MAX_MODE = 6;
  11.  
  12.  
  13. void setup() {
  14.   //Serial.begin(115200);
  15.   for (byte led: LEDS_PIN)
  16.     pinMode(led, OUTPUT);
  17.    
  18.   pinMode(BUTTON_PIN, INPUT_PULLUP);
  19. }
  20.  
  21. byte buttonLastState = LOW;
  22. byte mode = 0;
  23.  
  24. void loop() {
  25.   byte buttonCurrentState = digitalRead(BUTTON_PIN);
  26.  
  27.   if (buttonLastState != buttonCurrentState) {
  28.     buttonLastState = buttonCurrentState;
  29.  
  30.     if (buttonCurrentState == LOW) {
  31.       mode += 1;
  32.       if (mode > MAX_MODE) mode = 0;
  33.       //Serial.println(mode);
  34.     }
  35.   }
  36.  
  37.   switch (mode) {
  38.     case 1: ledLightsSolid(); break;
  39.     case 2: ledLightsOff(); ledLightsBlinkInLine(); break;
  40.     case 3: ledLightsOff(); ledLightsBlinkInLineRevers(); break;
  41.     case 4: ledLightsOff(); ledLightsBlinkInPingPong(); break;
  42.     case 5: ledLightsFadeInOut(); break;
  43.     case 6: ledLightsFromMiddleSolid(); break;      
  44.     default: ledLightsOff(); // mode = 0
  45.   }
  46. }
  47.  
  48. void ledLightsOff() {
  49.   for (byte led: LEDS_PIN)
  50.     digitalWrite(led, LOW);    
  51. }
  52.  
  53. void ledLightsSolid() {
  54.   for (byte led: LEDS_PIN)
  55.     digitalWrite(led, HIGH);  
  56. }
  57.  
  58. void ledLightsBlinkInLine() {
  59.   for (byte led: LEDS_PIN) {
  60.     digitalWrite(led, HIGH);
  61.     if (delayLoop(150)) return;
  62.     digitalWrite(led, LOW);
  63.   }  
  64. }
  65.  
  66. void ledLightsBlinkInLineRevers() {  
  67.   for (byte led: LEDS_PIN_REVERS) {
  68.     digitalWrite(led, HIGH);
  69.     if (delayLoop(150)) return;
  70.     digitalWrite(led, LOW);
  71.   }  
  72. }
  73.  
  74. void ledLightsBlinkInPingPong() {
  75.   ledLightsBlinkInLine();
  76.   ledLightsBlinkInLineRevers();
  77. }
  78.  
  79. void ledLightsFadeInOut() {
  80.   ledLightsOff();
  81.   if (delayLoop(200)) return;
  82.   ledLightsSolid();
  83.   if (delayLoop(500)) return;  
  84. }
  85.  
  86. void ledLightsFromMiddleSolid() {
  87.   byte middle = (byte) LEDS_PIN_COUNT / 2;
  88.  
  89.   ledLightsOff();
  90.   if (delayLoop(200)) return;
  91.   digitalWrite(LEDS_PIN[middle], HIGH);
  92.   if (delayLoop(200)) return;
  93.  
  94.   for (byte i=1; i<=middle; i++) {
  95.     digitalWrite(LEDS_PIN[middle - i], HIGH);
  96.     digitalWrite(LEDS_PIN[middle + i], HIGH);
  97.     if (delayLoop(200)) return;
  98.   }
  99.  
  100.   if (delayLoop(500)) return;  
  101. }
  102.  
  103. boolean delayLoop(unsigned int delayInterval) {
  104.   unsigned long startMillis = millis();
  105.  
  106.   do {
  107.     if (digitalRead(BUTTON_PIN) == LOW) return true;
  108.   } while (millis() - startMillis < delayInterval);
  109.  
  110.   return false;
  111. }
Add Comment
Please, Sign In to add comment