Commander un servo moteur avec une télécommande IR arduino

Résolu
Jojon2711 Messages postés 19 Date d'inscription   Statut Membre Dernière intervention   -  
Jojon2711 Messages postés 19 Date d'inscription   Statut Membre Dernière intervention   -
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

Dalfab Messages postés 706 Date d'inscription   Statut Membre Dernière intervention   101
 
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
      }
   }
}
1
Jojon2711 Messages postés 19 Date d'inscription   Statut Membre Dernière intervention   3
 
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 !
0
NHenry Messages postés 15219 Date d'inscription   Statut Modérateur Dernière intervention   365
 
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.
0
Jojon2711 Messages postés 19 Date d'inscription   Statut Membre Dernière intervention   3
 
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
   }

}
0