Merci à tout le monde, grâce à vous j'ai réussi à faire ceci et ça fonctionne bien.
#include <IRremote.h>
const byte irPin = 7;
IRrecv recepteurIR(irPin);
// la LED RGB, cathode commune. on utilise des pins PWM
// la bibliothèque utilise le timer2 ce qui fait qu'on ne peu pas utilser le PWM sur les pins 3 et 11
const byte pinRouge = 6;
const byte pinVerte = 5;
const byte pinBleue = 9;
enum Commande {AUCUNE, ETEINDRE, ROUGE, JAUNE, POMME, TURQUOISE, BLEU, MAGENTA, ANIMATION} commandeRecue = AUCUNE;
enum Etat {STATIQUE, DYNAMIQUE} etat = STATIQUE;
const unsigned long tempo = 500; // animation à 2Hz (500ms)
unsigned long dernierChangementCouleur;
int chrono=15;
struct IRKey {
uint8_t codeTouche;
const char * etiquette;
Commande commande;
};
IRKey lesTouches[] = {
{ 69, "POWER", ETEINDRE},
{ 70, "VOL plus", AUCUNE},
{ 71, "FUNC/STOP", AUCUNE},
{ 68, "PREV", AUCUNE},
{ 64, "PLAY/PAUSE", ANIMATION},
{ 67, "NEXT", AUCUNE},
{ 7, "DOWN", AUCUNE},
{ 21, "VOL min", AUCUNE},
{ 9, "UP", AUCUNE},
{ 22, "num: 0", ROUGE},
{ 25, "EQ", AUCUNE},
{ 13, "ST/REPT", AUCUNE},
{ 12, "num: 1", JAUNE},
{ 24, "num: 2", POMME},
{ 94, "num: 3", TURQUOISE},
{ 8, "num: 4", BLEU},
{ 28, "num: 5", MAGENTA},
{ 90, "num: 6", AUCUNE},
{ 66, "num: 7", AUCUNE},
{ 82, "num: 8", AUCUNE},
{ 74, "num: 9", AUCUNE},
};
void gestionCommande() {
commandeRecue = AUCUNE;
if (recepteurIR.decode()) {
for (auto& touche : lesTouches) {
if (touche.codeTouche == recepteurIR.decodedIRData.command) {
commandeRecue = touche.commande;
break;
}
}
}
recepteurIR.resume();
}
void gestionAnimation() {
switch (commandeRecue) {
case AUCUNE: break;
case ETEINDRE:
digitalWrite(pinRouge, LOW);
digitalWrite(pinVerte, LOW);
digitalWrite(pinBleue, LOW);
etat = STATIQUE;
break;
case ROUGE:
digitalWrite(pinRouge, HIGH);
digitalWrite(pinVerte, LOW);
digitalWrite(pinBleue, LOW);
etat = STATIQUE;
break;
case JAUNE:
digitalWrite(pinRouge, HIGH);
digitalWrite(pinVerte, HIGH);
digitalWrite(pinBleue, 0);
etat = STATIQUE;
break;
case POMME:
digitalWrite(pinRouge, LOW);
digitalWrite(pinVerte, HIGH);
digitalWrite(pinBleue, LOW);
etat = STATIQUE;
break;
case TURQUOISE:
digitalWrite(pinRouge, LOW);
digitalWrite(pinVerte, HIGH);
digitalWrite(pinBleue, HIGH);
etat = STATIQUE;
break;
case BLEU:
digitalWrite(pinRouge, LOW);
digitalWrite(pinVerte, LOW);
digitalWrite(pinBleue, HIGH);
etat = STATIQUE;
break;
case MAGENTA:
digitalWrite(pinRouge, HIGH);
digitalWrite(pinVerte, LOW);
digitalWrite(pinBleue, HIGH);
etat = STATIQUE;
break;
case ANIMATION:
dernierChangementCouleur = millis() - tempo;
etat = DYNAMIQUE;
break;
}
if ((etat == DYNAMIQUE) && (millis() - dernierChangementCouleur >= tempo)) {
// on passe à la couleur suivante, ici aléatoirement
for (int r = 0; r < 255; r++) {
analogWrite(pinRouge, 255);
analogWrite(pinVerte, 0);
analogWrite(pinBleue, r);
delay(chrono);
}
for (int r = 255; r > 0; r--) {
analogWrite(pinRouge, r);
analogWrite(pinVerte, 0);
analogWrite(pinBleue, 255);
delay(chrono);
}
for (int r = 0; r < 255; r++) {
analogWrite(pinRouge, 0);
analogWrite(pinVerte, r);
analogWrite(pinBleue, 255);
delay(chrono);
}
for (int r = 255; r > 0; r--) {
analogWrite(pinRouge, 0);
analogWrite(pinVerte, 255);
analogWrite(pinBleue, r);
delay(chrono);
}
for (int r = 0; r < 255; r++) {
analogWrite(pinRouge, r);
analogWrite(pinVerte, 255);
analogWrite(pinBleue, 0);
delay(chrono);
}
for (int r = 255; r > 0; r--) {
analogWrite(pinRouge, 255);
analogWrite(pinVerte, r);
analogWrite(pinBleue, 0);
delay(chrono);
}
for (int r = 0; r < 255; r++) {
analogWrite(pinRouge, 255);
analogWrite(pinVerte, 0);
analogWrite(pinBleue, r);
delay(chrono);
break;
}
}
}
void setup() {
pinMode(pinRouge, OUTPUT);
pinMode(pinVerte, OUTPUT);
pinMode(pinBleue, OUTPUT);
Serial.begin(9600);
recepteurIR.enableIRIn();
}
void loop() {
gestionCommande();
gestionAnimation();
}
Afin de ne pas trop venir vous embeter j'ai essayer de créer une gestion de la luminosité des couleurs à l'état STATIQUE par moi meme mais ça ne fonctionne pas comme je veux.
Aucun messages d'erreurs, ça fonctionne à l'identique du sketch précédant mais la variation manuelle via les touches 70 pour + et 21 pour - ne fonctionne pas.
#include <IRremote.h>
const byte irPin = 7;
IRrecv recepteurIR(irPin);
// la LED RGB, cathode commune. on utilise des pins PWM
// la bibliothèque utilise le timer2 ce qui fait qu'on ne peu pas utilser le PWM sur les pins 3 et 11
const byte pinRouge = 6;
const byte pinVerte = 5;
const byte pinBleue = 9;
int luminosity = 255;
enum Commande {AUCUNE, ETEINDRE, ROUGE, JAUNE, POMME, TURQUOISE, BLEU, MAGENTA, ANIMATION} commandeRecue = AUCUNE;
enum Etat {STATIQUE, DYNAMIQUE} etat = STATIQUE;
const unsigned long tempo = 500; // animation à 2Hz (500ms)
unsigned long dernierChangementCouleur;
int chrono=15;
struct IRKey {
uint8_t codeTouche;
const char * etiquette;
Commande commande;
};
IRKey lesTouches[] = {
{ 69, "POWER", ETEINDRE},
{ 70, "VOL plus", AUCUNE},
{ 71, "FUNC/STOP", AUCUNE},
{ 68, "PREV", AUCUNE},
{ 64, "PLAY/PAUSE", ANIMATION},
{ 67, "NEXT", AUCUNE},
{ 7, "DOWN", AUCUNE},
{ 21, "VOL min", AUCUNE},
{ 9, "UP", AUCUNE},
{ 22, "num: 0", ROUGE},
{ 25, "EQ", AUCUNE},
{ 13, "ST/REPT", AUCUNE},
{ 12, "num: 1", JAUNE},
{ 24, "num: 2", POMME},
{ 94, "num: 3", TURQUOISE},
{ 8, "num: 4", BLEU},
{ 28, "num: 5", MAGENTA},
{ 90, "num: 6", AUCUNE},
{ 66, "num: 7", AUCUNE},
{ 82, "num: 8", AUCUNE},
{ 74, "num: 9", AUCUNE},
};
void gestionCommande() {
commandeRecue = AUCUNE;
if (recepteurIR.decode()) {
for (auto& touche : lesTouches) {
if (touche.codeTouche == recepteurIR.decodedIRData.command) {
commandeRecue = touche.commande;
if (touche.codeTouche == 70){
setLuminosity(25);
}
if (touche.codeTouche == 21){
setLuminosity(-25);
}
break;
}
}
}
recepteurIR.resume();
}
void gestionAnimation() {
switch (commandeRecue) {
case AUCUNE: break;
case ETEINDRE:
digitalWrite(pinRouge, 0);
digitalWrite(pinVerte, 0);
digitalWrite(pinBleue, 0);
etat = STATIQUE;
break;
case ROUGE:
analogWrite(pinRouge, luminosity);
analogWrite(pinVerte, 0);
analogWrite(pinBleue, 0);
etat = STATIQUE;
break;
case JAUNE:
analogWrite(pinRouge, luminosity);
analogWrite(pinVerte, luminosity);
analogWrite(pinBleue, 0);
etat = STATIQUE;
break;
case POMME:
analogWrite(pinRouge, 0);
analogWrite(pinVerte, luminosity);
analogWrite(pinBleue, 0);
etat = STATIQUE;
break;
case TURQUOISE:
analogWrite(pinRouge, 0);
analogWrite(pinVerte, luminosity);
analogWrite(pinBleue, luminosity);
etat = STATIQUE;
break;
case BLEU:
analogWrite(pinRouge, 0);
analogWrite(pinVerte, 0);
analogWrite(pinBleue, luminosity);
etat = STATIQUE;
break;
case MAGENTA:
analogWrite(pinRouge, luminosity);
analogWrite(pinVerte, 0);
analogWrite(pinBleue, luminosity);
etat = STATIQUE;
break;
case ANIMATION:
dernierChangementCouleur = millis() - tempo;
etat = DYNAMIQUE;
break;
}
if ((etat == DYNAMIQUE) && (millis() - dernierChangementCouleur >= tempo)) {
// on passe à la couleur suivante, ici aléatoirement
for (int r = 0; r < 255; r++) {
analogWrite(pinRouge, 255);
analogWrite(pinVerte, 0);
analogWrite(pinBleue, r);
delay(chrono);
}
for (int r = 255; r > 0; r--) {
analogWrite(pinRouge, r);
analogWrite(pinVerte, 0);
analogWrite(pinBleue, 255);
delay(chrono);
}
for (int r = 0; r < 255; r++) {
analogWrite(pinRouge, 0);
analogWrite(pinVerte, r);
analogWrite(pinBleue, 255);
delay(chrono);
}
for (int r = 255; r > 0; r--) {
analogWrite(pinRouge, 0);
analogWrite(pinVerte, 255);
analogWrite(pinBleue, r);
delay(chrono);
}
for (int r = 0; r < 255; r++) {
analogWrite(pinRouge, r);
analogWrite(pinVerte, 255);
analogWrite(pinBleue, 0);
delay(chrono);
}
for (int r = 255; r > 0; r--) {
analogWrite(pinRouge, 255);
analogWrite(pinVerte, r);
analogWrite(pinBleue, 0);
delay(chrono);
}
for (int r = 0; r < 255; r++) {
analogWrite(pinRouge, 255);
analogWrite(pinVerte, 0);
analogWrite(pinBleue, r);
delay(chrono);
break;
}
}
}
void setLuminosity(int diff) {
if (luminosity + diff < 255 && luminosity + diff > 0) {
luminosity = luminosity + diff;
Commande(commandeRecue);
}
}
void setup() {
pinMode(pinRouge, OUTPUT);
pinMode(pinVerte, OUTPUT);
pinMode(pinBleue, OUTPUT);
Serial.begin(9600);
recepteurIR.enableIRIn();
}
void loop() {
gestionCommande();
gestionAnimation();
}
Une bonne âme pour m'indiquer mes erreurs?