Ciao a tutti, siccome l'rtc hardware non mi riesce a farlo funzionare ci provo col software!
Lo scopo del progetto è pilotare 1-2-3....x strisce led in pwm con un timer con display lcd e 2 pulsanti per regolare l'ora su display lcd
L'impiego è acquariofilo, via software imposto le fasce orarie del fading delle strisce, con i 2 pulsanti regolo l'ora una volta attaccato
Per semplificarmi la vita ho diviso il lavoro in vari step
- applicare l'utilizzo dei 2 pulsanti al swrtc per cambiare l'ora e vedere tali modifiche tramite interrogazione serial monitor
- scrivere tutto su lcd
- montare tutto e bere una birra celebrativa
naturalmente mi sono già bloccato al primo step ( sarà che l'ultima volta che ho fatto un lavoro complesso in c era su un atmel 8535 nel 2006) ma non capisco dove sbaglio perchè 99 su 100 non mi ricordo il c
vi allego lo sketch attualmente realizzato
#include <swRTC.h>
swRTC rtc;
const int buttonPinH = 6; // numero pulsante ore
const int buttonPinM = 7; // numero pulsante minuti
int buttonStateH = 0; // variabile per leggere stato pulsante Ore
int buttonStateM = 0; // variabile per leggere stato pulsante Minuti
int x=0;
int y=0;
int z=0;
void setup() {
delay(2000); //delay to let the user opens the serial monitor
rtc.stopRTC(); //stop the RTC
rtc.setTime(x,y,0); //set the time here
rtc.setDate(27,10,2011); //set the date here
rtc.startRTC(); //start the RTC
Serial.begin(19200); //choose the serial speed here
// inizializzazione pulsante ore input:
pinMode(buttonPinH, INPUT);
// // inizializzazione pulsante minuti input:
pinMode(buttonPinM, INPUT);
}
void loop() {
// read the state of the pushbutton value:
buttonStateH = digitalRead(buttonPinH);
buttonStateM = digitalRead(buttonPinM);
// check if the pushbutton is pressed.
// if it is, the buttonState is HIGH:
if (buttonStateH == HIGH) {
// turn LED on:
rtc.stopRTC(); //stop the RTC
rtc.setTime(x++,y,0); //set the time here
rtc.startRTC(); //start the RTC
}
else if(buttonStateM == HIGH) {
rtc.stopRTC(); //stop the RTC
rtc.setTime(x,y++,0); //set the time here
rtc.startRTC(); //start the RTC
}
else{
}
Serial.print(rtc.getHours(), DEC);
Serial.print(":");
Serial.print(rtc.getMinutes(), DEC);
Serial.print(":");
Serial.print(rtc.getSeconds(), DEC);
Serial.print(" ");
delay(1000);
}
se mandato in debug da serial monitor noto un incremento random dei minuti e delle ore senza alcuna pressione dei pulsanti ma non capisco come mai... forse ho sbagliato qualcosa nell 'if else-if , ne sono quasi sicuro ma non capisco cosa...
qualcuno mi potrebbe aiutare?
è ben accetto tutto!