Modérateurs: Modération Forum Installations, Modération Forum DIY, Le Bureau de l’Association HCFR • Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 100 invités

Discussions générales sur le DIY Audio : choix des HP, comparaisons des principes : clos vs BR, etc

Projet integration ampli+dsp+vu-metres etc

Message » 10 Sep 2024 15:58

Salut,
j'ai telecharge la bibliotheque
je compile c'est ok, je televerse c'est ok

par contre rien ne fonctionne :-?
dès que j'appuie sur une touche de la telecommande je vois bien la led "L" qui s'allume sur l'arduino (je vois que tu as rajouté ça et c'est cool car ça me permet de voir si j'ai des piles dans la télécommande), mais rien ne se passe.

pire que ça, j'ai mis mes anciens programmes dedans et rien ne fonctionne non plus (vu que ça marchait pas j'ai modifié pleins de trucs pour tester, et des fois l'ampli s'allume des fois le relais mais j'appuie une fois et plus rien ne marche)

donc la je suis comme véronique ...
Le yann
 
Messages: 357
Inscription Forum: 29 Mai 2010 11:18
  • offline

Message » 10 Sep 2024 19:59

Aïe :-?

Bon, on va devoir déboguer la chose.

La première chose à contrôler c'est de vérifier que le code d'émission de ta telco est bien décodé par la bibliothèque.

Il faut donc pour celà ré activer la fonction serial print, et vérifier le code de ta telco.
Téléverse ce programme, où j'ai juste rajouté les fonctions d'impressions sur le serial monitor, et également la fonction d'appel du décodage du protocole NEC (je ne sais pas si c'est utile)

Ensuite, tu ouvres le serial monitor sur l'IDE arduino, et appuie sur tes boutons de télécommande, et vérifie les codes affichés. Note le baud (9600), à paramétrer sur le serial monitor

On voit ce que çà donne et on avise





Code: Tout sélectionner
// programme pour Le Yann

#define DECODE_NEC
#include <IRremote.hpp>  // Inclue bibliothèque IR (dernière version 4.4.0 de shirriff )
//#include <IRremote.h>       //Idem, vieille bibliothèque à tester
const int RECV_PIN = 3;     // défini pin de réception du modulateur IR
const int relai_amp = 4;    // défini pin de de commande du relai ampli
const int relai_vm = 5;     // défini pin de de commande du relai ampli
bool etat_relai_amp = LOW;  // variable de stockage de l'état du relais ampli, bas au démarrage du prg
bool etat_relai_vm = LOW;   // variable de stockage de l'état du relais vu mètre, bas au démarrage du prg

void setup() {

  Serial.begin(9600);
  IrReceiver.begin(RECV_PIN, ENABLE_LED_FEEDBACK);  // demarre la fonction reception IR
  //IRrecv irrecv(RECV_PIN);                       // idem, mais ne fonctionne vraisemblablement plus avec la mise à jour de la bibliothèque
  pinMode(relai_amp, OUTPUT);
  pinMode(relai_vm, OUTPUT);
  //digitalWrite(relai_amp, LOW);                 //fixe état bas au relai ampli, (normalement inutile)
  //digitalWrite(relai_vm, LOW);                 //idem relai vu mètre
}

void loop() {

  if (IrReceiver.decode()) {
    Serial.print("code ampli= ");
    Serial.println(IrReceiver.decodedIRData.decodedRawData, HEX);
    if (IrReceiver.decodedIRData.decodedRawData == 0xAC5302FD) {  // si reception du code allumage ampli
      etat_relai_amp = !etat_relai_amp;                           // inverse la variable de stockage de l'état du relais ampli
      digitalWrite(relai_amp, etat_relai_amp);                    // écrit cette variable sur la pin de commande du relais
      delay(100);
    }
    IrReceiver.resume();  // Reception valeur suivante
  }

  if (IrReceiver.decode()) {
    Serial.print("code vumetre= ");
    Serial.println(IrReceiver.decodedIRData.decodedRawData, HEX);
    if (IrReceiver.decodedIRData.decodedRawData == 0xAC53609F) {  // si reception du code allumage vu mètre
      etat_relai_vm = !etat_relai_vm;                             // inverse la variable de stockage de l'état du relais vu mètre
      digitalWrite(relai_vm, etat_relai_vm);                      // écrit cette variable sur la pin de commande du relais
      delay(100);
    }
    IrReceiver.resume();  // Reception valeur suivante
  }
}


Après relecture attentive des codes de la bibliothèque, il y a inversion du code (on passe de MSB first à LSB first) pour certain protocole, dont NEC, donc c'est normal que çà marche pas avec l'ancien code...
fiscal
Pro-Fabricant
Pro-Fabricant
 
Messages: 2977
Inscription Forum: 31 Aoû 2006 15:29
Localisation: VILLEURBANNE
  • offline

Message » 10 Sep 2024 22:01

Ca marche !! Merci beaucoup !! :ohmg:

J'ai légèrement modifie le programme ainsi :

#define DECODE_NEC
#include <IRremote.hpp> // Inclue bibliothèque IR (dernière version 4.4.0 de shirriff )
#include <IRremote.h> //Idem, vieille bibliothèque à tester
const int RECV_PIN = 3; // défini pin de réception du modulateur IR
const int relai_amp = 4; // défini pin de de commande du relai ampli
const int relai_vm = 5; // défini pin de de commande du relai vm
bool etat_relai_amp = LOW; // variable de stockage de l'état du relais ampli, bas au démarrage du prg
bool etat_relai_vm = LOW; // variable de stockage de l'état du relais vu mètre, bas au démarrage du prg

