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

Résolu/Fermé
Jojon2711 Messages postés 19 Date d'inscription samedi 16 mai 2020 Statut Membre Dernière intervention 13 juin 2020 - Modifié le 16 mai 2020 à 22:17
Jojon2711 Messages postés 19 Date d'inscription samedi 16 mai 2020 Statut Membre Dernière intervention 13 juin 2020 - 17 mai 2020 à 13:56
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 dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
17 mai 2020 à 13:30
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 samedi 16 mai 2020 Statut Membre Dernière intervention 13 juin 2020 3
17 mai 2020 à 13:56
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 15163 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 1 novembre 2024 345
16 mai 2020 à 12:47
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 samedi 16 mai 2020 Statut Membre Dernière intervention 13 juin 2020 3
Modifié le 16 mai 2020 à 13:26
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