I need help and advise, please.
Several years ago I made a wordclock using an Arduino nano and a RTC clock. It worked fine but my sketch quality was poor and the time change was a burden. I would like to change from RTC to NTP with an ESP32 Arduino Nano. I was able to change the sketch so to fetch NTP data, but I don't know how to use the time data in my old sketch. I would like to keep how my old wordclock works with the color change...
I don't if this is the good place for my request... But thanks in advance for your answer.
Bob
type or paste code here
```/*
Arduino nano + Neopixel Word Clock Code
Work version 28-1-2024 10-13
*/
//#include <DS1307RTC.h> //plus necessaire 2024RH
#include <Adafruit_NeoPixel.h>
//#include <avr/power.h>
#include "Time.h"
#include <WiFi.h>
#include <TimeLib.h>
#include <Wire.h>
const char* ssid = "netplus-xxxxx";
const char* password = "xxxx";
const char* ntpServer = "europe.pool.ntp.org";
const long gmtOffset_sec = 3600;
const int daylightOffset_sec = 3600;
// Which pin on the Arduino is connected to the NeoPixels?
#define PIN 6
// How many NeoPixels are attached to the Arduino?
#define NUMPIXELS 110
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
// Declare integer array with size corresponding to number of Neopixels in chain
int individualPixels[NUMPIXELS];
// Time variables
int h;
int m;
int s;
int ColChg = 10000; //Color change frequency for manual time update RH
int intSeconds;
void setup() {
Serial.begin(115200);
// Connect to Wi-Fi
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected.");
// Init and get the time
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
printLocalTime(); //void erreur?
// time_t makeTime(tmElements_t tm) ;
//disconnect WiFi as it's no longer needed
WiFi.disconnect(true);
WiFi.mode(WIFI_OFF);
}
void printLocalTime() {
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) {
Serial.println("Failed to obtain time");
return;
}
Serial.println(&timeinfo, "%A, %B %d %Y %H:%M:%S");
}
void loop() {
delay(1000);
printLocalTime();
//Declare integer array with size corresponding to number of Neopixels in chain
int individualPixels[NUMPIXELS] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
pixels.begin(); //Begin Neopixel string
Serial.begin(9600); //Begin Serial for debugging purposes
tmElements_t tm ;
/* Get current time */
h = tm.Hour; // Returns the hour of current time between 1-12
m = tm.Minute; // Returns the minute of current time
s = tm.Second; // Returns the second of current time (not used, included for completeness)
/* Parse time values to light corresponding pixels */
individualPixels[109] = 1; //Light "IL"
individualPixels[108] = 1;
individualPixels[104] = 1; //Light "EST"
individualPixels[105] = 1;
individualPixels[106] = 1;
/* Minutes between 5-10 or 55-60 - Light "CINQ_M" */
if ((tm.Minute >= 5 && tm.Minute < 10) || (tm.Minute >= 55 && tm.Minute < 60)) {
individualPixels[6] = 1;
individualPixels[7] = 1;
individualPixels[8] = 1;
individualPixels[9] = 1;
}
/* Minutes between 10-15 or 50-55 - Light "DIX_M" */
if ((tm.Minute >= 10 && tm.Minute < 15) || (tm.Minute >= 50 && tm.Minute < 55)) {
individualPixels[19] = 1;
individualPixels[20] = 1;
individualPixels[21] = 1;
}
/* Minutes between 15-20 or 45-50 - Light "ET QUART" */
if ((tm.Minute >= 15 && tm.Minute < 20)) {
individualPixels[34] = 1; // ET
individualPixels[35] = 1;
individualPixels[0] = 1; // QUART
individualPixels[1] = 1;
individualPixels[2] = 1;
individualPixels[3] = 1;
individualPixels[4] = 1;
}
/* Minutes between 15-20 or 45-50 - Light "QUART" */
if ((tm.Minute >= 45 && tm.Minute < 50)) {
individualPixels[0] = 1; // QUART
individualPixels[1] = 1;
individualPixels[2] = 1;
individualPixels[3] = 1;
individualPixels[4] = 1;
individualPixels[16] = 1;
individualPixels[17] = 1; // LE
}
/* Minutes between 20-25 or 40-45 - Light "VINGT_M" */
if ((tm.Minute >= 20 && tm.Minute < 25) || (tm.Minute >= 40 && tm.Minute < 45)) {
individualPixels[28] = 1;
individualPixels[29] = 1;
individualPixels[30] = 1;
individualPixels[31] = 1;
individualPixels[32] = 1;
}
/* Minutes between 25-30 or 35-40 - Light "VINGT CINQ_M" */
if ((tm.Minute >= 25 && tm.Minute < 30) || (tm.Minute >= 35 && tm.Minute < 40)) {
individualPixels[28] = 1;
individualPixels[29] = 1;
individualPixels[30] = 1;
individualPixels[31] = 1;
individualPixels[32] = 1;
individualPixels[6] = 1;
individualPixels[7] = 1;
individualPixels[8] = 1;
individualPixels[9] = 1;
}
/* Minutes between 30-35 - Light "ET DEMI" */
if ((tm.Minute >= 30 && tm.Minute < 35)) {
individualPixels[34] = 1;
individualPixels[35] = 1;
individualPixels[11] = 1;
individualPixels[12] = 1;
individualPixels[13] = 1;
individualPixels[14] = 1;
}
/* Minutes between 35-60 - Light "MOINS" & MODIFY CURRENT HOUR VALUE */
if (tm.Minute >= 35) {
tm.Hour++; //Add 1 from current hour
individualPixels[22] = 1;
individualPixels[23] = 1;
individualPixels[24] = 1;
individualPixels[25] = 1;
individualPixels[26] = 1; //"MOINS"
}
/*Set time to twelve for hour around MINUIT, */
if ((tm.Hour == 0) || (tm.Hour == 24)) {
individualPixels[37] = 1;
individualPixels[38] = 1;
individualPixels[39] = 1;
individualPixels[40] = 1;
individualPixels[41] = 1;
individualPixels[42] = 1; // "MINUIT"
// h=12;
}
/*Corner case for 12:35-12:59 */
if (tm.Hour == 24) {
h = 0;
}
/* Hour=1 - Light "UNE" */
if ((tm.Hour == 1) || (tm.Hour == 13)) {
individualPixels[66] = 1;
individualPixels[67] = 1;
individualPixels[68] = 1; //UNE
individualPixels[49] = 1;
individualPixels[50] = 1;
individualPixels[51] = 1;
individualPixels[52] = 1;
individualPixels[53] = 1; //HEURE
}
/* Hour=2 - Light "DEUX" */
if ((tm.Hour == 2) || (tm.Hour == 14)) {
individualPixels[99] = 1;
individualPixels[100] = 1;
individualPixels[101] = 1;
individualPixels[102] = 1; //DEUX
individualPixels[49] = 1;
individualPixels[50] = 1;
individualPixels[51] = 1;
individualPixels[52] = 1;
individualPixels[53] = 1;
individualPixels[54] = 1; //HEURES
}
/* Hour=3 - Light "TROIS" */
if ((tm.Hour == 3) || (tm.Hour == 15)) {
individualPixels[56] = 1;
individualPixels[57] = 1;
individualPixels[58] = 1;
individualPixels[59] = 1; //TROIS
individualPixels[60] = 1;
individualPixels[49] = 1;
individualPixels[50] = 1;
individualPixels[51] = 1;
individualPixels[52] = 1;
individualPixels[53] = 1;
individualPixels[54] = 1; //HEURES
}
/* Hour=4 - Light "QUATRE" */
if ((tm.Hour == 4) || (tm.Hour == 16)) {
individualPixels[88] = 1;
individualPixels[89] = 1;
individualPixels[90] = 1;
individualPixels[91] = 1;
individualPixels[92] = 1; //QUATRE
individualPixels[93] = 1;
individualPixels[49] = 1;
individualPixels[50] = 1;
individualPixels[51] = 1;
individualPixels[52] = 1;
individualPixels[53] = 1;
individualPixels[54] = 1; //HEURES
}
/* Hour=5 - Light "CINQ" */
if ((tm.Hour == 5) || (tm.Hour == 17)) {
individualPixels[95] = 1;
individualPixels[96] = 1;
individualPixels[97] = 1;
individualPixels[98] = 1; //CINQ
individualPixels[49] = 1;
individualPixels[50] = 1;
individualPixels[51] = 1;
individualPixels[52] = 1;
individualPixels[53] = 1;
individualPixels[54] = 1; //HEURES
}
/* Hour=6 - Light "SIX" */
if ((tm.Hour == 6) || (tm.Hour == 18)) {
individualPixels[85] = 1;
individualPixels[86] = 1;
individualPixels[87] = 1; //SIX
individualPixels[49] = 1;
individualPixels[50] = 1;
individualPixels[51] = 1;
individualPixels[52] = 1;
individualPixels[53] = 1;
individualPixels[54] = 1; //HEURES
}
/* Hour=7 - Light "SEPT" */
if ((tm.Hour == 7) || (tm.Hour == 19)) {
individualPixels[70] = 1;
individualPixels[71] = 1;
individualPixels[72] = 1;
individualPixels[73] = 1; //SEPT
individualPixels[49] = 1;
individualPixels[50] = 1;
individualPixels[51] = 1;
individualPixels[52] = 1;
individualPixels[53] = 1;
individualPixels[54] = 1; //HEURES
}
/* Hour=8 - Light "HUIT" */
if ((tm.Hour == 8) || (tm.Hour == 20)) {
individualPixels[62] = 1;
individualPixels[63] = 1;
individualPixels[64] = 1;
individualPixels[65] = 1; //HUIT
individualPixels[49] = 1;
individualPixels[50] = 1;
individualPixels[51] = 1;
individualPixels[52] = 1;
individualPixels[53] = 1;
individualPixels[54] = 1; //HEURES
}
/* Hour=9 - Light "NEUF" */
if ((tm.Hour == 9) || (tm.Hour == 21)) {
individualPixels[81] = 1;
individualPixels[82] = 1;
individualPixels[83] = 1;
individualPixels[84] = 1; //NEUF
individualPixels[49] = 1;
individualPixels[50] = 1;
individualPixels[51] = 1;
individualPixels[52] = 1;
individualPixels[53] = 1;
individualPixels[54] = 1; //HEURES
}
/* Hour=10 - Light "DIX" */
if ((tm.Hour == 10) || (tm.Hour == 22)) {
individualPixels[74] = 1;
individualPixels[75] = 1;
individualPixels[76] = 1; //DIX
individualPixels[49] = 1;
individualPixels[50] = 1;
individualPixels[51] = 1;
individualPixels[52] = 1;
individualPixels[53] = 1;
individualPixels[54] = 1; //HEURES
}
/* Hour=11 - Light "ONZE" */
if ((tm.Hour == 11) || (tm.Hour == 23)) {
individualPixels[77] = 1;
individualPixels[78] = 1;
individualPixels[79] = 1;
individualPixels[80] = 1; //ONZE
individualPixels[49] = 1;
individualPixels[50] = 1;
individualPixels[51] = 1;
individualPixels[52] = 1;
individualPixels[53] = 1;
individualPixels[54] = 1; //HEURES
}
/* Hour=12 - Light "TWELVE" */
if (tm.Hour == 12) {
individualPixels[45] = 1;
individualPixels[46] = 1;
individualPixels[47] = 1;
individualPixels[48] = 1; //"MIDI"
}
// RGB color variables
int red = random(1, 80);
int green = random(1, 80);
int blue = random(1, 80);
delay(ColChg);
/* Light pixels corresponding to current time */
for (int i = 0; i < sizeof(individualPixels); i++) {
if (individualPixels[i] == 1) {
pixels.setPixelColor(i, pixels.Color(red, green, blue)); //Set Neopixel color
} else {
pixels.setPixelColor(i, pixels.Color(0, 0, 0));
}
}
pixels.show(); //Display Neopixel color
}
type or paste code here
2 posts - 2 participants