Bonjour à tous !
Je vous explique mon projet que j'ai commencé à coder mais il doit y avoir des erreurs du à mon manque de connaissance ( j'apprends doucement....)
Je souhaiterai allumer un moteur avec un bouton pressoir et qu'il se mette en marche à la seconde pression avec un intervalle de moins de deux seconde afin que si on appuie par erreur il ne se mette pas en route. Le moteur doit s'arrêter avec un contacteur fin de course.
Ce montage est monté sur un tour. Je fais le perçage manuellement et je voudrais que l'outil revienne à la position initiale avec une aide électrique.
J'ai mis des explications dans le code mais je pense que j'ai mal paramètré millis() et la syntaxe ainsi que la logique ne doit pas être correcte..... mais c'est un début qui demande qu'à être amélioré. Je me suis aidé des tutos
sur locoduino mais je dois pas avoir fait tout correctement.....
``Merci pour vous conseils et aide !
![]()
```cpp
#include <Arduino.h>
int Bouton = 3; // bouton pressoir
int Rmoteur = 4; // relais moteur
int fdc = 5; // contacteur fin de course
unsigned long HeureActuelle = 0;
unsigned long HeurePrecedente = 0;
unsigned long Intervalle = 2000;
byte EtatBouton = HIGH; // bouton pressoir ouvert (non appuyé)
void setup() {
pinMode(Bouton, INPUT_PULLUP);
pinMode(Rmoteur, OUTPUT);
pinMode(fdc, INPUT_PULLUP);
}
void loop() {
// on appuie une première fois mais cela n'allume pas le moteur
while (digitalRead(Bouton) == LOW); // bouton pressoir fermé (appuyé)
digitalWrite(Rmoteur, LOW); // Relais moteur ouvert moteur éteint
// on demarre le chrono
HeureActuelle = millis();
// si le bouton pressoir est appuyé mais que l'intervalle est superieur à 2s le relais reste ouvert et le moteur reste arrêté
if (EtatBouton == LOW && (HeureActuelle - HeurePrecedente) > Intervalle) {
EtatBouton = LOW;
digitalWrite(Rmoteur, EtatBouton);
HeurePrecedente = HeureActuelle;
}
// si le bouton pressoir est appuyé mais que l'intervalle est inferieur à 2s le relais se ferme et le moteur demarre
else if (EtatBouton == LOW && (HeureActuelle - HeurePrecedente) < Intervalle) {
EtatBouton = HIGH;
digitalWrite(Rmoteur, EtatBouton);
HeurePrecedente = HeureActuelle;
}
//lorsque contacteur fin de course est appuyé le relais coupe le moteur
while (digitalRead(fdc) == LOW)
;
digitalWrite(Rmoteur, LOW);
}

