Go Down

Topic: Utiliser valeur du potentiomètre pour décaler une action (Read 9959 times) previous topic - next topic

gunsman76

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 !



infobarquee

fais le test comme ca
Quote

#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);
}


gunsman76

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

infobarquee

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

gunsman76

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


Code: [Select]
üû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

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.

infobarquee


@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 ;) bien vu
j'étais repartis sur l'idée du map en utilisant un int :(
long potard; serait plus appropriée

gunsman76

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  :smiley-mr-green:


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  :smiley-mr-green: :smiley-mr-green:


infobarquee

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....

gunsman76

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 ?


gunsman76

Oui 5000 ça le ferait sans problème !


Mais comment je code ça  ?



infobarquee

http://arduino.cc/forum/index.php/topic,145657.msg1102114.html#msg1102114

relis un peu les posts précédents ;)
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.

gunsman76

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)


Code: [Select]
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);

Go Up