je viens de reprendre mon équation en fonction de ce que tu m'as donné, en y indiquant du mieux possible, toutes les équations possible, mais je ne comprend pas, il met plein d'erreur. J'ai décidément beaucoup de mal à mettre par écrit ce que j'ai dans la tête :).
code complet :
/****************************************
************** DS3231 DEBUT ************
****************************************/
#include "Wire.h"
#define DS3231_I2C_ADDRESS 0x68
// Convert normal decimal numbers to binary coded decimal
byte decToBcd(byte val)
{
return( (val/10*16) + (val%10) );
}
// Convert binary coded decimal to normal decimal numbers
byte bcdToDec(byte val)
{
return( (val/16*10) + (val%16) );
}
/****************************************
************** DS3231 FIN **************
****************************************/
#include <Servo.h> //bibliothèque gestion servomoteur
#include <JeeLib.h>
// init chien de garde
ISR(WDT_vect) { Sleepy::watchdogEvent(); }
//variable pour utiliser le test au lieu des horaires programmés(réglage=1)
boolean test = 0;
// définition des positions de la porte.
const int Porte_Ouverte = 160 ; // valeur du servo porte ouverte
const int Porte_Fermee = 10 ; // valeur du servo porte ouverte
boolean HeureOuverture = false ;
byte Heure_nuit = 0;
byte Minute_nuit = 0;
byte Heure_jour = 0;
byte Minute_jour = 0;
//création d'un nouveau servomoteur
Servo monServo;
//////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
void setup(){
//on déclare l'entrée du servo connectée sur la broche 3 (D3 (PWM))
monServo.attach(3);
/****************************************
************** DS3231 DEBUT ************
****************************************/
Wire.begin();
Serial.begin(9600);
}
void setDS3231time(byte second, byte minute, byte hour, byte dayOfWeek, byte
dayOfMonth, byte month, byte year)
{
// sets time and date data to DS3231
Wire.beginTransmission(DS3231_I2C_ADDRESS);
Wire.write(0); // set next input to start at the seconds register
Wire.write(decToBcd(second)); // set seconds
Wire.write(decToBcd(minute)); // set minutes
Wire.write(decToBcd(hour)); // set hours
Wire.write(decToBcd(dayOfWeek)); // set day of week (1=Sunday, 7=Saturday)
Wire.write(decToBcd(dayOfMonth)); // set date (1 to 31)
Wire.write(decToBcd(month)); // set month
Wire.write(decToBcd(year)); // set year (0 to 99)
Wire.endTransmission();
}
void readDS3231time(byte *second,
byte *minute,
byte *hour,
byte *dayOfWeek,
byte *dayOfMonth,
byte *month,
byte *year)
{
Wire.beginTransmission(DS3231_I2C_ADDRESS);
Wire.write(0); // set DS3231 register pointer to 00h
Wire.endTransmission();
Wire.requestFrom(DS3231_I2C_ADDRESS, 7);
// request seven bytes of data from DS3231 starting from register 00h
*second = bcdToDec(Wire.read() & 0x7f);
*minute = bcdToDec(Wire.read());
*hour = bcdToDec(Wire.read() & 0x3f);
*dayOfWeek = bcdToDec(Wire.read());
*dayOfMonth = bcdToDec(Wire.read());
*month = bcdToDec(Wire.read());
*year = bcdToDec(Wire.read());
}
/****************************************
************** DS3231 FIN **************
****************************************/
//////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
// programme de positionnement du servo en fonction de l'heure
void AutoServo() {
/****************************************
************** DS3231 DEBUT ************
****************************************/
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
// retrieve data from DS3231
readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month,
&year);
/****************************************
************** DS3231 FIN **************
****************************************/
Serial.println("***");
Serial.print(" mois: ");
Serial.println(month);
Serial.print("heure = ");
Serial.print(hour);
Serial.print(" : ");
Serial.println(minute);
Serial.print("porte ouverte : ");
Serial.println(HeureOuverture);
switch (month){
case 1: // Janvier
if ((hour>=8) &&( hour <18)) {
break;
/*$$$$$$$$$$$$$$$*/
case 2: //février
if ((hour>=7) && (hour <19)) {
monServo.write(Porte_Ouverte);
}
else monServo.write(Porte_Fermee);
break;
/*$$$$$$$$$$$$$$$*/
case 3: //mars
if ((hour>=7) && (hour <20)) {
monServo.write(Porte_Ouverte);
}
else monServo.write(Porte_Fermee);
break;
/*$$$$$$$$$$$$$$$*/
case 4: //avril
if (dayOfMonth < 16 )
{
if (hour>=6) && (hour<=21)
{
HeureOuverture=1;
}
else HeureOuverture=0;
else if (dayOfMonth >= 16 )
{
if (hour>=6) && ((hour<=21) && (minute < 30))
{
HeureOuverture=1;
}
else HeureOuverture=0;
};}
break;
/*$$$$$$$$$$$$$$$*/
case 5: //mai
if ((hour>=6) && (hour <21)) {
monServo.write(Porte_Ouverte);
}
else monServo.write(Porte_Fermee);
break;
/*$$$$$$$$$$$$$$$*/
case 6: //juin
if ((hour>=6) && (hour <21)) {
monServo.write(Porte_Ouverte);
}
else monServo.write(Porte_Fermee);
break;
/*$$$$$$$$$$$$$$$*/
case 7: //juillet
if ((hour>=6) && (hour <22)) {
monServo.write(Porte_Ouverte);
}
else monServo.write(Porte_Fermee);
break;
/*$$$$$$$$$$$$$$$*/
case 8: //aout
if ((hour>=6) && (hour <22)) {
monServo.write(Porte_Ouverte);
}
else monServo.write(Porte_Fermee);
break;
/*$$$$$$$$$$$$$$$*/
case 9: //septembre
if ((hour>=6 ) && (hour <21)) {
monServo.write(Porte_Ouverte);
}
else monServo.write(Porte_Fermee);
break;
/*$$$$$$$$$$$$$$$*/
case 10: //octobre
if ((hour>=7) && (hour <20)) {
monServo.write(Porte_Ouverte);
}
else monServo.write(Porte_Fermee);
break;
/*$$$$$$$$$$$$$$$*/
case 11: //novembre
if ((hour>=7) && (hour <19 )) {
monServo.write(Porte_Ouverte);
}
else monServo.write(Porte_Fermee);
break;
/*$$$$$$$$$$$$$$$*/
case 12: //decembre
if ((hour>=7 ) && (hour <19)) {
monServo.write(Porte_Ouverte);
}
else monServo.write(Porte_Fermee);
break;
}
if (HeureOuverture) {
monServo.write(Porte_Ouverte); }
else monServo.write(Porte_Fermee);
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
void TestServo()
{
monServo.write(Porte_Ouverte);
delay(3000);
monServo.write(Porte_Fermee);
delay(3000);
}
//////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
void loop(){
// set the initial time here:
// DS3231 seconds, minutes, hours, day, date, month, year
//setDS3231time(30,03,18,2,04,04,16);
if(test==1) {
TestServo();}
else AutoServo();
Sleepy::loseSomeTime(2000);
delay(1000);
}
et la partie incriminée :
case 4: //avril
if (dayOfMonth < 16 )
{
if (hour>=6) && (hour<=21)
{
HeureOuverture=1;
}
else HeureOuverture=0;
else if (dayOfMonth >= 16 )
{
if (hour>=6) && ((hour<=21) && (minute < 30))
{
HeureOuverture=1;
}
else HeureOuverture=0;
};}
break;