Bonjour a tous !
Voila je suis assez inexpérimenté en prog et je suis bloqué sur un code pour un projet de lampe bébé commandé par télécommande.
Entre autre il s'agit tous simplement d'une télécommande 433mhz qui envoie des codes permettant de contrôler des relais ou envoyer des commande à un MP3
Ci-dessous le code que j'ai déjà testé est qui marche bien sauf 1 mode (eh oui il y à toujours un mais

)
En fait quant on envoie le code pour le mode 2 les relais bouges et le MP3 se met en marche et au bout de 20 min le tout s'éteint mais à cause de delay qui d'après ce que j'ai compris est une fonction bloquante je ne peux plus commander les autres fonctions du MP3 (<<,>>,++,--) durant ces 20 min.
J'ai fait pas mal d'essai en passant par millis mais pas moyen de trouver la bonne façon de faire.
Pouvez-vous m'aider ?
//Initialisation recepteur télécommande;
#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();
//Initialisation MP3 ;
const byte COMMAND_BYTE_START = 0x7E;
const byte COMMAND_BYTE_VERSION = 0xFF;
const byte COMMAND_BYTE_STOP = 0xEF;
const byte DEVICE_SDCARD = 0x02;
//Commandes du MP3 ;
void resetPlayer() {
send_kt_command(0x0C, 0, 0, 100);}
void playResumeMusic() {
send_kt_command(0x0D, 0, 0, 20);}
void stopMusic() {
send_kt_command(0x16, 0, 0, 20);}
void playNextSong() {
send_kt_command(0x01, 0, 0, 10);}
void playPreviousSong() {
send_kt_command(0x02, 0, 0, 10);}
void volumeUp() {
send_kt_command(0x04, 0, 0, 10);}
void volumeDown() {
send_kt_command(0x05, 0, 0, 10);}
void shufflePlay() {
send_kt_command(0x18, 0, 0, 20);}
void loopAllMusic(byte enabled) {
send_kt_command(0x11, 0, !!enabled, 10);}
void setVolume(byte volume) {
if (volume > 30) volume = 30;
send_kt_command(0x06, 0, volume, 10);}
void selectSourceDevice(byte device) {
send_kt_command(0x09, 0, device, 200);}
//Comande controle led 13 ;
void ledcontrol() {
digitalWrite (13, HIGH);
delay (50);
digitalWrite (13, LOW);
delay (50);
digitalWrite (13, HIGH);
delay (50);
digitalWrite (13, LOW); }
// Fonction de bas niveau pour envoyer une commande au module KT403A ;
void send_kt_command(byte command, byte data_h, byte data_l, unsigned long cmd_delay) {
Serial.write(COMMAND_BYTE_START);
Serial.write(COMMAND_BYTE_VERSION);
Serial.write((byte) 0x06);
Serial.write(command);
Serial.write((byte) 0x00);
Serial.write(data_h);
Serial.write(data_l);
Serial.write(COMMAND_BYTE_STOP);
// 16-bits checksum is optionnal
delay(cmd_delay); }
void setup() {
Serial.begin(9600);
resetPlayer();
selectSourceDevice(DEVICE_SDCARD);
setVolume(15);
mySwitch.enableReceive(0);
pinMode (8, OUTPUT);
pinMode (9, OUTPUT);
pinMode (10, OUTPUT);
pinMode (11, OUTPUT);
pinMode (13, OUTPUT);
digitalWrite (8, LOW);
digitalWrite (9, HIGH);
digitalWrite (10, HIGH);
digitalWrite (11, HIGH);
}
void loop() {
switch(mySwitch.getReceivedValue ()){
// Mode 1 lumieres nuit ;
case 5510485 :
Serial.println("Lumieres nuit");
ledcontrol();
delay (100);
digitalWrite (8, HIGH);
digitalWrite (9, LOW);
digitalWrite (10, LOW);
break ;
// Mode 2 sleep mode ;
case 5510484 :
Serial.println("Sleep mode");
ledcontrol();
digitalWrite (8, HIGH);
digitalWrite (9, LOW);
digitalWrite (10, LOW);
shufflePlay();
delay (1200000);
digitalWrite (8, HIGH);
digitalWrite (9, HIGH);
digitalWrite (10, HIGH);
stopMusic();
break ;
// MP3 Music play ;
case 5522773 :
Serial.println("play");
ledcontrol();
delay (100);
shufflePlay();
break ;
// MP3 Music stop ;
case 5522772 :
Serial.println("stop");
ledcontrol();
delay (100);
stopMusic();
break ;
// MP3 ++ ;
case 5525844 :
Serial.println("++");
ledcontrol();
delay (100);
volumeUp();
break ;
// MP3 -- ;
case 5525845 :
Serial.println("--");
ledcontrol();
delay (100);
volumeDown();
break ;
// MP3 >> ;
case 5526612 :
Serial.println(">>");
ledcontrol();
delay (100);
playNextSong();
break ;
// MP3 << ;
case 5526615 :
Serial.println("<<");
ledcontrol();
delay (100);
playPreviousSong();
break ;
}
mySwitch.resetAvailable();
delay (100);
}