Programmer une alarme avec bluetooth ?

Bonjour à tous,

Cela fait longtemps que j’utilise ce forum pour trouver des solutions à mes problèmes, mais là, je ne trouve pas d’informations !

Mon projet: fabriquer un ouvre porte (pour la cage du lapin !) à heure programmable.

J’ai donc un arduino, un module rtc, et un moteur step. Tout fonctionne correctement pour le moment mais j’aimerais aller plus loin en programmant l’heure d’ouverture via le bluetooth et une appli. (là je programme l’heure directement dans le programme et je dois téléverser à chaque fois)

pour le bluetooth, c’est ok aussi, je connecte mon hc05 sans problème et j’arrive même à controler le moteur grâce à une appli en envoyant “a” pour ouvrir et “b” pour fermer.

Mais dans mon projet ce n’est pas juste de l’envoi d’informations, il faut que je “change” une partie code ? Non ?

Bref! je ne sais pas comment procéder.

Merci pour les conseils !

Je vous met le code ci-dessous (sans le bluetooth).

#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 rtc;

#define ADRESSE_I2C_RTC 0x68

#include <Stepper.h> 
double Pas = 2048;
Stepper moteur(Pas, 2, 4, 3, 5);  

// Déclaration des variables
byte seconde, minute, heure, numJourSemaine, numJourMois, mois, annee;

void setup(){
Wire.begin();
Serial.begin(9600);

 moteur.setSpeed(10);  
 Serial.begin(9600);

 if (! rtc.isrunning()) {
    Serial.println("RTC is NOT running!");
    
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
    
  }
  rtc.adjust(DateTime(2019, 3, 3, 20, 0, 0));
   rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));

 


}
void loop(){
// Réception de l'heure et de la date
Wire.beginTransmission(ADRESSE_I2C_RTC);
Wire.write(0); // Positionner le pointeur de registre sur 00h
Wire.endTransmission();
Wire.requestFrom(ADRESSE_I2C_RTC, 7);
// Accède aux données de l'horloge (à partir du registre 00h)
seconde = bcdToDec(Wire.read() & 0x7f);
minute = bcdToDec(Wire.read());
heure = bcdToDec(Wire.read() & 0x3f);
numJourSemaine = bcdToDec(Wire.read());
numJourMois = bcdToDec(Wire.read());
mois = bcdToDec(Wire.read());
annee = bcdToDec(Wire.read());



// Affichage de l'heure (moniteur série)
if (heure<10){Serial.print("0");}
Serial.print(heure, DEC);
Serial.print(":");
if (minute<10){Serial.print("0");}
Serial.print(minute, DEC);
Serial.print(":");
if (seconde<10){Serial.print("0");}
Serial.println(seconde, DEC);

delay(1000);


if (seconde==10 ){
  Serial.println("OUVERTURE");    
   moteur.step(Pas);  


 
     } }
// Convertir les nombres décimaux codés binaires en décimaux normaux
byte bcdToDec(byte val){return( (val/16*10) + (val%16));}

Bonjour Anoba,

Le seul moyen de mémoriser des données persistantes au redémarrage de la carte et hors zone programme est de l’enregistrer dans la zone EEPROM du module RTC.

Il suffit ensuite de comparer l’heure du RTC avec les heures mémorisées.

Cela implique que l’arduino reste éveillée en permanence pour effectuer cette comparaison.

Un module ds3231, bien plus précis dans le temps, dispose de 2 mémoires ‘alarme’ ainsi que d’une broche pouvant déclenche une interruption sur la carte arduino.

La carte pourra être placée en sommeil et ne sera réveillée qu’à la réception de l’interruption du RTC.

Pour le stockage de l’alarme via le Bluetooth, définir votre protocole d’échange entre l’application et votre carte pour savoir quelle alarme (ouverture ou fermeture) vous envoyez suivi de sa valeur.

BonjourZlika,

Merci pour ces pistes.

Laisser l'Arduino éveillé ne pose pas de problème pour ce projet.

Si j'ai bien compris vous me conseillez d'utiliser la fonction alarme déjà présente dans certains modules RTC ?

Les deux solutions sont faisables sans trop de difficultés.

À vous de choisir celle qui vous convient...

Vous pouvez commencer par la première et si vous observez un décalage trop important dans le temps alors vous pouvez investir dans un module ds3231.