Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Wire.h>
- #include <Adafruit_GFX.h>
- #include <Adafruit_SSD1306.h>
- //#include <WiFi.h>
- #include <FastLED.h>
- //unsigned long currentMillis = 0;
- //unsigned long lastSyncMillis = 0;
- //const unsigned long syncInterval = 3600000; // 1 ora in millisecondi
- //const char* ssid = "FRITZ!Box 7530 DP";
- //const char* password = "ciaocaterina1@";
- //const char* ntpServer = "pool.ntp.org";
- #define BUTTON_PIN 0 // BOOT button
- #define LONG_PRESS_TIME 1500 // ms
- #define TIMEOUT_SELECTION 10000 // ms
- #define SCREEN_WIDTH 128
- #define SCREEN_HEIGHT 32
- #define OLED_RESET -1
- Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
- #define LED_PIN 5
- #define NUM_LEDS 4
- #define BRIGHTNESS 64
- #define LED_TYPE WS2812B
- #define COLOR_ORDER RGB
- CRGB leds[NUM_LEDS];
- const int NumLang = 4;
- const int NumMsg = 38;
- const int NumHour = 24;
- const int NumMin = 60;
- const int NumSec = 60;
- const char* nomiLingue[] = { "Italiano", "English", "Espanol", "Francais"};
- int LinguaSelezionata = 1;
- enum MsgType {
- MSG_START,
- MSG_SELLANG,
- MSG_INSTRUCTIONS,
- MSG_INITHOURS,
- MSG_INITHOUR,
- MSG_FINHOURS,
- MSG_FINHOUR,
- MSG_MIN5,
- MSG_MIN10,
- MSG_MIN15,
- MSG_MIN20,
- MSG_MIN25,
- MSG_MIN30,
- MSG_MIN35,
- MSG_MIN40,
- MSG_MIN45,
- MSG_MIN50,
- MSG_MIN55,
- MSG_HOUR1,
- MSG_HOUR2,
- MSG_HOUR3,
- MSG_HOUR4,
- MSG_HOUR5,
- MSG_HOUR6,
- MSG_HOUR7,
- MSG_HOUR8,
- MSG_HOUR9,
- MSG_HOUR10,
- MSG_HOUR11,
- MSG_HOUR12AM,
- MSG_HOUR12PM,
- MSG_HOURPRECISE,
- MSG_HOURAM,
- MSG_HOURPM,
- MSG_TIMEUPD,
- MSG_WIFIERR,
- MSG_WIFIOK,
- MSG_WIFICONN,
- };
- const char* MESSAGES[NumMsg][NumLang] = {
- {"Avvio programma", "Starting program", "Iniciar programa", "Demarrage du programme"},
- {"Selezionata lingua: ", "Selected language: ", "Idioma seleccionado: ", "Langue sélectionnee: "},
- {"premi per cambiare, tieni premuto per conferma", "press to change, hold to confirm", "pulsa para cambiar, mantén pulsado para confirmar", "appuyez pour changer, maintenez enfoncé pour confirmer"},
- {"SONO LE ", "IT IS ", "SON LAS ", "IL EST "},
- {"E' L'", "IT IS ", "ES LA ", "IL EST "},
- {"", "", "", " HEURES"},
- {"", "", "", " HEURE"},
- {"E CINQUE", "FIVE PAST ", "Y CINCO", "ET CINQ"},
- {"E DIECI", "TEN PAST ", "Y DIEZ", "DIX"},
- {"E UN QUARTO", "QUARTER PAST ", "Y CUARTO", "ET QUART"},
- {"E VENTI", "TWENTY PAST ", "Y VEINTE", "VINGT"},
- {"E VENTICINQUE", "TWENTYFIVE PAST ", "Y VEINTICINCO", "VINGT-CINQ"},
- {"E TRENTA", "HALF PAST ", "Y MEDIA", "ET DEMIE"},
- {"E TRENTACINQUE", "TWENTYFIVE TO ", "MENOS VEINTICINCO", "MOINS VINGT-CINQ"},
- {"MENO VENTI", "TWENTY TO ", "MENOS VEINTE", "MOINS VINGT"},
- {"MENO UN QUARTO", "A QUARTER TO ", "MENOS CUARTO", "MOINS LE QUART"},
- {"MENO DIECI", "TEN TO ", "MENOS DIEZ", "MOINS DIX"},
- {"MENO CINQUE", "FIVE TO ", "MENOS CINCO", "MOINS CINQ"},
- {"UNA", "ONE", "UNA", "UNE"},
- {"DUE", "TWO", "DOS", "DEUX"},
- {"TRE", "THREE", "TRES", "TROIS"},
- {"QUATTRO", "FOUR", "CUATRO", "QUATRE"},
- {"CINQUE", "FIVE", "CINCO", "CINQ"},
- {"SEI", "SIX", "SEIS", "SIX"},
- {"SETTE", "SEVEN", "SIETE", "SIETE"},
- {"OTTO", "EIGHT", "OCHO", "HUITS"},
- {"NOVE", "NINE", "NUEVE", "NEUF"},
- {"DIECI", "TEN", "DIEZ", "DIX"},
- {"UNDICI", "ELEVEN", "ONCE", "ONZE"},
- {"DODICI", "TWELVE", "DOCE", "MIDI"},
- {"DODICI", "TWELVE", "DOCE", "MINUIT"},
- {"", " O'CLOCK", "", ""},
- {" ", "AM", "AM", "AM"},
- {" ", "PM", "PM", "PM"},
- {"Orario sincronizzato", "Time syncronized", "Tiempo sincronizado", "Heure sincronizee"},
- {"Impossibile connettere a rete: ", "Impossible connection to network: ", "Imposible conectarse a la red: ", "Impossible de se connecter au réseau: "},
- {"Connesso a rete: ", "Connected to network: ", "Conectado a la red: ", "Connecté au réseau: "},
- {"Connessione WiFi in corso:", "WiFi connection in progress:", "Conexión WiFi en curso:", "Connexion WiFi en cours:"},
- };
- int minuti = -1;
- int ore = -1;
- int secondi = 0;
- static int ultimiminutiStamp = -1;
- static int ultimaOraStamp = -1;
- static int ultimipalliniStamp = -1;
- void setup() {
- Serial.begin(9600);
- Wire.begin();
- if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
- Serial.println("Errore display");
- }
- display.clearDisplay();
- display.setTextSize(1);
- display.setTextColor(SSD1306_WHITE);
- LinguaSelezionata = selezionaLingua();
- display.clearDisplay();
- display.setCursor(0, 0);
- display.println(MESSAGES[MSG_SELLANG][LinguaSelezionata]);
- display.print(nomiLingue[LinguaSelezionata]);
- display.display();
- delay(1500);
- display.clearDisplay();
- display.setCursor(0, 0);
- display.print(MESSAGES[MSG_START][LinguaSelezionata]);
- display.setCursor(0,16);
- display.setTextSize(2);
- display.print("QLOCKTWO");
- display.display();
- delay(2000);
- display.setTextSize(1);
- display.clearDisplay();
- display.display();
- /*
- WiFi.mode(WIFI_STA);
- WiFi.begin(ssid, password);
- unsigned long startAttemptTime = millis();
- while (WiFi.status() != WL_CONNECTED && millis() - startAttemptTime < 20000) {
- ConnessioneWifi();
- }
- if (WiFi.status() != WL_CONNECTED) {
- ErroreWifi();
- }
- else{
- WiFiConnesso();
- }
- */
- FastLED.addLeds<LED_TYPE, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS);
- FastLED.setBrightness(BRIGHTNESS);
- FastLED.clear();
- FastLED.show();
- /*
- configTime(0, 0, ntpServer);
- setenv("TZ", "CET-1CEST,M3.5.0,M10.5.0/3", 1);
- tzset();
- lastSyncMillis = millis();
- */
- ore = selezionaOre();
- minuti = selezionaMin();
- secondi = selezionaSec();
- display.clearDisplay();
- display.display();
- }
- void loop() {
- /*
- currentMillis = millis();
- if (millis() - lastSyncMillis > syncInterval) {
- configTime(0, 0, ntpServer);
- tzset();
- lastSyncMillis = millis();
- display.clearDisplay();
- display.setCursor(0, 0);
- display.println(MESSAGES[MSG_TIMEUPD][LinguaSelezionata]);
- display.display();
- }
- */
- struct tm timeinfo;
- //if (getLocalTime(&timeinfo)) {
- // secondi = timeinfo.tm_sec;
- // minuti = timeinfo.tm_min;
- // ore = timeinfo.tm_hour;
- display.fillRect(0,0,112,8,SSD1306_BLACK);
- char orario[9];
- sprintf(orario, "%02d:%02d:%02d", ore, minuti, secondi);
- display.setCursor(0,0);
- display.print(orario);
- display.display();
- int oreDaStamp = ore;
- if (LinguaSelezionata == 0){
- if(minuti > 39){if (ore != 24) { oreDaStamp++; } else {oreDaStamp = 1;}}//passaggio ora successiva (MENO xx)
- }
- else {
- if(minuti > 34){if (ore != 24) { oreDaStamp++; } else {oreDaStamp = 1;}}//passaggio ora successiva (MENO xx)
- }
- if(ore > 11) {
- display.setCursor(112,0);
- display.print(MESSAGES[MSG_HOURPM][LinguaSelezionata]);
- display.display();
- }
- else {
- display.setCursor(112,0);
- display.print(MESSAGES[MSG_HOURAM][LinguaSelezionata]);
- display.display();
- }
- int minutiDaStamp;
- minutiDaStamp = minuti - (minuti % 5);
- if(LinguaSelezionata == 1) goto minuti; //se ENG vado ai minuti per stampare prima loro
- // /‾‾‾\ |‾‾\ |‾‾‾
- // | | |__/ |---
- // \___/ | \ |___
- ore:
- if(ultimaOraStamp != oreDaStamp){
- ultimaOraStamp = oreDaStamp;
- if(LinguaSelezionata == 1){
- display.fillRect(0,16,SCREEN_WIDTH,8,SSD1306_BLACK);
- display.setCursor(0,16);
- }
- else {
- display.fillRect(0,8,SCREEN_WIDTH,8,SSD1306_BLACK);
- display.setCursor(0,8);
- if(oreDaStamp != 1 && oreDaStamp != 13){
- display.print(MESSAGES[MSG_INITHOURS][LinguaSelezionata]);
- display.display();
- }
- else {
- display.setCursor(0,8);
- display.print(MESSAGES[MSG_INITHOUR][LinguaSelezionata]);
- display.display();
- }
- }
- switch (oreDaStamp % 12) {
- case 0:
- if(oreDaStamp == 12) {
- display.print(MESSAGES[MSG_HOUR12AM][LinguaSelezionata]);
- break;
- }
- if(oreDaStamp == 24) {
- display.print(MESSAGES[MSG_HOUR12PM][LinguaSelezionata]);
- break;
- }
- case 1:
- display.print(MESSAGES[MSG_HOUR1][LinguaSelezionata]);
- break;
- case 2:
- display.print(MESSAGES[MSG_HOUR2][LinguaSelezionata]);
- break;
- case 3:
- display.print(MESSAGES[MSG_HOUR3][LinguaSelezionata]);
- break;
- case 4:
- display.print(MESSAGES[MSG_HOUR4][LinguaSelezionata]);
- break;
- case 5:
- display.print(MESSAGES[MSG_HOUR5][LinguaSelezionata]);
- break;
- case 6:
- display.print(MESSAGES[MSG_HOUR6][LinguaSelezionata]);
- break;
- case 7:
- display.print(MESSAGES[MSG_HOUR7][LinguaSelezionata]);
- break;
- case 8:
- display.print(MESSAGES[MSG_HOUR8][LinguaSelezionata]);
- break;
- case 9:
- display.print(MESSAGES[MSG_HOUR9][LinguaSelezionata]);
- break;
- case 10:
- display.print(MESSAGES[MSG_HOUR10][LinguaSelezionata]);
- break;
- case 11:
- display.print(MESSAGES[MSG_HOUR11][LinguaSelezionata]);
- break;
- }
- if(LinguaSelezionata != 3) {
- if(minutiDaStamp == 0) {
- display.print(MESSAGES[MSG_HOURPRECISE][LinguaSelezionata]);
- display.display();
- }
- else {
- display.display();
- }
- }
- else {
- if(oreDaStamp == 0 || oreDaStamp == 12){
- display.display();
- }
- if(oreDaStamp == 1 || oreDaStamp == 13){
- display.print(MESSAGES[MSG_FINHOUR][LinguaSelezionata]);
- display.display();
- }
- if(oreDaStamp != 0 && oreDaStamp != 1 && oreDaStamp != 12 && oreDaStamp != 13) {
- display.print(MESSAGES[MSG_FINHOURS][LinguaSelezionata]);
- display.display();
- }
- }
- if(LinguaSelezionata == 1) goto pallini;
- }
- // |\ /| | |\ | | | ‾‾|‾‾ |
- // | \/ | | | \ | | | | |
- // | | | | \| \__/ | |
- minuti:
- if(ultimiminutiStamp != minutiDaStamp){
- ultimiminutiStamp = minutiDaStamp;
- if(LinguaSelezionata == 1){
- display.fillRect(0,8,SCREEN_WIDTH,8,SSD1306_BLACK); //cancello riga 2
- display.setCursor(0,8);
- if(oreDaStamp != 1 && oreDaStamp != 13){
- display.print(MESSAGES[MSG_INITHOURS][LinguaSelezionata]);
- display.display();
- }
- else {
- display.print(MESSAGES[MSG_INITHOUR][LinguaSelezionata]);
- display.display();
- }
- }
- else {
- display.fillRect(0,16,SCREEN_WIDTH,8,SSD1306_BLACK); //cancello riga 3
- display.setCursor(0,16);
- }
- switch (minutiDaStamp) {
- case 0:
- break;
- case 5:
- display.print(MESSAGES[MSG_MIN5][LinguaSelezionata]);
- display.display();
- break;
- case 10:
- display.print(MESSAGES[MSG_MIN10][LinguaSelezionata]);
- display.display();
- break;
- case 15:
- display.print(MESSAGES[MSG_MIN15][LinguaSelezionata]);
- display.display();
- break;
- case 20:
- display.print(MESSAGES[MSG_MIN20][LinguaSelezionata]);
- display.display();
- break;
- case 25:
- display.print(MESSAGES[MSG_MIN25][LinguaSelezionata]);
- display.display();
- break;
- case 30:
- display.print(MESSAGES[MSG_MIN30][LinguaSelezionata]);
- display.display();
- break;
- case 35:
- display.print(MESSAGES[MSG_MIN35][LinguaSelezionata]);
- display.display();
- break;
- case 40:
- display.print(MESSAGES[MSG_MIN40][LinguaSelezionata]);
- display.display();
- break;
- case 45:
- display.print(MESSAGES[MSG_MIN45][LinguaSelezionata]);
- display.display();
- break;
- case 50:
- display.print(MESSAGES[MSG_MIN50][LinguaSelezionata]);
- display.display();
- break;
- case 55:
- display.print(MESSAGES[MSG_MIN55][LinguaSelezionata]);
- display.display();
- break;
- }
- }
- if(LinguaSelezionata == 1) goto ore;
- // |‾‾‾\ /\ | | | |\ | |
- // |___/ /--\ | | | | \ | |
- // | / \ |___ |___ | | \| |
- pallini:
- int lastDigit = minuti % 10;
- int numPallini = 0;
- if (lastDigit == 1 || lastDigit == 6) {
- numPallini = 1;
- } else if (lastDigit == 2 || lastDigit == 7) {
- numPallini = 2;
- } else if (lastDigit == 3 || lastDigit == 8) {
- numPallini = 3;
- } else if (lastDigit == 4 || lastDigit == 9) {
- numPallini = 4;
- }
- if(ultimipalliniStamp != numPallini) {
- ultimipalliniStamp = numPallini;
- display.setCursor(0,24);
- display.fillRect(0, 24, SCREEN_WIDTH, 8,SSD1306_BLACK); //cancello riga 4
- display.display();
- FastLED.clear();
- FastLED.show();
- for (int i = 0; i < numPallini; i++) {
- display.print(".");
- display.display();
- for (int b = 0; b <= BRIGHTNESS; b += 2) {
- leds[i] = CRGB(b, b, b);
- FastLED.show();
- delay(50);
- }
- }
- }
- //}
- secondi ++;
- if(secondi == 60) {minuti ++; secondi=0;}
- if(minuti == 60) {ore++; minuti=0;}
- if(ore == 24) {ore = 0;}
- delay(1000);
- }
- int selezioneLinguaConPulsante(int valoreIniziale, int maxValore) {
- pinMode(BUTTON_PIN, INPUT_PULLUP);
- int valore = valoreIniziale;
- unsigned long pressStart = 0;
- bool confermato = false;
- display.clearDisplay();
- display.setCursor(0, 0);
- display.println("LANGUAGE: ");
- display.print(MESSAGES[MSG_INSTRUCTIONS][1]);
- display.display();
- while (!confermato) {
- if (digitalRead(BUTTON_PIN) == LOW) {
- pressStart = millis();
- while (digitalRead(BUTTON_PIN) == LOW) {
- if (millis() - pressStart > LONG_PRESS_TIME) {
- confermato = true;
- break;
- }
- }
- if (!confermato) {
- valore = (valore + 1) % (maxValore + 1);
- display.fillRect(0,24,SCREEN_WIDTH,8,SSD1306_BLACK);
- display.setCursor(0, 24);
- display.print(nomiLingue[valore]);
- display.display();
- delay(300); // debounce
- }
- }
- }
- return valore;
- }
- int selezioneTimeConPulsante(int valoreIniziale, int maxValore) {
- pinMode(BUTTON_PIN, INPUT_PULLUP);
- int valore = valoreIniziale;
- unsigned long pressStart = 0;
- bool confermato = false;
- display.clearDisplay();
- display.setCursor(0, 0);
- display.println("Valore: ");
- display.print(valore);
- display.display();
- while (!confermato) {
- if (digitalRead(BUTTON_PIN) == LOW) {
- pressStart = millis();
- while (digitalRead(BUTTON_PIN) == LOW) {
- if (millis() - pressStart > LONG_PRESS_TIME) {
- confermato = true;
- break;
- }
- }
- if (!confermato) {
- valore = (valore + 1) % (maxValore + 1);
- display.fillRect(0,24,SCREEN_WIDTH,8,SSD1306_BLACK);
- display.setCursor(0, 24);
- display.print(valore);
- display.display();
- delay(300); // debounce
- }
- }
- }
- return valore;
- }
- int selezionaLingua() {
- return selezioneLinguaConPulsante(0, NumLang - 1);
- }
- int selezionaOre() {
- return selezioneTimeConPulsante(0, NumHour-1);
- }
- int selezionaMin() {
- return selezioneTimeConPulsante(0, NumMin-1);
- }
- int selezionaSec() {
- return selezioneTimeConPulsante(0, NumSec-1);
- }
- /*
- void ErroreWifi(void) {
- display.clearDisplay();
- display.setCursor(0,0);
- display.println(MESSAGES[MSG_WIFIERR][LinguaSelezionata]); //Messaggio su display OLED
- display.println(ssid);
- display.display();
- delay(2000);
- }
- void WiFiConnesso(void) {
- display.clearDisplay();
- display.setCursor(0,0);
- display.println(MESSAGES[MSG_WIFIOK][LinguaSelezionata]); //Messaggio su display OLED
- display.println(ssid);
- display.display();
- delay(2000);
- }
- void ConnessioneWifi(void) {
- display.setCursor(0, 0);
- display.println(MESSAGES[MSG_WIFICONN][LinguaSelezionata]);
- display.println(ssid);
- display.display();
- }
- */
Advertisement
Add Comment
Please, Sign In to add comment