Deja une petite présentation : je suis Steve 33 ans et j'aime bien bidouiller dans le domaine electrique et electronique.
Je vous explique mon projet:
Ma fille de 5ans ne sais pas encore lire l'heure et avant la V1 de mon projet la petite se levais parfois a 6h30/7h et nous demandais si c'etait l'heure de se lever.
J'ai alors fabriquer la V1 de sa boite a heure , en gros avec mon imprimante 3D j'ai fabriquer un boitier avec 3 symbole ( dodo , jeu et lever ) avec une LED pour chaque symbole.
Le projet fini a été un vrai succès et nous avons retrouver un cycle de sommeil correct.
Mais voila , je voudrais pousser le projet plus loin afin de pouvoir régler chaque LED grâce a des boutons et un afficheur , car la problématique est que j'ai juste utiliser des delays pour le led et si nous rentrons de soirée tard et bien la petite va continuer a se lever quand la led lever s'allume et du coup elle manque de sommeil ( et nous aussi )
Donc si vous avez eu le courage de lire jusque la ( déjà bravo ) j'ai besoin de votre aide.
Je veux procéder par étape vue mon niveau en code:
récupérer l'heure actuel avec un module RTC ( déjà fait )
réussir a allumer une led selon l'heure ( pas réussi )
réussir a changer l'heure de chaque led avec des boutons ( pas encore essayer )
réussir a afficher et intéragir avec les boutons sur l'ecran ( pas encore essayer )
Pour le moment ma problématique est de reussir a allumer une led a l'heure voulu avec je pense une fonction IF mais malheureusement je bloque malgré le nombre incalculable de sujet que j'ai lu.
Voici le debut de mon code:
#include "RTClib.h"
#include "Wire.h"
RTC_DS1307 RTC;
void setup () {
pinMode (7, OUTPUT);
Serial.begin(57600);
Wire.begin();
RTC.begin();
digitalWrite (7, HIGH);
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();
digitalWrite(13,LOW);
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(' ');
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
delay(1000);
}
[Code/]
De plus je ne suis pas sur que mon RTC soit vraiment a l'heure parce que lorsque j'ouvre le moniteur j'ai ceci qui s'affiche : 17:12:43.528 -> 2016/12/3 8:33:59
Alors il est bien 17:12 mais la date est fausse ainsi que la deuxième heure afficher ( 8:33 ).
Par avance merci de votre retour , je ne veux pas un code tout fait cela n'a aucun intérêt juste des pistes pour que je comprenne moi meme.
Pour tester une heure il est plus facile de transformer l'heure en un chiffre plus facile à manipuler. Par exemple pour 9 heures 27 tu prends 927, pour 15 heures 56 tu prends 1556. Ça permet de faire des comparaisons plus facilement.
Pour mettre ta RTC à l'heure, il y a souvent un sketch dans les exemples de la bibliothèque que tu utilises. La pile bouton est là pour que la RTC conserve ce réglage par la suite.
Maintenant, tu dois éditer ton message et mettre ton code entre balises CODE, comme expliqué dans les messages épinglés en haut du forum.
sharkou:
un simple IF RTC.now < 8h ==13 LOW ? ou c'est plus complexe que ca ?
Bonjour,
Non ce n'est pas plus complexe que ça si tu suis le conseil de lesept et que tu suis la syntaxe du C++
unsigned int h100=100*now.hour()+now.minute();
// allume la led entre 8h13 et 8h15
if (h100>=813 && h100<=815)
digitalWrite(7,HIGH);
else
digitalWrite(7,LOW);
superbe idee et tu as l'air de vouloir mettre la main a la pate. Bravo.
Si je devais le faire, j'utiliserais 4 encodeurs BCD pour afficher l'heure d'un evenement puis 2 boutons poussoirs en serie pour encoder cette heure. 2 poussoirs en serie pour eviter toute fausse manoeuvre de ta petite fille.
Pour le moment pas besoin de t'occuper du jour de la semaine, de la date etc.
C'est facile a coder mais il te faudra un Mega sinon tu vas manquer rapidement de pins I/O.
Quand tu seras bien familiarise avec la programmation, tu remplaces tes 3 leds par un petit affichage matriciel qui te permettra de voir tous tes parametres. A ce moment tu pourras programmer un lever plus tardif le dimanche etc. A la place des leds, ta petite verra un rectangle colore. Tu peux varier la luminosite en fonction de la lumiere ambiante etc etc.
J'ai fait le même type de veilleuse pour mon fils (et ma fille par la suite).
Un cube imprimé 3D avec un panneau de led adressable type WS2812B équipé d'un capteur de son : mon fils nous réveillait la nuit pour trouver son doudou "perdu" à 10cm de sa tête :). Et pareil trop tôt le matin !
La 1ere fonction servait à détecter un claquement de main et d'allumer le panneau pdt 30 sec en s'éteignent progressivement . Pour lui permettre de retrouver doudou.
La 2ième il y a un minuteur lumineux fait par le tour du panneau : en gros tous les 15min j'éteins une led et quand elles sont toutes éteintes ils peuvent se lever! Avec un changement de couleur du rouge au vert en passant par le bleu..Ca lui a permis d'apprendre les couleurs.
Vos idées son vraiment bonne mais encore trop compliqué pour moi et je pourrais envisager des projets similaire quand je serai un peu plus a l'aise.
Voici mon code actuel :
#include "RTClib.h"
#include "Wire.h"
RTC_DS1307 RTC;
void setup () {
pinMode (7, OUTPUT);
pinMode (6,OUTPUT);
pinMode (5, OUTPUT);
Serial.begin(57600);
Wire.begin();
RTC.begin();
digitalWrite (7, HIGH);
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();
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(' ');
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
delay(1000);
unsigned int h100=100*now.hour()+now.minute();
if (h100>=500 && h100<=510)
digitalWrite(7,HIGH);
else
digitalWrite(7,LOW);
if (h100>=510 && h100<=520)
digitalWrite(6,HIGH);
else
digitalWrite(6,LOW);
if (h100>=520 && h100<=5300)
digitalWrite(5,HIGH);
else
digitalWrite(5,LOW);
}
Mais le problème est bien le RTC qui ne fonctionne pas comme je le voudrais.
Serial.println("RTC is NOT running!");
// following line sets the RTC to the date & time this sketch was compiled
RTC.adjust(DateTime(__DATE__, __TIME__));
J'avais cru comprendre que cette fonction permettait de récupérer l'heure de la compilation pour mettre a jour le RTC , mais cela ne fonctionne pas, pourtant dans le moniteur j'ai marquer ceci : 13:53:42.594 -> 2016/12/4 5:14:52
Il y a surement quelque chose que je comprend pas mais quoi :o
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__));
}
D:\arduino\sketch_oct15c\sketch_oct15c.ino: In function 'void setup()':
sketch_oct15c:22:4: error: 'rtc' was not declared in this scope
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
^~~
D:\arduino\sketch_oct15c\sketch_oct15c.ino:22:4: note: suggested alternative: 'getc'
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
^~~
getc
exit status 1
'rtc' was not declared in this scope
Et avec le deuxième code :
D:\arduino\sketch_oct15c\sketch_oct15c.ino: In function 'void setup()':
sketch_oct15c:22:3: error: 'rtc' was not declared in this scope
rtc.adjust(DateTime(2020, 10, 18, 15, 43, 0));
^~~
D:\arduino\sketch_oct15c\sketch_oct15c.ino:22:3: note: suggested alternative: 'getc'
rtc.adjust(DateTime(2020, 10, 18, 15, 43, 0));
^~~
getc
exit status 1
'rtc' was not declared in this scope
Bien vue pour l'erreur de tempo , c'etait pour faire des essaies avec des leds a la va-vite , je vais quand même pas faire lever ma fille a 5h30 du mat
C:\Users\steve\AppData\Local\Temp\arduino_modified_sketch_368356\sketch_oct18a.ino: In function 'void setup()':
sketch_oct18a:24:4: error: 'RTC' was not declared in this scope
RTC.adjust(DateTime((2020, 10, 18 ,19, 37, 00));
^~~
sketch_oct18a:24:51: error: expected ')' before ';' token
RTC.adjust(DateTime((2020, 10, 18 ,19, 37, 00));
^
exit status 1
'RTC' was not declared in this scope
Après j'avoue que j'ai acheter mon RTC chez un revendeur ou j'ai de moins en moins confiance ( arduino de contre facon , prix exorbitant, etc...)