Hallo zusammen,
ich versuche mich momentan an einer Ampel für unsere Schranke.
Dafür habe ich einen Arduino Nano mit Neopixel (120x 2813).
Die Funktion soll wie folgt sein:
Endlage Schranke Zu -> LED Rot (2 Minuten dauerhaftes leuchten, danach bewegtes Lauflicht wie bei Schranke bewegt sich)
Endlage Schranke Auf -> LED Grün (dauerhaftes leuchten)
Ausgang Schranke Bewegt sich -> LED Gelb (schnelles Lauflicht, von unten nach oben)
Ich habe die Anschlüsse wie folgt belegt:
D3 Input Endlage zu
D5 Input Schranke bewegt sich
D7 Input Endlage Aus
D9 Output Neopixel
Es funktioniert auch Grundlegend. Bei Auf, Zu und Bewegung kommt immer eine andere Farbe.
Was ich leider nicht weiß wie ich das umsetzen kann ist, das nach 2 Minuten "Endlage Zu" die LED anfangen wie bei Schranke bewegt sich zu bewegen.
Bei uns ist längere Zeit die Schranke zu und somit leuchten die LEDs oft Rot und werden warm. Das wollte ich damit verhindern das nach 2 Minuten nur noch ein Teil an ist, der sich auch noch bewegt.
Dafür wäre ganz unten:
static void chase2(uint32_t c) {
for(uint16_t i=0; i<strip.numPixels()+20; i++) {
strip.setPixelColor(i , c);
strip.setPixelColor(i-20, 0);
strip.show();
delay(10);
Kann mir da jemand helfen?
Mein Code sieht so aus:
int neopixel=9;
int schrankezu=3; // Schranke ist zu
int schrankebewegt=5; // Schranke bewegt sich
int schrankeauf=7; // Schranke ist offen
int statuszu=20; // Status Schranke ist zu
int statusbewegt=21; // Status Schranke bewegt sich
int statusauf=22; // Status Schranke ist offen
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif
#define PIN 9 // Datenleitung an Pin 9
#define NUMPIXELS 120
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
void setup()
{
pinMode(neopixel, OUTPUT);
pinMode(schrankezu, INPUT);
pinMode(schrankebewegt, INPUT);
pinMode(schrankeauf, INPUT);
strip.begin();
strip.show();
}
void loop()
{
statuszu=digitalRead(schrankezu); // Hier wird der Pin D3 ausgelesen (Befehl:digitalRead). Das Ergebnis wird unter der Variable „tasterzu“ mit dem Wert „HIGH“ für 5Volt oder „LOW“ für 0Volt gespeichert.
statusbewegt=digitalRead(schrankebewegt); // Hier wird der Pin D3 ausgelesen (Befehl:digitalRead). Das Ergebnis wird unter der Variable „tasterzu“ mit dem Wert „HIGH“ für 5Volt oder „LOW“ für 0Volt gespeichert.
statusauf=digitalRead(schrankeauf); // Hier wird der Pin D3 ausgelesen (Befehl:digitalRead). Das Ergebnis wird unter der Variable „tasterzu“ mit dem Wert „HIGH“ für 5Volt oder „LOW“ für 0Volt gespeichert.
if (statuszu == HIGH)
{
for(int i=0;i<NUMPIXELS;i++)
{
strip.setPixelColor(i, strip.Color(255,0,0));
strip.show();
}
}
if (statusbewegt == HIGH)
{
chase(strip.Color(255, 255, 0));
}
if (statusauf == HIGH)
{
for(int i=0;i<NUMPIXELS;i++)
{
strip.setPixelColor(i, strip.Color(0,255,0));
strip.show();
}
}
}
static void chase(uint32_t c) {
for(uint16_t i=0; i<strip.numPixels()+60; i++) {
strip.setPixelColor(i , c);
strip.setPixelColor(i-60, 0);
strip.show();
delay(2);
}
}
static void chase2(uint32_t c) {
for(uint16_t i=0; i<strip.numPixels()+20; i++) {
strip.setPixelColor(i , c);
strip.setPixelColor(i-20, 0);
strip.show();
delay(10);
}
}