Appui sur bouton en Basic
Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

Appui sur bouton en Basic



  1. #1
    invite18eeb442

    Lightbulb Appui sur bouton en Basic


    ------

    Bonjour à tous !

    Je programme en Basic sur mikrobasic, et je bute sur un petit souci concernant l'appui sur un bouton.
    J'aimerais que lorsque j'appuie sur le bouton, une variable s'incrémente d'1 unité, et si le bouton est maintenu pendant un certain temps, elle s'incrémente par exemple de 10 en 10 toutes les 1/2 secondes.
    Pensez-vous que cela soit réalisable ?
    Et surtout adaptable à du code déjà existant, à savoir :

    Code:
    sub procedure TestBoutons              '*************  Boutons   **************
    
       For i = 0 to 4                                      ' test des poussoirs
          if Button(PORTB,i+1,10,1) then                   ' portC.3     1 :  Plus
             ready[i] = true                               '     C.4     2 :  Moins
          end if                                           '     C.5     3 :  Enter
          if ready[i] and Button(PORTB,i+1,10,0) then      '     C.6     4 :  Temps
             ready[i] = false                              '     C.7     5 :  Ligne
             appui = i+1
          end if
       next i
    
    end sub
    
    
    
       if (selection<2) then                          ' gestion de la touche appuyee
         if (appui<>0) then                           ' qd selction rafale
            select case appui                         ' ou sequence
               case 1                                 ' appui sur Plus
                  select case time_unit
                  case 2
                       duree = duree + 1
                  case 1
                       if duree = 59 then
                          duree = 0
                       else
                          duree = duree + 1
                       end if
                  case 0
                       if duree = 95 then
                          duree = 0
                       else
                          duree = duree + 5
                       end if
                  end select
               case 2                                 ' appui sur Moins
                  select case time_unit
                  case 2
                       duree = duree - 1
                  case 1
                       if duree = 0 then
                          duree = 59
                       else
                          duree = duree - 1
                       end if
                  case 0
                       if duree = 0 then
                          duree = 95
                       else
                          duree = duree - 5
                       end if
                  end select
            end select
            appui = 0
         end if
       end if
    Il s'agit donc ici des cas : "Appui sur plus" et "Appui sur moins" où il faudrait mettre en place ce système.

    Si quelqu'un pouvait m'aider, ça serait super gentil !

    Merci, bonne journée
    Matoms

    -----

  2. #2
    invite7a49d0d5

    Cool Re : Appui sur bouton en Basic

    Bonjour,

    oui c'est possible (tout est possible ;O])...
    il faut adapter ton programme...
    mais pas évident pour moi car pas très clair...
    et pas facilement adaptable à vue de gros nez...

    moi je repartirais de zéro...
    un organigramme...
    puis re-programmation...
    ça irait plus vite...

    vede
    ;O]

  3. #3
    inviteb92ec58c

    Re : Appui sur bouton en Basic

    vous avez simuler le program? sur isis par exemple

  4. #4
    invite18eeb442

    Re : Appui sur bouton en Basic

    Bonjour

    Oui j'ai simulé ce programme, d'une part sur Mikrobasic, et d'autre part ce code est déjà fonctionnel, car implanté et testé dans son application finale.
    Par contre, ce morceau de code n'est rien comparé au tout (700 lignes) et tout reprogrammer me ferait mal
    On m'a parlé vaguement d'une possibilité à base de timer, mais sans plus... quelqu'un verrait comment ?

    Merci pour vos réponses !

  5. A voir en vidéo sur Futura
  6. #5
    invite7a49d0d5

    Cool Re : Appui sur bouton en Basic

    Citation Envoyé par Matoms Voir le message
    Bonjour

    Oui j'ai simulé ce programme, d'une part sur Mikrobasic, et d'autre part ce code est déjà fonctionnel, car implanté et testé dans son application finale.
    Par contre, ce morceau de code n'est rien comparé au tout (700 lignes) et tout reprogrammer me ferait mal
    On m'a parlé vaguement d'une possibilité à base de timer, mais sans plus... quelqu'un verrait comment ?

    Merci pour vos réponses !
    re ;O]

    je parle pas de "tout" reprogrammer, mais seulement la partie "boutons"...
    car là, pas évident d'insérer la "nouvelle fonction"...

    car oui, il va te falloir un timer, ou au moins un compteur,
    pour détecter si la touche est restée pressée... le temps qu'elle
    est restée pressée... pour passer (ou pas) en mode "+10 rapide"...

    vede
    ;O]

  7. #6
    invite18eeb442

    Re : Appui sur bouton en Basic

    D'accord,

    Je vais déja regarder si insérer un petit while quelque part ne permettrait pas de régler les choses, et sinon, je reprogrammerai la partie "boutons".
    Je fais des essais la semaine prochaine normalement, donc je vous tiendrai au courant de l'avancée !
    Merci
    Matoms

  8. #7
    inviteb92ec58c

    Re : Appui sur bouton en Basic

    salut, vaoici un petit bout d'un programme que j'ai ecrit sur PIC C, PCW c compiler ou quelque chose comme ca, où j'utilise des bouton:
    1-le break, c'est nessaisaire pour moi
    2- lorsque le bouton est apuiyé, faut incrimenter une seule foi puis attendre que le bouton soit relaché, sinon faut mettre un delai avant de sortir de la boucle, 300 ms me parait resonnable.



    switch (select){
    case 14:{
    startplay(A,B,C);
    displayT(A);
    output_low(WIN);
    diods=1;
    displaydp(diods,A);
    do{
    select=input_a();
    delay_cycles(30);
    }while(select==14);
    break;
    }
    case 13: {
    erazedp(diods,A);
    diods=(diods +1) % 16;
    displaydp(diods,A);
    do{
    select=input_a();
    delay_cycles(30);
    }while(select==13);
    break;
    }
    case 12: {
    erazedp(diods,A);
    diods=(diods-1) % 16;
    displaydp(diods,A);
    do{
    select=input_a();
    delay_cycles(30);
    }while(select==12);
    break;
    }
    case 11: {
    erazedp(diods,A);
    diods=(diods+4) % 16;
    displaydp(diods,A);
    do{
    select=input_a();
    delay_cycles(30);
    }while(select==11);
    break;
    }
    case 10: {
    erazedp(diods,A);
    diods=(diods-4) % 16;
    displaydp(diods,A);
    do{
    select=input_a();
    delay_cycles(30);
    }while(select==10);
    break;
    }
    case 9: {
    if (B[diods]==0){
    output_low(BUZZ);
    delay_ms(30);
    output_high(BUZZ);
    delay_ms(30);
    output_low(BUZZ);
    }else{
    C[diods]=1;
    A[diods]=1;
    displayT(A);
    verif(B,C);
    displaydp(diods,A);
    }
    do{
    select=input_a();
    delay_cycles(30);
    }while(select==9);
    break;

    }
    case 8: {
    if (B[diods]==0){
    output_high(BUZZ);
    delay_ms(30);
    output_low(BUZZ);
    delay_ms(30);
    output_high(BUZZ);
    delay_ms(30);
    output_low(BUZZ);
    }else{
    C[diods]=2;
    A[diods]=2;
    displayT(A);
    verif(B,C);
    displaydp(diods,A);
    }
    do{
    select=input_a();
    delay_cycles(30);
    }while(select==8);
    break;

    }
    case 7: {
    if (B[diods]==0){
    output_high(BUZZ);
    delay_ms(30);
    output_low(BUZZ);
    delay_ms(30);
    output_high(BUZZ);
    delay_ms(30);
    output_low(BUZZ);
    }else{
    C[diods]=3;
    A[diods]=3;
    displayT(A);
    verif(B,C);
    displaydp(diods,A);
    }
    do{
    select=input_a();
    delay_cycles(30);
    }while(select==7);
    break;

    }
    case 6: {
    if (B[diods]==0){
    output_low(BUZZ);
    delay_ms(30);
    output_high(BUZZ);
    delay_ms(30);
    output_low(BUZZ);
    }else{
    C[diods]=4;
    A[diods]=4;
    displayT(A);
    verif(B,C);
    displaydp(diods,A);
    }
    do{
    select=input_a();
    delay_cycles(30);
    }while(select==6);
    break;

    }



    si vous utilisez un quartz de 4 Mhz, sans delay,il y'aura 800 incrimentation par second, ca sera du n'importe quoi

Discussions similaires

  1. Calcul de fleche d'une poutre sur 2 appui
    Par invitecfbc74f4 dans le forum Physique
    Réponses: 19
    Dernier message: 26/03/2012, 16h58
  2. temporisation appui bouton piézoelectrique
    Par chestercat dans le forum Électronique
    Réponses: 5
    Dernier message: 13/05/2009, 08h52
  3. beton sur appui de fenetres
    Par invite1d1c2933 dans le forum Habitat bioclimatique, isolation et chauffage
    Réponses: 1
    Dernier message: 06/02/2009, 17h55
  4. Détection Double appui sur Bouton Poussoir
    Par invitee196a996 dans le forum Logiciel - Software - Open Source
    Réponses: 7
    Dernier message: 27/06/2008, 08h34
  5. Réponses: 22
    Dernier message: 16/10/2007, 21h28
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies.