projet de boule lumineuse

bonjour a tous
j’ai dans l’idée de fabriquer mes propres lampes boules ( même style que les Phillips )
j’ai réfléchit a l’idée de faire la télécommande mais beaucoup trop chiant pour ce que je veut faire
j’ai retrouvé une vieille télécommande rf qui a l’air prometteuse ( photo en pj )
l’idée serais d’interpréter les code envoyé par la télécommande par un arduino/attiny pour allumer une led rgb en fonction
le tout dans une boule en plexi translucide
j’ai ouvert la télécommande et je pense avoir vu des choses intéressante et d’autre moins réjouissante
j’ai trouvé deux composants qui ont l’air de servir au pilotage
un wtc801sp1-l
introuvable sur google
et un stc 15f104e qui lui a un datasheet complet ( en anglais bien sur )
a coté de ce dernier ce trouve 4 trou dont 2 marquer 5v et GND
je pense a une liaison série mais pas sur
en haut on a le module rf souder a l’arrache
ce qui permettra que je mette ce que je veux comme fréquences

avez vous des idées pour interpréter les codes et pour refaire une système complet
merci a vous

bonjour a tous
après avoir un peu gratter sur la librairie RCSwitch j’ai réussi a récupéré une partie des codes
non sans mal car un changement d’emetteur sur la télécommande a été nécessaire
maintenant j’avoue ne pas savoir comment géré tout les programmes
j’ai commencer a codé ça

/*
  Boule lumineuse a led style philips
  télécommande RF chinoise modifier avec emmeteur 433.92Mhz
  recodage des fonctions principal
*/
// inclusion librairie RCswitch pour reception RF
#include <RCSwitch.h>

RCSwitch mySwitch = RCSwitch();

// déclaration de pin digital pour led
int ledRougePin = 9; // PWM
int ledVertPin = 10; // PWM
int ledBleuPin = 11; // PWM

// déclaration des variables
int boucle = 0;


void setup() {
  Serial.begin(9600);
  mySwitch.enableReceive(0);  // Receiver on inerrupt 0 => that is pin #2

  // déclaration des pins en sortie
  pinMode( ledRougePin, OUTPUT );
  pinMode( ledVertPin, OUTPUT );
  pinMode( ledBleuPin, OUTPUT );
  
  // Tout éteindre
  digitalWrite( ledRougePin, LOW ); 
  digitalWrite( ledVertPin, LOW ); 
  digitalWrite( ledBleuPin, LOW );
  
}

// code des sous boucle 
/* couleur simple
  Active une couleur à la fois.
  Vous pouvez modifier le code pour allumer plusieurs couleurs
    en même temps.
 */
void couleursSimple(){
  // allumer Vert
  digitalWrite( ledRougePin, LOW ); 
  digitalWrite( ledVertPin, HIGH ); 
  digitalWrite( ledBleuPin, LOW ); 
  // Attendre 1 sec
  delay( 1000 );
  // allumer Rouge
  digitalWrite( ledRougePin, LOW ); 
  digitalWrite( ledVertPin, LOW ); 
  digitalWrite( ledBleuPin, HIGH ); 
  // Attendre 1 sec
  delay( 1000 );
  // allumer Bleu
  digitalWrite( ledRougePin, HIGH ); 
  digitalWrite( ledVertPin, LOW ); 
  digitalWrite( ledBleuPin, LOW ); 
  // Attendre 1 sec
  delay( 1000 );
  
}

/*  Couleur fondue 
   Cette fonction passe d'une couleur à l'autre en fondue
   enchainé dans l'ordre suivant:
     Rouge -> Vert --> Bleu --> Rouge --> Vert --> ...
 */
