Buongiorno a tutti,
come da oggetto sto cercando di modificare l'ora memorizzata nel mio RTC DS3231 utilizzando due pulsanti, uno per aumentare di una unità il valore delle ore e uno per fare la stessa cosa con i minuti.
Ho provato a scrivere un po' di codice, ma tutti i miei tentativi sono falliti.
Attualmente, con il codice che allego a questo post ottengo solamente di azzerare l'ora con la pressione del bottone dei minuti collegato al pin 8.
Utilizzo una scheda Arduino nano (clone) a cui è collegata una striscia led ws2812b con 128 led tramite il pin 9 e alimentata a 5V; il moduilo RTC DS3231 è collegato tramite i pin SDA e SCL e alimentato direttamente dalla scheda Nano tramite i pin 17 e 16.
Ora, vi chiedo se potete darmi una mano a capire cosa non va, sono alle prime armi quindi non infierite per favore se ho scritto qualche cavolata!
Grazie
#include <FastLED.h>
#include <DS3232RTC.h>
#include <TimeLib.h>
#define LED_PIN 9 //pin a cui è collegato il cavo DATA della striscia led
#define NUM_LEDS 128 //numero di LED della striscia
// mod pulsanti regolazione ora
#define PORA 7 //pin a cui è collegato il pulsante delle ore
#define PMINUTI 8 //pin a cui è collegato il pulsante dei minuti
// fine mod pulsanti regolazione ora
DS3232RTC myRTC(false);
tmElements_t tm;
time_t t;
CRGB leds[NUM_LEDS];
CHSV colour( 0, 255, 180);
int counter=0,
// mod pulsanti regolazione ora
valO=0, valM=0;
// fine mod pulsanti regolazione ora
const int Digits[10][10] =
{
{7,8,10,11,14,18,22,24},
// Inizio modifica Francesco Inversione led centrali numero 1
//{14,16,18,22,24},
{14,15,16,17,18},
// Fine modifica Francesco Inversione led centrali numero 1
{7,8,9,11,14,16,18,24},
{7,9,11,14,16,18,22,24},
{9,10,11,16,18,22,24},
{7,9,10,11,14,16,18,22},
{7,8,9,14,15,16,18,22},
{7,11,14,16,17,24},
{7,8,9,10,11,14,16,18,22,24},
{7,9,10,11,14,16,17,24},
};
void setup()
{
pinMode(17, OUTPUT); //ground and v5 for clock module
pinMode(16, OUTPUT);
// mod pulsanti regolazione ora
pinMode(PORA, INPUT); // imposta il pin digitale come input
pinMode(PMINUTI, INPUT); // imposta il pin digitale come input
// fine mod pulsanti regolazione ora
digitalWrite(17, HIGH);
digitalWrite(16, LOW);
FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);
myRTC.begin();
}
//function that uses the Digit array to display numbers between 0 and 100
void displaynumber( int place , int number){
for (int i = 0 ; i < 10 ; i++) {
if (Digits[number/10][i] != 0) {
leds[(Digits[number/10][i]+place)] = CRGB(255,255,255);;
}
if (Digits[number%10][i] != 0) {
leds[(Digits[number%10][i]+28+place)] = CRGB(255,255,255);;
}
}
}
void loop(){
RTC.read(tm);
//changes the colour of background every 10 cycles
if (counter<10){
counter++;
}else{
colour.hue = (colour.hue+1)%256;
counter=0;
}
// sets background to rainbow colours
for ( int i=0; i< 128;i++){
colour.hue = (colour.hue+1)%256;
leds[i]= colour;
}
colour.hue = (colour.hue+128)%256;
displaynumber(0,tm.Hour);
displaynumber(70,tm.Minute);
//display colons
if ( tm.Second%2 == 0 ){
leds[64] = CRGB(255,255,255);
leds[66] = CRGB(255,255,255);
}
FastLED.show();
// mod pulsanti regolazione ora
valO = digitalRead(PORA); // legge il valore dell'input e lo conserva in valO
valM = digitalRead(PMINUTI); // legge il valore dell'input e lo conserva in valM
if (valO == HIGH) // se il pulsante ore è premuto
{
if (tm.Hour == 23) // se le ore sono 23 l'aumento le riporta a 00
{
tm.Hour = 0 ;
}
else
{
tm.Hour++; // aumenta l'ora di una unità per tutte le altre ore iniziali
}
delay(500);
}
if (valM == HIGH) // se il pulsante minuti è premuto
{
if (tm.Minute == 59) // se i minuti sono 59 l'aumento li riporta a 00
{
tm.Minute = 0 ;
}
else
{
tm.Minute++; // aumenta i minuti di una unità per tutti gli altri minuti iniziali
RTC.set(t); // aggiorna (setta) il modulo RTC
setTime(t); // aggiorna (setta) il modulo RTC
}
delay(500);
}
// fine mod pulsanti regolazione ora
}