Bonjour,
Ayant achevé de construire un programme,avec des millis()( Merci à JML) ,
j'aimerai passer au 2ème stade de mon projet:commander une série de moteurs comme suit :
Digital pin n°2 : actionne moteur 1 dans 1 sens 6 secondes
Digital pin n°3 : actionne moteur 1 dans sens inverse 6 secondes
Digital pin n°6 : actionne moteur 2 dans 1 sens 8 secondes
Digital pin n°7 : actionne moteur 2 dans sens inverse 8 secondes
Digital pin n°8 : actionne moteur 3 dans 1 sens 20 secondes
Digital pin n°9 : actionne moteur 4 dans 1 sens 30 secondes
Digital pin n°10 : actionne moteur 5 dans 1 sens 10 secondes
Digital pin n°12 : actionne moteur 5 dans sens inverse 10 secondes
LES ACTIONS A FAIRE:
Lorsque la pin 11 allume une led =>
L’ordre des déclenchements est : ( j’indique les numéros des pins )
6-2-10-9-7-3_6-12-7-8
-
6 et 2 se déclenchent en même temps
-
puis 10 et 9 se déclenchent en même temps dés la fin des 8 secondes
après 10 secondes ( le 10 a fini ) le 7 est actionné
lorsque le 9 s’arrête (soit 30 secondes / ou = 20 secondes après déclenchement du 7 /ou = 12 secondes après arrêt du 7 ) le 3 et le 6 est actionné en mème temps
quand le 6 s’arrête le 12 se déclenche ( sans s’occuper où en est le délai du 3 )
quand le 12 s’arrête le 7 se déclenche
puis le 8 se déclenche
puis plus d’action jusqu’à ce que la pin 11 se rallume où le cycle recommence.
Aussi,j'ai grandement besoin de votre aide, soutenue, pour y arriver.
/* Partie déclaration "états" */
enum : byte {LED_ETEINTE, LED_ALLUMEE} etat;
/* Partie "LED" */
const byte pinLED = 11;
boolean LedAllumee;
/* Partie temporisation */
const unsigned long temporisationLED_ON = 5000ul;
const unsigned long temporisationLED_OFF = 10000ul;
unsigned long topChronoLED_ON ;
unsigned long topChronoLED_OFF;
/* Partie "capteur ULTRASON" */
const byte trigPin = 4;
const byte echoPin = 5;
const int distanceCritique = 11; // en cm
/* Partie " fonctions " */
int lireDistance()
{
static unsigned long topChronoMesure = 4294967154;
const unsigned long tempoMesure = 100ul;
static int cm;
unsigned long topMoinsTempo;
topMoinsTempo = millis() - topChronoMesure;
if (millis() - topChronoMesure > tempoMesure) {
// on a attendu assez longtemps, faire la mesure
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
cm = pulseIn(echoPin, HIGH) / 58;
}
Serial.print("millis() : ");
Serial.println( millis());
Serial.print("topChronoMesure : ");
Serial.println( topChronoMesure);
Serial.print("topMoinsTempo : ");
Serial.println( topMoinsTempo);
Serial.print("Distance cm : ");
Serial.println( cm);
topChronoMesure = millis();
return cm;
lireDistance();
}
void allumerLED()
{
static boolean premiereFois = true; // au premier allumage les 10 secondes de temporisation ne sont pas valides
if (premiereFois || (millis() - topChronoLED_OFF >= temporisationLED_OFF)) {
digitalWrite(pinLED , HIGH); // allumer la LED
topChronoLED_ON = millis();
LedAllumee = true;
etat = LED_ALLUMEE;
premiereFois = false;
}
}
void eteindreLED()
{
digitalWrite(pinLED , LOW); // éteindre la LED
LedAllumee = false;
topChronoLED_OFF = millis();
etat = LED_ETEINTE;
}
void setup()
{
Serial.begin(115200); // à enlever si vous ne mettez pas de trace sur la console série
pinMode(pinLED, OUTPUT);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
digitalWrite(trigPin, LOW);
delay (20);
eteindreLED(); // état initial
}
void loop() {
int distance = lireDistance();
//Serial.println( distance);
switch (etat)
{
case LED_ETEINTE:
if (distance < distanceCritique) allumerLED();
break;
case LED_ALLUMEE:
if (millis() - topChronoLED_ON >= temporisationLED_ON) eteindreLED();
break;
}
}
En me basant sur ce programme ( en le modifiant ,bien sûr, pour l'adapter à mon projet ).
Et j'ai aussi besoin d’être guider dans le choix du matériel pour la protection de la carte uno, (motorshield ?, mosfet?, transistor ? pont en H ? ....) j'ai déjà la carte uno et mega, 2 capteurs HC-SR04 , des relais"songle",
Aussi,j'ai grandement besoin de votre aide , soutenue, pour y arriver.
Merci d'avance de l'aide que vous m'apporterez afinr que ce 2ème sujet puisse arriver à son terme ,aussi bien que le 1er.
Amitié à tous
Frida