Go Down

Topic: Réglage heure par bouton (Read 3347 times) previous topic - next topic

Nickelriri

Bonjour à vous, j'aimerais pouvoir régler l'heure de mon réveil grâce à 3 boutons :  Il y a 3 boutons, le BP1 pour accéder au menu du réglage de l'alarme, BP2 pour avancer les heures, min, sec et BP2 pour les reculer. Pour passer des heures aux minutes, on pourrait appuyer par exemple 3 sec sur le BP2 puis on passerait aux réglages des minutes, et la même pour passer aux réglages des secondes. Et pour finaliser il faudrait r'appuyer sur le BP1 lorsque l'on aura fini de régler l'heure.

J'aimerais réaliser un programme qui effectuerait ce que j'ai écris ci-dessus.

Voici mon programme actuelle qui me permet d'afficher l'heure grâce à une horloge en temps réel (DS1307) et j'y est ajouté à la fin une petite partie pour avancer les heures.

Code: [Select]
#include <Wire.h>
#include <RTClib.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
RTC_DS1307 RTC;

int buttonPin = 10;
int buttonState = LOW;
int a;
int b;
int c;
int d;
int e;
int f;
int heure;

void setup () {
Serial.begin(9600);
Wire.begin();
RTC.begin();
lcd.begin(16,2);

pinMode(8,OUTPUT);

if (! RTC.isrunning()) {
Serial.println ("RTC is NOT running!");
// following line sets the RTC to the date & time this sketch was compiled
RTC.adjust(DateTime(__DATE__, __TIME__));
}
}


void loop () {



DateTime now = RTC.now();
a = now.hour();
b = now.minute();
c = now.second();

lcd.clear();
lcd.setCursor(0,0);
lcd.print("Heure:");
lcd.setCursor(6,0);
if (a<10)
{
lcd.print("0");
}
lcd.print(now.hour(), DEC);
lcd.print(":");

if (b<10)
{
lcd.print("0");
}
lcd.print(now.minute(), DEC);
lcd.print(":");

if (c<10)
{
lcd.print("0");
}
lcd.print(now.second(),DEC);
lcd.print("s");
lcd.setCursor(0,1);

lcd.print("Date:");
lcd.setCursor(6,1);
d = now.day();
e = now.month();
f = now.year();
if (d<10)
{
lcd.print("0");
}

lcd.print(now.day(),DEC);
lcd.print("/");

if (e<10)
{
lcd.print("0");
}
lcd.print(now.month(),DEC);
lcd.print("/");


if (f<10)
{
lcd.print("0");
}
lcd.print(now.year(),DEC);
lcd.print(" ");
lcd.print(" ");

delay(1000);


{
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH);
lcd.clear();
a=a+1;
}

}


Lorsque je compile tout ça, aucune erreur n'est trouvée mais lorsque je veux tester cela sur ma simulation ISIS, l'appuie sur le bouton poussoir ne fait rien.

Quelqu'un aurait-il un exemple de programme de bouton pour régler l'heure afin que je vois mes erreur ou bien quelqu'un pourrait m'expliquer ce qui est faux s'il vous plaît ?

Cordialement.

fabiendamiano

Dans un premier temps il faudrait essayer ton programme à l'aide du moniteur série.
Peut être que le problème viens de la simulation ISIS qui n'accepte pas forcément le programme

Nickelriri

Je pense pas que cela vienne de la simulation, cela doit surement venir du programme il doit y avoir une erreur qui fait que cela ne marche pas.

fabiendamiano

Je n'est jamais utilisé cette outils de simulation j'ai toujours compilé sur l'arduino donc c'est pour ça que l'idée m'est venu à l'esprit

Nickelriri

#4
Mar 12, 2015, 07:30 pm Last Edit: Mar 12, 2015, 07:30 pm by Nickelriri
D'accord je vais voir tout ça demain, je vous tiens au courant.
Sinon le programme pour le bouton vous semble correcte ?

Nickelriri

Comment je peux essayer mon programme dans le moniteur série car je ne connais pas les commandes s'il vous plaît.

_pepe_

#6
Mar 13, 2015, 03:15 pm Last Edit: Aug 20, 2018, 02:48 am by _pepe_
Supprimé

Nickelriri

