Benutzer-Werkzeuge

Webseiten-Werkzeuge


silentbase_neopixel:programmversion_0.2

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
silentbase_neopixel:programmversion_0.2 [12.11.2016 18:06] – angelegt Frickelpietsilentbase_neopixel:programmversion_0.2 [18.05.2023 12:16] (aktuell) – Externe Bearbeitung 127.0.0.1
Zeile 1: Zeile 1:
 ====== NeoPixel-Beleuchtung für SilentBase 800 Programmversion 0.2 ====== ====== NeoPixel-Beleuchtung für SilentBase 800 Programmversion 0.2 ======
 +Eigenschaften: Programmversion 0.2 ist "multitaskingfähig". Die Abfrage der Sensordaten und die Ausgabe an die serielle Schnittstelle erfolgt zweimal pro Sekunde, die Ansteuerung der NeoPixel-Strips erfolgt 20 Mal pro Sekunde. Das Ein- und Ausblenden der LEDs erfolgt nicht linear, sondern ahmt das Ein- und Ausatmen nach (siehe dazu auch [[bewaesserungsautomat:programmversion_0.6|Bewässerungsautomat Programmversion 0.6]]).((http://sean.voisen.org/blog/2011/10/breathing-led-with-arduino/)) Die Sensordaten beeinflussen die Atemfrequenz: Je stärker das Netzteil belastet wird, desto schneller "atmen" die NeoPixel-Streifen. Die Abfrage des Tasters funktioniert, hat aber (noch) keinen Einfluss auf das Programm. 
  
 +ToDo: Mit dem Taster sollen verschiedene Beleuchtungseffekte ausgewählt werden können.
 +
 +Der Sketch enthält Code von [[https://www.baldengineer.com/millis-cookbook.html|Baldengineer]]
 +<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 taster = 1;
 +
 +float counter = 0;
 +int i;
 +
 +
 +// Definiert die NeoPixel
 +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 previousMillisNeoPixel = 0;
 +unsigned long previousMillisReadPins = 0;
 +
 +
 +// Definiert die Intervalle für die IF-Abfragen
 +int intervalNeoPixel = 50;
 +int intervalReadPins = 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 alle NeoPixels
 +  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() {
 +// Aktuelle Zeit abfragen
 +  unsigned long currentMillis = millis();
 +
 +
 +// Abfrage der analogen und digitalen Eingänge
 +  if ((unsigned long)(currentMillis - previousMillisReadPins) >= intervalReadPins) {
 +  
 +  // Auslesen des analogen Eingangs (Last Netzteil)
 +  rlast = analogRead(lastPin);
 +
 +  // Auslesen der digitalen Eingangs (Taster)
 +  taster = digitalRead(tasterPin);
 +
 +  // Berechnung der Netzteillast in Prozent
 +  float rlastmin = 100; // 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 
 +  
 +  //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.println(last); Serial.print(" %\t");
 +
 +  // Ausgabe Zustand Taster
 +  Serial.print("Taster: "); Serial.println(taster);
 +
 +  
 +  //Speichere die aktuelle Zeit in die zughörige Variable
 +  previousMillisReadPins = currentMillis;
 +  }
 +
 +
 +// Steuerung der NeoPixel
 +  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;
 +   }
 +
 +}
 +</code>
 +
 +Tags: #Arduino #NeoPixel
silentbase_neopixel/programmversion_0.2.1478970362.txt.gz · Zuletzt geändert: 18.05.2023 09:09 (Externe Bearbeitung)