Bonjour, je suis sur un projet de robot télécommandé télécommande IR. Jusque là tout s'est bien passé et j'arrive à activer le moteur mais malheureusement il se met en position on et ne cesse pas de tourner. J'aimerais qu'il ne tourne que lorsque j'appuie sur le bouton de la télécommande IR et qu'il s'arrête de tourner lorsque j'arrête d'appuyer. Après avoir tout essayé, je m'en remet à vous. Mon code est ci-dessous.
Merci d'avance de vos réponses,
Ethan
Code:
// Inclure la librairie Arduino-IRremote
// Sources : https://github.com/Arduino-IRremote/Arduino-IRremote
#include <IRremote.hpp>
// Numéro de la "pin" sur laquelle est connecté le capteur infrarouge.
#define IR_PIN 7
// Configure l'arduino.
void setup(){
// Configure le port série.
Serial.begin(9600);
// Configure la librarie IRremote.
IrReceiver.begin(IR_PIN, DISABLE_LED_FEEDBACK);
pinMode(8, OUTPUT);
}
// Boucle
void loop(){
// Si on a reçu un message.
if (IrReceiver.decode()) {
// On recupère la trame reçue.
const uint32_t trame = IrReceiver.decodedIRData.decodedRawData;
Serial.print("Trame = ");
Serial.println(trame, HEX);
// Affiche le bouton appuyé.
boutonAppuye(trame);
// On dit à la librairie que l'on est pret à recevoir le message suivant.
IrReceiver.resume();
}
}
// Affiche le bouton appuyé sur le port serie.
void boutonAppuye(uint32_t trame) {
// On recupère l'identifiant de la telecommande.
// Note: on recupère les 16 premiers bits de la trames sur 32 bits.
const uint16_t identifiantTelecommande = (uint16_t) trame;
// On recupère le code du bouton pressé.
// Note: on recupère les 16 derniers bits de la trames sur 32 bits que l'on décale de 16 bits vers la droite.
const uint16_t codeBouton = (uint16_t) (trame>>16);
Serial.print("identifiantTelecommande = ");
Serial.println(identifiantTelecommande, HEX);
Serial.print("Code bouton = ");
Serial.println(codeBouton, HEX);
// Stocke le nombre de fois que l'on a reçu la valeur 0 (bouton maintenu) suite à l'appui sur un bouton.
// Attention : variable statique, donc non remise à zero quand la fonction est appelée.
static int boutonMaintenuCompteur = 0;
// Si le code bouton est 0 (bouton maintenu).
if(codeBouton == 0) {
// Si ce n'est pas le premier message "bouton maintenu".
if(boutonMaintenuCompteur > 0) {
// Note : on ignore le premier message car il apparait presque à chaque appui.
// On affiche "maintenu" sur le port série.
Serial.println("maintenu");
}
// On incrémente le compteur.
boutonMaintenuCompteur++;
Serial.print("boutonMaintenuCompteur = ");
Serial.println(boutonMaintenuCompteur, DEC);
Serial.println("");
// On arrête la fonction maintenant.
return;
}
else {
// On remet le compteur à 0;
boutonMaintenuCompteur = 0;
Serial.print("boutonMaintenuCompteur = ");
Serial.println(boutonMaintenuCompteur, DEC);
}
// Si c'est la télécommande arduino
if(identifiantTelecommande == 0xFF00) {
// Switch basé sur le code du bouton.
switch(codeBouton) {
// Si le code bouton est 0xBA45
case 0xBA45:
digitalWrite(8, HIGH);
break;
}
}
Serial.println("");
}