délais d'impulsion pour choisir action

pef

New Member
Bonjour,
petite question dont je ne trouve pas la réponse... :)
Je suis en train de regarder pour fabriquer une centrale clignotante un peu évoluée qui fonctionnerait avec deux boutons poussoirs.

En gros, j'appuyes sur un switch et en fonction de la longueur de cet appui des choses différentes se passent.

En pratique,

un appui entre 0 et 100ms , une led clignote 3x
un appui entre 100 et 500ms , la led clignotte 10x
un appui de plus de 500ms, la led clignotte en permamance

dans tout les cas, un second appuis bref doit stopper le clignottement quelque soit le cycle.

J'ai pensé travailler avec des pauses mais je ne pense pas que ce soit la bonne méthode.

Et donc je suis dans la panade :D

Merci d'avance.


edit :
je me demande si à l'usage ça ne serait pas plus pratique d'usage de faire des clics sur les switchs ( 1 clic = 3 clignotement... etc)
 
Last edited:

PieM

Senior Member
Bonjour,

Je suis en train de regarder pour fabriquer une centrale clignotante un peu évoluée qui fonctionnerait avec deux boutons poussoirs.
Bonjour et bienvenue,

Simple, mais préciser 2 boutons poussoirs ? le second sert de stop ?
quel picaxe ?
 
Last edited:

pef

New Member
Bonjour,
merci pour ta réponse,

je pensais faire ça avec un 08M2 si c'est possible.

Un peu plus d'explications;

C'est pour une centrale clignotante (moto), qui aura un bouton poussoir pour commander chaque coté, gauche et droite,
avec une possibilité de warning en appuyant un certain temps sur les deux poussoirs en même temps.
Les sorties du picaxe commanderaient des Fets.


La nuit portant conseil, je me dis que des multiclics seraient plus simples d'utilisation.
On pourrait donc imaginer ;



un appui endéans 1.5seconde , une led clignote 3x
deux appuis endéans 1.5seconde , la led clignotte 10x
toir appuis endéans 1.5seconde, la led clignotte en permamance

Si on appuyes sur les deux switchs plus de deux secondes, les deuex leds clignotent en permanence.

Un appui sur un des deux switch arrêterait le clignottement de n'importe quelle séquence.
 
Last edited:

PieM

Senior Member
Dans le principe, il faudra utiliser une interruption. Mais le fait de n'avoir qu'un seul picaxe ne simplifie pas les choses. Mais ça devrait être possible.
 

pef

New Member
Merci,

est-ce que le calcul de temps d'appui ne se fait pas avec la commande " pulsin "
et le compte de clic dans un certain temps avec " count " ?

(désolé j'apprend :) )
 

PieM

Senior Member
Merci,

est-ce que le calcul de temps d'appui ne se fait pas avec la commande " pulsin "
et le compte de clic dans un certain temps avec " count " ?

(désolé j'apprend :) )
Faut pas être désolé!

Non pulsin ne peut servir pour des des impulsions supérieures à 0.65 s
par contre, oui, count est la meilleure solution pour le comptage dans un temps donné.

Je vais proposer un programme commenté qui sera à tester car je n'ai pas de 08M2 actuellement.
 

PieM

Senior Member
Merci,
en fait j'ai posé la question sur le forum mais en anglais,
y'a plus de gens de ce coté là je pense.

J'ai eu une réponse, mais j'ai énormément de mal à comprendre le code.

http://www.picaxeforum.co.uk/showthread.php?30065-How-to-define-a-value-when-a-button-is-pushed-1-2-3-time-in-a-given-period-on-time&p=311801#post311801
Ce code ne permet pas de répondre au besoin. il ne fait que compter le nombre d'appuis d'un seul BP dans un temps qui est entre 1s et 2s. Timer =0 ne mets pas le timer à 0, car il n'agit pas sur un sous-compteur qui peut être entre 0 et 0.9999 (pour simplifier !)
Utiliser la fonction count est beaucoup plus simple!

Compte tenu du CdC, un seul appui sur un BP, va donc conduire soit à un arrêt des leds, soit un début de comptage comptage? C'est bien ça ?
 

pef

New Member
En fait, pour tout dire, j'ai découvert les picaxe il y a peu,
par contre j'ai programmé en basic il y a passé 25 ans... (oui ça date, mais j'ai des restes :D )
Niveau logique de programmation je n'ai aucun problème (je pense), programmer le truc proprement c'est une autre histoire.


Je me demande si dans mon cas ça ne serait pas plus simple de :

- premier appui, lancer d'office 3 clignotements, avec une variable (B1 par ex) mise à 3 qui se décrémenterais jusque 0 , si arrivé à 0 le clignottement s'arrête.
- pendant ce temps, lire les entrées et voir si d'autre impulsion arrive, à la deuximère impulsion additionner une valeur à B1 ( b1 = b1 + 7 (ou 6)
- si 3' impulsion, mettre b1 = b1+1 , en boucle.

après les deux secondes , si appui sur le switch -> reset (ou b1 = 0 )

un truc du genre... la logique me parrait bonne, reste à voir si ça fonctionnerait. :)
 