void couleursFondue(){
  // allumer Rouge
  digitalWrite( ledRougePin, HIGH ); 
  digitalWrite( ledVertPin, LOW ); 
  digitalWrite( ledBleuPin, LOW ); 
  // Ajouter progressivement du vert
  // Retirer progressivement du rouge
  //   attention: 255 = pas de couleur, 0 = max de couleur
  for( int iVert = 255; iVert>0; iVert-- ) {
    int iRouge = 0 - iVert;
    analogWrite( ledRougePin, iRouge );
    analogWrite( ledVertPin, iVert );
    delay( 20 );
  }
  // Ajouter progressivement du bleu
  // Retirer progressivement du vert
  //   attention: 255 = pas de couleur, 0 = max de couleur
  for( int iBleu = 255; iBleu>0; iBleu-- ) {
    int iVert = 0 - iBleu;
    analogWrite( ledVertPin, iVert );
    analogWrite( ledBleuPin, iBleu );
    delay( 20 );
  }
  // Ajouter progressivement du rouge
  // Retirer progressivement du bleu
  //   attention: 255 = pas de couleur, 0 = max de couleur
  for( int iRouge = 255; iRouge>0; iRouge-- ) {
    int iBleu = 0 - iRouge;
    analogWrite( ledBleuPin, iBleu );
    analogWrite( ledRougePin, iRouge );
    delay( 20 );
  }
}

void loop() {
  if (mySwitch.available()) {
    
    int value = mySwitch.getReceivedValue();
    
    if (value == 0) {
      Serial.println("Unknown encoding");
    } else {
      if (mySwitch.getReceivedValue() == 13434879 || boucle == 0){
      Serial.print( "on boucle = " );
      boucle == 0;
      Serial.println( boucle );

      
    }
    if (mySwitch.getReceivedValue() == 13434639) {
      Serial.println( "play" );
    }
    if (mySwitch.getReceivedValue() == 13434687 || boucle == 4) {
      Serial.print( "m+ boucle = " );
      boucle = 4;
      Serial.println( boucle );
      couleursSimple();
      
    }
    if (mySwitch.getReceivedValue() == 13434831 || boucle == 5) {
      Serial.print( "m- boucle = " );
      boucle = 5;
      Serial.println( boucle );
      couleursFondue();
      
     
    }
    if (mySwitch.getReceivedValue() == 13434819) {
      Serial.println( "b+" );
    }
    if (mySwitch.getReceivedValue() == 13434675) {
      Serial.println( "b-" );
    }
    if (mySwitch.getReceivedValue() == 13434627) {
      Serial.println( "s+" );
    }
    if (mySwitch.getReceivedValue() == 13434867) {
      Serial.println( "s-" );
    }
    

    mySwitch.resetAvailable();
  }
}
}

mais une fois dans mes fonctions je ne peux pas les quittés tant qu’elles ne sont pas fini
et je n’arrive pas a les faire boucler tant que un autre programme n’est pas demander
si vous avec une idée
merci beaucoup

C’est parce que tu utilise la fonction DELAY( ). Elle te bloque tout le programme tant que le delais indiqué n’est pas écoulé. Ilm faut utiliser la fonction millis( ), avec une variable.

anthology:
bonjour a tous
après avoir un peu gratter sur la librairie RCSwitch j’ai réussi a récupéré une partie des codes
non sans mal car un changement d’emetteur sur la télécommande a été nécessaire
maintenant j’avoue ne pas savoir comment géré tout les programmes
j’ai commencer a codé ça

/*

Boule lumineuse a led style philips
  télécommande RF chinoise modifier avec emmeteur 433.92Mhz
  recodage des fonctions principal
*/
// inclusion librairie RCswitch pour reception RF
#include <RCSwitch.h>

RCSwitch mySwitch = RCSwitch();

// déclaration de pin digital pour led
int ledRougePin = 9; // PWM
int ledVertPin = 10; // PWM
int ledBleuPin = 11; // PWM

// déclaration des variables
int boucle = 0;

void setup() {
  Serial.begin(9600);
  mySwitch.enableReceive(0);  // Receiver on inerrupt 0 => that is pin #2

// déclaration des pins en sortie
  pinMode( ledRougePin, OUTPUT );
  pinMode( ledVertPin, OUTPUT );
  pinMode( ledBleuPin, OUTPUT );
 
  // Tout éteindre
  digitalWrite( ledRougePin, LOW );
  digitalWrite( ledVertPin, LOW );
  digitalWrite( ledBleuPin, LOW );
 
}

