Salut à tous j'ai réussi à programmer mon servomoteur mais maintenant je dois le programmer avec un bouton poussoir je m'explique : je veux qu'un appuie le fasse tourner en continuer et des que je ré appui il s’arrête ; le prof m'a donné se programme pour me guider mais ici le moteur ne tourne pas en continue pouvez vous m'aider s'il vous plait ? Je dois rendre ce projet dans 1 semaine :'( !!!
Programme :
#include <Servo.h>
const byte SERVO_A_ANGLE_MIN = 0;
const byte SERVO_A_ANGLE_MAX = 1;
const byte SERVO_EN_MOUVEMENT_VERS_ANGLE_ MAX = 2;
const byte SERVO_EN_MOUVEMENT_VERS_ANGLE_ MIN = 3;
const int angleMin = 1250;
const int angleMax = 1750;
Servo monServo;
int vitesse = 0;
int angle = angleMin;
byte etatServo = SERVO_A_ANGLE_MIN;
const int pinBouton = 0; /* le bouton est connecté à la broche A0 */
const boolean PRESSE = true;
const boolean RELACHE = false;
boolean etatBouton = RELACHE;
const byte AUCUN_EVENEMENT = 0;
const byte EVENEMENT_PRESSE = 1;
const byte EVENEMENT_RELACHE = 2;
/*
* fonctions de gestion du poussoir
*/
boolean lirePoussoir()
{
boolean resultat = RELACHE;
if (analogRead(pinBouton) > 512) {
resultat = PRESSE;
}
return resultat;
}
byte lireEvenement()
{
byte evenement;
boolean nouvelEtat = lirePoussoir();
if (nouvelEtat == etatBouton)
evenement = AUCUN_EVENEMENT;
if (nouvelEtat == PRESSE && etatBouton == RELACHE)
evenement = EVENEMENT_PRESSE;
if (nouvelEtat == RELACHE && etatBouton == PRESSE)
evenement = EVENEMENT_RELACHE;
etatBouton = nouvelEtat;
return evenement;
}
/*
* La fonction setup() est exécutée 1 fois
* au démarrage du programme
*/
void setup()
{
monServo.attach(2);
}
/*
* La fonction loop() est exécutée
* répétitivement
*/
void loop()
{
/* actualisation de l'angle du servo */
monServo.writeMicroseconds(ang le);
angle = angle + vitesse;
if (angle > angleMax) {
angle = angleMax;
vitesse = 0;
etatServo = SERVO_A_ANGLE_MAX;
}
else if (angle < angleMin) {
angle = angleMin;
vitesse = 0;
etatServo = SERVO_A_ANGLE_MIN;
}
/* lecture de la commande de l'utilisateur */
byte evenement = lireEvenement();
if (evenement == EVENEMENT_PRESSE) {
switch (etatServo) {
case SERVO_A_ANGLE_MIN:
case SERVO_EN_MOUVEMENT_VERS_ANGLE_ MIN:
vitesse = 1;
etatServo = SERVO_EN_MOUVEMENT_VERS_ANGLE_ MAX;
break;
case SERVO_A_ANGLE_MAX:
case SERVO_EN_MOUVEMENT_VERS_ANGLE_ MAX:
vitesse = -1;
etatServo = SERVO_EN_MOUVEMENT_VERS_ANGLE_ MIN;
break;
}
}
delay(3);
}
-----