Commander un servo moteur avec une télécommande IR arduino [Résolu]

Signaler
Messages postés
20
Date d'inscription
samedi 16 mai 2020
Statut
Membre
Dernière intervention
13 juin 2020
-
Messages postés
20
Date d'inscription
samedi 16 mai 2020
Statut
Membre
Dernière intervention
13 juin 2020
-
Bonjour à tous,

Je débute dans l'arduino et je voudrais réaliser un projet. ( un distributeur de croquettes pour chat)
En fait, j'aimerais qu'en cliquant sur le bouton power de la télécommande IR le servo moteur fasse une rotation sur la gauche et revienne a sa position initiale au bout de quelques secondes.
J'ai en ma possession : 1 récepteur IR, Une télécommande IR, un servo moteur, une carte arduino mega 2560, des cables.

Pourriez vous me dire ce qui ne vas pas dans mon code s'il vous plaît car il ne marche pas ?
J'ai déjà fait le cablage qui est très simple.

Merci d'avance pour votre aide !

Le code:

#include "Servo.h"  // Bibliothèque Servo
#include "IRremote.h" // Bibliothèque IRreceiever
Servo monServo;  // Nomme Servo comme myServo
IRrecv irrecv; // Nomme IRrecv comme irrecv ( ça ne marche pas ! )
int irrecv = 11;  // déclare que le receiver est sur la broche 11

void setup() {
   monServo.attach(9);  // Déclare que le servo est sur la broche 9
   monServo.write(0);   // Met le servo a 0
   irrecv.enableIRIn();  // Démarre le IRreceiver
}

void loop() {
   if(irrecv.decode(FFA25D)) { //FFA25D est le code du bouton power
    monServo.write(110);  // déplace servo a 110
    delay(500);   // Pendant 500
    monServo.write(0);  // Puis servo revient a 0
   }

}


Message modifié par la modération
Pour une lecture plus facile du code, à l'avenir utilisez les balises, VOIR CETTE PAGE

3 réponses

Messages postés
473
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
30 octobre 2020
62
Bonjour,
Le
delay()
n'est pas effectué qu'après le
monServo.write(110);
. Avec des accolades ça devrait correspondre à ce que tu veux faire.
void loop() {
   if ( monIr.decode( &message ) ) {
      if ( message.value == 0xFFA25D ) { //FFA25D est le code du bouton power
         monServo.write( 110 );  // déplace servo a 110
         delay( 500 ); // pendant 1/2 seconde
         monServo.write( positionDuServo );  // Puis servo revient a 0
      }
   }
}
Messages postés
20
Date d'inscription
samedi 16 mai 2020
Statut
Membre
Dernière intervention
13 juin 2020

Bonjour,
Merci j'ai copier le code que vous m'avez suggéré mais ça ne marche toujours pas.
Le servo moteur tourne à 110 mais reste a cette position.
Le " delay " ne sert a rien et le " monServo.write( positionDuServo ) " non plus.
Je ne sais pas pourquoi !
Vous n'auriez pas une autre solution ? Ou un allongement de code mais qui cette fois marcherai ?
Merci d'avance !
Messages postés
14733
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
12 octobre 2020
258
IRrecv irrecv; // Nomme IRrecv comme irrecv ( ça ne marche pas ! )
int irrecv = 11;  // déclare que le receiver est sur la broche 11 


Il y a pas comme un conflit de nom là ?

Ensuite, où renseignes-tu la pin à surveiller, car c'est bien beau de déclarer une variable, mais l'utiliser serait mieux.
Messages postés
20
Date d'inscription
samedi 16 mai 2020
Statut
Membre
Dernière intervention
13 juin 2020

Désolé, c'est bon j'ai trouvé le bon code qui se téléverse et qui marche mais il y a juste un problème :
Quand j'appuis sur power le servo moteur fait bien la rotation demandé sauf que dans mon code j'ai mis en dessous ( delay(500) et ensuite la commande pour qu'il retourne a zéro. mais il reste dans la même position au lieu de retourner après 1/2 seconde à zéro . Pouvez vous me dire ce qui cloche ?

#include <IRremote.h> // Bibliothèque IR
#include <IRremoteInt.h> // Bibliothèque IR
#include <Servo.h>  // Bibliothèque Servo

const char DIN_RECEPTEUR_INFRAROUGE = 11;  // Déclare l'emplacement sur la broche

decode_results message; // décode les résultats

Servo monServo;  // renomme Servo
int positionDuServo = 0;  // Initialise la postition de départ du servo
IRrecv monIr(DIN_RECEPTEUR_INFRAROUGE); // renomme IRrecv

void setup() 
{
   monServo.attach(9); // Déclare que le servo est sur la broche 9
   monServo.write(positionDuServo);   // Met le servo a 0
   monIr.enableIRIn();  // Démarre le IRreceiver
}

void loop() {
   if(monIr.decode(&message)) { //FFA25D est le code du bouton power
   if (message.value == 0xFFA25D) //FFA25D est le code du bouton power
    monServo.write(110);  // déplace servo a 110
    delay(500); // pendant 1/2 seconde
    monServo.write(positionDuServo);  // Puis servo revient a 0
   }

}