[Problème] Allumer une led à l'aide d'une télécommande infrarouge

Bonsoir,
Je suis entrain de faire des tester des possibilités d’une télécommande infrarouge, et je me suis amusé à faire un petit montage afin d’allumer une led en fonction d’une valeur qui est incrémenter chaque fois que j’appuie sur une touche de ma télécommande.
Voici mon code :

#include <IRremote.h>
#include <IRremoteInt.h>

const char DIN_RECEPTEUR_INFRAROUGE = 2 ;

IRrecv recepteur(DIN_RECEPTEUR_INFRAROUGE);

decode_results message;

int led = 3;
int valeur = 0;
int add = 5;

void setup() {

Serial.begin(9600);
recepteur.enableIRIn();
recepteur.blink13(true);
pinMode(led, OUTPUT);

}

void loop() {
analogWrite(led, valeur);
if (recepteur.decode(&message)) {

if (message.value == 0xFF02FD)
{
Serial.println(add);
valeur = valeur + add;

Serial.println(valeur);

}

if (message.value == 0xFF22DD)
{
Serial.println(add);
valeur = valeur - add;
Serial.println(valeur);

}

recepteur.resume();

}
delay(30);
}

Voilà le seul problème est que la led ne s’allume seulement une fois la valeur 255 atteinte.
Je ne comprends pas pourquoi :frowning: si quelqu’un a une solution cela serait formidable !!
Si vous avez besoin de plus amples informations n’hésitez pas à me demander :grinning:
Merci d’avance et bonne soirée.

Ps : Voici mon montage -->

bonjour,
une R sur la led ne serait pas superflus, au pire, mets sur la pin 13.
as tu essayé de faire un code simple pour tester le pwm seul avec la led?
quel type de led et valeur?

