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

Auf dieser Seite werden Cookies für die Bereitstellung personalisierter Inhalte und die Seitenanalyse mit Matomo verwendet. Durch die Nutzung dieser Seiten erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Computer gespeichert werden. Weitere Information
silentbase_neopixel/programmversion_0.2.txt · Zuletzt geändert: 13.11.2016 14:04 von Frickelpiet