Bonjour,
Je suis sur un projet pour commander un servo-moteur avec deux boutons poussoir, je m'explique:
- Lorsque j’appuie sur un des bouton poussoir le servo-moteur tourne de 180° et quand je relache il revient à la position initiale(0°).
-Et lorsque j'appuie sur l'autre bouton poussoir le servo-moteur tourne à -180° et quand je relache il revient à la position initiale (0°).
et voici mon code :
#include <Servo.h>
const byte SERVO_A_ANGLE_MIN = -1;
const byte SERVO_A_ANGLE_MAX = 1;
const byte SERVO_EN_NEUTRE = 0;
const int angleMin = -1750;
const int angleNeutre = 0;
const int angleMax = 1750;
Servo monServo1;
int vitesse = 0;
int angle = angleNeutre;
byte etatServo = SERVO_EN_NEUTRE;
const int pinBouton = 0; /* le bouton est connecté à la broche A0 */
const int pinBouton1 = 1; /* le bouton est connecté à la broche A1 */
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;
boolean resultat = PRESSE;
if (analogRead(pinBouton) > 1023) {
resultat = RELACHE;
boolean resultat = RELACHE;
if (analogRead(pinBouton1) > 512) {
resultat = PRESSE;
boolean resultat = PRESSE;
if (analogRead(pinBouton1) > -1023) {
resultat = RELACHE;
}
return resultat;
}
byte lireEvenement()
{
byte evenement;
boolean nouvelEtat = lirePoussoir();
if (nouvelEtat == etatBouton)
evenement = AUCUN_EVENEMENT;
if (nouvelEtat == PRESSE && etatBouton)
evenement = EVENEMENT_PRESSE;
if (nouvelEtat == RELACHE && etatBouton)
evenement = EVENEMENT_RELACHE;
etatBouton = nouvelEtat;
return evenement;
if (nouvelEtat == etatBouton1)
evenement = AUCUN_EVENEMENT;
if (nouvelEtat == PRESSE && etatBouton1)
evenement = EVENEMENT_PRESSE1;
if (nouvelEtat == RELACHE && etatBouton1)
evenement = EVENEMENT_RELACHE1;
etatBouton1 = nouvelEtat;
return evenement;
}
/*
* La fonction setup() est exécutée 1 fois
* au démarrage du programme
*/
void setup()
{
monServo1.attach(2);
}
/*
* La fonction loop() est exécutée
* répétitivement
*/
void loop()
{
/* actualisation de l'angle du servo */
monServo1.writeMicroseconds(angle);
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 (etatServo1) {
case SERVO_A_ANGLE_MIN:
case SERVO_EN_MOUVEMENT_VERS_ANGLE_MIN:
vitesse = 1;
if (evenement == EVENEMENT_PRESSE1) {
switch (etatServo1) {
case SERVO_A_ANGLE_MIN:
case SERVO_EN_MOUVEMENT_VERS_ANGLE_MAX:
vitesse = 1;
if (evenement = AUCUN_EVENEMENT;) {
switch (etatServo1) {
case SERVO_A_ANGLE_MIN:
case SERVO_EN_MOUVEMENT_VERS_ANGLE_MAX:
vitesse = 1;
}
}
delay(3);
}