Quand variable ne varie pas pendant x temps

Bonjour à tous et merci de votre aide par avance !

Voici ce que je voudrais faire :

J'ai ma variable " int distance" qui varie en fonction de mon programme mais je voudrais que si elle ne varie pas pendant 2 h alors quelque chose se passe ( en l’occurrence mon buzzer sonne).

Mais je n'arrive pas à dire en gros "pendant 2h"
Merci encore de votre aide ! :slight_smile:

bonjour,
fonction millis()

D’accord merci de ton aide, est ce que cela conviendrait ? :

int distance;
long temps;

// imaginons que distance à varier pendant mon programme//

void loop

if (distance==distance && millis() - temps > 7 200 000) //2h =7 200 000 ms//

//allumer mon buzzer"

ah non mince je ne trouve pas comment dire
“si distance ne varie pas” ca ne peut pas être if distance == distance

Merci beaucoup pepe d'avoir pris le temps de m'aider !

Juste une question concernant ce code :

if( distance != nouvelleDistance ) {
distance = nouvelleDistance;

Cela veut dire " SI distance est toujours la même " ?

Parce que je n'ai pas compris ce morceau je voudrais faire "SI la distance (du capteur à ultrasons) est la même pendant deux heures alors allumer buzzer

Encore merci de ton aide

Arnaud0011:
... SI la distance (du capteur à ultrasons) est la même pendant deux heures alors allumer buzzer ...

Je pense que vous allez avoir un autre problème. Quand bien même votre objet est à une distance fixe de votre capteur à ultra son, la stabilité de ce dernier est telle que je serais étonné que la valeur qu'il délivre soit immuable pendant deux heures. Vous allez alors être amené soit à faire un filtrage, soit à tolérer un plage de distances incluant l'instabilité potentielle du capteur.

Cordialement.

Pierre

C'est bon pepe j'ai compris il a fallut que sa tourne la haut ^^

Un grand merci à toi pour le temps que tu as pris pour m'aider

Mince oui Pierre j'y avais pensé mais je pensais que ça allait le faire...

Qu'appelle tu filtrage ? Une plage de distance , cela va être difficile étant donné que selon mon programme la valeur de la distance change souvent et n'est jamais la même :confused: aurais tu une idée ?

Merci à toi

Il y a deux cas. C’est à vous de voir comment se comporte votre capteur à ultra-son :

Avec Xp = mesure précédente et Xn = mesure actuelle.

  • soit l’erreur de mesure dX est quasi constante quelle que soit la distance, alors vous estimer que la distance n’a pas bougée si :
    (Xp - a.dX) < Xn < (Xp + a.dX) avec a > 1 = coefficient de sécurité

  • soit l’erreur est plutôt proportionnelle à la distance, la formule à appliquer est alors :
    (Xp/(1+a)) < Xn < (Xp.(1+a)) avec a = tolérance de proportionnalité (a = 0.1 pour 10 % par exemple)

Cordialement.

Pierre

Merci Pierre et merci Pepe pour votre aide précieuse !

Pepe , par exemple si ma valeur "distance" change souvent puis elle subit un tas de calculs et ensuite elle ne varie plus pendant 2h comment je peux "memoriser cette valeur" sachant que je ne la connais pas encore ?

Je sais pas si vous voyez ce que je veux dire ou si c'est peut etre moi qui n'a pas compris ^^

MErci beaucoup de ton aide je fais le montage !

Un grand merci à vous deux ! :slight_smile: pour votre aide et votre temps !

Salut pepe ! je suis actuellement en plein projet dans mon lycée et on voudrais faire un détecteur de mouvement a ultrason , seul problème , on est des gros noob de programmation et c'est la seul chose qui nous manque , on aimerais ajouter ce que tu as fais dans la ligne de code si dessous

const byte TRIGGER_PIN = 2; // Broche TRIGGER
const byte ECHO_PIN = 3; // Broche ECHO
int Buzzer = 4;
long temps;
/* Constantes pour le timeout */
const unsigned long MEASURE_TIMEOUT = 25000UL; // 25ms = ~8m à 340m/s

/* Vitesse du son dans l'air en mm/us */
const float SOUND_SPEED = 340.0 / 1000;

/** Fonction setup() */
void setup() {

/* Initialise le port série */
Serial.begin(115200);

/* Initialise les broches */
pinMode(TRIGGER_PIN, OUTPUT);
digitalWrite(TRIGGER_PIN, LOW); // La broche TRIGGER doit être à LOW au repos
pinMode(ECHO_PIN, INPUT);
pinMode(Buzzer, OUTPUT);
}

/** Fonction loop() */
void loop() {

/* 1. Lance une mesure de distance en envoyant une impulsion HIGH de 10µs sur la broche TRIGGER */
digitalWrite(TRIGGER_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGGER_PIN, LOW);

/* 2. Mesure le temps entre l'envoi de l'impulsion ultrasonique et son écho (si il existe) */
long measure = pulseIn(ECHO_PIN, HIGH, MEASURE_TIMEOUT);

/* 3. Calcul la distance à partir du temps mesuré */
float distance_mm = measure / 2.0 * SOUND_SPEED;

/* Affiche les résultats en mm, cm et m */
Serial.print(F("Distance: "));
Serial.print(distance_mm);
Serial.print(F("mm ("));
Serial.print(distance_mm / 10.0, 2);
Serial.print(F("cm, "));
Serial.print(distance_mm / 1000.0, 2);
Serial.println(F("m)"));

/* Délai d'attente pour éviter d'afficher trop de résultats à la seconde */
delay(500);
if (distance_mm==distance_mm && millis() - temps > 10000)

digitalWrite(Buzzer, HIGH);
}

en espérance que tu puisse nous aidez ^^