Oui désolé je ne m'y connais pas vraiment en programmation, j'ai modifié cela mais ça ne marche toujours pas, j'ai relue le programme et je ne vois vraiment pas quelles sont les erreurs et m'on professeur n'en voit pas non plus.

_pepe_

#8
Mar 13, 2015, 03:42 pm Last Edit: Aug 20, 2018, 02:48 am by _pepe_
Supprimé

Nickelriri

Ce que j'essaye de faire est sois-disant impossible car il me faudrait utiliser des interruptions afin de modifier l'heure.

_pepe_

#10
Mar 13, 2015, 09:31 pm Last Edit: Aug 20, 2018, 02:48 am by _pepe_
Supprimé

Nickelriri

#11
Mar 14, 2015, 08:36 am Last Edit: Mar 14, 2015, 08:52 am by Nickelriri
Ah bon ? mais qu'est-ce que je devrais changer alors, j'ai modifié quelques lignes du programme et cela aurait du fonctionner mais ça ne marche toujours pas.

Code: [Select]
#include <Wire.h>
#include <RTClib.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
RTC_DS1307 RTC;

int buttonPin = 10;
int buttonState = LOW;
int a;
int b;
int c;
int d;
int e;
int f;


void setup () {
Serial.begin(9600);
Wire.begin();
RTC.begin();
lcd.begin(16,2);

pinMode(10,INPUT);

if (! RTC.isrunning()) {
Serial.println ("RTC is NOT running!");
// following line sets the RTC to the date & time this sketch was compiled
RTC.adjust(DateTime(__DATE__, __TIME__));
}
}


void loop () {



DateTime now = RTC.now();
a = now.hour();
b = now.minute();
c = now.second();



//Modifier l'heure

buttonState = digitalRead(buttonPin);
{
if (buttonState == LOW)
a=a+1;
}


//Affichage heure LCD
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Heure:");
lcd.setCursor(6,0);
if (a<10)
{
lcd.print("0");
}
lcd.print(now.hour(), DEC);
lcd.print(":");

if (b<10)
{
lcd.print("0");
}
lcd.print(now.minute(), DEC);
lcd.print(":");

if (c<10)
{
lcd.print("0");
}
lcd.print(now.second(),DEC);
lcd.print("s");
lcd.setCursor(0,1);

lcd.print("Date:");
lcd.setCursor(6,1);
d = now.day();
e = now.month();
f = now.year();
if (d<10)
{
lcd.print("0");
}

lcd.print(now.day(),DEC);
lcd.print("/");

if (e<10)
{
lcd.print("0");
}
lcd.print(now.month(),DEC);
lcd.print("/");


if (f<10)
{
lcd.print("0");
}
lcd.print(now.year(),DEC);
lcd.print(" ");
lcd.print(" ");

delay(1000);



}



J'ai modifié les états car sur la simulation, lorsque le bouton est appuyé, l'état est bas.
Quelqu'un ma dit que ça ne pourra pas marcher car le RTC met l'heure automatiquement à l'heure et le fait de vouloir augmenter l'heure de 1 rentrerais en conflit avec ça.

JMe87

Bonjour,

Quote
Quelqu'un ma dit que ça ne pourra pas marcher car le RTC met l'heure automatiquement à l'heure et le fait de vouloir augmenter l'heure de 1 rentrerais en conflit avec ça.
Ah oui ??

Le "RTC" est un simple compteur independant pilote par un quartz d'une precision relative.

Le micro via des instructions, par exemple en I2C, lit les registres internes, les modifie, inscrit des nouvelles valeurs quand bon lui semble.
C'est egalement le micro qui, via une routine d'affichage te "donne" l'heure.

Il est parfaitement realisable d'aller chercher l'heure, de l'afficher, d'incrementer ou decrementer une valeur sur ton affichage, puis de sauver cette nouvelle valeur dans le RTC. Tout cela en une fraction de seconde.

Cherches un peu, il y a une foultitude d'exemple via Google.

Jacques

_pepe_

#13
Mar 14, 2015, 09:57 am Last Edit: Aug 20, 2018, 02:48 am by _pepe_
Supprimé

Nickelriri

Merci de vos réponses, mais je ne vois pas ce que vous voulez dire quand vous dites "Il faut utiliser des commandes de réglage de l'appareil".

Le programme n'est toujours pas indenté. Il est pénible à lire.
Je vais essayer de le rendre plus lisible, désolé.

Go Up