Bonjour,
Je debute sur arduino et je bloque sur un programme que j'ai trouvé sur le net.
j ai réussi a y apporter quelques modifications qui s'adapte a mon projet mais je bloque sur une chose.
le programme sert a faire fonctionner un passage a niveau en modélismes.
il fonctionne avec un bouton qui déclenche un servo moteur pour actionner la barrière a la descente et quand on appui il remonte.
je voudrais mettre deux boutons. 1 pour faire descendre la barrière seulement et l autre la monté uniquement.
Si quelqu'un aurait la gentillesse de m'aider se serait très gentil.
Voici mon programme.
#include <Servo.h>
#include <LightDimmer.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;
int sonnerie = 9;
const int angleMin = 1250;
const int angleMax = 1600;
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 int pinBouton1 = 1;/ le bouton est connecté à la broche A1 */
const boolean PRESSE = true;
const boolean RELACHE = false;
boolean etatBouton = RELACHE;
boolean etatBouton1 = RELACHE;
const byte AUCUN_EVENEMENT = 0;
const byte EVENEMENT_PRESSE = 1;
const byte EVENEMENT_RELACHE = 2;
const byte feu1Pin = 10;
/* Deux LightDimmerSoft pour le feu */
LightDimmerSoft clignotantFeu1;
/*
-
fonctions de gestion du poussoir
*/
boolean lirePoussoir()
{
boolean resultat = RELACHE;
if (analogRead(pinBouton) > 512) {
resultat = PRESSE;
}return resultat;
}
boolean lirePoussoir1()
{
boolean resultat = RELACHE;
if (analogRead(pinBouton1) > 512) {
resultat = PRESSE;
}
return resultat;
}
byte lireEvenement()
{
byte evenement;
boolean nouvelEtat = lirePoussoir();
if (nouvelEtat == etatBouton)
evenement = AUCUN_EVENEMENT;
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()
{
digitalWrite(sonnerie,LOW);
monServo.attach(2);
clignotantFeu1.begin(feu1Pin, HIGH);
pinMode(sonnerie, OUTPUT);
}
/*
-
La fonction loop() est exécutée
-
répétitivement
/
void loop()
{
LightDimmer::update();
/ actualisation de l'angle du servo */
monServo.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 (etatServo) {
case SERVO_A_ANGLE_MIN:
case SERVO_EN_MOUVEMENT_VERS_ANGLE_MIN:
vitesse = 1;
etatServo = SERVO_EN_MOUVEMENT_VERS_ANGLE_MAX;
digitalWrite(sonnerie, HIGH);
delay(2000);
digitalWrite(sonnerie,LOW);
clignotantFeu1.startBlink();break; case SERVO_A_ANGLE_MAX: case SERVO_EN_MOUVEMENT_VERS_ANGLE_MAX: vitesse = -1; etatServo = SERVO_EN_MOUVEMENT_VERS_ANGLE_MIN; clignotantFeu1.off(); break; }
}
delay(15);
}