Tout est dans le code,
bonne lecture
/* 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
}
}