Advertisement
Andreas_Boing

LED-Changer

Dec 15th, 2019
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 7.23 KB | None | 0 0
  1. /*
  2.   ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  3.   + LED-Changer + by Andreas Boing (Germany) + Open Source -> have fun +
  4.   ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  5. */
  6.  
  7.  
  8.   // Variablen-Initialisierung
  9.   // ---------------------------------------------------------------------------------------------------------------
  10.  
  11.   int             activeLed         = 2;    // Variable für die aktive LED
  12.   unsigned long   previousMillis    = 0;    // Variable für die Zeitmessung
  13.   int             buttonStateReset  = LOW;  // Variable für den Reset-Taster
  14.   int             buttonStateAdd    = LOW;  // Variable für den Erhöhen-Taster
  15.   int             buttonStateDec    = LOW;  // Variable für den Senken-Taster
  16.   int             buttonStateCheck  = 0;    // Variable für Prüfung mehrerer Taster
  17.   int             buttonState       = 0;    // Variable für Taster-Nummer
  18.   const int       debouncetimeReset = 1000; // Variable für Mindestdrucklänge des Reset-Tasters
  19.   const int       debouncetimeAdd   = 250;  // Variable für Mindestdrucklänge des Erhöhen-Tasters
  20.   const int       debouncetimeDec   = 250;  // Variable für Mindestdrucklänge des Senken-Tasters
  21.   int             freigabe          = 0;    // Variable zur Abfrage der Tasterfreigabe
  22.  
  23.   // ---------------------------------------------------------------------------------------------------------------
  24.  
  25.  
  26. // VOID FUNKTIONEN
  27. // #################################################################################################################
  28.  
  29. void ledChange(int i, int j) {  // Wechselt von der aktiven LED zur nächsten LED
  30.   digitalWrite(i, LOW);
  31.   delay(10);  
  32.   digitalWrite(j, HIGH);
  33.   activeLed = j;
  34.   }
  35.  
  36. void preMil() {                   // Setzt die Zeitprüfung auf die aktuelle Zeit
  37.   previousMillis = millis();
  38.   }
  39.  
  40.  
  41. void pause(int pauseState) {      // Erneute Tastereingabe erst nach Lösung der vorherigen Betätigung
  42.   switch(pauseState) {
  43.     case 0:
  44.       freigabe = 0;
  45.     break;
  46.     default:
  47.       freigabe = 1;
  48.     break;
  49.     }
  50.  }
  51.  
  52.  
  53.  
  54. // #################################################################################################################
  55.  
  56.  
  57. // VOID SETUP
  58. // #################################################################################################################
  59.  
  60. void setup() {
  61.  
  62.   // Pin-Initialisierung
  63.   // ---------------------------------------------------------------------------------------------------------------
  64.  
  65.   for (int i = 2; i < 10; i++) {
  66.     pinMode(i, OUTPUT);   // Initialisiert die Pins 2 bis 9 als Ausgang
  67.     }
  68.   for (int i = 10; i < 13; i++) {
  69.     pinMode(i, INPUT);    // Initialisiert die Pins 10 bis 12 als Eingang für Taster (Pulldown)
  70.     }
  71.  
  72.   pinMode(13, OUTPUT);    
  73.   digitalWrite(13, LOW);  // Licht aus an der internen LED :-)
  74.  
  75.   // ---------------------------------------------------------------------------------------------------------------
  76.  
  77.   // Initiale LED-Aktivierung
  78.   // ---------------------------------------------------------------------------------------------------------------
  79.  
  80.   for (int i = 0; i < 5; i++) {          // Initialisierungsbestätigung durch 5 maliges Blinken
  81.     digitalWrite(activeLed, LOW);
  82.     delay(100);
  83.     digitalWrite(activeLed, HIGH);
  84.     delay(100);
  85.     }
  86.  
  87.   // ---------------------------------------------------------------------------------------------------------------
  88.  
  89.   }
  90.  
  91. // #################################################################################################################
  92.  
  93.  
  94. // VOID LOOP
  95. // #################################################################################################################
  96.  
  97. void loop() {
  98.  
  99.   buttonStateReset = digitalRead(10);   // Abfrage Reset-Taster
  100.   buttonStateAdd   = digitalRead(11);   // Abfrage Erhöhen-Taster
  101.   buttonStateDec   = digitalRead(12);   // Abfrage Senken-Taster
  102.  
  103.   buttonState       = 0;
  104.   buttonStateCheck  = 0;
  105.  
  106.   if (buttonStateReset == HIGH) {
  107.     buttonState = 1;
  108.     buttonStateCheck++;
  109.     }
  110.   if (buttonStateAdd == HIGH) {
  111.     buttonState = 2;
  112.     buttonStateCheck++;
  113.     }
  114.   if (buttonStateDec == HIGH) {
  115.     buttonState = 3;
  116.     buttonStateCheck++;
  117.     }
  118.  
  119.   // Prüfung, ob mehr als ein Taster gleichzeitig gedrückt ist
  120.   // ---------------------------------------------------------------------------------------------------------------
  121.  
  122.   if (buttonStateCheck > 1) {                                                 // Fehlermeldung, wenn mehr als ein
  123.     for (int i = 0; i < 5; i++) {                                             // Taster betätigt ist
  124.       for (int j = 2; j < 10; j++) {
  125.         digitalWrite(j, HIGH);
  126.         delay(20);
  127.         digitalWrite(j, LOW);
  128.         delay(20);
  129.         }
  130.       }
  131.     delay(500);
  132.     digitalWrite(activeLed, HIGH);
  133.     previousMillis = millis();
  134.     }
  135.  
  136.   // ---------------------------------------------------------------------------------------------------------------
  137.  
  138.   // Steuerung
  139.   // ---------------------------------------------------------------------------------------------------------------
  140.  
  141.   if (buttonState != 0) {
  142.  
  143.     if ((buttonState == 1) && (freigabe == 0)) {                              // Reset auf Startbedingung
  144.       if ((millis() - previousMillis) > debouncetimeReset) {
  145.         for (int i = 2; i < 10; i++) {
  146.           digitalWrite(i, LOW);
  147.           }
  148.         activeLed = 2;
  149.         delay(1000);
  150.         digitalWrite(activeLed, HIGH);
  151.         pause(1);
  152.         preMil();
  153.         }
  154.       }
  155.    
  156.     if ((buttonState == 2) && (freigabe == 0)) {                              // Aktuelle LED deaktivieren
  157.                                                                               // und nächste LED aktivieren
  158.       if ((millis() - previousMillis) > debouncetimeAdd) {                    
  159.         if (activeLed < 9) {                                                  // Wenn höchste LED erreicht wurde,
  160.           ledChange(activeLed, activeLed+1);                                  // dann wird die Schleife ignoriert
  161.           pause(1);
  162.           preMil();
  163.           }
  164.         }
  165.       }
  166.  
  167.     if ((buttonState == 3) && (freigabe == 0)) {                              // Aktuelle LED deaktivieren
  168.                                                                               // und vorhergehende LED aktivieren
  169.       if ((millis() - previousMillis) > debouncetimeDec) {
  170.         if (activeLed > 2) {                                                  // Wenn niedrigste LED erreicht wurde,
  171.                                                                               // dann wird die Schleife ignoriert
  172.           ledChange(activeLed, activeLed-1);
  173.           pause(1);
  174.           preMil();
  175.           }
  176.         }
  177.       }
  178.     }
  179.  
  180.   if (buttonState == 0) {                                                     // Wenn kein Taster gedrückt ist,
  181.     preMil();                                                                 // wird die Zeitvariable aktuallisiert
  182.     pause(0);                                                                 // und die Freigabe der Taster erteilt
  183.     }
  184.  
  185.   }
  186.  
  187. // ##################################################################################################################
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement