Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- + LED-Changer + by Andreas Boing (Germany) + Open Source -> have fun +
- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- */
- // Variablen-Initialisierung
- // ---------------------------------------------------------------------------------------------------------------
- int activeLed = 2; // Variable für die aktive LED
- unsigned long previousMillis = 0; // Variable für die Zeitmessung
- int buttonStateReset = LOW; // Variable für den Reset-Taster
- int buttonStateAdd = LOW; // Variable für den Erhöhen-Taster
- int buttonStateDec = LOW; // Variable für den Senken-Taster
- int buttonStateCheck = 0; // Variable für Prüfung mehrerer Taster
- int buttonState = 0; // Variable für Taster-Nummer
- const int debouncetimeReset = 1000; // Variable für Mindestdrucklänge des Reset-Tasters
- const int debouncetimeAdd = 250; // Variable für Mindestdrucklänge des Erhöhen-Tasters
- const int debouncetimeDec = 250; // Variable für Mindestdrucklänge des Senken-Tasters
- int freigabe = 0; // Variable zur Abfrage der Tasterfreigabe
- // ---------------------------------------------------------------------------------------------------------------
- // VOID FUNKTIONEN
- // #################################################################################################################
- void ledChange(int i, int j) { // Wechselt von der aktiven LED zur nächsten LED
- digitalWrite(i, LOW);
- delay(10);
- digitalWrite(j, HIGH);
- activeLed = j;
- }
- void preMil() { // Setzt die Zeitprüfung auf die aktuelle Zeit
- previousMillis = millis();
- }
- void pause(int pauseState) { // Erneute Tastereingabe erst nach Lösung der vorherigen Betätigung
- switch(pauseState) {
- case 0:
- freigabe = 0;
- break;
- default:
- freigabe = 1;
- break;
- }
- }
- // #################################################################################################################
- // VOID SETUP
- // #################################################################################################################
- void setup() {
- // Pin-Initialisierung
- // ---------------------------------------------------------------------------------------------------------------
- for (int i = 2; i < 10; i++) {
- pinMode(i, OUTPUT); // Initialisiert die Pins 2 bis 9 als Ausgang
- }
- for (int i = 10; i < 13; i++) {
- pinMode(i, INPUT); // Initialisiert die Pins 10 bis 12 als Eingang für Taster (Pulldown)
- }
- pinMode(13, OUTPUT);
- digitalWrite(13, LOW); // Licht aus an der internen LED :-)
- // ---------------------------------------------------------------------------------------------------------------
- // Initiale LED-Aktivierung
- // ---------------------------------------------------------------------------------------------------------------
- for (int i = 0; i < 5; i++) { // Initialisierungsbestätigung durch 5 maliges Blinken
- digitalWrite(activeLed, LOW);
- delay(100);
- digitalWrite(activeLed, HIGH);
- delay(100);
- }
- // ---------------------------------------------------------------------------------------------------------------
- }
- // #################################################################################################################
- // VOID LOOP
- // #################################################################################################################
- void loop() {
- buttonStateReset = digitalRead(10); // Abfrage Reset-Taster
- buttonStateAdd = digitalRead(11); // Abfrage Erhöhen-Taster
- buttonStateDec = digitalRead(12); // Abfrage Senken-Taster
- buttonState = 0;
- buttonStateCheck = 0;
- if (buttonStateReset == HIGH) {
- buttonState = 1;
- buttonStateCheck++;
- }
- if (buttonStateAdd == HIGH) {
- buttonState = 2;
- buttonStateCheck++;
- }
- if (buttonStateDec == HIGH) {
- buttonState = 3;
- buttonStateCheck++;
- }
- // Prüfung, ob mehr als ein Taster gleichzeitig gedrückt ist
- // ---------------------------------------------------------------------------------------------------------------
- if (buttonStateCheck > 1) { // Fehlermeldung, wenn mehr als ein
- for (int i = 0; i < 5; i++) { // Taster betätigt ist
- for (int j = 2; j < 10; j++) {
- digitalWrite(j, HIGH);
- delay(20);
- digitalWrite(j, LOW);
- delay(20);
- }
- }
- delay(500);
- digitalWrite(activeLed, HIGH);
- previousMillis = millis();
- }
- // ---------------------------------------------------------------------------------------------------------------
- // Steuerung
- // ---------------------------------------------------------------------------------------------------------------
- if (buttonState != 0) {
- if ((buttonState == 1) && (freigabe == 0)) { // Reset auf Startbedingung
- if ((millis() - previousMillis) > debouncetimeReset) {
- for (int i = 2; i < 10; i++) {
- digitalWrite(i, LOW);
- }
- activeLed = 2;
- delay(1000);
- digitalWrite(activeLed, HIGH);
- pause(1);
- preMil();
- }
- }
- if ((buttonState == 2) && (freigabe == 0)) { // Aktuelle LED deaktivieren
- // und nächste LED aktivieren
- if ((millis() - previousMillis) > debouncetimeAdd) {
- if (activeLed < 9) { // Wenn höchste LED erreicht wurde,
- ledChange(activeLed, activeLed+1); // dann wird die Schleife ignoriert
- pause(1);
- preMil();
- }
- }
- }
- if ((buttonState == 3) && (freigabe == 0)) { // Aktuelle LED deaktivieren
- // und vorhergehende LED aktivieren
- if ((millis() - previousMillis) > debouncetimeDec) {
- if (activeLed > 2) { // Wenn niedrigste LED erreicht wurde,
- // dann wird die Schleife ignoriert
- ledChange(activeLed, activeLed-1);
- pause(1);
- preMil();
- }
- }
- }
- }
- if (buttonState == 0) { // Wenn kein Taster gedrückt ist,
- preMil(); // wird die Zeitvariable aktuallisiert
- pause(0); // und die Freigabe der Taster erteilt
- }
- }
- // ##################################################################################################################
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement