Utiliser valeur du potentiomètre pour décaler une action

le codage est un peu hard à mon gout mais pas infaisable.
ca évite que quelqu'un en passant touche au potar et dérègle le tout.

non pas de soucis de déréglé...

Donc faut prendre la solution la plus facile,

  • les touches
  • le potentiomètre

J'ai un faible pour le potar, plus rapide

je dirais que vu que tout est sur ce lcd, pourquoi s'emmer... a souder un potar?
surtout qu'avec les touches, c'est +1 -1 et non +1.0001
après en cas de panne, plus facile de le changer à chaud que de se faire suer pour déssouder et ressouder le potar.

Je vais regarder si je trouve des bout de codes pour les boutons (incrémenter et décrémenter une valeur temps)

a moins que tu es une idée

Bon tout semble s'arranger, l'emplacement du capteur n'a plus d'importance, en gros le passage de l'objet déclenche l'action.

Maintenant il me reste une solution a trouver...

temporiser le temps ou la led verte va rester allumé, grâce au potentiomètre !

fais le test comme ca

#define RVar A0 //pin potard
int potard;
int mesure;
int mesureBrute;

void setup(){
Serial.print(9600);
}
void loop(){
mesureBrute = analogRead(RVar);
mesure=map(mesureBrute,0,1023,0.0,100.0);
Serial.print("mesure : ");
Serial.println(mesure);
potard = mesure * 1000;
Serial.print("potard : ");
Serial.println(potard);
delay(2000);
}

Je test ça et je te dis quoi !

Bon j'ai bien la mesure qui s'affiche dans le terminal série, mais ça ne modifie en rien l'allumage de la led.

cependant je vois bien que le potar réagit

c'était pas ca que je t'expliquais au dessus.
donne le résultat de la console avec le petit code du dessus.

voilà ce que donne la console, sachant que le résultat change lorsque je bouge le 1er potard :

üû9600mesure : 61
potard : -4536
mesure : 61
potard : -4536
mesure : 61
potard : -4536
mesure : 43
potard : -22536
mesure : 72
potard : 6464
mesure : 76
potard : 10464
mesure : 72
potard : 6464
mesure : 73
potard : 7464
mesure : 72
potard : 6464

@infobarquee :
Petit problème dans ton soft.
Tu fais un map du résultat de la conversion sur l'espace 0 à 100.
Puis tu le multiplies par 1000 (donc 0 à 100000) et ensuite tu places le résultat dans un int (-32768 à 32767).

Cherchez l'erreur.

fdufnews:
@infobarquee :
Petit problème dans ton soft.
Tu fais un map du résultat de la conversion sur l'espace 0 à 100.
Puis tu le multiplies par 1000 (donc 0 à 100000) et ensuite tu places le résultat dans un int (-32768 à 32767).

Cherchez l'erreur.

effectivement :wink: bien vu
j'étais repartis sur l'idée du map en utilisant un int :frowning:
long potard; serait plus appropriée

Ok on récupère donc une valeur dans le terminal série, ça j'ai bien pigé.

Le problème maintenant c'est :

J'analyse la sortie du potentiomètre avec : mesureBrute=analogRead(RVar);

ensuite je transforme la valeur à l'aide la fonction map : mesure=map(mesureBrute,0,1023,0.0,5000.0);

là jusque là je pige bien :grin:

Maintenant je veux utilisé la valeur reçu par le potentiomètre de façon à modifié le temps d'allumage d'une simple led :

digitalWrite (Ledverte, HIGH);

C'est là que tout coince, je dois pouvoir modifier en tournant le potentiomètre à 0, la led ne s'allume pas, le potentiomètre à fond, la led s'allume 5000 ms.

C'est tout con, mais ça fait 3 jours que je passe sur ce problème finalement simple :grin: :grin:

un calcul simple suffit pour trouver le coef
potar ms
0---------------------0
maxi ???-------5000

si la valeur max mesure est 100, on multiplie par 50 pour 5000ms
mesure = 1 donc 50ms
mesure = 50 donc 2500ms
etc....

Pour ça que j'ai mis 5000 directement dans la map, comme ça on n'a pas besoin de rien convertir.

5000 ms sera le maximum utilisé.

Donc la led s'allumera 5 secondes maximum (mais c'est une valeur maxi, en général le temps d'allumage sera de 1,4/1?8 secondes)

Est-ce que c'est plus clair exposé comme ça ?

et donc?
ca le fait ou pas?

Oui 5000 ça le ferait sans problème !

Mais comment je code ça ?

relis un peu les posts précédents :wink:
tu chope la valeur mesure ou potard avec ton 5000
si détection
timer initialisé à l'instant T
prochain timer = 1er timer + valeur mesure ou potard suivant comment tu as fais ton code.

Voilà jusque là je comprends, maintenant j'indique au programme le début du comptage avec timerledverte=millis()

mais ensuite comment appelé timerledrouge pour allumer la led rouge TEMPS * RVar (RVar est le potar)

 mesureIR=analogRead(photoIR);
  if (mesureIR<seuil) {//Serial.println("Piece detecte");
  digitalWrite (Ledverte, HIGH);
  timerledverte=millis();
  
  timerledrouge = timerledverte + RVar;
  }
    
  else {
    digitalWrite(Ledverte,LOW);
  }
  
 do {
    mesureIR = analogRead(photoIR);
  } while(mesureIR < seuil);

Bon la bonne nouvelle !!!!!

Enfin !!!!!!!!

Vous attendez tous !!!!!

j'ai réussi !!!!!!!!!!

Et c'était tout con mais alors vraiment tout con !!!!

delay (potard);

et comme le delay est en millisecond, ça ne bloque que très peu le programme et ça permet d'enchainer les déclenchement sans problème

Super super merci à tous mais principalement à toi infobarquée !

Un grand merci même