Pages: 1 ... 4 5 [6] 7 8   Go Down
Author Topic: Utiliser valeur du potentiomètre pour décaler une action  (Read 6089 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Edison Member
*
Karma: 9
Posts: 1661
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

a oui, se serait super !


On peut régler le problème comment ?

suffit de reprendre le code donné, comme quoi tu comprends pas trop le code.
si tu fixe à 2 la mesure et 1000 le coef, cela fait 2000 en plus sur les millis
en imaginant que le timerledverte se trouve à 10000, le prochain timer sera à 12000.
la led rouge ne s'allumera pas tant que ce timer est franchit, et avec mon code, la led rouge sera allumée pendant 2000ms soit 2 secondes.

Quote
void loop() {
 //mesureBrute=analogRead(RVar); // desactivation du potar
  //mesure=map(mesureBrute,0,1023,0.0,100.0); // desactivation du potar
  mesure = 1; //valeur fixée pour simuler le potar
  potard=mesure*1000; // a modifier suivant le délais a atteindre 1000 = 1s
Logged

Offline Offline
Sr. Member
****
Karma: 0
Posts: 345
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Je veux pas paraitre trop chiant et boulet mais j'ai repris le code, j'ai passé l'après midi dessus... (ça fait 3 jours que j'y suis)


Peut-être qu'on si prend mal ou que je me suis mal expliqué mais en prenant ton code ça ne marche pas du tout comme je l'entends.

Je sais que tu t'es donné beaucoup de mal mais rien à faire.

On serait mieux de reprendre depuis le début, éliminer tout du montage et recommencer avec juste une led, une photoresistance et un potentiomètre.



Je reprends le but initial :

Une série d'objet passe devant la photo resistance, une fois detecté, je dois simplement (enfin c'est pas si simple) dire :


detection : décalage temps : action

mais le truc c'est de le faire à chaque detection et pas juste une fois.


donc on decale à chaque fois la detection de X secondes



Si le potentiomètre de réglage du temps est trop chiant on le vire pour le moment, simplement il ne faut pas que le programme soit bloqué.


Logged

Offline Offline
Edison Member
*
Karma: 9
Posts: 1661
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

je pige pas du tout.
ce que je t'ai donné en sketch fonctionne impec.
j'ai shunté ton potar en mettant une valeur en dur dans le sketch.

en plus c'est non bloquant, puisque ca boucle dans le loop.
par contre, tant que le timer pour la led rouge est pas a zero, il boucle sur le while.
après tout est mis à zero par timerledverte = 0;

le sketch fait quoi?
il détecte si passage ou non devant le détecteur
si rien, il regarde si le timer est à zero via le void testledrouge() appelé dans le loop

si detection
led verte allumée 2s
timerledverte = millis(); pour récupérer un temps
on rajoute pour la led rouge le XXX millisecondes du potar factice mesure = 1 potard; = mesure*1000;
du coup, dans le loop ca va allez voir si les conditions sont réunies dans le void testledrouge
si le timer est < a millis(), on fait rien
si le timer est > millis(), on allume la led rouge pendant le temps du potard
si potard-- est à zero
on met sur off la led rouge
on met a zero le timerledverte
et on repart sur une nouvelle détection

c'est bien ce que tu voulais au départ? non ?

maintenant, si tu veux que lorsque le potard-- n'est pas encore à zero, on puisse faire une nouvelle détection, il suffit de mettre une verif de détection dans le while et si détection, on break pour ressortir de la boucle et on réécrit le timerledverte par la même occasion.
donc ca repart dans le loop, vérification et on retombe dans le void testledrouge pour une nouvelle boucle.
voila ce que ca donne dans le serial
Code:
initialisation PIR
Lecture mesure1 : 1.00Lecture potar1 : 1000
Testled rouge
etat led verte :0
Lecture mesure1 : 1.00Lecture potar1 : 1000
Testled rouge
etat led verte :0
Piece detecte
timerledverte : 23896
Testled rouge
etat led verte :1
timerledrouge : 24879
milli : 25969
999
998
997
996
995
994
......
4
3
2
1
0
Lecture mesure1 : 1.00Lecture potar1 : 1000
Testled rouge
etat led verte :0
Lecture mesure1 : 1.00Lecture potar1 : 1000
Testled rouge
etat led verte :0

« Last Edit: February 03, 2013, 01:40:26 pm by Jean-François » Logged

Offline Offline
Sr. Member
****
Karma: 0
Posts: 345
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Re et je vois que tu t'acharnes aussi  smiley-mr-green


Pourquoi veux tu allumer la verte 2 secondes ? la led verte s'allume juste au passage de la pièce puis s'éteint, dans mon programme ça fonctionne parfaitement. je vais te le remettre pour que tu vois comment elle fonctionne. Cette led est juste là pour donner l'impulsion qui sert au décompte.


Une fois qu'on a l'impulsion, on décale l'action de X seconde grâce au potentiomètre pour allumer la led rouge après X secondes



Là jusque là tu suis ?


Bon là on complique la chose c'est qu'il n'y a pas qu'une detection mais plusieurs et à chaque fois la led rouge va s'allumer autant de fois que de detection mais toujours en décalé.


C'est là que tout est le problème


Car sinon j'utiliserai un simple delay comme pour une alarme




   
Logged

Offline Offline
Edison Member
*
Karma: 9
Posts: 1661
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

sur le post au dessus j'ai écris
Quote
maintenant, si tu veux que lorsque le potard-- n'est pas encore à zero, on puisse faire une nouvelle détection, il suffit de mettre une verif de détection dans le while et si détection, on break pour ressortir de la boucle et on réécrit le timerledverte par la même occasion.
donc ca repart dans le loop, vérification et on retombe dans le void testledrouge pour une nouvelle boucle.

je mets la led verte en delay(2000); histoire de la voir s'allumer au moins, sinon avec juste une impulsion, elle va faire quoi d'après toi?
imagine le temps de passage de la pièce à 0.1s, ta led va s'allumer 0.1s, donc elle ne sert à rien puisque lors de la détection on créé un timer smiley-wink

faut un peu lire ce que l'on t'écrit smiley
tu dis la même chose que moi, héhéhé.
Logged

Offline Offline
Sr. Member
****
Karma: 0
Posts: 345
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Oui mais la pièce ne vas pas super vite, donc pas de souci on voit la led verte s'allumer mais c'est juste un repair, elle n'a pas d'intérêt cette. Le plus important c'est l'autre.



Logged

Offline Offline
Sr. Member
****
Karma: 0
Posts: 345
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Par contre en admettant que je trouve un capteur qui detecte la pièce en tant réél, le potentiomètre peut servir pour définir le temps d'allumage de la led ?


Merci
Logged

Offline Offline
Edison Member
*
Karma: 9
Posts: 1661
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Oui mais la pièce ne vas pas super vite, donc pas de souci on voit la led verte s'allumer mais c'est juste un repair, elle n'a pas d'intérêt cette. Le plus important c'est l'autre.

oui et non, car dès que le timer va être inscrit, ca part directement dans le void testledrouge smiley-wink donc elle va s'éteindre de suite cette led verte.
sinon suivant ce que tu veux faire, tu peux détecter via une balance ou un truc de ce genre.
la pièce arrive sur la led rouge, détection de l'arrivée de la pièce et action.
dans ce cas là, plus besoin de timer et moins de soucis en prog et donc fiabilité accrue.
Logged

Offline Offline
Sr. Member
****
Karma: 0
Posts: 345
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Balance impossible par contre un infrarouge ou une photo resistance eclairé par un laser, oui.


Donc on enlève le premier problème, la pièce est detecté en direct OK

Maintenant le potentiomètre peut servir à indiquer le temps de l'action ?

pièce detecté, ACTION pendant X secondes
Logged

Offline Offline
Edison Member
*
Karma: 9
Posts: 1661
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

oui, ou alors via un lcd avec boutons
on programme via les touches le temps X, on valide et hop.
Logged

Offline Offline
Sr. Member
****
Karma: 0
Posts: 345
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

J'en ai un comme ça en plus !!!


se serait plus facile avec des boutons alors ?


Logged

Offline Offline
Edison Member
*
Karma: 9
Posts: 1661
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
Sr. Member
****
Karma: 0
Posts: 345
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Offline Offline
Edison Member
*
Karma: 9
Posts: 1661
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
Sr. Member
****
Karma: 0
Posts: 345
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Pages: 1 ... 4 5 [6] 7 8   Go Up
Jump to: