Voici le programme que j'ai modifié pour faire fonctionner des "led" sur une maquette de voiture en statique .
Apprenti dans l'Arduino , je n'aurais pas pu le réaliser .
Il est fonctionnel mais ne me satisfait pas en totalité .
Code : Tout sélectionner
/* source: www.electroschematics.com
Un seul inter allume et éteint chaque led
*/
#include <IRremote.h>
int RECV_PIN = A0; // the pin where you connect the output pin of TSOP4838
int led1 = 2;
int led2 = 3;
int led3 = 4;
int led4 = 5;
int led5 = 6;
int led6 = 7;
int led7 = 8;
int led8 = 9;
int led9 = 10;
int itsONled[] = {0,1,0,1,0,1,0,1,0,1,0};
/* the initial state of LEDs is OFF (zero)
the first zero must remain zero but you can
change the others to 1's if you want a certain
led to light when the board is powered */
#define code1 0xFF30CF // code received from led 1
#define code2 0xFF18E7 // code received from led 2
#define code3 0xFF7A85 // code received from led 3
#define code4 0xFF10EF // code received from led 4
#define code5 0xFF38C7 // code received from led 5
#define code6 0xFF5AA5 // code received from led 6
#define code7 0xFF42BD // code received from led 7
#define code8 0xFF4AB5 // code received from led 8
#define code9 0xFF52AD // code received from led 8
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
Serial.begin(9600); // you can comment this line
irrecv.enableIRIn(); // Start the receiver
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(led6, OUTPUT);
pinMode(led7, OUTPUT);
pinMode(led8, OUTPUT);
pinMode(led9, OUTPUT);
}
void loop() {
if (irrecv.decode(&results)) {
unsigned int value = results.value;
switch (value) {
case code1:
if (itsONled[1] == 1) { // if first led is on then
digitalWrite(led1, LOW); // turn it off when button is pressed
itsONled[1] = 0; // and set its state as off
} else { // else if first led is off
digitalWrite(led1, HIGH); // turn it on when the button is pressed
itsONled[1] = 1; // and set its state as on
}
break;
case code2:
if (itsONled[2] == 1) {
digitalWrite(led2, LOW);
itsONled[2] = 0;
} else {
digitalWrite(led2, HIGH);
itsONled[2] = 1;
}
break;
case code3:
if (itsONled[3] == 1) {
digitalWrite(led3, LOW);
itsONled[3] = 0;
} else {
digitalWrite(led3, HIGH);
itsONled[3] = 1;
}
break;
case code4:
if (itsONled[4] == 1) {
digitalWrite(led4, LOW);
itsONled[4] = 0;
} else {
digitalWrite(led4, HIGH);
itsONled[4] = 1;
}
break;
case code5:
if (itsONled[5] == 1) {
digitalWrite(led5, LOW);
itsONled[5] = 0;
} else {
digitalWrite(led5, HIGH);
itsONled[5] = 1;
}
break;
case code6:
if (itsONled[6] == 1) {
digitalWrite(led6, LOW);
itsONled[6] = 0;
} else {
digitalWrite(led6, HIGH);
itsONled[6] = 1;
}
break;
case code7:
if (itsONled[7] == 1) {
digitalWrite(led7, LOW);
itsONled[7] = 0;
} else {
digitalWrite(led7, HIGH);
itsONled[7] = 1;
}
break;
case code8:
if (itsONled[8] == 1) {
digitalWrite(led8, LOW);
itsONled[8] = 0;
} else {
digitalWrite(led8, HIGH);
itsONled[8] = 1;
}
break;
case code9:
if (itsONled[9] == 1) {
digitalWrite(led9, LOW);
itsONled[9] = 0;
} else {
digitalWrite(led9, HIGH);
itsONled[9] = 1;
}
break;
}
Serial.println(value); // you can comment this line
irrecv.resume(); // Receive the next value
}
}
Je ne sais si c'est possible mais j'aurais aimé que sur une sortie , l'éclairage se fasse comme sur un bouton poussoir ( appuyer = marche ; relâcher = arrêt ) et non pas comme sur les autres ( 1 appui = marche ; 1 autre appui = arrêt .
Secondo , j'aurais aimé que deux sorties soient clignotantes ( afin de ne pas mettre des "led" clignotantes ) .
Dernière chose , est-il possible de paramétrer un inter sur deux sorties ( imiter un signal de détresse ) .
C'est pour cette voiture :
Avec tous mes remerciements pour vos conseils !
@+ René