PieM

Senior Member
Un bout de programme qui devrait aller dans le sens de ta demande en #3.
dans le principe, le programme attend un appui sur un des BP, et ça génère une interruption.
Cette interruption par la mise à 0 des flags (b0) va
- arrêter la commande en cours
- déclencher la nouvelle commande gauche, droite, ou les deux, et pendant 3 ou 10 cycles.

Sans garantie! Faut tester en vraie grandeur, count n'étant pas simulable.

Code:
[COLOR=Green]'==========================================================
'double clignotant - duree variable - warning
'une interruption généree par l'appui sur les BP 
'renvoie l'arrêt des commandes en cours et l'ordre
'de la nouvelle commande, warning, gauche, droite et durée
'(interruption sur niveau bas et comptage sur front montant)
'=================================PieM 170604===============[/COLOR]
[COLOR=Navy]#picaxe [/COLOR][COLOR=Black]08M2[/COLOR]

[COLOR=Blue]symbol [/COLOR][COLOR=Purple]BPD [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Purple]pinC.3  [/COLOR][COLOR=Green]'BP droit entre entrée et OV[/COLOR]
[COLOR=Blue]symbol [/COLOR][COLOR=Purple]BPG [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Purple]pinC.4  [/COLOR][COLOR=Green]'BP gauche entre entrée et OV[/COLOR]
[COLOR=Blue]symbol ledD [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Blue]C.1    [/COLOR][COLOR=Green]'clignotant droit[/COLOR]
[COLOR=Blue]symbol ledG [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Blue]C.2    [/COLOR][COLOR=Green]'clignotant gauche[/COLOR]

[COLOR=Blue]symbol [/COLOR][COLOR=Purple]index      [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Purple]b3[/COLOR]
[COLOR=Blue]symbol [/COLOR][COLOR=Purple]nbeclats   [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Purple]w2     [/COLOR][COLOR=Green]'nombre d'appuis sur BP puis nombre de clignotements [/COLOR]
[COLOR=Blue]symbol [/COLOR][COLOR=Purple]flagwarn   [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Purple]bit0   [/COLOR][COLOR=Green]'  %0000000x (b0)[/COLOR]
[COLOR=Blue]symbol [/COLOR][COLOR=Purple]flagD      [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Purple]bit1   [/COLOR][COLOR=Green]'  %000000x0 (b0)[/COLOR]
[COLOR=Blue]symbol [/COLOR][COLOR=Purple]flagG      [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Purple]bit2   [/COLOR][COLOR=Green]'  %00000x00 (b0)[/COLOR]
[COLOR=Blue]symbol delai      [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Navy][B]300    [/B][/COLOR][COLOR=Green]'periode clignotant[/COLOR]

[COLOR=Blue]setint [/COLOR][COLOR=DarkCyan]OR [/COLOR][COLOR=Navy][B]%00000000[/B][/COLOR][COLOR=Black], [/COLOR][COLOR=Navy][B]%00011000 [/B][/COLOR][COLOR=Green]'interruption sur C.3 ou C.4 1>0[/COLOR]
[COLOR=Blue]pullup [/COLOR][COLOR=Navy][B]%00011000 [/B][/COLOR][COLOR=Green]' pullup sur C.3 et C.4
'--------------------------------------------------------------------[/COLOR]
[COLOR=Black]main:[/COLOR]
[COLOR=Blue]do
   Select [/COLOR][COLOR=Purple]b0 
   [/COLOR][COLOR=Blue]case [/COLOR][COLOR=Navy][B]1   [/B][/COLOR][COLOR=Green]'si flag warning 
      [/COLOR][COLOR=Blue]do
      if [/COLOR][COLOR=Purple]b0 [/COLOR][COLOR=DarkCyan]<> [/COLOR][COLOR=Navy][B]1 [/B][/COLOR][COLOR=Blue]then exit   [/COLOR][COLOR=Green]'si on a appuyé sur un BP, on arrete 
      [/COLOR][COLOR=Blue]high ledD[/COLOR][COLOR=Black]: [/COLOR][COLOR=Blue]high ledG[/COLOR][COLOR=Black]: [/COLOR][COLOR=Blue]pause delai[/COLOR][COLOR=Black]: [/COLOR][COLOR=Blue]low ledD[/COLOR][COLOR=Black]: [/COLOR][COLOR=Blue]low ledG[/COLOR][COLOR=Black]: [/COLOR][COLOR=Blue]pause delai
      loop

   case [/COLOR][COLOR=Navy][B]2   [/B][/COLOR][COLOR=Green]'si flagD
      [/COLOR][COLOR=Blue]for [/COLOR][COLOR=Purple]index [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Navy][B]1 [/B][/COLOR][COLOR=Blue]to [/COLOR][COLOR=Purple]nbeclats
      [/COLOR][COLOR=Blue]if [/COLOR][COLOR=Purple]b0 [/COLOR][COLOR=DarkCyan]<> [/COLOR][COLOR=Navy][B]2 [/B][/COLOR][COLOR=Blue]then exit [/COLOR][COLOR=Green]'si on a appuyé sur un BP, on arrete 
      [/COLOR][COLOR=Blue]high ledD[/COLOR][COLOR=Black]: [/COLOR][COLOR=Blue]pause delai[/COLOR][COLOR=Black]: [/COLOR][COLOR=Blue]low ledD[/COLOR][COLOR=Black]: [/COLOR][COLOR=Blue]pause delai
      next
      [/COLOR][COLOR=Purple]b0 [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Navy][B]0

   [/B][/COLOR][COLOR=Blue]case [/COLOR][COLOR=Navy][B]4   [/B][/COLOR][COLOR=Green]'si flagG
      [/COLOR][COLOR=Blue]for [/COLOR][COLOR=Purple]index [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Navy][B]1 [/B][/COLOR][COLOR=Blue]to [/COLOR][COLOR=Purple]nbeclats 
      [/COLOR][COLOR=Blue]if [/COLOR][COLOR=Purple]b0 [/COLOR][COLOR=DarkCyan]<> [/COLOR][COLOR=Navy][B]4 [/B][/COLOR][COLOR=Blue]then exit [/COLOR][COLOR=Green]'si on a appuyé sur un BP, on arrete 
      [/COLOR][COLOR=Blue]high ledG[/COLOR][COLOR=Black]: [/COLOR][COLOR=Blue]pause delai[/COLOR][COLOR=Black]: [/COLOR][COLOR=Blue]low ledG[/COLOR][COLOR=Black]: [/COLOR][COLOR=Blue]pause delai
      next
      [/COLOR][COLOR=Purple]b0 [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Navy][B]0
   [/B][/COLOR][COLOR=Blue]endselect
