bonjour à tous.
voici mon projet: automatiser un passage à niveau ( 1 seule voie pour commencer), signalisation clignotante et motorisation des barrières.
Je rencontre des problèmes avec la gestion des temporisations, j'aimerai de l'aide pour comprendre ma ou mes erreurs pour être capable seul (si possible) de passé le projet en multi voies
Ma seule formation en codage est le cours dédié sur openclassroom et arduino pour les nuls,
sinon je suis très à l'aise avec les notions d'électricité car je suis dépanneur en porte automatique. Je pourrai facilement le faire avec quelques relais temporisés mais je recherche de nouvelles connaissances/ compétences, d' où mon attirance pour Arduino. Bref.
Le matériel:
2 capteurs magnétiques sous les rails(1 en amont et l' autre en aval du passage à niveau les 2 raccordés en parallèle ),
1 aimant embarqué sous le train.
2 leds pour feux clignotants
2 moteurs pour les 2 barrières (moteur 9 volts sans fins de courses. donc passage par relais et tempo pour le temps de fonctionnement)
l'idée:
le train passe sur le premier capteur, déclenche le clignotement des feux et la fermeture des barrières.
traverse le passage à niveau
passe sur le second capteur ouverture des barrières et arrêt du clignotement.
voici ce que j'ai réussi à faire avec mes maigres connaissance, je suis partis du code pushButtonCounter .
mais voila ça coince! l'inversion de sens (ouvre /ferme) se fait bien et clignotement bien controlé aussi.
seulement tempo moteurs inactives et si la seconde impulsion est donnée après que la tempo moteur soit écoulée le système ne prend plus en compte les impulsions.
const int buttonPin = 2; // broche boutton
const int ledPin = 13; // broche led
const int motSensFerm = 4; // broche relais ouverture
const int motSensOuv = 7; // broche relais fermeture
int ledState = LOW;
unsigned long previousMillis = 0;
unsigned long tempoMoteur = 5000; // temps fonctionnement moteur
long interval = 400; // fréquence clignotement led
int buttonPushCounter = 0; // compteur d'impulsion
int buttonState = 0; // état actuel boutton
int lastButtonState = 0; // état précédent boutton
void setup() {
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
pinMode(motSensFerm, OUTPUT);
pinMode(motSensOuv, OUTPUT);
Serial.begin(9600);
}
void loop() {
// lit l'état du boutton
buttonState = digitalRead(buttonPin);
// compare les états du boutton
if (buttonState != lastButtonState) {
// si état différent incrémente le compteur
if (buttonState == HIGH) {
buttonPushCounter++;
Serial.println("on");
Serial.print("number of button pushes: ");
Serial.println(buttonPushCounter);
} else {
Serial.println("off");
}
// debounce
delay(100);
}
lastButtonState = buttonState;
unsigned long currentMillis = millis();
if (buttonPushCounter % 2 != 0) {
do {
digitalWrite(motSensOuv, LOW);
}
while (currentMillis - previousMillis > tempoMoteur ); {
previousMillis = currentMillis;
digitalWrite(motSensOuv, HIGH);
}
digitalWrite(motSensFerm, HIGH);
if (currentMillis - previousMillis > interval) {
previousMillis = currentMillis;
if (ledState == LOW)
ledState = HIGH;
else
ledState = LOW;
digitalWrite(ledPin, ledState);
}
}
if (buttonPushCounter % 2 == 0)
{
unsigned long currentMillis = millis();
digitalWrite(ledPin, LOW);
digitalWrite(motSensOuv, HIGH);
do {
digitalWrite(motSensFerm, LOW);
}
while (currentMillis - previousMillis > tempoMoteur ); {
previousMillis = currentMillis;
digitalWrite(motSensFerm, HIGH);
}
}
}
[code]
Merci par avance à tous ceux qui prendrons le temps de faire briller ma Led du codage.
j' espère avoir posté au bon endroit et dans les règles du forum.