​ ​ ​ ​ délais d'impulsion pour choisir action
Page 1 of 2 1 2 LastLast
Results 1 to 10 of 15

Thread: délais d'impulsion pour choisir action

  1. #1
    New Member
    Join Date
    Jun 2013
    Location
    Belgique
    Posts
    9

    Default délais d'impulsion pour choisir action

    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

    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 by pef; 03-06-2017 at 23:17.

  2. #2
    Senior Member
    Join Date
    Jan 2010
    Location
    34 France
    Posts
    3,853

    Default

    Quote Originally Posted by pef View Post
    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 by PieM; 04-06-2017 at 08:36.
    S'il n'y a pas de solution, c'est qu'il n'y a pas de problème . (Les Shadoks)

  3. #3
    New Member
    Join Date
    Jun 2013
    Location
    Belgique
    Posts
    9

    Default

    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 by pef; 04-06-2017 at 09:13.

  4. #4
    Senior Member
    Join Date
    Jan 2010
    Location
    34 France
    Posts
    3,853

    Default

    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.
    S'il n'y a pas de solution, c'est qu'il n'y a pas de problème . (Les Shadoks)

  5. #5
    New Member
    Join Date
    Jun 2013
    Location
    Belgique
    Posts
    9

    Default

    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 )

  6. #6
    Senior Member
    Join Date
    Jan 2010
    Location
    34 France
    Posts
    3,853

    Default

    Quote Originally Posted by pef View Post
    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.
    S'il n'y a pas de solution, c'est qu'il n'y a pas de problème . (Les Shadoks)

  7. #7
    New Member
    Join Date
    Jun 2013
    Location
    Belgique
    Posts
    9

    Default

    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/showthr...801#post311801

  8. #8
    Senior Member
    Join Date
    Jan 2010
    Location
    34 France
    Posts
    3,853

    Default

    Quote Originally Posted by pef View Post
    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/showthr...801#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 ?
    S'il n'y a pas de solution, c'est qu'il n'y a pas de problème . (Les Shadoks)

  9. #9
    New Member
    Join Date
    Jun 2013
    Location
    Belgique
    Posts
    9

    Default

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

  10. #10
    Senior Member
    Join Date
    Jan 2010
    Location
    34 France
    Posts
    3,853

    Default

    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:
    '==========================================================
    '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===============
    #picaxe 08M2
    
    symbol BPD = pinC.3  'BP droit entre entrée et OV
    symbol BPG = pinC.4  'BP gauche entre entrée et OV
    symbol ledD = C.1    'clignotant droit
    symbol ledG = C.2    'clignotant gauche
    
    symbol index      = b3
    symbol nbeclats   = w2     'nombre d'appuis sur BP puis nombre de clignotements 
    symbol flagwarn   = bit0   '  %0000000x (b0)
    symbol flagD      = bit1   '  %000000x0 (b0)
    symbol flagG      = bit2   '  %00000x00 (b0)
    symbol delai      = 300    'periode clignotant
    
    setint OR %00000000, %00011000 'interruption sur C.3 ou C.4 1>0
    pullup %00011000 ' pullup sur C.3 et C.4
    '--------------------------------------------------------------------
    main:
    do
       Select b0 
       case 1   'si flag warning 
          do
          if b0 <> 1 then exit   'si on a appuyé sur un BP, on arrete 
          high ledD: high ledG: pause delai: low ledD: low ledG: pause delai
          loop
    
       case 2   'si flagD
          for index = 1 to nbeclats
          if b0 <> 2 then exit 'si on a appuyé sur un BP, on arrete 
          high ledD: pause delai: low ledD: pause delai
          next
          b0 = 0
    
       case 4   'si flagG
          for index = 1 to nbeclats 
          if b0 <> 4 then exit 'si on a appuyé sur un BP, on arrete 
          high ledG: pause delai: low ledG: pause delai
          next
          b0 = 0
       endselect
    loop
    
    '-------------------------------------------------------------------
    Interrupt:
    b0 = 0         'RAZ de tous les flags > arret commandes en cours
    pause 100
    
    if BPD=0 and BPG=1 then 'si appui sur BPD
       count C.3, 1500, nbeclats : flagD = 1: endif 'comptage nb d'appuis pendant 1.5s
    if BPD=1 and BPG=0 then 'si appui sur BPG
       count C.4, 1500, nbeclats : flagG = 1: endif 'comptage nb d'appuis pendant 1.5s
    
    If BPD=0 and BPG=0 then  ' si BP D et G sont appuyés
       pause 2000
       If BPD=0 and BPG=0 then 'encore après 2s
       flagwarn = 1: endif     'mise à 1 du flag warning
    endif
    
       If nbeclats > 3 then  ' si nb appuis >3 
          nbeclats = 10 
          else
          nbeclats = 3 
       endif
    setint OR %00000000, %00011000 'rearmement interruption
    return
    S'il n'y a pas de solution, c'est qu'il n'y a pas de problème . (Les Shadoks)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •