Bonjour à Tous,
Parfois des miracles se produisent ! le problème c'est qu'ils ne se répètent pas !
Je souhaite programmer une dizaine de prises selon des plages horaires définies.
J'ai donc acquis:
une Arduino Uno avec un kit de demarrage
Un module RTC DS1307
un emetteur et Recepteur 433 Mhz
et les prises radio commandées Phenix
Et c'est là que le miracle s'est produit car j'arrive à les commander selon mon besoin.
J'ai 2 questions:
- Ce code est il acceptable (La façon de faire est elle correcte ?)
- Je souhaiterai effectuer chaque jour à une heure donnée un décalage aléatoire de quelques minutes afin de ne pas avoir toujours les mêmes horaires.
Je pense que pour les experts que vous êtes, c'est basique, mais pour moi, cela fait plus de 8 jours que je bute sur ce problème.
Alors si vous pouviez m'aider à ce que le miracle se reproduise je vous en serai éternellement reconnaissant !
Par avance Merci
Romich
#include <RCSwitch.h> // Communication avec commande radiofrequence 433 mhz
#include <Wire.h> // echange avec Arduino
#include "RTClib.h" //
RTC_DS1307 rtc;
RCSwitch mySwitch = RCSwitch();
void setup () {
Serial.begin(57600);
#ifdef AVR
Wire.begin();
#else
Wire1.begin(); // Shield I2C pins connect to alt I2C bus on Arduino Due
#endif
rtc.begin();
if (! rtc.isrunning()) {
Serial.println("RTC is NOT running!");
// la ligne suivante regle le RTC à la date et heure de compilation
rtc.adjust(DateTime(__DATE__, __TIME__));
}
// Emetteur 433 est connecte en Arduino Pin #10
mySwitch.enableTransmit(10);
// Optional set pulse length.
mySwitch.setPulseLength(320);
// Optional set protocol (default is 1, will work for most outlets)
// mySwitch.setProtocol(2);
// Optional set number of transmission repetitions.
mySwitch.setRepeatTransmit(150);
}
//int jourdecontrole = 0;
void loop ()
{
int randNumber = random(0, 30);
DateTime now = rtc.now();
//int jouractuel = now.day(); // = jour du systeme
//int queljour = weekday ();
//Serial.println(jouractuel);
//Serial.print (queljour);
// Serial.println(jourdecontrole);
//int randNumber = random(0, 20);
Serial.print("Le decalage aleatoire sera de : ");
Serial.print(randNumber);
Serial.println(" minutes");
int tpsactuel = ((now.hour()*100)+ now.minute() ); // Affichage de l'heure actuelle en minutes
// tpsactuel = tpsactuel + randNumber;
Serial.println(tpsactuel); // retirer
//if (jouractuel != jourdecontrole)
tpsactuel = tpsactuel + randNumber;
Serial.println(tpsactuel);
// Plages pour P1
int TPSONP1 =330; // heure ALLUMER Plage N°1 = 3 h 30
int TPSOFFP1 =345; // heure ETEINDRE Plage N°1 = 3 h 45
int TPSONP2 =555;
int TPSOFFP2 =605;
int TPSONP3 =1918;
int TPSOFFP3 =1930;
int TPSONP4 =1958;
int TPSOFFP4 =2012;
int TPSONP5 =2203;
int TPSOFFP5 =2213;
int TPSONP6 =0;
int TPSOFFP6 =1;
int TPSONP7 =0;
int TPSOFFP7 =1;
int TPSONP8 =0;
int TPSOFFP8 =1;
int TPSONP9 =0;
int TPSOFFP9 =1;
int TPSONP10 =0;
int TPSOFFP10 =1;
// Plages pour P2
int TPSONP11 =630; // heure ALLUMER Plage N°1 convertie en minute
int TPSOFFP11 =650; // heure ETEINDRE Plage N°1 convertie en minute
int P1Allume = 0 ; int P2Allume = 0 ;int P3Allume = 0 ; int P4Allume = 0 ; int P5Allume = 0 ;
int P6Allume = 0 ;
int P7Allume = 0 ;
int P8Allume = 0 ;
int P9Allume = 0 ;
int P10Allume = 0 ;
Serial.println(now.day(), DEC);
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
Serial.println (tpsactuel); // en minutes
// TRAITEMENT PRISE 1
// Verification SI la vateur tpsactuel est comprise dans la fourchette de tps
if ( (tpsactuel >= TPSONP1) && (tpsactuel <= TPSOFFP1) ||(tpsactuel >= TPSONP2) && (tpsactuel <= TPSOFFP2) ||(tpsactuel >= TPSONP3) && (tpsactuel <= TPSOFFP3)||(tpsactuel >= TPSONP4) && (tpsactuel <= TPSOFFP4)||(tpsactuel >= TPSONP5) && (tpsactuel <= TPSOFFP5)||(tpsactuel >= TPSONP6) && (tpsactuel <= TPSOFFP6)||(tpsactuel >= TPSONP7) && (tpsactuel <= TPSOFFP7)||(tpsactuel >= TPSONP8) && (tpsactuel <= TPSOFFP8)||(tpsactuel >= TPSONP9) && (tpsactuel <= TPSOFFP9)||(tpsactuel >= TPSONP10) && (tpsactuel <= TPSOFFP10) )
{
int P1Allume = 1;
mySwitch.sendTriState("0FFF00FFFF0F");
delay(500);
Serial.println("La prise N 1 est SOUS tension !"); // affiche l'etat ON de P1
}
else
{
int P1Allume = 0;
mySwitch.sendTriState("0FFF00FFFFF0");
Serial.println("La prise N 1 est HORS tension !"); // affiche l'etat OFF de P1
delay(500);
}
// // TRAITEMENT PRISE 2
// Verification SI la vateur tpsactuel est comprise dans la fourchette de tps
if ( (tpsactuel >= TPSONP11) && (tpsactuel <= TPSOFFP11) ||(tpsactuel >= TPSONP12) && (tpsactuel <= TPSOFFP12) ||(tpsactuel >= TPSONP13) && (tpsactuel <= TPSOFFP13)||(tpsactuel >= TPSONP14) && (tpsactuel <= TPSOFFP14)||(tpsactuel >= TPSONP15) && (tpsactuel <= TPSOFFP15)||(tpsactuel >= TPSONP16) && (tpsactuel <= TPSOFFP16)||(tpsactuel >= TPSONP17) && (tpsactuel <= TPSOFFP17)||(tpsactuel >= TPSONP18) && (tpsactuel <= TPSOFFP18)||(tpsactuel >= TPSONP19) && (tpsactuel <= TPSOFFP19)||(tpsactuel >= TPSONP20) && (tpsactuel <= TPSOFFP20) )
{
int P2Allume = 1;
mySwitch.sendTriState("0FFF0F0FFF0F");
delay(500);
Serial.println("La prise N 2 est SOUS tension !"); // affiche l'etat ON de P2
}
else
{
int P2Allume = 0;
mySwitch.sendTriState("0FFF0F0FFFF0");
Serial.println("La prise N 2 est HORS tension !"); // affiche l'etat OFF de P2
delay(500);
}
Serial.println();
Serial.println();
delay(1000);
// Fin du programme
}