Aller au contenu


Photo
- - - - -

mikroc


  • Veuillez vous connecter pour répondre
13 réponses à ce sujet

#1 nebukadnezare

nebukadnezare

    Nouveau membre

  • Membres
  • 9 messages

Posté 03 octobre 2015 - 06:27

bonjour a tous,

j'ai réalise un décompteur de 4 digit 7seg et 4 boutons poussoirs ,ma question et que je voudrais utilise un des bouton poussoir pour 2 actions sans que l'une n’altère l'autre par exemple le bouton qui incrément les ++ ,si j’appuie plus longtemps il seras utilise pour mémorise la valeur du dernier r décomptage un truck comme sa et merci d’avance.



#2 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 959 messages
  • Gender:Male
  • Location:Anglet

Posté 03 octobre 2015 - 09:46

Oui ça se fait, par contre c'est à toi de coder ça " proprement" pour que les deux actions ne s'altère pas ! =) 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#3 nebukadnezare

nebukadnezare

    Nouveau membre

  • Membres
  • 9 messages

Posté 03 octobre 2015 - 09:50

merci mike118 pour l'attention ,justement c'est ce que je veux faire mais je n'y arrive pas, si tu a une ou deux ligne de commande a propose ça serais sympa.



#4 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 959 messages
  • Gender:Male
  • Location:Anglet

Posté 04 octobre 2015 - 12:06

Exemple de code : 

int checkbutton( int buttonpin)
{
  int result = 0; 
  int count = 0;
  while (digitalRead(buttonpin) && count<MAX)
  {
     count++;
     delay(1);

  }
  if ( count>0)
  {
    result= 1;
  }
  if(count>(MAX-1)
  {
   result=2;   
  }
  return result;
}

La valeur MAX étant un define à définir, représentant le nombre de milliseconde limite pour définir l'action à effectuer , la 1 ou la 2 . 
La fonction retourne 0 si on a pas appuyé sur le bouton. 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#5 nebukadnezare

nebukadnezare

    Nouveau membre

  • Membres
  • 9 messages

Posté 04 octobre 2015 - 12:45

#define plus portb.b0
#define moin portb.b1
#define start portb.b2
#define led1  portc.b0
#define led2  portc.b1
#define led3  portc.b2
#define led4  portc.b3

unsigned int oldstate;                                    // Old state flag

void main() {
portb=0x00;
portc=0x00;
trisb=0xff;
trisc=0x00;

 do {
    if(plus==0){delay_ms(300);if(plus==0){led2=1;delay_ms(100);led2=0;} }
    if(moin==0){delay_ms(300);if(moin==0){led3=1;delay_ms(100);led3=0;} }
    if(start==0){led4=1;delay_ms(100);led4=0;}
    
    if (Button(&PORTB, 0, 1, 0)) {oldstate = 1;delay_ms(100);}


    if (oldstate && Button(&PORTB, 1, 5000, 0)) 
    {
      led1=1;delay_ms(1000);led1=0;
      oldstate = 0;
    }
  } while(1);
}

se que j'ai c'est un décompteur,et 4 BP (Plus,Moins,Reset et Start) le but rechercher c'est de mettre le bon timing et le décompter au moyen du BP start toutes en le mémorisant. j'ai essayer de le mémoriser en utilisant START actifs ce qui engendre la mémorisation du dernier temps qui 1, puis j'ais chercher a utilise 2 BP (qui sont Plus et le Moins) avec des pression rapide et suivie; mais en-vain.

voila ce moi j'ai fait mais "il y a toujours un MAIS :)" le problème c'est que j'utilise le PLUS et si je veux diminuer avec le MOIN il passe en mode mémo.

Si tu a une autre idée je suis preneur.



#6 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 959 messages
  • Gender:Male
  • Location:Anglet

Posté 04 octobre 2015 - 03:22

Bon attends j'ai pas tout compris. 

 

Au final :

tu veux combien de bouton ? 4 ? 2 ? 
et tu veux combien d'action ?

 

Bon je vais faire une supposition/ proposition et tu me dis si ça te convient : 

Supposons que tu décide:

  • Avoir deux boutons.  PLUS et MOINS. 

Que le but c'est :

  • Tu appuis sur PLUS rapidement, ça incrémente ton compteur .
  • Tu restes appuyé sur PLUS ça lance le décompte.
  • Tu appuis sur MOINS ça décrémente ton compteur.
  • Tu restes appuyé sur MOINS ça reset. 
#define PLUS portb.b0
#define MOINS portb.b1
#define MAX  1000

int count =0;
int start =0; 
int i = 0;


void main() 
{
portb=0x00;
trisb=0xff;


do 
{
    if(PLUS==0)
    {
      while(PLUS==0)
      {
        delay_ms(1);
        i++;
      }
      if(i>MAX)
      {
       start =1;
      }
      else
      {
       count++;
      } 
      i=0;
    }
    if(MOINS==0)
    {
      while(MOINS==0)
      {
        delay_ms(1);
        i++;
      }
      if(i>MAX)
      {
       count =0;
      }
      else
      {
       count--;
      } 
    } 
    if(start)
    {
     // faire la fonction de décompte ici décompte ici
     // Décompte ... 
     start =0;
    }
  } while(1);
}




Un exemple de truc qui fait ce que j'ai explicité plus haut. Par contre mieux vaut retravailler un peu l'ensemble pour rendre le code plus robuste ( changer les condition sur le while pour en sortir au bout d'un certains temps, racourcir le code en écrivant des fonctions  etc...  ) 

 

c'est ce que tu cherches à faire ou j'ai mal compris ? 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#7 nebukadnezare

nebukadnezare

    Nouveau membre

  • Membres
  • 9 messages

Posté 04 octobre 2015 - 03:33

C'est presque sa juste que je veux utilisé le BP plus et moins a l'incrementation et decrementation normal mais en plus je veux les utilises pour mémorisé soit en appuie prologer ou simultane,pour le reset et le start pas de problème .et vraiment merci.

#8 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 959 messages
  • Gender:Male
  • Location:Anglet

Posté 04 octobre 2015 - 02:50

Je suis désolé mais je ne te comprends pas bien.
Essaye de faire des phrases plus courte avec un sujet et un verbe ...

 

Explicite le nombre de bouton poussoir et nomme les : 

  • Je veux X boutons
  • le 1er c'est bouton 1 
  • ...;

 

Sépare les différentes actions que tu souhaites : 

  • Appuis court sur le bouton 1 Action 1 
  • Appuis long sur le bouton  1 Action 2
  • ...

Pour ce genre de chose décrire correctement et complètement ce que tu veux faire c'est 70% du boulot qui est fait ...
 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#9 nebukadnezare

nebukadnezare

    Nouveau membre

  • Membres
  • 9 messages

Posté 04 octobre 2015 - 03:36

unsigned short mask (unsigned short num){
switch(num)
{
case 0:return         0x7e;
case 1:return         0x30;
case 2:return         0x6d;
case 3:return         0x79;
case 4:return         0x33;
case 5:return         0x5b;
case 6:return         0x5f;
case 7:return         0x70;
case 8:return         0x7F;
case 9:return         0x73;

//case 0: PORTB        = 63; break;
//case 1: PORTB        = 6; break;
//case 2: PORTB        = 91; break;
//case 3: PORTB        = 79; break;
//case 4: PORTB        = 102; break;
//case 5: PORTB        = 109; break;
//case 6: PORTB        = 125; break;
//case 7: PORTB        = 7; break;
//case 8: PORTB        = 127; break;
//case 9: PORTB        = 111; break;
}
}
#define bouton_plus PORTD.RD0
#define bouton_moins PORTD.RD1
#define bouton_start PORTD.RD2
#define bouton_select PORTD.RD3
#define appui_bouton(b) (!(b))
#define TEMPS_MAX 9999
#define TEMPS_MIN 0
#define TICK_DELAY_MS 1
unsigned int count = 0;
unsigned int count1 = 0;
unsigned int count2 = 0;
unsigned int count3 = 0;
unsigned int count4 = 0;
unsigned int meme = 2;
unsigned int nombre;

unsigned short i;
void Interrupt(){

                
                
                
                count4= (count/1000)%10;                        // AFFICHAGE 0000
                count3= (count/100)%10;
                count2 = (count/10)%10;
                count1 = count%10;
                if(i==0) {PORTA = 0xf7; portb=mask(count1);}
                if(i==1) {PORTA = 0xfb; portb=mask(count2);}
                if(i==2) {PORTA = 0xfd; portb=mask(count3);}
                if(i==3) {PORTA = 0xfe; portb=mask(count4);}
                i++;if (i==4) i=0 ;
                INTCON = 0xA0;
                TMR0   = 6;
                 }


void main(void)
{
  OPTION_REG   = 0x82;
  TMR0         = 6;
  INTCON       = 0xA0;
  count= (EEPROM_Read(0x01)<<1);
  count  |=EEPROM_Read(0x00);


TRISA = 0x00;
TRISB = 0x00;
PORTA = 0x00;
PORTB = 0x00;
TRISD = 0xff;
PORTD = 0x00;
TRISC = 0x00;
PORTC = 0x00;
          
           while(1)
        {
           if(appui_bouton(bouton_plus))                               // BP PLUS TEMPS
        {  if(count<TEMPS_MAX) delay_ms(50); count++;}

       if(appui_bouton(bouton_moins))                                  //BP MOINS TEMPS
        { if(count>TEMPS_MIN) delay_ms(50);count--;}
           
         if(appui_bouton(bouton_moins)&&appui_bouton(bouton_plus))    //PLUS ET MOINS POUR LA MEMORISATION
        {   delay_ms(2000);
            EEPROM_Write(0x00, count);                                // Mémorisation de la valeur
            delay_ms(10);
            EEPROM_Write(0x01, count>>1);
            delay_ms(10);}

          
          if(appui_bouton(bouton_start))                              // BP DEBUT DECOMPTAGE
          { count--; delay_ms(500);
                {if (count == TEMPS_MIN)                              // CONDITION
                {PORTC=0xff;                                          // ACTIVATION PORTC RELAY 3S
                delay_ms(3000);
                count= (EEPROM_Read(0x01)<<1);
                count  |=EEPROM_Read(0x00);
                PORTC=0;
                 } } }



} }

ok voila rien ne vaut une photo et un code, si tu veux je peut t’envoyer le fichier ISIS 7.9 et le code source pour bien voire . le code marche bien sauf que des fois sa ne mémorise pas directement. si tu voie des truck a nettoyer au niveau code n’hésite pas .

NB. sa fait que 2 mois que je programme alors soit clément :)

Fichier(s) joint(s)



#10 nebukadnezare

nebukadnezare

    Nouveau membre

  • Membres
  • 9 messages

Posté 04 octobre 2015 - 03:38

et aussi le premier code que je t'ais envoyer n’étais qu'un test pour que je comprenne bien les BP



#11 nebukadnezare

nebukadnezare

    Nouveau membre

  • Membres
  • 9 messages

Posté 04 octobre 2015 - 04:14

 while(1) {

           if(plus==0){delay_ms(100);if(plus==0)                      // BP PLUS TEMPS
        {  if(count<TMAX)  count++;}}

           if(moins==0){delay_ms(100);if(moins==0)                    //BP MOINS TEMPS
        {  if(count>TMIN) count--;}}
           
           
           if (Button(&PORTD, 0, 1, 0)) {oldstate = 1;delay_ms(10);   //CONDITION POUR UTILISE LE BP PLUS ET MOINS
           if (oldstate && Button(&PORTD, 1, 5, 0))                   //POUR UNE MEMORISATION
             {
               EEPROM_Write(0x00, count);                             // MEMORISATION DES VALEURS
               delay_ms(10);
               EEPROM_Write(0x01, count>>1);
               delay_ms(10);oldstate = 0;}}

          
          if(start==0)                                                // BP DEBUT DECOMPTAGE
          { count--; delay_ms(100);
                {if (count == TMIN)                                   // CONDITION
                {PORTC=0xff;                                          // ACTIVATION RELAY.
                delay_ms(2000);                                       // ...2S
                count= (EEPROM_Read(0x01)<<1);
                count  |=EEPROM_Read(0x00);
                PORTC=0;
                 } } }

Encore une petit amélioration, mais des fois au lieu qu'il mémorise il acrémente ou décrémente .



#12 nebukadnezare

nebukadnezare

    Nouveau membre

  • Membres
  • 9 messages

Posté 04 octobre 2015 - 04:25

ok voila sa marche nickel en modifiant le temps de la condition " if(Button(&PORTD,0,500,0)) .... super sympa mike118 t'est un BIZE :). mais n’empêche ,s'il y a des truc en trop ou d'éventuel amélioration je t'en prie.



#13 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 959 messages
  • Gender:Male
  • Location:Anglet

Posté 04 octobre 2015 - 07:37

Content que tout sois ok pour toi ;) 

 

Après pour voir d'éventuelles améliorations ou autres il faudrait que tu explicites ton "besoin"  comme indiqué plus haut histoire que je compare ce que tu dis que tu veux et ce que tu as fais ;) 

Sinon : un BIZE ? quésaco ? 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#14 nebukadnezare

nebukadnezare

    Nouveau membre

  • Membres
  • 9 messages

Posté 04 octobre 2015 - 07:43

:D  un Bize c'est quelqu'un de très sympa. 






0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users