Commander un servo moteur avec une télécommande IR arduino
Résolu
Jojon2711
Messages postés
33
Statut
Membre
-
Jojon2711 Messages postés 33 Statut Membre -
Jojon2711 Messages postés 33 Statut Membre -
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
- Télécommande universelle grundig pdf - Forum Téléviseurs
- Telecommande free clignote rouge - Forum Téléviseurs
- Allumer freebox sans telecommande ✓ - Forum Freebox
- Peut on commander sur amazon d'un autre pays ✓ - Forum Consommation & Internet
- Commander sur Amazon.es (Espagne) ✓ - Forum Réseaux sociaux
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 !