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 -
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:
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 |
A voir également:
- Commander un servo moteur avec une télécommande IR arduino
- Allumer tv avec télécommande bbox 4k - Forum Téléviseurs
- Peut on commander sur amazon d'un autre pays ✓ - Forum Consommation & Internet
- Commander sur Amazon.es (Espagne) ✓ - Forum Réseaux sociaux
- Telecommande free clignote rouge - Forum Téléviseurs
- Télécommande universelle grundig pdf - Forum Téléviseurs
3 réponses
Bonjour,
Le
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 } } }
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.
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 ?
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 } }
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 !