De quelle led parlez vous? La 13 ou celle branchée sur votre pin3 qui va griller votre arduino sans résistance de limitation de courant (heureusement vous n'avez pas de pinMode)... lisez les tutos d'eskimons notemment les entrées sorties et les LEDs

(Sinon pourquoi DIN_RECEPTEUR_INFRAROUGE est de type caractère? Et pourquoi led est elle déclarée en int? C'est un numéro de pin non? Un const byte serait plus adapté pour les deux)

Que pensez vous qu'il va se passer si valeur devient négative ?

infobarquee:
bonjour,
une R sur la led ne serait pas superflus, au pire, mets sur la pin 13.
as tu essayé de faire un code simple pour tester le pwm seul avec la led?
quel type de led et valeur?

Bonjour,

Merci de ta réponse rapide, tout d'abord effectivement cela ne ferait pas de mal :wink: .

Alors oui j'ai déjà essayé de faire une code pour allumer simplement la led de plus en plus à chaque tour de loop, et la led s'allume et s'éteint correctement en "fade". Mais dès que je rajoute l'IR, la led ne s'allume plus progressivement mais uniquement à 255.

Pour la led, c'est une led "standart" qui est fourni avec le Kit (je n'arrive pas à le retrouver sur internet), et j'en ai donc aucune idée des valeurs désolé. Mais j'ai déjà essayé avec d'autre led donc cela ne devrait pas être un soucis.

En attente d'une solution, bonne journée ! :slight_smile:

Pour votre question allez voir quel timer est utilisé par la librairie IRRemote (en fonction du type de votre arduino) - par exemple le PWM des Pins 11 et 3 est contrôlé par Timer2 sur un uno. Si votre librairie utilise timer2 votre pwm sur la pin3 ne fonctionnera pas

J-M-L:
De quelle led parlez vous? La 13 ou celle branchée sur votre pin3 qui va griller votre arduino sans résistance de limitation de courant (heureusement vous n'avez pas de pinMode)... lisez les tutos d'eskimons Sur les LEDs

(Sinon pourquoi DIN_RECEPTEUR_INFRAROUGE est de type caractère? Et pourquoi led est elle déclarée en int? C'est un numéro de pin non? Un const byte serait plus adapté pour les deux)

Que pensez vous qu'il va se passer si valeur devient négative ?

Bonjour,

Merci de ta réponse, je parle de la led rouge (l'autre étant le recepteur infrarouge). Je déclare tout le temps mes leds en int et je n'ai jamais eu de soucis mais je peux essayer de les mettre en const byte merci !

Je pense qu'il ne se passe rien car aucun courant ne sort de la pin 3. Ou est-ce que je me trompe ?

Merci beaucoup pour vos réponse j'ai peu résoudre mon problème !

J'ai tout d'abord changé mes int en const byte, puis j'ai mis ma led sur la pin 10 au lieu de la 3 et maintenant cela fonctionne à merveille !

Par contre je ne comprends pas pourquoi la pin 3 ne fonctionnait pas alors que sans le IR elle fonctionnait :o mais l'essentiel est que ça fonctionne donc merci beaucoup !

Quelques conseils pour la suite :

"Je pense qu'il ne passe aucun courant............"
Désolé mais on ne pense pas que éventuellement ............on vérifie.

On mesure la tension en sortie de la pin avec un multimètre.
Plus il y aura de suppositions dans ton exposé plus la solution s'éloignera.
Donc en phase de mise au point quand des vérifications simplissimes sont possibles on les fait en priorité.

Autre point : Fritzing.
Fritzing est rassurant pour un débutant je l'admets, mais une fois le câblage dessiné il faut ABSOLUMENT utiliser la possibilité de Fritzing de sortir le schéma ELECTRIQUE qui utilise des symboles normalisés.
C'est la seule méthode pour travailler correctement.
Nous on se contrefiche du câblage, ce qu'il nous faut c'est le schéma électrique et les personnes qui t'ont gentiment répondu on du reconstituer ce schéma électrique dans leur tête.
Ca va que le circuit est simple mais s'il avait été plus complexe c'était mission impossible.

Je ne peux que surenchérir sur le conseil de J-M-L de bien lire le tuto d'Eskimon, c'est ce qu'on fait de mieux en français.
Quand J-M-L te demandais des informations sur la diode ce n'était pas une question en l'air : c'était pour le calcul de la résistance à OBLIGATOIREMENT mettre en série.
Selon la couleur de la diode la chute de tension a ses bornes ne sera pas la même.
Cette chute de tension peut aller de 0,8V pour une diode signal type 1N4148, à 1,8V pour une diode rouge et jusqu'à 3V our une diode blanche.
La question était loin d'être supperflue.

Type de variable :
Un microcontrôleur n'est pas un microprocesseur : un microcontroleur à très peu de mémoire et il faut prendre les bonnes habitudes et l'économiser.
Dans un tout petit programme tu ne te rends compte de rien mais avec un programme plus conséquent tu risques vite d'avoir des problèmes.
Un type int ocupe 4 octets, un type byte occupe un seul octet.
Le fait de déclarer constant fait économiser de la mémoire ram qui avec le micro de la UNO ne fait que 2koctets.
Conseil : avec un micro avr (UNO,Nano,mini-pro, micro, leonardo, Mega) Atmel fourni une macro pour placer des constantes dans la flash au lieu de la ram --> voir macro F et/ou PROGMEN

Le post 5 vous explique pourquoi ça fonctionne sur la Pin 10 et pas la pin 3... vous l'avez lu?

un int ne pose bien sûr aucun problème pour stocker un petit nombre positif, mais il utilise 2 octets sur un AVR au lieu d'un seul pour un byte. en plus quand vous ne dites pas au compilateur que c'est une constante plutôt qu'une variable, vous limitez les possibilités d'optimisation du code. en les déclarant en const byte, le compilateur en fait ne va pas allouer de mémoire du tout et remplacera en assembleur directement dans l'appel de la fonction le paramètre par sa valeur constante. donc c'est tout bénéfice pour la gestion mémoire et la performance

J-M-L:
Le post 5 vous explique pourquoi ça fonctionne sur la Pin 10 et pas la pin 3... vous l'avez lu?

un int ne pose bien sûr aucun problème pour stocker un petit nombre positif, mais il utilise 2 octets sur un AVR au lieu d'un seul pour un byte. en plus quand vous ne dites pas au compilateur que c'est une constante plutôt qu'une variable, vous limitez les possibilités d'optimisation du code. en les déclarant en const byte, le compilateur en fait ne va pas allouer de mémoire du tout et remplacera en assembleur directement dans l'appel de la fonction le paramètre par sa valeur constante. donc c'est tout bénéfice pour la gestion mémoire et la performance

Super merci beaucoup pour vos conseils !!