Bonjour,
je suis nouveau sur le forum et j'aurais besoin d'un petit coup de main.
je débute dans le code et l'arduino et mon premier projet est un ruban led RGB par infrarouge.
Je dispose de deux bout de code , le premier pour la télécommande infrarouge , et le deuxième mes premiers pas avec une led RGB et quelques séquences.
Mon souci est que, si je cumule mes deux programmes, j'ai l'impression que l'arduino est trop lent pour bien détecter les messages infrarouge.
Exemple :
#include <IRremote.h>
const int DIN_RECEPTEUR_INFRAROUGE = 2;
IRrecv monRecepteurInfraRouge (DIN_RECEPTEUR_INFRAROUGE);
decode_results messageRecu;
void setup()
{
Serial.begin(9600);
monRecepteurInfraRouge.enableIRIn();
monRecepteurInfraRouge.blink13(true);
}
void loop()
{
if (monRecepteurInfraRouge.decode(&messageRecu))
{
if (messageRecu.value == 0xFF6897)
{Serial.println("Touche 0");}
{
if (messageRecu.value == 0xFF30CF)
{Serial.println("Touche 1");}
{
if (messageRecu.value == 0xFF18E7)
{Serial.println("Touche 2");}
{
if (messageRecu.value == 0xFF7A85)
{Serial.println("Touche 3");}
{
if(messageRecu.value == 0xFF10EF)
{Serial.println("Touche 4");}
{
if(messageRecu.value == 0xFF38C7)
{Serial.println("Touche 5");}
{
if(messageRecu.value == 0xFF5AA5)
{Serial.println("Touche 6");}
{
if(messageRecu.value == 0xFF42BD)
{Serial.println("touche 7");}
{
if(messageRecu.value == 0xFF4AB5)
{Serial.println("Touche 8");}
{
if(messageRecu.value == 0xFF52AD)
{Serial.println("Touche 9");}
{
if(messageRecu.value == 0xFFA25D)
{Serial.println("Touche on/off");}
{
if(messageRecu.value == 0xFF629D)
{Serial.println("Touche mode");}
{
if(messageRecu.value == 0xFFE21D)
{Serial.println("Touche mute");}
{
if(messageRecu.value == 0xFF22DD)
{Serial.println("Touche play/pause");}
{
if(messageRecu.value == 0xFF02FD)
{Serial.println("Touche gauche");}
{
if(messageRecu.value == 0xFFC23D)
{Serial.println("Touche droite");}
{
if(messageRecu.value == 0xFFE01F)
{Serial.println("Touche EQ");}
{
if(messageRecu.value == 0xFFA857)
{Serial.println("Touuche -");}
{
if(messageRecu.value == 0xFF906F)
{Serial.println("Touche +");}
{
if(messageRecu.value == 0xFF9867)
{Serial.println("Touche random");}
{
if(messageRecu.value == 0xFFB04F)
{Serial.println("Touche U/SD");}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
Serial.println(messageRecu.value,HEX);
delay(500);
monRecepteurInfraRouge.resume();
}
delay(1);
}
Ce programme seul marche bien, l'arduino affiche dans le serial monitor Touche 1 etc..
Ensuite, mon deuxième code :
const int Rouge = 9; // PWM
const int Vert = 10; // PWM
const int Bleu = 11; // PWM
void setup(){
pinMode( Rouge, OUTPUT );
pinMode( Vert, OUTPUT );
pinMode( Bleu, OUTPUT );
//La LED RGB utilise une anode commune (le + en commun.
//Il faut donc manipuler la tension sur les broches négatives
//de la LED.
//
//Pour résumer:
// On allume une LED en mettant la broche/pin à 0 volts
// On eteind une LED en mettant la broche/pin à 5 volts
// Tout éteindre
digitalWrite( Rouge, HIGH );
digitalWrite( Vert, HIGH );
digitalWrite( Bleu, HIGH );
}
void couleursFondue(){
// allumer Rouge
digitalWrite( Rouge, LOW );
digitalWrite( Vert, HIGH );
digitalWrite( Bleu, HIGH );
// Ajouter progressivement du vert
// Retirer progressivement du rouge
// Rappel: 255 = pas de couleur, 0 = max de couleur
for( int iVert = 255; iVert>0; iVert-- ) {
int iRouge = 255 - iVert;
analogWrite( Rouge, iRouge );
analogWrite( Vert, iVert );
delay( 10 );
}
// Ajouter progressivement du bleu
// Retirer progressivement du vert
// Rappel: 255 = pas de couleur, 0 = max de couleur
for( int iBleu = 255; iBleu>0; iBleu-- ) {
int iVert = 255 - iBleu;
analogWrite( Vert, iVert );
analogWrite( Bleu, iBleu );
delay( 10 );
}
// Ajouter progressivement du rouge
// Retirer progressivement du bleu
// Rappel: 255 = pas de couleur, 0 = max de couleur
for( int iRouge = 255; iRouge>0; iRouge-- ) {
int iBleu = 255 - iRouge;
analogWrite( Bleu, iBleu );
analogWrite( Rouge, iRouge );
delay( 10 );
}
}
void FcouleurBlanc(){
//Blanc
digitalWrite(Bleu, LOW);
digitalWrite(Rouge, LOW);
digitalWrite(Vert, LOW);
delay(200);
}
void FcouleurRouge(){
//Rouge
digitalWrite(Bleu, HIGH);
digitalWrite(Rouge, LOW);
digitalWrite(Vert, HIGH);
delay(200);
}
void FcouleurVert(){
//Vert
digitalWrite(Bleu, HIGH);
digitalWrite(Rouge, HIGH);
digitalWrite(Vert, LOW);
delay(200);
}
void FcouleurBleu(){
//Bleu
digitalWrite(Bleu, LOW);
digitalWrite(Rouge, HIGH);
digitalWrite(Vert, HIGH);
delay(200);
}
//---------------------
void FcouleurRose(){
//Rose
digitalWrite(Bleu, LOW);
digitalWrite(Rouge, LOW);
digitalWrite(Vert, HIGH);
delay(200);
}
void FcouleurBleuCiel(){
//Bleu Ciel
digitalWrite(Bleu, LOW);
digitalWrite(Rouge, HIGH);
digitalWrite(Vert, LOW);
delay(200);
}
void FcouleurJaune(){
//Jaune
digitalWrite(Bleu, HIGH);
digitalWrite(Rouge, LOW);
digitalWrite(Vert, LOW);
delay(200);
}
void StrobColorFast(){
//Blanc
digitalWrite(Bleu, LOW);
digitalWrite(Rouge, LOW);
digitalWrite(Vert, LOW);
delay(30);
//OFF
digitalWrite(Bleu, HIGH);
digitalWrite(Rouge, HIGH);
digitalWrite(Vert, HIGH);
delay(30);
//Rouge
digitalWrite(Bleu, HIGH);
digitalWrite(Rouge, LOW);
digitalWrite(Vert, HIGH);
delay(30);
//OFF
digitalWrite(Bleu, HIGH);
digitalWrite(Rouge, HIGH);
digitalWrite(Vert, HIGH);
delay(30);
//Vert
digitalWrite(Bleu, HIGH);
digitalWrite(Rouge, HIGH);
digitalWrite(Vert, LOW);
delay(30);
//OFF
digitalWrite(Bleu, HIGH);
digitalWrite(Rouge, HIGH);
digitalWrite(Vert, HIGH);
delay(30);
//Bleu
digitalWrite(Bleu, LOW);
digitalWrite(Rouge, HIGH);
digitalWrite(Vert, HIGH);
delay(30);
//OFF
digitalWrite(Bleu, HIGH);
digitalWrite(Rouge, HIGH);
digitalWrite(Vert, HIGH);
delay(30);
//---------------------
//Rose
digitalWrite(Bleu, LOW);
digitalWrite(Rouge, LOW);
digitalWrite(Vert, HIGH);
delay(100);
//OFF
digitalWrite(Bleu, HIGH);
digitalWrite(Rouge, HIGH);
digitalWrite(Vert, HIGH);
delay(20);
//Bleu Ciel
digitalWrite(Bleu, LOW);
digitalWrite(Rouge, HIGH);
digitalWrite(Vert, LOW);
delay(100);
//OFF
digitalWrite(Bleu, HIGH);
digitalWrite(Rouge, HIGH);
digitalWrite(Vert, HIGH);
delay(20);
//Jaune
digitalWrite(Bleu, HIGH);
digitalWrite(Rouge, LOW);
digitalWrite(Vert, LOW);
delay(100);
//OFF
digitalWrite(Bleu, HIGH);
digitalWrite(Rouge, HIGH);
digitalWrite(Vert, HIGH);
delay(20);
}
void Strob(){
//Blanc
digitalWrite(Bleu, LOW);
digitalWrite(Rouge, LOW);
digitalWrite(Vert, LOW);
delay(20);
digitalWrite(Bleu, HIGH);
digitalWrite(Rouge, HIGH);
digitalWrite(Vert, HIGH);
delay(20);
digitalWrite(Bleu, LOW);
digitalWrite(Rouge, LOW);
digitalWrite(Vert, LOW);
delay(20);
}
void loop()
{
//FcouleurBlanc();
//------
//StrobColor
//>>
//FcouleurRouge();
//Strob();
//FcouleurVert();
//Strob();
//FcouleurBleu();
//Strob();
//FcouleurRose();
//Strob();
//FcouleurBleuCiel();
//Strob();
//FcouleurJaune();
//Strob();
//--------
couleursFondue();
//-----------
//Strob();
//StrobColorFast();
}
(Seul "couleursFondue" est activé pour le moment)
Ce que j'aimerais faire du coup, c'est pouvoir cumuler ces deux codes dans un premier temps, et ensuite comment dois je faire pour que la télécommande commande mes séquences ?
Exemple : Touche mode active la séquence strob, on appuie une deuxième fois sur la touche mode et c'est la séquence fondues de couleurs.. Et ainsi de suite !
Pour finir, les couleurs unique sur les touches , de 0 a 6 (Blanc = 0, Rouge = 2 etc..)
Voilà j'espère être assez compréhensible et que l'on pourra m'aider à exploiter cette formidable petite carte !
Led RGB sur les pin 9,10,11 & 3.5v
Led IR sur les pin GND, 2 & 5v