Moin moin!
ich möchte ein Uhrprojekt von einem Nano-Clon auf einen Nano 33 IoT umstellen und habe Probleme beim Ansteuern der richtigen LEDs.
Den gesamten LED-Aufbau habe ich mit einem einfachen Code auf dem nano 33 getestet.
In meinem Uhrprogramm hole ich aus der Epoch-Zeit die aktuelle Zeit hier in Deutschland (mit Sommer-Winterzeit vergleich etc.)
Mir scheint etwas die Übertragung zu zerstören. Der Aufbau ist in etwa dieser:
Hier mal eben die relevanten Ausschnitte aus dem Code
void setup() {
delay(3000); // Sicherheits Delay
Serial.begin(115200);
// Start Real Time Clock
rtc.begin();
// Variable for number of tries to NTP service
int numberOfTries = 0, maxTries = 6;
// Get epoch
do {
epoch = WiFi.getTime();
numberOfTries++;
}
while ((epoch == 0) && (numberOfTries < maxTries));
if (numberOfTries == maxTries) {
Serial.print("NTP unreachable!!");
while (1);
}
else {
Serial.print("Epoch received: ");
Serial.println(epoch);
rtc.setEpoch(epoch);
Serial.println();
}
//LEDs werden eingefügt + Farbkorrektur und Farbtemperatur auf Wolfram (warmweiß)
FastLED.addLeds<LED_TYPE, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection(TypicalPixelString);
FastLED.setTemperature( Tungsten40W );
Serial.println("Starte Wordclock ...");
}
void loop() {
// Am Anfang jeder Stunde soll die Uhrzeit abgeglichen werden
if (Minute<1) {
epoch = WiFi.getTime();
rtc.setEpoch(epoch);
}
int year=rtc.getYear();
byte hour=rtc.getHours();
byte day=rtc.getDay();
byte month=rtc.getMonth();
byte tzHours=1;
if (summertime_RAMsave(year, month, day, hour, tzHours))
GMT=2;
else GMT=1;
Minute = rtc.getMinutes();
int Std = rtc.getHours() + GMT;
if (Std > 12)
Stunde = Std - 12;
else if (Std == 0)
Stunde = 12;
else
Stunde = Std;
printTime(); //Serial Uhrzeit printer
displaytime(); //Ansteuerung der einzelnen LEDs
FastLED.delay(500);
}
Hier die Funktionsweise der displaytime():
void displaytime(void) {
//Rücksetzen aller LEDs
fill_solid( leds, NUM_LEDS, CHSV(0, 0, 0));
// Nun suchen wir die richtigen LEDs und übergeben sie an die Funktion zum Anschalten
SwitchLED(Es, (sizeof(Es) / 2));
SwitchLED(Ist, (sizeof(Ist) / 2));
hier die Definition der Worte und allgemeinen FastLED sachen:
FASTLED_USING_NAMESPACE
#define DATA_PIN 3
#define LED_TYPE WS2812B
#define COLOR_ORDER GRB
#define NUM_LEDS 114 // Gesamtanzahl der WS2812 LEDs
CRGB leds[NUM_LEDS];
int Es[] = {0, 1};
int Ist[] = {3, 4, 5};
wobei die SwitchLED() in Auszügen so aussieht:
void SwitchLED(int MyArray[], int n) {
//Funktion zum Anschalten der LEDs in warmweiß (oder gewünschter Farbe)
for (i = MyArray[0]; i < MyArray[0] + n; i++) {
FastLED.setBrightness(BRIGHTNESS);
leds[i].setRGB(255, 255, 255);
}
}
Das ganze funktioniert auf einem normalen Nano einwandfrei, aber aus irgendeinem Grund scheint das Signal nicht richtig anzukommen.
Beim LED-Test habe ich jede LED einzeln hintereinander anschalten lassen, das hat aber irgendwie Funktioniert?
Ich weiß leider nicht wonach ich suchen soll, vielleicht kann mir ja jemand von euch helfen!
Vielen lieben Dank vorab