Hallo zusammen
Ich verzweifle noch an meinem Code… Bin eher neu im ganzen Programmieren mit Arduino und co.
Nun habe ich einige WordClock Codes angeschaut und versuche diese nachzubauen um diese auch zu verstehen. Natürlich nun noch auf meine RGBW SK6812 LED abgestimmt. Da RGBW nicht mit FastLed geht bin ich nun mit NeoPixel weiter gekommen… soweit so gut.
Was mich aber zur Verzweiflung bringt ist das mein Code irgend wo einen Fehler hat oder dies einfach nicht so geht mit meinem Arduino Nano.
Im unteren Teil des Codes möchte ich die Buchstaben für die Stunden per Case ausgeben ( mit IF abfragen ists auch gescheitert).
Nun wenn ich aber bei egal welchem CASE das Array arrH9 ( oder 4-12) einsetze geht das ganze nicht mehr…
Wenn ich aber arrH1 / arrH2 oder arrH3 einsetze geht das ganze ohne Probleme…
Programm wird hochgeladen aber void Setup wird nicht durchlaufen da die LED’s sonst ablöschen sollten… → Die Uhr friert ein…
Kann mir hier irgend wer weiter helfen?
Gruss
Philipp
#include <Adafruit_NeoPixel.h>
#include <Wire.h>
#include "RTClib.h"
RTC_DS3231 rtc;
#define BRIGHTNESSDAY 255 // full on
#define BRIGHTNESSNIGHT 55 // half on
#define PIN 5
#define NUMPIXELS 114
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRBW + NEO_KHZ800);
uint32_t R, G, B, W = pixels.Color(0, 0, 0, 255);
uint32_t colorBlack = pixels.Color(0, 0, 0, 0);
uint32_t colorRed = pixels.Color(255, 0, 0, 0);
uint32_t colorGreen = pixels.Color(0, 255, 0, 0);
uint32_t colorBlue = pixels.Color(0, 0, 255, 0);
uint32_t colorJGreen = pixels.Color(50, 179, 30, 0);
int mm1 = 0;
int hh = 0;
int mm = 0;
int ss = 0;
int mm5erRest = 0;
int mm5er = 0;
int hhdisplay = 0;
int arrES[] = {10, 9, -1}; // ES
int arrISCH[] = {7, 6, 5, 4, -1}; // ISCH
int arrMIN1[] = {112, -1}; // Minute Oben Links
int arrMIN2[] = {112, 113, -1}; // Minute OBL + OBR
int arrMIN3[] = {112, 113, 110, -1}; // Minute OBL + OBR + UR
int arrMIN4[] = {112, 113, 110, 111, -1}; // Minute OBL + OBR + UR +UL
int arrFUF[] = {0, 1, 2, -1}; // Füf
int arrZAEAE[] = {19, 20, 21, -1}; // Zää
int arrVIERTU[] = {11, 12, 13, 14, 15, 16, -1}; // Viertu
int arrZWAENZG[] = {27, 28, 29, 30, 31, 32, -1}; // Zwänzg
int arrHAUBI[] = {36, 37, 38, 39, 40, -1}; // Haubi
int arrUHR[] = {107, 108, 109, -1}; // Uhr
int arrAB[] = {33, 34, -1}; // Ab
int arrVOR[] = {22, 23, 24, -1};
int arrH1[] = {52, 53, 54, -1};
int arrH2[] = {48, 49, 50, 51, -1};
int arrH3[] = {44, 45, 46, -1};
int arrH4[] = {56, 57, 58, 59, 60, -1};
int arrH5[] = {61, 62, 63, 64, -1};
int arrH6[] = {72, 73, 74, 75, 76, 77, -1};
int arrH7[] = {67, 68, 69, 70, 71, -1};
int arrH8[] = {78, 79, 80, 81, 82, -1};
int arrH9[] = {83, 84, 85, 86, -1};
int arrH10[] = {96, 97, 98, 99, -1};
int arrH11[] = {89, 90, 91, 92, -1};
int arrH12[] = {100, 101, 102, 103, 104, 105, -1};
void setup() {
if (! rtc.begin()) {
while (1);
}
if (rtc.lostPower()) {
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
// This line sets the RTC with an explicit date & time, for example to set
// January 21, 2014 at 3am you would call:
// rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
}
pixels.setBrightness(BRIGHTNESSDAY);
pixels.begin();
delay(2000);
}
void loop() {
DateTime now = rtc.now();
hh = now.hour(), DEC;
mm = now.minute(), DEC;
ss = now.second(), DEC;
int R = 255;
int G = 0;
int B = 0;
int W = 0;
if (mm != mm1 ) {
pixels.clear();
mm5erRest = mm % 5;
mm5er = mm - mm5erRest;
if (hh >= 13) {
hhdisplay = hh - 12;
}
if (mm5erRest == 1) {
// Oben Links
paintWord(arrMIN1, R, G, B, W);
}
else if (mm5erRest == 2) {
// Oben Links
paintWord(arrMIN1, R, G, B, W);
// Oben Rechts
paintWord(arrMIN2, R, G, B, W);
}
else if (mm5erRest == 3) {
paintWord(arrMIN1, R, G, B, W);
// Oben Rechts
paintWord(arrMIN2, R, G, B, W);
// Unten Rechts
paintWord(arrMIN3, R, G, B, W);
}
else if (mm5erRest == 4) {
paintWord(arrMIN1, R, G, B, W);
// Oben Rechts
paintWord(arrMIN2, R, G, B, W);
// Unten Rechts
paintWord(arrMIN3, R, G, B, W);
// Unten Links
paintWord(arrMIN4, R, G, B, W);
}
if (mm5er == 5 || mm5er == 25 || mm5er == 35 || mm5er == 55) {
//FÜF
paintWord(arrFUF, R, G, B, W);
}
if (mm5er == 10 || mm5er == 50) {
//ZÄÄ
paintWord(arrZAEAE, R, G, B, W);
}
if (mm5er == 15 || mm5er == 45) {
//VIERTU
paintWord(arrVIERTU, R, G, B, W);
}
if (mm5er == 20 || mm5er == 40) {
//ZWÄNZG
paintWord(arrZWAENZG, R, G, B, W);
}
if (mm5er == 25 || mm5er == 30 || mm5er == 35) {
//HAUBI
paintWord(arrHAUBI, R, G, B, W);
}
//if (mm5er == 0) {
//for (int i = 107; i <= 109; i++) {
//UHR
//paintWord(arrUHR, R, G, B, W);
//}
// }
if (mm5er == 5 || mm5er == 10 || mm5er == 15 || mm5er == 20 || mm5er == 35) {
//AB
paintWord(arrAB, R, G, B, W);
}
if (mm5er == 25 || mm5er == 40 || mm5er == 45 || mm5er == 50 || mm5er == 55) {
//VOR
paintWord(arrVOR, R, G, B, W);
}
hhdisplay = hh;
if (mm >= 25) { // ab der 25 Minuten ist es immer "vor" der nächsetn Stunde
if (hh == 0 || hh == 12) { // bei 12 Uhr vor "Ein" Uhr
hhdisplay = 1;
}
else
hhdisplay = hh + 1;
}
switch (hhdisplay) {
case 1:
case 13:
paintWord(arrH1, R, G, B, W);
break;
case 2:
case 14:
paintWord(arrH2, R, G, B, W);
break;
case 3:
case 15:
paintWord(arrH3, R, G, B, W);
break;
case 4:
case 16:
paintWord(arrH4, R, G, B, W);
break;
case 5:
case 17:
paintWord(arrH5, R, G, B, W);
break;
case 6:
case 18:
paintWord(arrH6, R, G, B, W);
break;
case 7:
case 19:
paintWord(arrH7, R, G, B, W);
break;
case 8:
case 20:
paintWord(arrH8, R, G, B, W);
break;
case 9:
case 21:
paintWord(arrH9, R, G, B, W);
break;
case 10:
case 22:
paintWord(arrH10, R, G, B, W);
break;
case 11:
case 23:
paintWord(arrH11, R, G, B, W);
break;
case 0:
case 12:
case 24:
paintWord(arrH12, R, G, B, W);
break;
}
paintWord(arrES, R, G, B, W);
paintWord(arrISCH, R, G, B, W);
}
mm1 = mm;
}
void paintWord(int arrWord[], int R, int G, int B, int W) {
for (int i = 0; i < pixels.numPixels() + 1; i++) {
if (arrWord[i] == -1) {
pixels.show();
break;
} else {
pixels.setPixelColor(arrWord[i], R, G, B, W);
}
}
}