merci Kamill
oui tu as raison, sur mon programme d'émission si je rajoute ta ligne dans le setup ca marche... donc tout marche,
par contre avec ce montage je veux faire un mix entre 2 programmes
le programme que je vais mettre en final c'est celui ci
(juste un extrait car trop long pour etre posté)
/**
#include <Wire.h> // Required by RTClib
#include <LiquidCrystal.h> // Required by LCDKeypad
#include <LCDKeypad.h>
#include "RTClib.h"
#define TIME_OUT 5 // One of the system's FSM transitions
#define ALARM_TIME_MET 6 // One of the system's FSM transitions
#define BUZZER_PIN 3 // Output PWM pin for the buzzer
#define SNOOZE 10 // Minutes to snooze (sommeiller, attendre...)
// The different states of the system
enum states
{
...
};
// Crée une instance LCDKeypad
// Il gère l'écran LCD et les boutons sur le Shield
LCDKeypad lcd;
// Crée une instance RTC_DS1307
// Il gère le Real-Time Clock DS1307
RTC_DS1307 RTC;
states state; // Contient l'état actuel du système
int8_t button; // Contient le bouton actuel enfoncé
uint8_t alarmHours = 0, alarmMinutes = 0; // Contient l'heure d'alarme actuelle
uint8_t heureMontee = 0, heureDescente = 0; // Contient l'heure d'ouverture & fermeture actuelle
uint8_t tmpHeuresMontee;
uint8_t tmpMinutesMontee;
boolean alarm = false; // Contient l'état actuel de l'alarme
unsigned long timeRef;
DateTime now; // Contient les informations sur la date et l'heure actuelle
void setup()
{
// vw_set_ptt_pin(13);
pinMode(BUZZER_PIN, OUTPUT); // Buzzer pin
// Initialise les instances du LCD et de la RTC
lcd.begin(16, 2);
Wire.begin();
RTC.begin();
state = SHOW_TIME; // état initial du FSM (traduction : machine à états)
}
// A le controle principal du FSM (taux de rafraichissement de 1Hz)
void loop()
{
timeRef = millis();
// Uses the current state to decide what to process
switch (state)
{
...
}
while ( (unsigned long)(millis() - timeRef) < 970 )
{
if ( (button = lcd.button()) != KEYPAD_NONE )
{
while ( lcd.button() != KEYPAD_NONE ) ;
transition(button);
break;
}
}
}
// Observe le declencheur fourni (evenement) et effectue la transition d'etat appropriee
// If necessary, sets secondary variables
void transition(uint8_t declencheur)
{
switch (state)
{
...
}
}
// Displays the current date and time, and also an alarm indication
// e.g. SAT 04 JAN 2014, 22:59:10 ALARM
void showTime()
{
now = RTC.now();
const char* dayName[] = { "SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT" };
const char* monthName[] = { "JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC" };
lcd.clear();
lcd.print(String(dayName[now.dayOfTheWeek()]) + " " +
(now.day() < 10 ? "0" : "") + now.day() + " " +
monthName[now.month()-1] + " " + now.year());
lcd.setCursor(0,1);
lcd.print((now.hour() < 10 ? "0" : "") + String(now.hour()) + ":" +
(now.minute() < 10 ? "0" : "") + now.minute() + ":" +
(now.second() < 10 ? "0" : "") + now.second() + (alarm ? " ALARM" : ""));
}
// Affiche l'heure de l'alarme actuelle et revient en arriere (transition d'etat) pour afficher la
// date et heure apres 2 sec (+ 1 sec de retard a l'interieur de la fonction de boucle)
// par exemple. Heure de l'alarme HEURE: 08 MIN: 20
void showAlarmTime()
{
lcd.clear();
lcd.print("Alarm Time");
lcd.setCursor(0,1);
lcd.print(String("HOUR: ") + ( alarmHours < 9 ? "0" : "" ) + alarmHours +
" MIN: " + ( alarmMinutes < 9 ? "0" : "" ) + alarmMinutes);
delay(2000);
transition(TIME_OUT);
}
// Verifie si l'heure de l'alarme a ete atteinte,
// et si oui initie une transition d'etat
void checkAlarmTime()
{
if ( now.hour() == alarmHours && now.minute() == alarmMinutes ) transition(ALARM_TIME_MET);
}
// Lorsque le buzzer sonne, en appuyant sur les boutons UP ou DOWN,
// un SNOOZE (la valeur par defaut est 10) retarde l'heure de l'alarme
void snooze()
{
alarmMinutes += SNOOZE;
if ( alarmMinutes > 59 )
{
alarmHours += alarmMinutes / 60;
alarmMinutes = alarmMinutes % 60;
}
}
// La premiere partie du processus en 2 parties qui sert a regler l'heure de l'alarme
// Recoit l'heure de l'alarme. Si non fourni dans les 5 secondes,
// expire et retourne a un etat precedent (heure et date)
void setAlarmHours()
{
unsigned long timeRef;
boolean timeOut = true;
lcd.clear();
lcd.print("Alarm Time");
tmpHeuresMontee = 0;
timeRef = millis();
lcd.setCursor(0,1);
lcd.print("Set hours: ");
lcd.write(1);//fleche en haut pour montée
lcd.print(" ");
while ( (unsigned long)(millis() - timeRef) < 5000 )
{
uint8_t button = lcd.button();
if ( button == KEYPAD_UP )
{
tmpHeuresMontee = tmpHeuresMontee < 23 ? tmpHeuresMontee + 1 : tmpHeuresMontee;
lcd.setCursor(13,1);
lcd.print(" ");
lcd.setCursor(13,1);
if ( tmpHeuresMontee < 10 ) lcd.print(" ");
lcd.print(tmpHeuresMontee);
timeRef = millis();
}
else if ( button == KEYPAD_DOWN )
{
tmpHeuresMontee = tmpHeuresMontee > 0 ? tmpHeuresMontee - 1 : tmpHeuresMontee;
lcd.setCursor(13,1);
lcd.print(" ");
lcd.setCursor(13,1);
if ( tmpHeuresMontee < 10 ) lcd.print(" ");
lcd.print(tmpHeuresMontee);
timeRef = millis();
}
else if ( button == KEYPAD_SELECT )
{
while ( lcd.button() != KEYPAD_NONE ) ;
timeOut = false;
break;
}
delay(150);
}
if ( !timeOut ) transition(KEYPAD_SELECT);
else transition(TIME_OUT);
}
// La deuxieme partie du processus en 2 parties qui sert a regler l'heure de l'alarme
// Recoit les minutes d'alarme. Si non fourni dans les 5 secondes,
// expire et retourne a un etat precedent (heure et date)
// Si des minutes sont fournies, regle l'heure de l'alarme et active l'alarme
void setAlarmMinutes()
{
unsigned long timeRef;
boolean timeOut = true;
//uint8_t tmpMinutesMontee = 0;
lcd.clear();
lcd.print("Alarm Time");
timeRef = millis();
lcd.setCursor(0,1);
lcd.print("Set minutes ");
lcd.write(1);//fleche en haut pour montée
lcd.print(" ");
while ( (unsigned long)(millis() - timeRef) < 5000 )
{
uint8_t button = lcd.button();
if ( button == KEYPAD_UP )
{
tmpMinutesMontee = tmpMinutesMontee < 55 ? tmpMinutesMontee + 5 : tmpMinutesMontee;
lcd.setCursor(14,1);
lcd.print(" ");
lcd.setCursor(14,1);
if ( tmpMinutesMontee < 10 ) lcd.print(" ");
lcd.print(tmpMinutesMontee);
timeRef = millis();
}
else if ( button == KEYPAD_DOWN )
{
tmpMinutesMontee = tmpMinutesMontee > 0 ? tmpMinutesMontee - 5 : tmpMinutesMontee;
lcd.setCursor(14,1);
lcd.print(" ");
lcd.setCursor(14,1);
if ( tmpMinutesMontee < 10 ) lcd.print(" ");
lcd.print(tmpMinutesMontee);
timeRef = millis();
}
else if ( button == KEYPAD_SELECT )
{
while ( lcd.button() != KEYPAD_NONE ) ;
timeOut = false;
break;
}
delay(150);
}
if ( !timeOut )
{
alarmHours = tmpHeuresMontee;
alarmMinutes = tmpMinutesMontee;
transition(KEYPAD_SELECT);
}
else transition(TIME_OUT);
}
et là si je rajoute il plante à la compilation
or ,mon problème est que je souhaite utiliser ce programme, mais en plus faire des transmissions (l'heure notamment) c'est pour ca que j'avais juste mis ce petit bout de programme de transmission de nombres pour verifier la compatibilité avant d'aller plus loin...
NB : en final, mon programme servira à commander des volets roulants et ce que je suis en train de développer c'est la télécommande