Bonjour
Je débute en arduino et je suis coincé.
Voila mon projet.
un réveil qui lit l'heure et un système d'alarme
je souhaitais pouvoir modifier l'alarme par l'intermédiaire de 3 boutons. J'ai essayé d'organiser mon code en deux "menu" un affichant l'heure (copié de internet) et l'autre affichant une interface pour changer l'alarme. Je pensais avoir compris le fonctionnement du bouton mais il semble se déclencher tout seul. Je suis obligé de brancher les entrées l'arduino directement au 5v pour arreter cette boucle. Également le bouton 1 se déclenche parfois sans raison.
Je pense à un faux contact mais je ne trouve rien
voici mon code:
/************************************************************
Horloge Arduino
Horloge simple avec un Arduino, un module breakout
RTC DS1307 et un afficheur LCD.
Branchements du breakout RTC DS1307:
Gnd --> GND
Vcc --> 5 V
Sda --> analog pin A4
Scl --> analog pin A5
Branchements de l'afficheur LCD:
LCD RS pin --> digital pin 12
LCD Enable pin --> digital pin 11
LCD D4 pin --> digital pin 5
LCD D5 pin --> digital pin 4
LCD D6 pin --> digital pin 3
LCD D7 pin --> digital pin 2
LCD R/W pin --> ground
http://electroniqueamateur.blogspot.ca/2013/06/une-horloge-pour-votre-arduino-real.html
***************************************************/
// Modifier le systeme en prenant l'état précédent pour faire le menu !voir photo
#include <LiquidCrystal.h>
#include <Wire.h>
#include <RTClib.h>
RTC_DS1307 RTC;
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
int vardep=0;
int PinB1= 6 ;
int PIN_BUZZER= 7 ;
int PinB2=8;
int PinB3=9;
//var manipulées
int ah=0;
int am=0;
int bh=11;
int bm=21;
int etat_B1=HIGH ;
int etat_B2=HIGH;
int etat_B3=HIGH;
int etat_menu1=0;
int etat_menu2=0;
int etat_B1_p=HIGH;
int etat_B2_p=HIGH;
int etat_B3_p=HIGH;
bool alarme=false;
bool lunch=true;
void setup() {
Serial.begin(9600);
Wire.begin();
RTC.begin();
lcd.begin(16, 2);
pinMode(PinB1,INPUT);
pinMode(PinB2,INPUT);
pinMode(PinB3,INPUT);
pinMode(PIN_BUZZER,OUTPUT);
}
void loop() {
DateTime now = RTC.now();// l'heure sur la premiêre ligne du LCD
ah = now.hour();
am = now.minute();
if(lunch==true){
// affichage de bonjour
lcd.setCursor(4,0);
lcd.print("B");
delay(200);
lcd.setCursor(5,0);
lcd.print("o");
delay(200);
lcd.setCursor(6,0);
lcd.print("n");
delay(200);
lcd.setCursor(7,0);
lcd.print("j");
delay(200);
lcd.setCursor(8,0);
lcd.print("o");
delay(200);
lcd.setCursor(9,0);
lcd.print("u");
delay(200);
lcd.setCursor(10,0);
lcd.print("r");
lcd.setCursor(4,1);
lcd.print("Il est");
delay(2000);
lcd.clear();
lunch=false;
}
etat_B1=digitalRead(PinB1);
Serial.println("Etat de B1");
Serial.println(etat_B1);
Serial.println("Etat de B1 precedent");
Serial.println(etat_B1_p);
Serial.println("Etat du menu ");
Serial.println(etat_menu1);
if(etat_B1==LOW and etat_B1_p==HIGH and etat_menu1==0){
etat_menu1=1 ;
}
else if(etat_B1==LOW and etat_B1_p==HIGH and etat_menu1==1){
etat_menu1=0 ;
}
etat_B1_p=etat_B1;
if(etat_menu1==0){
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(now.hour());
lcd.print(":");
if (now.minute() < 10) {
lcd.print("0");
}
lcd.print(now.minute());
lcd.print(":");
if (now.second() < 10) {
lcd.print("0");
}
lcd.print(now.second());
lcd.setCursor(12, 0);
if(alarme==true){
lcd.print("ON");
}
else;
{lcd.print("OFF");
}
// la date sur la deuxième ligne du LCD
lcd.setCursor(0, 1);
lcd.print(now.day());
lcd.print(" ");
switch (now.month()) {
case 1:
lcd.print("janvier");
break;
case 2:
lcd.print("fevrier");
break;
case 3:
lcd.print("mars");
break;
case 4:
lcd.print("avril");
break;
case 5:
lcd.print("mai");
break;
case 6:
lcd.print("juin");
break;
case 7:
lcd.print("juillet");
break;
case 8:
lcd.print("aout");
break;
case 9:
lcd.print("septembre");
break;
case 10:
lcd.print("octobre");
break;
case 11:
lcd.print("novembre");
break;
case 12:
lcd.print("decembre");
break;
}
lcd.print(" ");
lcd.print(now.year());
delay(1000);
lcd.clear();
//le systeme d'alarme
if(alarme==true and am==bm and ah==bh){
tone(PIN_BUZZER, 2637, 200);
delay(400);
tone(PIN_BUZZER, 1975, 200);
delay(200);
tone(PIN_BUZZER, 2093, 200);
delay(200);
tone(PIN_BUZZER, 2349, 200);
delay(400);
tone(PIN_BUZZER, 2093, 200);
delay(200);
tone(PIN_BUZZER, 1975, 200);
delay(200);
tone(PIN_BUZZER, 1760, 200);
delay(400);
tone(PIN_BUZZER, 1760, 200);
delay(200);
tone(PIN_BUZZER, 2093, 200);
delay(200);
tone(PIN_BUZZER, 2637, 200);
delay(400);
tone(PIN_BUZZER, 2349, 200);
delay(200);
tone(PIN_BUZZER, 2093, 200);
delay(200);
tone(PIN_BUZZER, 1975, 200);
delay(400);
tone(PIN_BUZZER, 1975, 200);
delay(200);
tone(PIN_BUZZER, 2093, 200);
delay(200);
tone(PIN_BUZZER, 2349, 200);
delay(400);
tone(PIN_BUZZER, 2637, 200);
delay(400);
tone(PIN_BUZZER, 2093, 200);
delay(400);
tone(PIN_BUZZER, 1760, 200);
delay(400);
tone(PIN_BUZZER, 1760, 200);
delay(800);
tone(PIN_BUZZER, 1760, 200);
delay(400);
tone(PIN_BUZZER, 2349, 200);
delay(200);
tone(PIN_BUZZER, 2794, 200);
delay(200);
tone(PIN_BUZZER, 3520, 200);
delay(400);
tone(PIN_BUZZER, 3136, 200);
delay(200);
tone(PIN_BUZZER, 2794, 200);
delay(200);
tone(PIN_BUZZER, 2637, 200);
delay(600);
tone(PIN_BUZZER, 2093, 200);
delay(200);
tone(PIN_BUZZER, 2637, 200);
delay(400);
tone(PIN_BUZZER, 2349, 200);
delay(200);
tone(PIN_BUZZER, 2093, 200);
delay(200);
tone(PIN_BUZZER, 1975, 200);
delay(400);
tone(PIN_BUZZER, 1975, 200);
delay(200);
tone(PIN_BUZZER, 2093, 200);
delay(200);
tone(PIN_BUZZER, 2349, 200);
delay(400);
tone(PIN_BUZZER, 2637, 200);
delay(400);
tone(PIN_BUZZER, 2093, 200);
delay(400);
tone(PIN_BUZZER, 1760, 200);
delay(400);
tone(PIN_BUZZER, 1760, 200);
delay(800);
alarme=false;
}
}
else if(etat_menu1==1)
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(bh);
lcd.print(":");
lcd.print(bm);
lcd.print("_Alarme");
if(alarme==true){
lcd.print("_ON");
}
else;
{lcd.print("_OFF");}
etat_B2=digitalRead(PinB2);
if(etat_B2==LOW and etat_B2_p==HIGH and etat_menu2==0){
etat_menu2=1 ;
}
else if(etat_B2==LOW and etat_B2_p==HIGH and etat_menu2==1){
etat_menu2= 2 ;
}
else if(etat_B2==LOW and etat_B2_p==HIGH and etat_menu2==2){
etat_menu2= 0 ;
}
etat_B2_p=etat_B2;
switch(etat_menu2){
case 0:
lcd.setCursor(0, 0);
etat_B3=digitalRead(PinB3);
if(etat_B3==LOW){
bh=bh+1;
if(bh>24){
bh=1;
}
delay(500);
}
case 1:
lcd.setCursor(3, 0);
etat_B3=digitalRead(PinB3);
if(etat_B3==LOW){
bm=bm+1;
if(bh>60){
bm=0;
}
delay(500);
}
case 2:
etat_B3=digitalRead(PinB3);
if(alarme==true and etat_B3==LOW){
alarme=false;
delay(1000);
}
else if(alarme==false and etat_B3==LOW){
alarme=true;
delay(1000);
}
}
}
}
voici mon schema
j'ai également un modul rtc brancher scl au pin le plus haut et sda pin juste en dessous. et vvc du rtc en 5v gnd au gnd. Tout fonctionne pour l'affichage du temps.
je suis preneur de conseil sur l’organisation ou sur des lectures.
Merci beaucoup