loop[/COLOR]

[COLOR=Green]'-------------------------------------------------------------------[/COLOR]
[COLOR=Blue][B][U]Interrupt:[/U][/B][/COLOR]
[COLOR=Purple]b0 [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Navy][B]0         [/B][/COLOR][COLOR=Green]'RAZ de tous les flags > arret commandes en cours[/COLOR]
[COLOR=Blue]pause [/COLOR][COLOR=Navy][B]100[/B][/COLOR]

[COLOR=Blue]if [/COLOR][COLOR=Purple]BPD[/COLOR][COLOR=DarkCyan]=[/COLOR][COLOR=Navy][B]0 [/B][/COLOR][COLOR=DarkCyan]and [/COLOR][COLOR=Purple]BPG[/COLOR][COLOR=DarkCyan]=[/COLOR][COLOR=Navy][B]1 [/B][/COLOR][COLOR=Blue]then [/COLOR][COLOR=Green]'si appui sur BPD
   [/COLOR][COLOR=Blue]count C.3[/COLOR][COLOR=Black], [/COLOR][COLOR=Navy][B]1500[/B][/COLOR][COLOR=Black], [/COLOR][COLOR=Purple]nbeclats [/COLOR][COLOR=Black]: [/COLOR][COLOR=Purple]flagD [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Navy][B]1[/B][/COLOR][COLOR=Black]: [/COLOR][COLOR=Blue]endif [/COLOR][COLOR=Green]'comptage nb d'appuis pendant 1.5s[/COLOR]
[COLOR=Blue]if [/COLOR][COLOR=Purple]BPD[/COLOR][COLOR=DarkCyan]=[/COLOR][COLOR=Navy][B]1 [/B][/COLOR][COLOR=DarkCyan]and [/COLOR][COLOR=Purple]BPG[/COLOR][COLOR=DarkCyan]=[/COLOR][COLOR=Navy][B]0 [/B][/COLOR][COLOR=Blue]then [/COLOR][COLOR=Green]'si appui sur BPG
   [/COLOR][COLOR=Blue]count C.4[/COLOR][COLOR=Black], [/COLOR][COLOR=Navy][B]1500[/B][/COLOR][COLOR=Black], [/COLOR][COLOR=Purple]nbeclats [/COLOR][COLOR=Black]: [/COLOR][COLOR=Purple]flagG [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Navy][B]1[/B][/COLOR][COLOR=Black]: [/COLOR][COLOR=Blue]endif [/COLOR][COLOR=Green]'comptage nb d'appuis pendant 1.5s[/COLOR]

[COLOR=Blue]If [/COLOR][COLOR=Purple]BPD[/COLOR][COLOR=DarkCyan]=[/COLOR][COLOR=Navy][B]0 [/B][/COLOR][COLOR=DarkCyan]and [/COLOR][COLOR=Purple]BPG[/COLOR][COLOR=DarkCyan]=[/COLOR][COLOR=Navy][B]0 [/B][/COLOR][COLOR=Blue]then  [/COLOR][COLOR=Green]' si BP D et G sont appuyés
   [/COLOR][COLOR=Blue]pause [/COLOR][COLOR=Navy][B]2000
   [/B][/COLOR][COLOR=Blue]If [/COLOR][COLOR=Purple]BPD[/COLOR][COLOR=DarkCyan]=[/COLOR][COLOR=Navy][B]0 [/B][/COLOR][COLOR=DarkCyan]and [/COLOR][COLOR=Purple]BPG[/COLOR][COLOR=DarkCyan]=[/COLOR][COLOR=Navy][B]0 [/B][/COLOR][COLOR=Blue]then [/COLOR][COLOR=Green]'encore après 2s
   [/COLOR][COLOR=Purple]flagwarn [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Navy][B]1[/B][/COLOR][COLOR=Black]: [/COLOR][COLOR=Blue]endif     [/COLOR][COLOR=Green]'mise à 1 du flag warning[/COLOR]
[COLOR=Blue]endif

   If [/COLOR][COLOR=Purple]nbeclats [/COLOR][COLOR=DarkCyan]> [/COLOR][COLOR=Navy][B]3 [/B][/COLOR][COLOR=Blue]then  [/COLOR][COLOR=Green]' si nb appuis >3 
      [/COLOR][COLOR=Purple]nbeclats [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Navy][B]10 
      [/B][/COLOR][COLOR=Blue]else
      [/COLOR][COLOR=Purple]nbeclats [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Navy][B]3 
   [/B][/COLOR][COLOR=Blue]endif
setint [/COLOR][COLOR=DarkCyan]OR [/COLOR][COLOR=Navy][B]%00000000[/B][/COLOR][COLOR=Black], [/COLOR][COLOR=Navy][B]%00011000 [/B][/COLOR][COLOR=Green]'rearmement interruption[/COLOR]
[COLOR=Blue]return[/COLOR]
 

pef

New Member
Salut, merci beaucoup...

En fait, tout ça ( sur ce post et l'autre en anglais ) devient très compliqué pour moi... Je dois bien avouer que je suis un peu perdu.
Je vais essayer de comprendre tout ça pour tenter de faire tourner un truc :D
 

PieM

Senior Member
Salut, merci beaucoup...

En fait, tout ça ( sur ce post et l'autre en anglais ) devient très compliqué pour moi... Je dois bien avouer que je suis un peu perdu.
Je vais essayer de comprendre tout ça pour tenter de faire tourner un truc :D
d'une part poser un problème sur le forum anglais, différent de celui posé sur ce forum, ne peut que conduire à des réponses qui sont totalement différentes avec le risque de tout mélanger.
quant au
but I think I have more chance to have an answer in english :)
peu élégant du lendemain, je ne veux pas interferer.

d'autre part, j'ai répondu a une problématique bien précise, celle de #3 qui n'est pas quelque chose de simple à résoudre pour un débutant.

J'ai une solution autre que celle donnée, qui fonctionne. Mais ça veut dire qu'il faut lire ça avec le manuel pour comprendre!
reste à savoir si vous souhaitez vous y atteler!
 
Last edited:

pef

New Member
Bonjour PieM,
merci pour tes réponses.

Si j'avaisa vraiment voulu être malicieu je n'aurais pas mentionné mon post en anglais, au final j'ai posé cette question car je pensais pouvoir faire ça simplement en incrémentant une valeur.
Je pense l'avoir expliqué ici même.

Et j'ai posté en anglais car je supposais qu'il y avait beaucoup plus de gens qui interagissaient de ce coté là qu'ici en Français, pour avoir plus d'échange et surtout pas pour dénigrer.

J'ai lu ton code, et j'ai lu le manuel, seulement je n'ai pas eu trop le temps d'étudier en profondeur le manuel pour tout comprendre,
malheureusement j'ai une vie relativement chargée et je dois faire des choix... 24 heures ça n'est pas assez. :)
En fait j'ai très envie de comprendre, et j'aurais bien voulu pondre une solution simple tout seul, comme je faisais étant gamin...

Je vais repotasser ton code dés que j'ai un peu de temps et je reviens poser un tas de questions :D


Dans tous les cas, encore merci ;)
 

PieM

Senior Member
"pas le temps,... une solution simple" ....
Alors c'est pas gagné!
PS: je lis très régulièrement les posts du forum anglais, dont certains membres lisent également les post de ce forum.
 

pef

New Member
"Pas le temps", ben oui, quand on a une vie active famille/travail faut chercher le temps. ;)

Edit: je disais " simple " en parlant de code le plus simple possible (pour moi).

Dans tous les cas, je ne cherche pas le conflit...
 
Top