Hi everyone, I have a question and I can't seem to find the answer for myself, so I'll have to turn to the experts on this forum:
For my school, I'm making a project: a letter clock. Basically, it's 94 LEDs of a 30 LEDs per meter WS 2812 B LED strip connected in 9 rows of 10 LEDs and a lower row of 4 LEDs. I'm using a DS 3231 RTC for controlling the time. Basically, the code works, so I could put together the whole clock and hang it on a wall, but the problem is that I can't change the time without disassembling the clock. But when we have to change the time for daylight saving time or when the clock hasn't had enough power for a certain time I just want to be able to change the time. What I wan't is to add 2 buttons: one to add 1 minute to the time and the second to add one hour to the time. The setup I have now, without the buttons, is as the image below:
The program/code I have written so far is as follows (it has some Dutch in it because it's for a Dutch letter clock):
[code]
#include <RealTimeClockDS3231.h>
#include <Adafruit_NeoPixel.h>
#include <Wire.h>
#define PixelCount 94 // Number of pixels
#define PixelPin 6 // Data output pin for pixels
#define pixelR 50
#define pixelG 0
#define pixelB 250
char formatted[] = "Clock Was Not Set. "; // *Do not alter (reduce) length of array
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(PixelCount, PixelPin, NEO_GRB + NEO_KHZ800);
void clearDisplay() {
for (byte a = 0; a < PixelCount; a++) {
pixels.setPixelColor(a, 0x00000000);
}
}
void setup() {
Serial.begin(115200);
// Serial.print(F(_FILE_)); // Always display sketch name and date info
Serial.print("\t");
// Serial.print(F(_DATE_));
Serial.print("\t");
// Serial.println(F(_TIME_));
pixels.begin();
RTC.readClock(); // Read the clock
RTC.writeData(0x0E, 0x00); // Enable 1Hz output on INT pin
// if(RTC.getYear() == 0)//{ // If Year = 0 then clock probably not set
Serial.println(F("Set Clock"));
// Load some values
RTC.setHours(21);
RTC.setMinutes(56);
RTC.setSeconds(30);
RTC.setDate(27);
RTC.setMonth(03);
RTC.setYear(22);
RTC.setDayOfWeek(7);
RTC.setClock();
// }
RTC.getFormatted2k(formatted);
Serial.println(formatted);
}
void loop() {
delay(1000);
doTime(); // Display the updated time
}
void doTime() {
static int lastM = -1; // We are only interested in minute boundries but we get called every second
RTC.readClock(); // Read the RTC
int h = RTC.getHours(); // Get the hour
int m = RTC.getMinutes(); // Get the minute
if (m == lastM) { // Has Minute value changed since last time?
return; // No, so return
}
lastM = m; // Set last minute to current minute
if ((m % 1) == 0) { // Only on the 1 minute boundries
clearDisplay(); // Clear display buffer
het_is(); // Always start with an 'It's'
// 5 minute boundrys
switch (m) {
case 0: // Top of the hour so it's hour o'clock
uur(); // O'clock
break;
case 1: // one minute boundry
uur();
min1();
break;
case 2: // one minute boundry
uur();
min2();
break;
case 3: // one minute boundry
uur();
min3();
break;
case 4: // one minute boundry
uur();
min4();
break;
case 5: // For 5-9 minutes
vijf_min(); // 'five'. It's five minutes past the hour
over();
break;
case 6: // For 5-9 minutes
vijf_min(); // 'five'. It's five minutes past the hour
over();
min1();
break;
case 7: // For 5-9 minutes
vijf_min(); // 'five'. It's five minutes past the hour
over();
min2();
break;
case 8: // For 5-9 minutes
vijf_min(); // 'five'. It's five minutes past the hour
over();
min3();
break;
case 9: // For 5-9 minutes
vijf_min(); // 'five'. It's five minutes past the hour
over();
min4();
break;
case 10: // 10-14, 50-54
tien_min(); // 'ten'. It's ten minutes past the hour
over();
break;
case 11: // For 5-9 minutes
tien_min(); // 'five'. It's five minutes past the hour
over();
min1();
break;
case 12: // For 5-9 minutes
tien_min(); // 'five'. It's five minutes past the hour
over();
min2();
break;
case 13: // For 5-9 minutes
tien_min(); // 'five'. It's five minutes past the hour
over();
min3();
break;
case 14: // For 5-9 minutes
tien_min(); // 'five'. It's five minutes past the hour
over();
min4();
break;
case 15: //
kwart(); // 'quarter'
over();
break;
case 16: // For 5-9 minutes
kwart(); // 'five'. It's five minutes past the hour
over();
min1();
break;
case 17: // For 5-9 minutes
kwart(); // 'five'. It's five minutes past the hour
over();
min2();
break;
case 18: // For 5-9 minutes
kwart(); // 'five'. It's five minutes past the hour
over();
min3();
break;
case 19: // For 5-9 minutes
kwart(); // 'five'. It's five minutes past the hour
over();
min4();
break;
case 20: // 20-24
tien_min();
voor();
half();
break;
case 21: // For 5-9 minutes
tien_min();
voor();
half();
min1();
break;
case 22: // For 5-9 minutes
tien_min();
voor();
half();
min2();
break;
case 23: // For 5-9 minutes
tien_min();
voor();
half();
min3();
break;
case 24: // For 5-9 minutes
tien_min();
voor();
half();
min4();
break;
case 25:
vijf_min();
voor();
half();
break;
case 26: // For 5-9 minutes
vijf_min();
voor();
half();
min1();
break;
case 27: // For 5-9 minutes
vijf_min();
voor();
half();
min2();
break;
case 28: // For 5-9 minutes
vijf_min();
voor();
half();
min3();
break;
case 29: // For 5-9 minutes
vijf_min();
voor();
half();
min4();
break;
case 30:
half();
break;
case 31: // For 5-9 minutes
half();
min1();
break;
case 32: // For 5-9 minutes
half();
min2();
break;
case 33: // For 5-9 minutes
half();
min3();
break;
case 34: // For 5-9 minutes
half();
min4();
break;
case 35:
vijf_min();
over();
half();
break;
case 36: // For 5-9 minutes
vijf_min();
over();
half();
min1();
break;
case 37: // For 5-9 minutes
vijf_min();
over();
half();
min2();
break;
case 38: // For 5-9 minutes
vijf_min();
over();
half();
min3();
break;
case 39: // For 5-9 minutes
vijf_min();
over();
half();
min4();
break;
case 40:
tien_min(); // Twenty minutes past/to hour
over();
half();
case 41: // For 5-9 minutes
tien_min(); // Twenty minutes past/to hour
over();
half();
min1();
break;
case 42: // For 5-9 minutes
tien_min(); // Twenty minutes past/to hour
over();
half();
min2();
break;
case 43: // For 5-9 minutes
tien_min(); // Twenty minutes past/to hour
over();
half();
min3();
break;
case 44: // For 5-9 minutes
tien_min(); // Twenty minutes past/to hour
over();
half();
min4();
break;
case 45:
kwart();
voor();
break;
case 46: // For 5-9 minutes
kwart(); // Twenty minutes past/to hour
voor();
min1();
break;
case 47: // For 5-9 minutes
kwart(); // Twenty minutes past/to hour
voor();
min2();
break;
case 48: // For 5-9 minutes
kwart(); // Twenty minutes past/to hour
voor();
min3();
break;
case 49: // For 5-9 minutes
kwart(); // Twenty minutes past/to hour
voor();
min4();
break;
case 50:
tien_min();
voor();
break;
case 51: // For 5-9 minutes
tien_min(); // Twenty minutes past/to hour
voor();
min1();
break;
case 52: // For 5-9 minutes
tien_min(); // Twenty minutes past/to hour
voor();
min2();
break;
case 53: // For 5-9 minutes
tien_min(); // Twenty minutes past/to hour
voor();
min3();
break;
case 54: // For 5-9 minutes
tien_min(); // Twenty minutes past/to hour
voor();
min4();
break;
case 55:
vijf_min();
voor();
break;
case 56: // For 5-9 minutes
vijf_min(); // Twenty minutes past/to hour
voor();
min1();
break;
case 57: // For 5-9 minutes
vijf_min(); // Twenty minutes past/to hour
voor();
min2();
break;
case 58: // For 5-9 minutes
vijf_min(); // Twenty minutes past/to hour
voor();
min3();
break;
case 59: // For 5-9 minutes
vijf_min(); // Twenty minutes past/to hour
voor();
min4();
break;
}
if (m > 19) // Greater than 20 minutes past the hour so we need to talk about the next hour
h++;
uint8_t mod = (h % 12); // Ensure hour is between 0 and 11 on 24 hour clock
switch (mod) {
case 0:
twaalf(); // Top of the hour
break;
case 1:
een();
break;
case 2:
twee();
break;
case 3:
drie();
break;
case 4:
vier();
break;
case 5:
vijf();
break;
case 6:
zes();
break;
case 7:
zeven();
break;
case 8:
acht();
break;
case 9:
negen();
break;
case 10:
tien();
break;
case 11:
elf();
break;
}
pixels.show();
}
}
void het_is() {
pixels.setPixelColor(0, pixelR, pixelG, pixelB);
pixels.setPixelColor(1, pixelR, pixelG, pixelB);
pixels.setPixelColor(2, pixelR, pixelG, pixelB);
pixels.setPixelColor(5, pixelR, pixelG, pixelB);
pixels.setPixelColor(6, pixelR, pixelG, pixelB);
}
void uur() {
pixels.setPixelColor(87, pixelR, pixelG, pixelB);
pixels.setPixelColor(88, pixelR, pixelG, pixelB);
pixels.setPixelColor(89, pixelR, pixelG, pixelB);
}
void vijf_min() {
pixels.setPixelColor(15, pixelR, pixelG, pixelB);
pixels.setPixelColor(16, pixelR, pixelG, pixelB);
pixels.setPixelColor(17, pixelR, pixelG, pixelB);
pixels.setPixelColor(18, pixelR, pixelG, pixelB);
}
void tien_min() {
pixels.setPixelColor(11, pixelR, pixelG, pixelB);
pixels.setPixelColor(12, pixelR, pixelG, pixelB);
pixels.setPixelColor(13, pixelR, pixelG, pixelB);
pixels.setPixelColor(14, pixelR, pixelG, pixelB);
}
void kwart() {
pixels.setPixelColor(20, pixelR, pixelG, pixelB);
pixels.setPixelColor(21, pixelR, pixelG, pixelB);
pixels.setPixelColor(22, pixelR, pixelG, pixelB);
pixels.setPixelColor(23, pixelR, pixelG, pixelB);
pixels.setPixelColor(24, pixelR, pixelG, pixelB);
}
void over() {
pixels.setPixelColor(26, pixelR, pixelG, pixelB);
pixels.setPixelColor(27, pixelR, pixelG, pixelB);
pixels.setPixelColor(28, pixelR, pixelG, pixelB);
pixels.setPixelColor(29, pixelR, pixelG, pixelB);
}
void voor() {
pixels.setPixelColor(35, pixelR, pixelG, pixelB);
pixels.setPixelColor(36, pixelR, pixelG, pixelB);
pixels.setPixelColor(37, pixelR, pixelG, pixelB);
pixels.setPixelColor(38, pixelR, pixelG, pixelB);
}
void half() {
pixels.setPixelColor(30, pixelR, pixelG, pixelB);
pixels.setPixelColor(31, pixelR, pixelG, pixelB);
pixels.setPixelColor(32, pixelR, pixelG, pixelB);
pixels.setPixelColor(33, pixelR, pixelG, pixelB);
}
void een() {
pixels.setPixelColor(80, pixelR, pixelG, pixelB);
pixels.setPixelColor(81, pixelR, pixelG, pixelB);
pixels.setPixelColor(82, pixelR, pixelG, pixelB);
}
void twee() {
pixels.setPixelColor(43, pixelR, pixelG, pixelB);
pixels.setPixelColor(44, pixelR, pixelG, pixelB);
pixels.setPixelColor(45, pixelR, pixelG, pixelB);
pixels.setPixelColor(46, pixelR, pixelG, pixelB);
}
void drie() {
pixels.setPixelColor(56, pixelR, pixelG, pixelB);
pixels.setPixelColor(57, pixelR, pixelG, pixelB);
pixels.setPixelColor(58, pixelR, pixelG, pixelB);
pixels.setPixelColor(59, pixelR, pixelG, pixelB);
}
void vier() {
pixels.setPixelColor(76, pixelR, pixelG, pixelB);
pixels.setPixelColor(77, pixelR, pixelG, pixelB);
pixels.setPixelColor(78, pixelR, pixelG, pixelB);
pixels.setPixelColor(79, pixelR, pixelG, pixelB);
}
void vijf() {
pixels.setPixelColor(83, pixelR, pixelG, pixelB);
pixels.setPixelColor(84, pixelR, pixelG, pixelB);
pixels.setPixelColor(85, pixelR, pixelG, pixelB);
pixels.setPixelColor(86, pixelR, pixelG, pixelB);
}
void zes() {
pixels.setPixelColor(47, pixelR, pixelG, pixelB);
pixels.setPixelColor(48, pixelR, pixelG, pixelB);
pixels.setPixelColor(49, pixelR, pixelG, pixelB);
}
void zeven() {
pixels.setPixelColor(61, pixelR, pixelG, pixelB);
pixels.setPixelColor(62, pixelR, pixelG, pixelB);
pixels.setPixelColor(63, pixelR, pixelG, pixelB);
pixels.setPixelColor(64, pixelR, pixelG, pixelB);
pixels.setPixelColor(65, pixelR, pixelG, pixelB);
}
void acht() {
pixels.setPixelColor(40, pixelR, pixelG, pixelB);
pixels.setPixelColor(41, pixelR, pixelG, pixelB);
pixels.setPixelColor(42, pixelR, pixelG, pixelB);
pixels.setPixelColor(43, pixelR, pixelG, pixelB);
}
void negen() {
pixels.setPixelColor(65, pixelR, pixelG, pixelB);
pixels.setPixelColor(66, pixelR, pixelG, pixelB);
pixels.setPixelColor(67, pixelR, pixelG, pixelB);
pixels.setPixelColor(68, pixelR, pixelG, pixelB);
pixels.setPixelColor(69, pixelR, pixelG, pixelB);
}
void tien() {
pixels.setPixelColor(50, pixelR, pixelG, pixelB);
pixels.setPixelColor(51, pixelR, pixelG, pixelB);
pixels.setPixelColor(52, pixelR, pixelG, pixelB);
pixels.setPixelColor(53, pixelR, pixelG, pixelB);
}
void elf() {
pixels.setPixelColor(54, pixelR, pixelG, pixelB);
pixels.setPixelColor(55, pixelR, pixelG, pixelB);
pixels.setPixelColor(56, pixelR, pixelG, pixelB);
}
void twaalf() {
pixels.setPixelColor(70, pixelR, pixelG, pixelB);
pixels.setPixelColor(71, pixelR, pixelG, pixelB);
pixels.setPixelColor(72, pixelR, pixelG, pixelB);
pixels.setPixelColor(73, pixelR, pixelG, pixelB);
pixels.setPixelColor(74, pixelR, pixelG, pixelB);
pixels.setPixelColor(75, pixelR, pixelG, pixelB);
}
void min1() {
pixels.setPixelColor(93, pixelR, pixelG, pixelB);
}
void min2() {
pixels.setPixelColor(92, pixelR, pixelG, pixelB);
pixels.setPixelColor(93, pixelR, pixelG, pixelB);
}
void min3() {
pixels.setPixelColor(91, pixelR, pixelG, pixelB);
pixels.setPixelColor(92, pixelR, pixelG, pixelB);
pixels.setPixelColor(93, pixelR, pixelG, pixelB);
}
void min4() {
pixels.setPixelColor(90, pixelR, pixelG, pixelB);
pixels.setPixelColor(91, pixelR, pixelG, pixelB);
pixels.setPixelColor(92, pixelR, pixelG, pixelB);
pixels.setPixelColor(93, pixelR, pixelG, pixelB);
}
[/code]
I hope you can help me with this question. I think the library I'm using might be the problem, but I'm not sure. Please help.

