Bonjour ![]()
Dans le cadre de mon projet de sciences de l'ingénieur, je souhaite réaliser un système comprenant un moteur et trois interrupteurs de fin de course (situés autour de l'axe du moteur et espacés de 120° chacun). Une butée sur l'axe du moteur vient appuyer sur l'un des inter fin de course et l'appui est récupéré sur mon arduino MEGA. La rotation du moteur est commandée par un bouton. Si on appuie sur ce bouton, alors le moteur va tourner jusqu'à appuyer sur un des 3 microswitch.
En fait, je souhaite détecter un éventuel blocage sachant que le moteur fait un tiers de tour (distance entre 2 microswitch) en 5 secondes. Si, après appui sur le bouton, aucun microswitch n'est activé, alors on allume une LED "défaut". J'ai écrit un programme, mais je ne comprends pas pourquoi il ne fonctionne pas.
const int boutonA = 5;
const int microswitch1 = 6;
const int enable = 7; // correspond à l'activation du moteur
const int leddefaut = 8;
void setup()
{
pinMode(boutonA, INPUT);
pinMode(microswitch1, INPUT);
pinMode(enable, OUTPUT);
pinMode(leddefaut, OUTPUT);
digitalWrite(enable, LOW);
digitalWrite(leddefaut, LOW);
}
void loop()
{
if(digitalRead(boutonA) == HIGH) // si bouton A est activé
{
digitalWrite(enable, HIGH);
temps = millis()+8000;
if(digitalRead(microswitch1) == HIGH) //si le microswitch est activé
{
digitalWrite(enable, LOW); // on éteint le moteur
}
else //si le microswitch n'est pas activé
{
if(millis() > temps) // si 8 secondes se sont écoulées depuis l'appui sur le bouton
{
digitalWrite(enable, LOW); // alors on coupe le moteur
digitalWrite(leddefaut, HIGH);// et on allume la LED défaut
}
}
}
}
J'utilise la fonction millis() car ce morceau de code ne correspond qu'à une petite partie du programme et il se passe des choses pendant ce temps.
Bonne soirée à vous !