silentbase_neopixel:programmversion_0.5
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
silentbase_neopixel:programmversion_0.5 [14.11.2016 17:59] – Frickelpiet | silentbase_neopixel:programmversion_0.5 [18.05.2023 12:16] (aktuell) – Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== NeoPixel-Beleuchtung für SilentBase 800 Programmversion 0.5 ====== | ====== NeoPixel-Beleuchtung für SilentBase 800 Programmversion 0.5 ====== | ||
- | Diese Programmversion | + | Diese Programmversion |
+ | |||
+ | Ältere Programmversionen: | ||
+ | * [[silentbase_neopixel: | ||
+ | * [[silentbase_neopixel: | ||
+ | * [[silentbase_neopixel: | ||
Hilfreiche Links: | Hilfreiche Links: | ||
* https:// | * https:// | ||
+ | * http:// | ||
* https:// | * https:// | ||
+ | ToDo: Es sind jetzt alle Funktionen integriert, die geplant waren. Jetzt müssten noch ein paar coole Beleuchtungseffekte programmiert werden. | ||
+ | |||
+ | Der Sketch enthält Code von [[https:// | ||
+ | < | ||
+ | // Bibliotheken einbinden | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | |||
+ | |||
+ | // 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 eine Adresse im EEPROM | ||
+ | int addr = 0; | ||
+ | |||
+ | // Definiert die Variablen | ||
+ | int numPixels = 64; | ||
+ | int last; | ||
+ | |||
+ | |||
+ | // Definiert ein ResponsiveAnalogRead Objekt | ||
+ | ResponsiveAnalogRead rlast(lastPin, | ||
+ | |||
+ | |||
+ | int tasterStatus = HIGH; // aktuelles Signal vom Eingangspin | ||
+ | int tasterGedrueckt = 0; // abfragen ob Taster gedrückt war | ||
+ | int entprellZeit = 200; // Zeit für Entprellung ggf. anpassen | ||
+ | |||
+ | |||
+ | float counter = 0; | ||
+ | int i; | ||
+ | |||
+ | byte programmmodus = 0; | ||
+ | |||
+ | // Definiert die NeoPixel-Strips | ||
+ | Adafruit_NeoPixel strip1 = Adafruit_NeoPixel(numPixels, | ||
+ | Adafruit_NeoPixel strip2 = Adafruit_NeoPixel(numPixels, | ||
+ | |||
+ | |||
+ | // 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 = 1000; | ||
+ | int intervalNeoPixel = 50; | ||
+ | int intervalSerialPrint = 1000; | ||
+ | |||
+ | |||
+ | void setup() { | ||
+ | // Initialisiere den Button-Pin | ||
+ | pinMode(tasterPin, | ||
+ | |||
+ | // Initialisiere die NeoPixel-Pins | ||
+ | pinMode(neoPin1, | ||
+ | pinMode(neoPin2, | ||
+ | |||
+ | // Initialisiere den analogen Pin | ||
+ | pinMode(lastPin, | ||
+ | |||
+ | // Initialisiere die NeoPixel-Strips | ||
+ | strip1.begin(); | ||
+ | strip1.show(); | ||
+ | // | ||
+ | | ||
+ | strip2.begin(); | ||
+ | strip2.show(); | ||
+ | // | ||
+ | |||
+ | // Lese den abgespeicherten Wert für den Programmmodus aus dem EEPROM | ||
+ | programmmodus = EEPROM.read(addr); | ||
+ | |||
+ | // 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(); | ||
+ | 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++; | ||
+ | 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 | ||
+ | EEPROM.write(addr, | ||
+ | } | ||
+ | | ||
+ | |||
+ | |||
+ | // 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) | ||
+ | | ||
+ | |||
+ | // Berechnung der Netzteillast in Prozent | ||
+ | float rlastmin = 350; // Messwert bei minimaler Last | ||
+ | float rlastmax = 700; // Messwert bei maximaler Last | ||
+ | last = 100 - ((rlastmax - rlast.getValue()) / (rlastmax - rlastmin)) * 100; | ||
+ | |||
+ | //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 * (last/10)); | ||
+ | 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, | ||
+ | strip2.setPixelColor(i, | ||
+ | } | ||
+ | strip1.show(); | ||
+ | strip2.show(); | ||
+ | |||
+ | //Speichere die aktuelle Zeit in die zughörige Variable | ||
+ | previousMillisNeoPixel = currentMillis; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | // | ||
+ | else if (programmmodus == 1) { | ||
+ | if ((unsigned long)(currentMillis - previousMillisNeoPixel) >= intervalNeoPixel) { | ||
+ | |||
+ | |||
+ | // Ansteuerung der NeoPixel-Strips | ||
+ | counter = counter + (0.05 * (last/10)); | ||
+ | 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, | ||
+ | strip2.setPixelColor(i, | ||
+ | } | ||
+ | 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) { | ||
+ | |||
+ | // | ||
+ | // | ||
+ | |||
+ | // | ||
+ | | ||
+ | |||
+ | // | ||
+ | | ||
+ | | ||
+ | | ||
+ | // if the repsonsive value has change, print out ' | ||
+ | | ||
+ | | ||
+ | } | ||
+ | |||
+ | // Ausgabe Zustand Taster | ||
+ | | ||
+ | |||
+ | // Ausgabe Programmzähler | ||
+ | | ||
+ | |||
+ | // | ||
+ | | ||
+ | } | ||
+ | |||
+ | } | ||
+ | </ | ||
Tags: #Arduino #NeoPixel | Tags: #Arduino #NeoPixel |
silentbase_neopixel/programmversion_0.5.1479142774.txt.gz · Zuletzt geändert: 18.05.2023 09:09 (Externe Bearbeitung)