// code des sous boucle
/* couleur simple
  Active une couleur à la fois.
  Vous pouvez modifier le code pour allumer plusieurs couleurs
    en même temps.
*/
void couleursSimple(){
  // allumer Vert
  digitalWrite( ledRougePin, LOW );
  digitalWrite( ledVertPin, HIGH );
  digitalWrite( ledBleuPin, LOW );
  // Attendre 1 sec
  delay( 1000 );
  // allumer Rouge
  digitalWrite( ledRougePin, LOW );
  digitalWrite( ledVertPin, LOW );
  digitalWrite( ledBleuPin, HIGH );
  // Attendre 1 sec
  delay( 1000 );
  // allumer Bleu
  digitalWrite( ledRougePin, HIGH );
  digitalWrite( ledVertPin, LOW );
  digitalWrite( ledBleuPin, LOW );
  // Attendre 1 sec
  delay( 1000 );
 
}

/*  Couleur fondue
   Cette fonction passe d’une couleur à l’autre en fondue
   enchainé dans l’ordre suivant:
     Rouge → Vert → Bleu → Rouge → Vert → …
*/
void couleursFondue(){
  // allumer Rouge
  digitalWrite( ledRougePin, HIGH );
  digitalWrite( ledVertPin, LOW );
  digitalWrite( ledBleuPin, LOW );
  // Ajouter progressivement du vert
  // Retirer progressivement du rouge
  //   attention: 255 = pas de couleur, 0 = max de couleur
  for( int iVert = 255; iVert>0; iVert-- ) {
    int iRouge = 0 - iVert;
    analogWrite( ledRougePin, iRouge );
    analogWrite( ledVertPin, iVert );
    delay( 20 );
  }
  // Ajouter progressivement du bleu
  // Retirer progressivement du vert
  //   attention: 255 = pas de couleur, 0 = max de couleur
  for( int iBleu = 255; iBleu>0; iBleu-- ) {
    int iVert = 0 - iBleu;
    analogWrite( ledVertPin, iVert );
    analogWrite( ledBleuPin, iBleu );
    delay( 20 );
  }
  // Ajouter progressivement du rouge
  // Retirer progressivement du bleu
  //   attention: 255 = pas de couleur, 0 = max de couleur
  for( int iRouge = 255; iRouge>0; iRouge-- ) {
    int iBleu = 0 - iRouge;
    analogWrite( ledBleuPin, iBleu );
    analogWrite( ledRougePin, iRouge );
    delay( 20 );
  }
}

void loop() {
  if (mySwitch.available()) {
   
    int value = mySwitch.getReceivedValue();
   
    if (value == 0) {
      Serial.println(“Unknown encoding”);
    } else {
      if (mySwitch.getReceivedValue() == 13434879 || boucle == 0){
      Serial.print( "on boucle = " );
      boucle == 0;
      Serial.println( boucle );

}
    if (mySwitch.getReceivedValue() == 13434639) {
      Serial.println( “play” );
    }
    if (mySwitch.getReceivedValue() == 13434687 || boucle == 4) {
      Serial.print( "m+ boucle = " );
      boucle = 4;
      Serial.println( boucle );
      couleursSimple();
     
    }
    if (mySwitch.getReceivedValue() == 13434831 || boucle == 5) {
      Serial.print( "m- boucle = " );
      boucle = 5;
      Serial.println( boucle );
      couleursFondue();
     
     
    }
    if (mySwitch.getReceivedValue() == 13434819) {
      Serial.println( “b+” );
    }
    if (mySwitch.getReceivedValue() == 13434675) {
      Serial.println( “b-” );
    }
    if (mySwitch.getReceivedValue() == 13434627) {
      Serial.println( “s+” );
    }
    if (mySwitch.getReceivedValue() == 13434867) {
      Serial.println( “s-” );
    }

mySwitch.resetAvailable();
  }
}
}



mais une fois dans mes fonctions je ne peux pas les quittés tant qu'elles ne sont pas fini
et je n'arrive pas a les faire boucler tant que un autre programme n'est pas demander
si vous avec une idée
merci beaucoup

merci a toi nono7380 c'est bien ce qui me semblait j'avoue galéré un peu avec millis mais bon ca va venir sinon une idée pour rester sur le même programme tant qu'un autre n'a pas été choisit ? merci