Go Down

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

gunsman76

Jan 29, 2013, 01:26 pm Last Edit: Feb 01, 2013, 11:00 pm by gunsman76 Reason: 1
Bonjour à tous,

Dans le cadre de mon projet actuellement en préparation, j'aimerais pouvoir augmenter ou diminuer le temps à l'aide d'un potentiomètre pour décaler le déclenchement d'une action.


Je m'explique, j'ai une barrière infrarouge, cette barrière une fois déclenché déclenche une action. Avec un potentiomètre j'aimerais donc pouvoir temporiser (ajouter quelques secondes) entre le moment ou celle-ci est déclenché et le moment ou l'action doit être faite.


Déclenchement ---> potentiomètre = décalage de 1,5 secondes ---> action


Les 1,5 secondes sont données à titre indicatif mais il faut que je puisse agir pour baisser à 0,6 secondes (exemple) à 3 secondes.



Merci pour vos lumières




EDIT :

J'ai édité ce post après avoir eu différentes réponses. C'est en effet plus clair mais la solution n'est pas encore trouvé...



Voilà je récupère sur la sortie Analogique 1 une valeur comprise entre 0 et 1023. Avec la fonction map, je récupère donc une valeur du potentiomètre entre 0 et 100 qui seront des secondes. Donc de 0 à 100 secondes.


Maintenant je souhaite utiliser cette valeur pour décaler dans le temps l'action A. donc action A+resultat potentiomètre= A+0 à 100 secondes.


Voilà en espérant avoir été assez clair.

Christian_R

delay(1500);  //Attendre 1.5s

Voir ici http://arduino.cc/en/Reference/delay
Christian

gunsman76

Merci pour ta réponse, mais la fonction delay n'est pas relié au potentiomètre et bloque le programme pour la suite...



Artouste


Merci pour ta réponse, mais la fonction delay n'est pas relié au potentiomètre et bloque le programme pour la suite...




bonjour
ton potentiometre va renvoyer une valeur comprise entre 0 et 1023 sur une entrée ana de l'arduino

sert toi de la fonction millis() qui n'est pas bloquante en appliquant un facteur derivé du potentiometre
entre 0 et 1000 (pour faire simple) avec un multiplicateur de 1 tu aura une latitude de 1000 ms = 1 seconde resolution 1 ms
avec un multi de 10 latitude de 10 seconde avec une resolution de 10 ms
etc ...

gunsman76

A merci !

Je me demandais si c'était possible c'est donc parfaitement réalisable.


Oui il ne faut pas que cela bloque, car pour tout expliquer lorsque le déclenchement se fait, je pas 3 pin en mode HIGH mais chacun des pin à une temporisation différentes en fonction justement du potentiomètre (donc 3 potentiomètres puisque je vais gérer 3 pin).

Les petits montages simple sont simple (la Palisse...) mais lorsqu'on veut vraiment adapter l'arduino à une fonction bien spécifique il faut faire marcher la matière grise !



B@tto

Blog électronique : http://battomicro.wordpress.com/
Photographie : www.interactive-celebration.fr

gunsman76

La fonction delay ne va pas trop bloquer mon programme ?


1 --> déclenchement

2 --> action 1 + 1,2 secondes sur pin 5
3 --> action 2 + 1,4 secondes sur pin 6
4 --> action 3 + 1,8 secondes sur pin 7

les secondes peuvent être plus ou moins importante et toujours par rapport au déclenchement.

Christian_R

// déclenchement à  t=0
delay(1200;)  //Attendre t=1.2 s
// Action 1,2 secondes sur pin 5

delay(200);  // 200 ms plus tard, soit t=1.4 s
//Action 1,4 secondes sur pin 6

delay(400); //400 ms plus tard soit t = 1.8 s
// action 1,8 secondes sur pin 7

Sinon avec la fonction millis() et des tests sur t
Christian

gunsman76

Merci à tous pour vos réponses, mais en fait soit je me suis mal exprimé, soit vous m'avez mal compris.

Les temps que je donne ne sont pas figé... c'est pour ça qu'il me faut un potard pour justement pouvoir intervenir sur le temps entre le moment ou la cellule détecte l'objet et le moment ou l'on passe à l'action.

Sinon je n'aurais embêter personne, j'aurais justement joué avec la fonction delay.


J'ai un déclenchement A, je souhaite que ce déclenchement déclenche une action X seconde plus tard. Sachant que X est déterminé par la position du Potard.


Voilà en espérant avoir été plus clair.


Donc dans le programme, il ne faut pas que j'ai une fonction delay


Merci encore pour votre aide

B@tto

Interruption temporelle :
Code: [Select]

long Depart;
boolean Flag;
....
if(digitalRead(10)==HIGH){ // un bouton est appuyé
Depart=millis();
Flag=TRUE;  // on lève le flag pour signigier une nouvelle action
}

if((millis()-Depart)>analogRead(Potar*Facteur) && Flag==TRUE){   // si le temps est écoulé et que l'action ne s'est pas déjà produite
Action();
Flag=FALSE; // le flag est abaissé pour eviter de relancer Action() au prochain passage
}

Blog électronique : http://battomicro.wordpress.com/
Photographie : www.interactive-celebration.fr

gunsman76

Quand tu dis "bouton appuyer" en fait c'est le déclenchement de L'infrarouge ?



B@tto

Oui, bah je vais pas t'écrire tout le code non plus ;)
Blog électronique : http://battomicro.wordpress.com/
Photographie : www.interactive-celebration.fr

gunsman76

Non !!!

Et merci beaucoup, j'ai fait un pas de géant aujourd'hui !


Un grand merci à tous ceux qui ont répondu.

Demain après midi, je commence mon petit code, je vous tiendrai au courant au fur et à mesure de son évolution.

skywodd

Bonjour,

Juste pour information il existe un fonction toute prête pour "mapper" deux fourchettes de valeur ;)
http://arduino.cc/en/Reference/map

Code: [Select]
delay(map(analogRead(A0), 0, 1023, 1000, 10000)); // délai entre 1s et 10s suivant la valeur du potentiomètre
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

gunsman76

La fonction delay va stopper le programme et empêcher l'execution des autres tâches ?

Go Up