Afin de faire fonctionner un séquenceur de lumières à led, le récepteur IR renvoie des données correspondantes aux touches de la télécommande. Cette partie fonctionne à présent.
J'utilise les instructions "switch / Led" avec les données hexadécimales.
Cette ligne de code : " unsigned long data = IrReceiver.decodedIRData;"
crée le défaut suivant " Compilation error : cannot convert 'IRData' to 'long unsigned int ' in initialization".
Je ne comprends pas comment faire la conversion .
Voici le programme
/*Déclaration, initialisation des variables et instanciation des objets */
#include <IRremote.h>
#define IR_RECEIVE_PIN 2 //Broche numérique liée au récepteur IR
int pinray[] = { 10, 11, 12 }; //Tableau des broches LED
int intervalle = 1000; // Intervalle de temps (1 seconde)
unsigned long prev; // Variable de temps
int k = HIGH; //variable pour le marche-arrêt du séquenceur
int i = 0;
int j = 0;
int vitesse=0;
unsigned long data=0;
/*2-Fonction setup*/
void setup() {
for (int i = 0; i < 4; i++)
Serial.print(i);
pinMode(pinray[i], OUTPUT); //Programmation des broches numériques des LED en sorties
prev = millis(); // Mémoriser le compteur de temps actuel
IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);//Demarrage processus de reception
}
void loop() {
if (k == LOW) { //si k==LOW le séquenceur démarre
if ((millis() - prev) > intervalle) { //Ecoulement du retard ’intervalle’
prev = millis();
/*3-Programme permettant d'allumer et d'éteindre les LED du séquenceur*/
switch (j) {
case 0:
digitalWrite(pinray[1], LOW);
digitalWrite(pinray[0], HIGH);
break;
case 1:
digitalWrite(pinray[0], LOW);
digitalWrite(pinray[1], HIGH);
break;
case 2:
digitalWrite(pinray[1], LOW);
digitalWrite(pinray[2], HIGH);
break;
case 3:
digitalWrite(pinray[2], LOW);
digitalWrite(pinray[1], HIGH);
/*Serial.print(pinray[1]);*/
}
j++;
if (j > 3) { j = 0; }
}
}
/*4-Programme permettant de démarrer ou d'arrêter le séquenceur si la touche ">||" est
appuyée */
if (IrReceiver.decode()) { // Si une touche de la télécommande est appuyée
unsigned long data = IrReceiver.decodedIRData;
switch (data) {
case 0xBF40FF00: // Si la touche ">||" est appuyée
k = !k;
if (k == HIGH) //Eteindre toutes les LED avant d'arrêter le séquenceur
for (int i = 0; i < 4; i++)
digitalWrite(pinray[i], LOW);
break;
case 0xBC43FF00: // Si la touche ">>|" est appuyée
/*5-Programme permettant de gérer l'accélération de la vitesse*/
vitesse++;
if (vitesse == 1)
intervalle = 500;
else if (vitesse == 2)
intervalle = 250;
else
intervalle = 100;
if (vitesse > 3)
vitesse = 3;
break;
case 0xBB44FF00: // Si la touche "<<" est appuyée
/*6-Programme permettant de gérer le ralentissement de la vitesse*/
vitesse--;
if (vitesse == 3)
intervalle = 100;
else if (vitesse == 2)
intervalle = 250;
else if (vitesse == 1)
intervalle = 500;
else
intervalle = 1000;
if (vitesse < 0)
vitesse = 0;
break;
}
IrReceiver.resume(); //Réinitialiser le processus de réception
}
}