Hallo zusammen, ich habe ein Problem mit den WS2812B LED-Stripe. Mein Vorhaben war es, eine kleine WortUhr zu bauen und zu Programmieren. Allerdings scheint etwas mit dem Programm nicht zu passen. Wenn ich es auf meinen ESP8266 hochlade, funktioniert alles wie es soll, bis auf die erste LED des Stripes, die dauerhaft Leuchtet (meistens in grün oder blau). Mit Beispiel Code von der FastLED libary, die ich verwende scheint es keine Probleme zu geben. Ich habe ein 1000uF Elko, ein 470 Ohm Widerstand, ein 3,3V zu 5V Shifter und ein ausreichen starkes Netzteil verbaut. Somit sollten Hardware technische Probleme eigentlich ausgeschlossen sein. Wäre Cool wenn mir jemand sagen könnte an was das liegt oder was ich verbessern müsste. (Code ist dabei)
Danke im voraus.
#include <ESP8266WiFi.h>
// #include <ESP8266mDNS.h>
#include <ESP8266WebServer.h>
#include <FastLED.h>
#include <time.h>
#include <WiFiManager.h>
#define MY_NTP_SERVER "at.pool.ntp.org"
#define MY_TZ "CET-1CEST,M3.5.0/02,M10.5.0/03"
#define NUM_LEDS 200
#define DATA_PIN 4
#define BRIGHTNESS 100
CRGB leds[NUM_LEDS];
int hours;
int minutes;
bool es;
bool ist;
bool viertel;
bool halb;
bool dreiviertel;
bool nach;
bool vor;
bool ein;
bool eins;
bool zwei;
bool drei;
bool vier;
bool fünf;
bool fünfvornach;
bool sechs;
bool sieben;
bool acht;
bool neun;
bool n;
bool zehn;
bool zehnvornach;
bool elf;
bool zwölf;
bool zwanzig;
bool uhr;
//RGB einstellungen
int rot = 180;
int blau = 180;
int grün = 180;
time_t now;
tm tm;
void setup() {
delay(3000);
configTime(MY_TZ, MY_NTP_SERVER); //NTP Server
Serial.begin(115200);
//WiFi Manager start
WiFi.mode(WIFI_STA);
WiFiManager wm;
bool res;
res = wm.autoConnect("WortUhr", "12345678");
if (!res) {
Serial.println("Verbindung fehlgeschlagen");
} else {
Serial.println("Verbunden.....nice :)");
}
// WiFi Manager ende
FastLED.addLeds<WS2812B, DATA_PIN, GRB>(leds, NUM_LEDS);
FastLED.setBrightness(BRIGHTNESS);
FastLED.clear(); // clear all pixel data
FastLED.show();
}
void loop() {
//NTP Zeit start
time(&now); // read the current time
localtime_r(&now, &tm);
hours = tm.tm_hour;
minutes = tm.tm_min;
Serial.println((String)" (" + hours + ":" + minutes + ")");
delay(1000);
//NTP Zeit ende
//UHR Programm
zeitreset();
//ES IST
Serial.print("ES IST ");
es = HIGH;
ist = HIGH;
//show minutes
if (minutes >= 5 && minutes < 10)
{
//Fünf nach
Serial.print("FÜNF NACH ");
fünfvornach = HIGH;
nach = HIGH;
}
else if (minutes >= 10 && minutes < 15)
{
//Zehn nach
Serial.print("ZEHN NACH ");
zehnvornach = HIGH;
nach = HIGH;
}
else if (minutes >= 15 && minutes < 20)
{
//Viertel nach
Serial.print("VIERTEL NACH ");
viertel = HIGH;
nach = HIGH;
}
else if (minutes >= 20 && minutes < 25)
{
//Zehn
Serial.print("ZEHN VOR HALB ");
zehnvornach = HIGH;
vor = HIGH;
halb = HIGH;
}
else if (minutes >= 25 && minutes < 30)
{
//Fünf
Serial.print("FÜNF VOR HALB ");
fünfvornach = HIGH;
vor = HIGH;
halb = HIGH;
}
else if (minutes >= 30 && minutes < 35)
{
//Halb
Serial.print("HALB ");
halb = HIGH;
}
else if (minutes >= 35 && minutes < 40)
{
//Fünf
Serial.print("FÜNF NACH HALB ");
fünfvornach = HIGH;
nach = HIGH;
halb = HIGH;
}
else if (minutes >= 40 && minutes < 45)
{
//Zehn
Serial.print("ZEHN NACH HALB ");
zehnvornach = HIGH;
nach = HIGH;
halb = HIGH;
}
else if (minutes >= 45 && minutes < 50)
{
//Viertel vor
Serial.print("VIERTEL VOR ");
viertel = HIGH;
vor = HIGH;
}
else if (minutes >= 50 && minutes < 55)
{
//Zehn vor
Serial.print("ZEHN VOR ");
zehnvornach = HIGH;
vor = HIGH;
}
else if (minutes >= 55 && minutes < 60)
{
//Fünf vor
Serial.print("FÜNF VOR ");
fünfvornach = HIGH;
vor = HIGH;
}
//
//convert hours to 12h format
if (hours >= 12)
{
hours -= 12;
}
if (minutes >= 20)
{
hours++;
}
if (hours == 12)
{
hours = 0;
}
// show hours
switch (hours)
{
case 0:
//Zwölf
Serial.print("ZWÖLF ");
zwölf = HIGH;
break;
case 1:
//EIN(S)
Serial.print("EIN");
ein = HIGH;
if (minutes > 4) {
eins = HIGH;
Serial.print("S");
}
break;
case 2:
//Zwei
Serial.print("ZWEI ");
zwei = HIGH;
break;
case 3:
//Drei
Serial.print("DREI ");
drei = HIGH;
break;
case 4:
//Vier
Serial.print("VIER ");
vier = HIGH;
break;
case 5:
//Fünf
Serial.print("FÜNF ");
fünf = HIGH;
break;
case 6:
//Sechs
Serial.print("SECHS ");
sechs = HIGH;
break;
case 7:
//Sieben
Serial.print("SIEBEN ");
sieben = HIGH;
break;
case 8:
//Acht
Serial.print("ACHT ");
acht = HIGH;
break;
case 9:
//Neun
Serial.print("NEUN ");
neun = HIGH;
break;
case 10:
//Zehn
Serial.print("ZEHN ");
zehn = HIGH;
break;
case 11:
//Elf
Serial.print("ELF ");
elf = HIGH;
break;
}
if (minutes < 5)
{
//UHR
Serial.print("UHR ");
uhr = HIGH;
}
//Genaue Minuten Anzeige
nicozahl(uhr, 0, 5);
nicozahl(es, 180, 184);
nicozahl(ist, 186, 191);
nicozahl(dreiviertel, 140, 160);
nicozahl(viertel, 147, 160);
nicozahl(halb, 100, 107);
nicozahl(nach, 120, 127);
nicozahl(vor, 134, 140);
nicozahl(eins, 93, 100);//erst eins auf LOW um das "ein" bei "ein" HIGH zu setzen
nicozahl(ein, 95, 100);
nicozahl(zwei, 80, 87);
nicozahl(drei, 60, 67);
nicozahl(vier, 73, 80);
nicozahl(fünfvornach, 193, 199);
nicozahl(fünf, 112, 120);
nicozahl(sechs, 50, 60);
nicozahl(sieben, 20, 31);
nicozahl(acht, 40, 47);
nicozahl(zehn, 14, 20); //erst zehn auf LOW um das "n" bei "N"eun erneut HIGH zu setzen
nicozahl(neun, 7, 13);
nicozahl(n, 13, 14);
nicozahl(zehnvornach, 172, 180);
nicozahl(elf, 109, 114);
nicozahl(zwölf, 30, 40);
nicozahl(zwanzig, 160, 173);
FastLED.show();
}
void nicozahl(bool wort, int startwert, int endwert ) {
if (wort == HIGH) {
Serial.println((String)wort + "+");
for ( int i = startwert; i < endwert; i++) {
leds[i] = CRGB(rot, grün , blau );
}
} else if (wort == LOW) {
Serial.println((String)wort + "-");
for ( int i = startwert; i < endwert; i++) {
leds[i] = CRGB::Black;
}
}
}
void zeitreset () {
viertel = LOW;
halb = LOW;
dreiviertel = LOW;
nach = LOW;
vor = LOW;
ein = LOW;
eins = LOW;
zwei = LOW;
drei = LOW;
vier = LOW;
fünf = LOW;
fünfvornach = LOW;
sechs = LOW;
sieben = LOW;
acht = LOW;
zehn = LOW;
neun = LOW;
zehnvornach = LOW;
elf = LOW;
zwölf = LOW;
zwanzig = LOW;
uhr = LOW;
}