Bonjour, je sollicite votre aide pour la fonction millis malgré mes recherches et teste je ne m on sort pas
La platine est l Arduino uno
Pourquoi millis à cause de la fonction non bloquant
J’ai bien testé le blink avec millis qui fonctionne mais j’arrive à l’utiliser dans mon prog
Pour faire simple à chaque fois que j’active l’entrée 2 avec un 0 j’allume la sortie 13 pendant 5 secondes
Quand j’aurais réussi à faire ça je pourrais l’utiliser dans mon prog
Merci par avance
Bonjour,
Peux-tu nous donner ton code entre les balises Code
@+
Zoroastre.
Bonjour et merci pour votre aide j ai lu le site [Tutorial] Les interruptions temporelles avec Arduino | B@ttoMicro - Microcontrôleurs et compagnie !
mais je souhaite une simple tempo activer avec une entrée
bonne journée
/ Remplacer les delay en millis
const int entree2 = 2;
const int sortiee5 = 5;
void setup() {
// definir les broches en entrées
pinMode(entree2, INPUT); // entrée 2 pour sortie 17 arduino 1
// definir les broches en sorties
pinMode(sortiee5, OUTPUT); // Sortie 5 pour entrée 14 arduino 1
}
void loop() {
//////// Temporisation 1 ////////////
if (digitalRead(entree2)==HIGH){
delay (20000); // Temporisation de 20 secondes
digitalWrite(sortiee5, HIGH);
delay (20); // Pusl pour fin tempo
digitalWrite(sortiee5, LOW);
}
Bon alors :
Ton code fait ceci :
Attendre que l'entrée 2 soit à 5V, puis :
- attendre 20 secondes
- passer la sortie 5 à 5V pendant 20 millisecondes et la remettre à GND
En préambule, il manque à mon avis une initialisation de la valeur de la sortie 5 dans ton setup().
J'imagine que sa valeur par défaut est GNd donc il faudrait ajouter digitalWrite(sortiee5, LOW);
Si tu veux faire la même chose sans delay mais avec la fonction millis(), je te propose de commencer par définir les états de ton système.
Etat 0 : j'attends que l'entrée 2 soit à 5V
Etat 1 : je suis dans les 20 secondes d'attente
Etat 2 : je suis dans les 20 millisecondes d'attente
Ce qui pourrait donner :
const int entree2 = 2;
const int sortiee5 = 5;
void setup() {
// definir les broches en entrées
pinMode(entree2, INPUT); // entrée 2 pour sortie 17 arduino 1
// definir les broches en sorties
pinMode(sortiee5, OUTPUT); // Sortie 5 pour entrée 14 arduino 1
digitalWrite(sortiee5, LOW);
}
int etat = 0;
unsigned long int chrono = 0;
void loop() {
if ((etat == 0) && (digitalRead(entree2) == HIGH)){
etat = 1;
chrono = millis();
}
if ((etat == 1) && ((millis() - chrono) > 20000){
etat = 2;
chrono = millis();
digitalWrite(sortiee5, HIGH);
}
if ((etat == 2) && ((millis() - chrono) > 20){
etat = 0;
digitalWrite(sortiee5, LOW);
}
// et ensuite tu peux faire autre chose, mais en évitant l'instruction delay()
//....
Même exemple, mais en isolant la gestion de la sortie 5 dans une fonction dédiée :
const int entree2 = 2;
const int sortiee5 = 5;
void setup() {
// definir les broches en entrées
pinMode(entree2, INPUT); // entrée 2 pour sortie 17 arduino 1
// definir les broches en sorties
pinMode(sortiee5, OUTPUT); // Sortie 5 pour entrée 14 arduino 1
digitalWrite(sortiee5, LOW);
}
void GestionSortiee5() {
static int etat = 0;
static unsigned long int chrono = 0;
if ((etat == 0) && (digitalRead(entree2) == HIGH)){
etat = 1;
chrono = millis();
}
if ((etat == 1) && ((millis() - chrono) > 20000){
etat = 2;
chrono = millis();
digitalWrite(sortiee5, HIGH);
}
if ((etat == 2) && ((millis() - chrono) > 20){
etat = 0;
digitalWrite(sortiee5, LOW);
}
}
void loop() {
GestionSortiee5();
// et ensuite tu peux faire autre chose, mais en évitant l'instruction delay()
//....
Merci ça marche je commence a comprendre la fonction millis
question comment faire pour intégrer le code dans une fenêtre comme tu le fais?
encore merci
michel5650:
question comment faire pour intégrer le code dans une fenêtre comme tu le fais?
Ben tu le mets simplement entre deux balises code
y a bouton pour ça dans la barre au-dessus de la zone de saisie