Benutzer-Werkzeuge

Webseiten-Werkzeuge


silentbase_neopixel:programmversion_0.3

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
silentbase_neopixel:programmversion_0.3 [13.11.2016 11:29] Frickelpietsilentbase_neopixel:programmversion_0.3 [18.05.2023 12:16] (aktuell) – Externe Bearbeitung 127.0.0.1
Zeile 1: Zeile 1:
 ====== NeoPixel-Beleuchtung für SilentBase 800 Programmversion 0.3 ====== ====== NeoPixel-Beleuchtung für SilentBase 800 Programmversion 0.3 ======
-In Programmversion 0.3 soll der Taster regelmäßig abgefragt werdenBei jedem Tastendruck soll – unabhängig davon, wie lange der Taster gedrückt wird – ein Zähler um den Wert 1 erhöht werden, bis ein Maximalwert erreicht ist. Bei Erreichen dieses Maximalwerts soll der Zähler wieder mit 0 beginnen. In kommenden Programmversionen soll diese Funktion genutzt werden, um mit dem Taster verschiedene Beleuchtungseffekte auswählen zu können.+In Programmversion 0.3 wird der Taster an der Gehäusefront regelmäßig abgefragt. Der Taster ist entprellt, und es ist egal, wie lange er gedrückt wird. Bei jedem Tastendruck wird ein Zähler um den Wert 1 erhöht und ein entsprechendes Beleuchtungsprogramm aufgerufen. In diesem Sketch kann zwischen einem roten und einem weißen Atemeffekt gewechselt werden. Hier geht es zu [[silentbase_neopixel:programmversion_0.2|Programmversion 0.2]].
  
 Hilfreiche Links:  Hilfreiche Links: 
   * [[https://www.baldengineer.com/arduino-de-bounce-a-button-with-micros.html#|Arduino: De-Bounce a Button with micros() or millis()]]   * [[https://www.baldengineer.com/arduino-de-bounce-a-button-with-micros.html#|Arduino: De-Bounce a Button with micros() or millis()]]
 +  * http://www.scynd.de/tutorials/arduino-tutorials/1-taster/1-2-taster-entprellt.html
  
 +ToDo: Es wäre schön, wenn der Arduino sich den zuletzt ausgewählte Programmmodus merken würde.
 +
 +Der Sketch enthält Code von [[https://www.baldengineer.com/millis-cookbook.html|Baldengineer]] und [[http://www.scynd.de/tutorials/arduino-tutorials/1-taster/1-2-taster-entprellt.html|Scynd]].
 +<code>
 +// Bibliotheken einbinden
 +#include <Adafruit_NeoPixel.h>
 +
 +
 +// Definiert die Pins
 +#define tasterPin 7           // Taster
 +#define lastPin A0            // Spannungsteiler
 +#define neoPin1 11            // Neopixel-Strip rechte Seite
 +#define neoPin2 12            // Neopixel-Strip linke Seite
 +
 +
 +// Definiert die Variablen
 +int numPixels = 64;
 +int rlast;
 +int last;
 +int atem;
 +
 +int tasterStatus = HIGH;      // aktuelles Signal vom Eingangspin
 +int tasterGedrueckt = 0;      // abfragen ob Taster gedrückt war
 +int entprellZeit = 200;       // Zeit für Entprellung, anpassen!
 +
 +
 +float counter = 0;
 +int i;
 +
 +int programmmodus = 0;
 +
 +// Definiert die NeoPixel-Strips
 +Adafruit_NeoPixel strip1 = Adafruit_NeoPixel(numPixels, neoPin1, NEO_GRBW + NEO_KHZ800);
 +Adafruit_NeoPixel strip2 = Adafruit_NeoPixel(numPixels, neoPin2, NEO_GRBW + NEO_KHZ800);
 +
 +
 +// Definiert die globalen RGBW-Werte
 +byte r = 0;
 +byte g = 0;
 +byte b = 0;
 +byte w = 0;
 +
 +
 +// Definiert die Tracking-Variablen für die IF-Abfragen
 +unsigned long previousMillisCalcLoad = 0;
 +unsigned long previousMillisNeoPixel = 0;
 +unsigned long previousMillisSerialPrint = 0;
 +unsigned long tasterZeit = 0;
 +
 +// Definiert die Intervalle für die IF-Abfragen
 +int intervalCalcLoad = 2000;
 +int intervalNeoPixel = 50;
 +int intervalSerialPrint = 500;
 +
 +
 +void setup() {
 +// Initialisiere den Button-Pin
 +  pinMode(tasterPin, INPUT_PULLUP);
 +
 +// Initialisiere die NeoPixel-Pins
 +  pinMode(neoPin1, OUTPUT);
 +  pinMode(neoPin2, OUTPUT);
 +
 +// Initialisiere den analogen Pin 
 +  pinMode(lastPin, INPUT);
 +
 +// Initialisiere die NeoPixel-Strips
 +  strip1.begin(); // Initialisiert das Neopixel
 +  strip1.show();  // Macht das NeoPixel sichtbar
 +  //strip1.clear(); // Macht das NeoPixel aus
 +  
 +  strip2.begin(); // Initialisiert das Neopixel
 +  strip2.show();  // Macht das NeoPixel sichtbar
 +  //strip2.clear(); // Macht das NeoPixel aus
 +
 +// Initialisiere die serialle Schnittstelle
 +  Serial.begin(57600);
 +
 +delay (2000);
 +}
 +
 +
 +
 +void loop() {
 +// Lesen und entprellen des Tasters
 +  tasterStatus = digitalRead(tasterPin);
 + 
 +  // Wenn der Taster gedrückt ist...
 +  if (tasterStatus == LOW)
 +  {
 +    tasterZeit = millis();      // aktualisiere tasterZeit
 +    tasterGedrueckt = 1;        // speichert, dass Taster gedrückt wurde
 +  }
 + 
 +  // Wenn die gewählte entprellZeit vergangen ist und der Taster gedrückt war...
 +  if ((millis() - tasterZeit > entprellZeit) && tasterGedrueckt == 1)
 +    {
 +      programmmodus++;          // Programmmodus wird um +1 erhöht
 +      tasterGedrueckt = 0;      // setzt gedrückten Taster zurück
 +      r = 0;                    // setzt den globalen Farbwert zurück
 +      g = 0;                    // setzt den globalen Farbwert zurück
 +      b = 0;                    // setzt den globalen Farbwert zurück
 +      w = 0;                    // setzt den globalen Farbwert zurück
 +    }
 +  
 +
 +
 +// Aktuelle Zeit abfragen
 +  unsigned long currentMillis = millis();
 +
 +// Messen und Berechnen der Last des Netzteils
 +  if ((unsigned long)(currentMillis - previousMillisCalcLoad) >= intervalCalcLoad) {
 +  
 +     // Auslesen des analogen Eingangs (Last Netzteil)
 +     rlast = analogRead(lastPin);
 +
 +     // Berechnung der Netzteillast in Prozent
 +     float rlastmin = 350; // Messwert bei minimaler Last
 +     float rlastmax = 1023; // Messwert bei maximaler Last
 +     last = 100 - ((rlastmax - rlast) / (rlastmax - rlastmin)) * 100;
 +
 +     // Berechnung der Atemgeschwindigkeit
 +     atem = last/200; // Der Wert kann theoretisch zwischen 0 und 0,5 variieren und die Geschwindigkeit des Atemeffekts beschleunigen 
 +
 +
 +  //Speichere die aktuelle Zeit in die zughörige Variable
 +  previousMillisCalcLoad = currentMillis;
 +  }
 +
 +
 +
 +// Steuerung der NeoPixel-Strips
 +  // Beleuchtungseffekt für Programmmodus 0 (Atmen rot)
 +  if (programmmodus == 0) {
 +    if ((unsigned long)(currentMillis - previousMillisNeoPixel) >= intervalNeoPixel) {
 +
 +
 +      // Ansteuerung der NeoPixel-Strips
 +      counter = counter + (0.05 + atem);
 +      if (counter >= 6.28) {
 +        counter = 0;
 +      }
 +        // fade led mit counter
 +        r = ((exp(sin(counter)) - 0.36787944) * 108.492061351);
 +        
 +      for (int i = 0; i < numPixels; i++) {
 +        strip1.setPixelColor(i, r, g, b, w);
 +        strip2.setPixelColor(i, r, g, b, w);
 +      }
 +      strip1.show();
 +      strip2.show();
 +   
 +    //Speichere die aktuelle Zeit in die zughörige Variable
 +    previousMillisNeoPixel = currentMillis;
 +    }
 +  }
 +
 +  //Beleuchtungseffekt für Programmmodus 1 (Atmen weiß)
 +  else if (programmmodus == 1) {
 +    if ((unsigned long)(currentMillis - previousMillisNeoPixel) >= intervalNeoPixel) {
 +
 +
 +      // Ansteuerung der NeoPixel-Strips
 +      counter = counter + (0.05 + atem);
 +      if (counter >= 6.28) {
 +        counter = 0;
 +      }
 +        // fade led mit counter
 +        w = ((exp(sin(counter)) - 0.36787944) * 108.492061351);
 +        
 +      for (int i = 0; i < numPixels; i++) {
 +        strip1.setPixelColor(i, r, g, b, w);
 +        strip2.setPixelColor(i, r, g, b, w);
 +      }
 +      strip1.show();
 +      strip2.show();
 +   
 +    //Speichere die aktuelle Zeit in die zughörige Variable
 +    previousMillisNeoPixel = currentMillis;
 +    }
 +  }
 +
 +
 +  // Wenn der Programmodus auf einen höheren Wert sprngt, wird er zurück auf 0 gesetzt und beginnt von vorne
 +  else {
 +    programmmodus = 0;
 +  }
 +
 +
 +// Ausgabe an die serielle Schnittstelle
 +  if ((unsigned long)(currentMillis - previousMillisSerialPrint) >= intervalSerialPrint) {
 +
 +     //Ausgabe der gemessenen Netzteillast an die sereille Schnittstelle
 +     Serial.print("Last (gemessen): "); Serial.println(rlast);
 +
 +     //Ausgabe der berechneten Netzteillast an die sereille Schnittstelle
 +     Serial.print("Last (prozentual): "); Serial.print(last); Serial.println(" %");
 +
 +     // Ausgabe Zustand Taster
 +     Serial.print("Taster: "); Serial.println(tasterStatus);
 +
 +     // Ausgabe Programmzähler
 +     Serial.print("Programm Nr.: "); Serial.println(programmmodus);
 +
 +   //Speichere die aktuelle Zeit in die zughörige Variable
 +   previousMillisSerialPrint = currentMillis;
 +   }
 +
 +}
 +</code>
  
 Tags: #Arduino #NeoPixel Tags: #Arduino #NeoPixel
silentbase_neopixel/programmversion_0.3.1479032955.txt.gz · Zuletzt geändert: 18.05.2023 09:09 (Externe Bearbeitung)