void setup() {

Serial.begin(9600);
IrReceiver.begin(RECV_PIN, ENABLE_LED_FEEDBACK); // demarre la fonction reception IR
IRrecv irrecv(RECV_PIN); // idem, mais ne fonctionne vraisemblablement plus avec la mise à jour de la bibliothèque
pinMode(relai_amp, OUTPUT);
pinMode(relai_vm, OUTPUT);
digitalWrite(relai_amp, LOW); //fixe état bas au relai ampli, (normalement inutile)
digitalWrite(relai_vm, LOW); //idem relai vu mètre
}

void loop() {

if (IrReceiver.decode()) {
Serial.print("code ampli=BF40CA35");
Serial.println(IrReceiver.decodedIRData.decodedRawData, HEX);
if (IrReceiver.decodedIRData.decodedRawData == 0xBF40CA35) { // si reception du code allumage ampli
etat_relai_amp = !etat_relai_amp; // inverse la variable de stockage de l'état du relais ampli
digitalWrite(relai_amp, etat_relai_amp); // écrit cette variable sur la pin de commande du relais
delay(100);
}
IrReceiver.resume(); // Reception valeur suivante
}

if (IrReceiver.decode()) {
Serial.print("code vumetre=F906CA35");
Serial.println(IrReceiver.decodedIRData.decodedRawData, HEX);
if (IrReceiver.decodedIRData.decodedRawData == 0xF906CA35) { // si reception du code allumage vu mètre
etat_relai_vm = !etat_relai_vm; // inverse la variable de stockage de l'état du relais vu mètre
digitalWrite(relai_vm, etat_relai_vm); // écrit cette variable sur la pin de commande du relais
delay(100);
}
IrReceiver.resume(); // Reception valeur suivante
}
}



En esperant que cela fonctionne dans le temps ...
Le yann
 
Messages: 357
Inscription Forum: 29 Mai 2010 11:18
  • offline

Message » 10 Sep 2024 22:51

Parfait

Donc c'était bien çà, les codes démodulés sont inversés. (si tu convertis les codes hexadécimaux en binaires, tu verras qu'ils sont exactement inversés!)

maintenant que tu as récupéré les bon codes, tu peux supprimer toutes les lignes qui contiennent la fonction "Serial...". Elles deviennent inutiles, et peuvent à la longue créer des problèmes (car l'arduino transmet des données inutiles et dans le vide chaque 1:10 de seconde, même quand l'ampli est en veille).

Tu peux aussi supprimer les lignes de codes références à l'ancienne bibliothèque, elles ne servent à rien:

#include <IRremote.h>
IRrecv irrecv(RECV_PIN);

En ajoutant deux anti slash devant chaque ligne ont pour effet que l'IDE ignore ces codes. Cela permet de les rappeler facilement au cas où.

Dis nous si çà tient dans le temps !

Cdt
fiscal
Pro-Fabricant
Pro-Fabricant
 
Messages: 2977
Inscription Forum: 31 Aoû 2006 15:29
Localisation: VILLEURBANNE
  • offline

Message » 12 Sep 2024 14:40

Voila je pense avoir allégé au max :

#define DECODE_NEC
#include <IRremote.hpp> // Inclue bibliothèque IR (dernière version 4.4.0 de shirriff )
const int RECV_PIN = 3; // défini pin de réception du modulateur IR
const int relai_amp = 4; // défini pin de de commande du relai ampli
const int relai_vm = 5; // défini pin de de commande du relai vm
bool etat_relai_amp = LOW; // variable de stockage de l'état du relais ampli, bas au démarrage du prg
bool etat_relai_vm = LOW; // variable de stockage de l'état du relais vu mètre, bas au démarrage du prg

void setup() {

IrReceiver.begin(RECV_PIN, ENABLE_LED_FEEDBACK); // demarre la fonction reception IR
pinMode(relai_amp, OUTPUT);
pinMode(relai_vm, OUTPUT);
digitalWrite(relai_amp, LOW); //fixe état bas au relai ampli, (normalement inutile)
digitalWrite(relai_vm, LOW); //idem relai vu mètre
}

void loop() {

if (IrReceiver.decode()) {
if (IrReceiver.decodedIRData.decodedRawData == 0xBF40CA35) { // si reception du code allumage ampli
etat_relai_amp = !etat_relai_amp; // inverse la variable de stockage de l'état du relais ampli
digitalWrite(relai_amp, etat_relai_amp); // écrit cette variable sur la pin de commande du relais
delay(100);
}
IrReceiver.resume(); // Reception valeur suivante
}

if (IrReceiver.decode()) {
if (IrReceiver.decodedIRData.decodedRawData == 0xF906CA35) { // si reception du code allumage vu mètre
etat_relai_vm = !etat_relai_vm; // inverse la variable de stockage de l'état du relais vu mètre
digitalWrite(relai_vm, etat_relai_vm); // écrit cette variable sur la pin de commande du relais
delay(100);
}
IrReceiver.resume(); // Reception valeur suivante
}
}

Je touche à rien pendant deux semaines,

Merci !
Le yann
 
Messages: 357
Inscription Forum: 29 Mai 2010 11:18
  • offline


Retourner vers Discussions Générales

 
  • Articles en relation
    Dernier message