Bonjour à tous,
Comme précisé lors de ma présentation , je débute dans la programmation et la gestion de l’Arduino.
Voici ma question, j'utilise une R4 UNO avec un capteur acoustique qui fonctionne en fonction de la distance et du refresh ( delais) jusqu’à la ok. mais je souhaiterais incorporer une temporisation de démarrage du programme .
par exemple : lance le programme dans 45 mn.
J'ai essaye de jouer avec le délais mais je n'y arrive pas.
Est il possible d'avoir un peu d'aide.
Par avance merci
Ontalite
Bonjour ontalite
Le mieux est que tu mettes ton programme en ligne, entre les balises
A+
Cordialement
jpbbricole
onst int trigPin = 9;
const int echoPin = 10;
const int ledPin = 13;
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(ledPin, OUTPUT);
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);
int distance = duration * 0.034 / 2;
if (distance <= 10) {
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
}
delay(1000);
Oup's, trop vite, merci pour le temps accordé
Bonsoir ontalite
C'est du plaisir
Voici une solution.
Tu mets le nombre de secondes dans const int nombreMinutes
ensuite une boucle de nombreMinutes
fait le décompte.
Le décompte s'affiche dans la console à 115200.
Pour accélérer l'essai, j'ai accéléré par 100 le temps:
delay(600); // une seconde = 60000
Il suffit de changer le 600 par 60000.
J'ai essayé sur R4, c'est OK.
Le programme:
const int trigPin = 9;
const int echoPin = 10;
const int ledPin = 13;
const int nombreMinutes = 45;
void setup() {
Serial.begin(115200);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(ledPin, OUTPUT);
for (int t = 0; t < nombreMinutes; t ++) // Boucle pour scinder le temps
{
Serial.println(nombreMinutes - t); // Afficher le décompte
delay(600); // une seconde = 60000
}
Serial.println(F("Le programme demarre"));
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);
int distance = duration * 0.034 / 2;
if (distance <= 10) {
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
}
delay(1000);
}
Amuses toi bien et, surtout, poses des questions
Bonne soirée
jpbbricole
Bonjour JPB,
Désolé pour ma réponse plus que tardive, un grand merci à toi.
j'ai modifié le code qui fonctionne bien, le voici
const int trigPin = 12; // Pin de déclenchement (trigger)JAUNE du capteur ultrasonique
const int echoPin = 11; // Pin d'écho (echo)BLEU du capteur ultrasonique
int Relay = 13;
void setup() {
pinMode(trigPin, OUTPUT); // Configure trigPin en sortie
pinMode(echoPin, INPUT); // Configure echoPin en entrée
pinMode(Relay, OUTPUT); // Configure ledPin en sortie
Serial.begin(9600); // Initialise la communication série pour afficher la distance
}
void loop() {
digitalWrite(trigPin, LOW); // Met trigPin à LOW pour s'assurer qu'il n'y a pas de signal résiduel
delayMicroseconds(2); // Attend 2 microsecondes
digitalWrite(trigPin, HIGH); // Met trigPin à HIGH pour envoyer une impulsion
delayMicroseconds(10); // Maintient HIGH pendant 10 microsecondes pour envoyer l'impulsion ultrasonique
digitalWrite(trigPin, LOW); // Met trigPin à LOW pour terminer l'impulsion
long duration = pulseIn(echoPin, HIGH); // Mesure la durée de l'impulsion retour en microsecondes
// Calcul de la distance en fonction de la vitesse du son dans l'air (en cm/µs)
float speedOfSound = 0.0343; // Vitesse du son à 20°C en cm/µs
float distance = (duration / 2.0) * speedOfSound; // Calcul de la distance en cm
// Affichage de la distance mesurée sur le moniteur série
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
// Contrôle de la LED en fonction de la distance mesurée
if (distance <= 5) {
digitalWrite(Relay, HIGH); // Allume la LED si la distance est <= 50cm
} else {
digitalWrite(Relay, LOW); // Éteint la LED sinon
}
delay(80); // Attend 800 millisecondes avant la prochaine mesure
}
Mais je n'arrive toujours pas à créer un délais qui lance mon programme .
Par exemple :
P1 : Tempo programmable en S ou mn
PUIS
P2: mon programme.
la tout se mélange .
j’espère que je suis assez clair dans mes propos .
En te remerciant du temps que tu pourras y accorder
Onta
Bonjour ontalite
Super, bonne continuation!
Cordialement
jpbbricole
Ton code ne contient pas les conseilles de @jpbbricole, l'as tu essayé ?
Une autre façon de faire, qui n'est pas bloquante
int32_t temporisation = 1 * 60 * 1000;
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("Bonjour, demarrage temporisation");
}
void loop() {
if (temporisation > 0) {
if (temporisation % 5000 == 0){
Serial.print("temporisation:");Serial.println(temporisation);
}
temporisation --;
} else {
Serial.println("corps du programme");
delay(10000);
//le delay est là uniquement pour ne pas avoir trop d'affichage puisque il n'y a pas reelement de programme
//le programme P2 doit être placé ici
}
}
Bonjour TERWAL,
Tout d'abord merci, je viens de coller mon P2 après ton code et j'ai des messages d'erreur.
On est ok sur le fait que c'est le delay (10000) en "s" que je modifie ?
Est il possible de regarder , merci ?
.
int32_t temporisation = 1 * 60 * 1000;
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("Bonjour, demarrage temporisation");
}
void loop() {
if (temporisation > 0) {
if (temporisation % 5000 == 0){
Serial.print("temporisation:");Serial.println(temporisation);
}
temporisation --;
} else {
Serial.println("corps du programme");
delay(10000);
//le delay est là uniquement pour ne pas avoir trop d'affichage puisque il n'y a pas reelement de programme
const int trigPin = 12; // Pin de déclenchement (trigger)JAUNE du capteur ultrasonique
const int echoPin = 11; // Pin d'écho (echo)BLEU du capteur ultrasonique
int Relay = 13;
void setup() {
pinMode(trigPin, OUTPUT); // Configure trigPin en sortie
pinMode(echoPin, INPUT); // Configure echoPin en entrée
pinMode(Relay, OUTPUT); // Configure ledPin en sortie
Serial.begin(9600); // Initialise la communication série pour afficher la distance
}
void loop() {
digitalWrite(trigPin, LOW); // Met trigPin à LOW pour s'assurer qu'il n'y a pas de signal résiduel
delayMicroseconds(2); // Attend 2 microsecondes
digitalWrite(trigPin, HIGH); // Met trigPin à HIGH pour envoyer une impulsion
delayMicroseconds(10); // Maintient HIGH pendant 10 microsecondes pour envoyer l'impulsion ultrasonique
digitalWrite(trigPin, LOW); // Met trigPin à LOW pour terminer l'impulsion
long duration = pulseIn(echoPin, HIGH); // Mesure la durée de l'impulsion retour en microsecondes
// Calcul de la distance en fonction de la vitesse du son dans l'air (en cm/µs)
float speedOfSound = 0.0343; // Vitesse du son à 20°C en cm/µs
float distance = (duration / 2.0) * speedOfSound; // Calcul de la distance en cm
// Affichage de la distance mesurée sur le moniteur série
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
// Contrôle de la LED en fonction de la distance mesurée
if (distance <= 5) {
digitalWrite(Relay, HIGH); // Allume la LED si la distance est <= 50cm
} else {
digitalWrite(Relay, LOW); // Éteint la LED sinon
}
delay(80); // Attend 800 millisecondes avant la prochaine mesure
}
}
}
Cela fonctionne
const int trigPin = 12; // Pin de déclenchement (trigger) JAUNE du capteur ultrasonique
const int echoPin = 11; // Pin d'écho (echo) BLEU du capteur ultrasonique
int Relay = 13;
const int nombreMinutes = 45; // Nombre de minutes pour le décompte
const int delayMillis = 20; // Délai en millisecondes (1 seconde)
void setup() {
Serial.begin(115200);
// Configuration des pins
pinMode(trigPin, OUTPUT); // Configure trigPin en sortie
pinMode(echoPin, INPUT); // Configure echoPin en entrée
pinMode(Relay, OUTPUT); // Configure le relais en sortie
// Décompte du temps
for (int t = nombreMinutes * 60; t > 0; t--) { // Conversion des minutes en secondes
Serial.println(t); // Afficher le décompte en secondes
delay(delayMillis); // Attendre 10 secondes
}
Serial.println(F("Le programme démarre"));
}
void loop() {
// Code pour mesurer la distance avec le capteur ultrasonique
digitalWrite(trigPin, LOW); // Met trigPin à LOW pour s'assurer qu'il n'y a pas de signal résiduel
delayMicroseconds(2); // Attend 2 microsecondes
digitalWrite(trigPin, HIGH); // Met trigPin à HIGH pour envoyer une impulsion
delayMicroseconds(10); // Maintient HIGH pendant 10 microsecondes pour envoyer l'impulsion ultrasonique
digitalWrite(trigPin, LOW); // Met trigPin à LOW pour terminer l'impulsion
long duration = pulseIn(echoPin, HIGH); // Mesure la durée de l'impulsion retour en microsecondes
// Calcul de la distance en fonction de la vitesse du son dans l'air (en cm/µs)
float speedOfSound = 0.0343; // Vitesse du son à 20°C en cm/µs
float distance = (duration / 2.0) * speedOfSound; // Calcul de la distance en cm
// Affichage de la distance mesurée sur le moniteur série
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
// Contrôle du relais en fonction de la distance mesurée
if (distance <= 5) {
digitalWrite(Relay, HIGH); // Active le relais si la distance est <= 5 cm
} else {
digitalWrite(Relay, LOW); // Désactive le relais sinon
}
delay(80); // Attend 80 millisecondes avant la prochaine mesure
}
Dans ton avant dernier message, tu n'a pas insérer correctement ton P2 à la place du delay(10000), tu te retourve donc avec deux fonction loop.
Dans ton précédent message, tu as oublié les balises code, donc ton code est illisible
Oui en effet, c est le message d erreur que j avais . Je commence juste à coder.
Merci encore
Lulu
Envoyé à partir de Outlook pour Android
ok, peut tu quand même modifier ton message #10 pour que ton code soit lisible par les personnes potentiellement intéressé ?