Benutzer-Werkzeuge

Webseiten-Werkzeuge


silentbase_neopixel: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 Bewässerungsautomat Programmversion 0.6).1) 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 Baldengineer

// 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;
   }

}

Tags: #Arduino #NeoPixel

silentbase_neopixel/programmversion_0.2.txt · Zuletzt geändert: 18.05.2023 12:16 von 127.0.0.1