Go Down

Topic: Télécommande automatique pour boitier IPTV (Read 199 times) previous topic - next topic

guillaumetell

Tout est dans le code,
bonne lecture


Code: [Select]
/* Je reçois la télé  via un boîtier IPTV connecté à ma box mais la mise en marche  est assez lente et oblige à plusieurs manipulations de la télécommande
   j'ai voulu automatiser tout çà:
   La télécommande ,un peu simpliste, n'a pas de touche numérique;
   Elles ont été décodées avec IRrecvDump de la bibliothèque IRremote et un récepteur IR récupéré  sur un ancien décodeur
   ceci  n'est pas traité ici.

   L'Arduino a une Led infrarouge sur la pin 3.
   
   La fonction "clavier" permet le pilotage à partir du bandeau du monitor série en simulant la télécommande d'origine ,c'est utile pour la mise au point.
   La fonction "séquence" réalise  après appui sur un bouton ,une suite chronologique comme on le ferait manuellement à la télécommande.
   La fonction "roue codeuse" a été ajoutée pour sélectionner la chaîne a démarrer parmi plusieurs.
   Sur l'écran d'accueil des chaînes (gratuites)de Molotov la disposition est la suivante quand on quitte le bandeau du haut:
   TF1  FRANCE2 FRANCE3 FRANCE5 M6  ARTE
   C8    W9    (TMC)  (TFX)  (LCP) FRANCE O etc... 
   ce qui justifie les déplacements vers le bas ou vers la droite.
   Voilà mon programme ,les pros  vont sans doute trouver à améliorer mais ,tel quel, il est fonctionnel .
   merci de votre attention
   guillaumetell
*/
#include <IRremote.h>
IRsend irsend;
char data = 0;
long int marche = 0x01FE817E;// touche marche / arret
long int bas = 0x1FE02FD; //touche bas
long int droite = 0x1FE9C63; //touche droite
long int gauche = 0x1FEEC13; //touche gauche
long int OK = 0x1FEC837; //touche OK
long int plus = 0x1FEE11E; //augmente le son
//unsigned long millis();
const byte bp = 7;//un bouton poussoir

byte choix = 1; //choix de la chaîne TF1 par défaut
void setup() {
  Serial.begin(9600);
  pinMode(bp, INPUT_PULLUP);
}

void loop() {
  clavier();
  sequence();
  rouecodeuse();
}

void clavier() {
  //if(Serial.available()) // recherche si donnée présente sur le port série
  {
    data = Serial.read(); // lecture

  }

  if (data == 'm') {

    irsend.sendNEC(marche, 32);

    Serial.print("boot");

    delay(40);

  }
  else if (data == 'b') {
    irsend.sendNEC(bas, 32); //touche bas
    Serial.print("bas");
    delay(40);
  }
  else if (data == 'd') {
    irsend.sendNEC(droite, 32); //touche droite
    Serial.print("droite");
    delay(40);
  }
  else if (data == 'g') {
    irsend.sendNEC(gauche, 32); //touche gauche
    Serial.print("gauche");
    delay(40);
  }
  else if (data == 'o') {
    irsend.sendNEC(OK, 32); //touche OK
    Serial.print("OK");
    delay(40);
  }

  else if (data == 's') {
    irsend.sendNEC(0x1FEE1E, 32); //touche plus de son
    Serial.print("OK");
    delay(40);
  }
}
void sequence()
{

  if (digitalRead(bp) == HIGH) {}

  if (digitalRead(bp) == LOW) {

    irsend.sendNEC(marche, 32); // IPTV:0x1FE817E il faut presque 42s pour la mise en service "écran ANDROID"

    Serial.print("boot");

    delay(42000);
    irsend.sendNEC(bas, 32); //touche bas pour passer de la fenêtre YOUTUBE à celle de MOLOTOV
    Serial.print("bas");
    delay(2000);
    irsend.sendNEC(OK, 32); //touche OK pour valider le choix de MOLOTOV
    Serial.print("OK");
    delay(12000); // temps pour l'apparition de l'écran MOLOTOV
    irsend.sendNEC(bas, 32); //touche bas pour passer de la ligne TV aux fenêtres
    Serial.print("bas");
    delay(3000);
    if (choix == 1) {
      irsend.sendNEC(OK, 32); //touche OK pour valider le choix de la chaîne 1
      Serial.print("OK= TF1");
      delay(2000);
    }
    if (choix == 2) {
      irsend.sendNEC(droite, 32); //touche droite pour se déplacer de la chaîne 1 à la chaîne 2
      Serial.print("droite2= FRANCE 2");
      delay(1000);
    }
    if (choix == 3) {
      for (int i = 1; i < 3; i++) {
        irsend.sendNEC(droite, 32); //touche droite de la 1 à la 3
        Serial.print("droite3= FRANCE 3");
        delay(1000);
      }
    }
    if (choix == 4) {
      //for (int i = 1; i < 3; i++) {
      irsend.sendNEC(bas, 32); // pas de canal+ alors remplacé par france 4
      Serial.print("bas");
      delay(1000);
      //}
      for (int i = 1; i < 6; i++) {
        irsend.sendNEC(droite, 32);
        Serial.print("droite FRANCE 4");
        delay(2000);
      }
    }
    if (choix == 5) {
      for (int i = 1; i < 4; i++) {
        irsend.sendNEC(droite, 32); //touche droite de la 1 à la position  4
        Serial.print("droite4= FRANCE 5");
        delay(1000);
      }
    }
    if (choix == 6) {
      for (byte i = 1; i < 5; i++) {
        irsend.sendNEC(droite, 32); //touche droite de la 1 à la pos 5

        Serial.print("droite5= M6");
        delay(1000);
      }
    }
    if (choix == 7) {
      for (byte i = 1; i < 6; i++) {
        irsend.sendNEC(droite, 32); //touche droite de la 1 à la pos 6
        Serial.print("droite6= ARTE");
        delay(2000);
      }
    }
    if (choix == 8) {
      irsend.sendNEC(bas, 32); //touche bas de la 1 à la pos 7
      Serial.print("bas7=C8");
      delay(1000);
    }

    if (choix == 0) { //ici rien prévu donc on revient au choix 1

      delay(1000);
    }
    irsend.sendNEC(OK, 32); //touche OK pour valider le choix de la chaîne
    Serial.print("OK");
    delay(5000);
    irsend.sendNEC(OK, 32); //touche OK pour valider la lecture
    Serial.print("OK");
    delay(5000);
    for (byte i = 0; i < 6; i++) {
      irsend.sendNEC(plus, 32); //touche volume +
      Serial.print("augmenter de son");
      delay(1000);
    }
  }
}

void rouecodeuse() {

  int  val = analogRead(A0);//0 à 1023
  if (val < 50) {
    choix = 0; //aucune chaîne
  }
  if (val > 100 && val < 150) {
    choix = 1;
  }
  if (val > 200 && val < 300) {
    choix = 2;
  }
  if (val > 350 && val < 420) {
    choix = 3;
  }
  if (val > 480 && val < 540) {
    choix = 4;
  }
  if (val > 600 && val < 680) {
    choix = 5;
  }
  if (val > 740 && val < 800) {
    choix = 6;
  }
  if (val > 850 && val < 930) {
    choix = 7;
  }
  if (val > 950 && val < 1024) {
    choix = 8; //les positions 8 et 9 sont identiques sur ma roue codeuse
  }
}

Go Up