Advertisement
DrAungWinHtut

two_button.ino

May 3rd, 2025
282
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // C++ code using millis() instead of delay()
  2.  
  3. const int buttonPin1 = 2;
  4. const int buttonPin2 = 3;
  5. const int ledPins[] = {11, 12, 13};
  6. const int numLeds = 3;
  7.  
  8. int count1 = 0;
  9. int count2 = 0;
  10. int buttonState1 = LOW;
  11. int buttonState2 = LOW;
  12. int lastButtonState1 = LOW;
  13. int lastButtonState2 = LOW;
  14.  
  15. unsigned long lastDebounceTime1 = 0;
  16. unsigned long lastDebounceTime2 = 0;
  17. unsigned long debounceDelay = 50;
  18.  
  19. unsigned long lastBlinkTime = 0;
  20. unsigned long blinkInterval = 500;
  21. int blinkStep = 0;
  22. bool blinkState = LOW;
  23.  
  24. void setup() {
  25.   pinMode(buttonPin1, INPUT);
  26.   pinMode(buttonPin2, INPUT);
  27.   for (int i = 0; i < numLeds; i++) {
  28.     pinMode(ledPins[i], OUTPUT);
  29.   }
  30.   Serial.begin(9600);
  31. }
  32.  
  33. void loop() {
  34.   // Button debouncing
  35.   int reading1 = digitalRead(buttonPin1);
  36.   if (reading1 != lastButtonState1) {
  37.     lastDebounceTime1 = millis();
  38.   }
  39.  
  40.   if ((millis() - lastDebounceTime1) > debounceDelay) {
  41.     if (reading1 == HIGH && buttonState1 == LOW) {
  42.       count1++;
  43.       Serial.println(count1);
  44.     }
  45.     buttonState1 = reading1;
  46.   }
  47.   lastButtonState1 = reading1;
  48.   Serial.print(count1%3);
  49.   // Choose mode based on count
  50.   switch (count1 % 3) {
  51.     case 0:
  52.       l2r();
  53.       break;
  54.     case 1:
  55.       r2l();
  56.       break;
  57.     case 2:
  58.       same_time();
  59.       break;
  60.   }
  61.  
  62.  
  63.   int reading2 = digitalRead(buttonPin2);
  64.   if (reading2 != lastButtonState2) {
  65.     lastDebounceTime2 = millis();
  66.   }
  67.  
  68.   if ((millis() - lastDebounceTime2) > debounceDelay) {
  69.     if (reading2 == HIGH && buttonState1 == LOW) {
  70.       count2++;
  71.       Serial.println(count2);
  72.     }
  73.     buttonState2 = reading2;
  74.   }
  75.   lastButtonState2 = reading2;
  76.   Serial.print(count2%3);
  77.   // Choose mode based on count
  78.   switch (count2 % 3) {
  79.     case 0:
  80.       blinkInterval = 500; 
  81.       Serial.println(" - delay 500");
  82.       break;
  83.     case 1:
  84.       blinkInterval = 1000;
  85.       Serial.println(" - delay 1000"); 
  86.       break;
  87.     case 2:
  88.       blinkInterval = 1500;
  89.       Serial.println(" - delay 1500");
  90.       break;
  91.   }
  92. }
  93.  
  94. void r2l() {
  95.   Serial.println(" - R to L");
  96.   if (millis() - lastBlinkTime >= blinkInterval) {
  97.     lastBlinkTime = millis();
  98.     for (int i = 0; i < numLeds; i++) {
  99.       digitalWrite(ledPins[i], LOW);
  100.     }
  101.     digitalWrite(ledPins[blinkStep], HIGH);
  102.     blinkStep = (blinkStep + 1) % numLeds;
  103.   }
  104. }
  105.  
  106. void l2r() {
  107.   Serial.println(" - L to R");
  108.   if (millis() - lastBlinkTime >= blinkInterval) {
  109.     lastBlinkTime = millis();
  110.     for (int i = 0; i < numLeds; i++) {
  111.       digitalWrite(ledPins[i], LOW);
  112.     }
  113.     digitalWrite(ledPins[numLeds - 1 - blinkStep], HIGH);
  114.     blinkStep = (blinkStep + 1) % numLeds;
  115.   }
  116. }
  117.  
  118. void same_time() {
  119.   Serial.println(" - 3 LED");
  120.   if (millis() - lastBlinkTime >= blinkInterval) {
  121.     lastBlinkTime = millis();
  122.     blinkState = !blinkState;
  123.     for (int i = 0; i < numLeds; i++) {
  124.       digitalWrite(ledPins[i], blinkState ? HIGH : LOW);
  125.     }
  126.   }
  127. }
  128.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement