Finalmente...dopo giorni e giorni di studio, ho finito di riscrivere il codice per l'orologio LCD con sveglia con arduino...
Prossimamente lo schema...
Qui lo sketch:
/*
Collegare il display LCD nei pin 5,6,7,8,9
Collegare il rotary encoder con i pinA e B in pin 2 e pin 3, mentre il button nel pin4 di arduino
Collegare il modulo RTC nei pin 4 e 5 analogici.
*/
#include <WProgram.h>
#include <Wire.h>
#include <DS1307.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(8,9,7,6,5,4);
int ora = 12;
int minuti = 00;
int oraA = 13;
int minutiA = 00;
int val;
int encoder0PinA = 2;
int encoder0PinB = 3;
int encoder0Pos = 0;
int encoder0PinALast = LOW;
int n = LOW;
boolean OldButtonState = false;
boolean NewButtonState = false;
void setup() {
Serial.begin(9600);
pinMode(10, INPUT);
pinMode(3, INPUT);
pinMode(2, INPUT);
lcd.begin(16, 2);
SetClock();
}
void loop(){
ora = RTC.get(DS1307_HR, true);
minuti = RTC.get(DS1307_MIN, false);
visualizza_ora();
visualizza_allarme();
if (ButtonPressed()){
SetAlarm();
}
if (ora == oraA && minuti == minutiA){
allarme();
delay(200);
}
}
void allarme(){
lcd.setCursor(0,1);
lcd.print("A L L A R M E!!!!");
lcd.setCursor(0,0);
lcd.print(" ");
delay(500);
lcd.setCursor(0,0);
lcd.print("A L L A R M E!!!!");
lcd.setCursor(0,1);
lcd.print(" ");
delay(500);
}
void visualizza_ora(){
lcd.setCursor(0,0);
lcd.print(" ");
lcd.print("Orario ");
if (ora <10){
lcd.setCursor(9,0);
lcd.print("0");
lcd.print(ora);}
else { lcd.setCursor(9,0);
lcd.print(ora);}
lcd.setCursor(11,0);
lcd.print(":");
if (minuti <10){
lcd.setCursor(12,0);
lcd.print("0");
lcd.print(minuti);}
else { lcd.setCursor(12,0);
lcd.print(minuti);}
lcd.print(" ");
}
void visualizza_allarme(){
lcd.setCursor(0,1);
lcd.print(" Allarme: ");
if (oraA <10){
lcd.setCursor(10,1);
lcd.print("0");
lcd.print(oraA);}
else { lcd.setCursor(10,1);
lcd.print(oraA);}
lcd.setCursor(12,1);
lcd.print(":");
if (minutiA <10){
lcd.setCursor(13,1);
lcd.print("0");
lcd.print(minutiA);}
else { lcd.setCursor(13,1);
lcd.print(minutiA);}
lcd.setCursor(16,1);
lcd.print(" ");
}
void SetAlarm(){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Imposta allarme");
while (!ButtonPressed()){
setOraA();
lcd.setCursor(6,1);
if (oraA < 10){
lcd.setCursor(6,1);
lcd.print("0");
lcd.print(oraA);
} else
{
lcd.setCursor(6,1);
lcd.print(oraA);
}
}
while (!ButtonPressed()){
setMinutiA();
lcd.setCursor(8,1);
lcd.print(":");
if (minutiA < 10){
lcd.setCursor(9,1);
lcd.print("0");
lcd.print(minutiA);
} else
{
lcd.setCursor(9,1);
lcd.print(minutiA);
}
}
}
void SetClock(){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Imposta l'orario");
while (!ButtonPressed()){
setOra();
lcd.setCursor(6,1);
if (ora < 10){
lcd.setCursor(6,1);
lcd.print("0");
lcd.print(ora);
} else
{
lcd.setCursor(6,1);
lcd.print(ora);
}
}
while (!ButtonPressed()){
setMinuti();
lcd.setCursor(8,1);
lcd.print(":");
if (minuti < 10){
lcd.setCursor(9,1);
lcd.print("0");
lcd.print(minuti);
} else
{
lcd.setCursor(9,1);
lcd.print(minuti);
}
}
RTC.stop();
RTC.set(DS1307_MIN, minuti); //set the minutes
RTC.set(DS1307_HR,ora); //set the hours
RTC.start();
}
void setOraA() {
n = digitalRead(encoder0PinA);
if ((encoder0PinALast == LOW) && (n == HIGH)) {
if (digitalRead(encoder0PinB) == LOW) {
oraA--;
if (oraA < 0){
oraA = 23;}
} else {
oraA++;
if (oraA >= 24){
oraA = 00;
}
}
}
encoder0PinALast = n;
}
void setMinutiA() {
n = digitalRead(encoder0PinA);
if ((encoder0PinALast == LOW) && (n == HIGH)) {
if (digitalRead(encoder0PinB) == LOW) {
minutiA--;
if (minutiA < 0){
minutiA = 59;}
} else {
minutiA++;
if (minutiA >= 59){
minutiA = 00;
}
}
}
encoder0PinALast = n;
}
void setOra() {
n = digitalRead(encoder0PinA);
if ((encoder0PinALast == LOW) && (n == HIGH)) {
if (digitalRead(encoder0PinB) == LOW) {
ora--;
if (ora < 0){
ora = 23;}
} else {
ora++;
if (ora >= 24){
ora = 00;
}
}
Serial.print ("Ora impostata: ");
Serial.println (ora);
}
encoder0PinALast = n;
}
void setMinuti() {
n = digitalRead(encoder0PinA);
if ((encoder0PinALast == LOW) && (n == HIGH)) {
if (digitalRead(encoder0PinB) == LOW) {
minuti--;
if (minuti < 0){
minuti = 59;}
} else {
minuti++;
if (minuti >= 59){
minuti = 00;
}
}
Serial.print ("Minuti impostati: ");
Serial.println (minuti);
}
encoder0PinALast = n;
}
boolean ButtonPressed() {
boolean WasIt; // as in, "Was It pressed?"
NewButtonState = !digitalRead(10);
if ((!OldButtonState) && (NewButtonState)) {
WasIt = true;
} else {
WasIt = false;
}
OldButtonState = NewButtonState;
return(WasIt);
}
Grazie Marco !!!
RispondiEliminaBello .... ;) ... quando metterai gli schemi ?
RispondiElimina