Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
Forum général sur le langage C !

Modérateur : Jérémy

Donner un Nom evolutif à une variable
Jérémy
Administrateur du site
Administrateur du site
Messages : 2750
Âge : 46
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#1 Message par Jérémy » dim. 7 févr. 2016 22:54

Bonsoir à tous ,

Un truc me chiffonne ce soir, mise à part que je galère un peu avec app inventor2 .

Est-il possible de nommé une variable avec un index ?

Je voudrais par exemple qu'a chaque INT, la valeur s'enregistre dans une variable . Et j’incrémenterai cette variable ou plutôt son index

Par exemple, dans mon cas précis, je souhaite a chaque reception UART ( donc par INT) stocker ma reception dans une variable différente. Ainsi je stocke plei nde chiffre à la suite et je sais ou il se trouve ?:

Code : Tout sélectionner


Interruption UART
Variable
(i) = temp;
i++;
Fin de l’interruption


Voial je pourrais passer par une usine à gaz ca je sais bien faire oops ), mais bon .... Peut être avez-vous l'habitude et avez une soluce plus propre !
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Donner un Nom evolutif à une variable
sylvain54
Avatar de l’utilisateur
Amateur
Amateur
Messages : 194
Âge : 53
Enregistré en : août 2015
Localisation : Dans l'est de la France

#2 Message par sylvain54 » lun. 8 févr. 2016 09:34

Je ne sais pas si j'ai bien compris ce que tu veux faire,
Je déclarerai un tableau de 1000 valeurs (c'est un exemple), mis à 0 au départ :

Code : Tout sélectionner



Mes_Temp
[1000] = 0;    //déclaration du tableau contenant 1000 données, je mets toutes les valeurs à 0
int temp;   //variable temp, changer le type en fonction du besoin, elle est à l'extérieur de la fonction pour y avoir accès de partout dans le code

//Fonction pour remplir le tableau
void Remplissage_Tableau()    {

int i = 0;    //variable pour l'index

for (i=0,i<1000,i++) {
Mes_Temp[i] = temp;
i=i+1;
 
}
}
 


Après tu utilises les strlen & co pour aller consulter ton tableau etc, il faut aussi penser à cocher les librairies string dans le compilateur pour y avoir accès
Bon c'est fait à l'arrache au boulot, donc il y a peut être des erreurs et ce n'est peut être pas ce que tu attends :mrgreen:

++

Donner un Nom evolutif à une variable
paulfjujo
Avatar de l’utilisateur
Maître
Maître
Messages : 3268
Âge : 75
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#3 Message par paulfjujo » lun. 8 févr. 2016 11:43

bonjour,

une variable ne peut pas etre variable ...

par contre un index permet de ranger des valeurs variable dans un tableau (qui peut s'appeler Variable)
voir aussi L'exemple donné par Sylvain54
Attention toute fois à l'espace RAM total occupé
Tableau de 1000 entiers => 2000 bytes de RAM

... sauf si on parle d'allocation dynamique comme utilisé en C ansi ..
voir le pendant MikroC librairie MemManager
oops .. mais je n'ai pas encore eu l'occasion de la tester dans une application
Encore un sujet à creuser avec un exemple parlant..

Code : Tout sélectionner



Interruption UART
//Variable(i) = temp;
Variable[i]=temp
i
++;
Fin de l’interruption

Aide toi, le ciel ou FantasPic t'aidera

Donner un Nom evolutif à une variable
sylvain54
Avatar de l’utilisateur
Amateur
Amateur
Messages : 194
Âge : 53
Enregistré en : août 2015
Localisation : Dans l'est de la France

#4 Message par sylvain54 » lun. 8 févr. 2016 12:18

paulfjujo a écrit :Attention toute fois à l'espace RAM total occupé
Tableau de 1000 entiers => 2000 bytes de RAM


c'était juste pour l'exemple, mais effectivement, j'aurais du prendre plus petit :mrgreen:
Il est gourmand le sylvain humour!!

Donner un Nom evolutif à une variable
Jérémy
Administrateur du site
Administrateur du site
Messages : 2750
Âge : 46
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#5 Message par Jérémy » lun. 8 févr. 2016 22:08

Bonsoir ,

Paulfjujo à encore vue juste.

une variable ne peut pas etre variable ...

Voila ma réponse .

Cette question rejoint mon projet avec le bluetooth . En effet quand j'appuie sur BP sur la tablette, j'envoie une série de chiffre à la suite . Cette série bien ordonnée aurait pus se ranger directement dans une variable aussi bien ordonnée .

Par exemple j'envoie en bluetooth : "1-42-25" .
et les valeurs se serait misent dans les valeurs correspondantes : 1 dans la variable "heure" , 42 dans la variable "minutes" et 25 dans la variable "seconde" .

Il va donc falloir que je ruse pour arriver à mes fins
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Donner un Nom evolutif à une variable
sylvain54
Avatar de l’utilisateur
Amateur
Amateur
Messages : 194
Âge : 53
Enregistré en : août 2015
Localisation : Dans l'est de la France

#6 Message par sylvain54 » mar. 9 févr. 2016 08:51

Salut Jeremy,

Coté émission, Il faut créer un masque de trame : V1,V2,V3 +LF+CR dans cet exemple, tu utilises la virgule comme séparateur et LF+CR comme indicateur de fin de trame.
Coté réception, création d'une routine qui cherche la virgule et la fin de trame et met les 3 variables dans heures, minutes, secondes (par exemple).

je ne sais pas si je suis clair :?

++

Donner un Nom evolutif à une variable
paulfjujo
Avatar de l’utilisateur
Maître
Maître
Messages : 3268
Âge : 75
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#7 Message par paulfjujo » mar. 9 févr. 2016 15:12

Par exemple j'envoie en bluetooth : "1-42-25" .
et les valeurs se serait misent dans les valeurs correspondantes : 1 dans la variable "heure" , 42 dans la variable "minutes" et 25 dans la variable "seconde" .


voir la fonction strok
tu peux soit conserver le "-" comme separateur de champ de valeur, soit utiliser le "," comme le propose Sylvain
Le ";" etant souvent utilisé , par exemple dans les fichier Excel .CSV comma separator variable
le comma americain etant ; (et , pour les francais).
Pesro c'est aussi celui là que je prefere (le ";") à cause du separateur de decimales nombre qui est déja une virgule (en francais).

En C , la fonction strtok permet de desassembler un paquet séparé par une virgule (ou autre caractere specifique)
comme on peut le faire aussi coté Appinventor2 ! dans le Sens PIC -> Appli smart Phone

un exemple que j'ai utilisé pour commander la couleur de 3 leds via un terminal
ici le separateur est une virgule
le test commence apres les 3 lettres RGB
strok permet de gerer automatiquement la position du pointeur
qui se deplace sur chaque emplacement de virgule..
on peut faire autrement, mais pourqoui ne pas utiliser une fonction dédiée pour ..

Code : Tout sélectionner



     
// exemple de commande recue .. pour tester la fonction
     // sans utiliser la reception UART
     strConstRamCpy(buffer1,"RGB1-123-245\r\n");
  // Main loop
//  do
//  {

//    if(UART1_DataReady==1)
//    {
//      UART1_Write_CText("Reception de : \r\n");
//      UART1_Write_Text(buffer1); CRLF1();
      p1=0;
      p1=strstr(buffer1,"RGB");
       if (p1>0)
       {
          cc=*(p1+3);  // se positionne juste apres RGB 
          UART1_Write_CText("Led # ");UART1_Write(cc);
          CRLF1();
          p1=strtok(p1,"-");  // 1er appel pour detection du tiret
          UART1_Write_Text(p1);CRLF1();
          // RGB_Led[cc][0]=atoi(p1);
          Delay_ms(1000);

          i=0;
          do
          
{   p1=strtok(0, "-");    // detection des separateurs (tiret) suivants
              if (p1!=0)
              {
              UART1_Write_CText("Parametre  ");
              WordToStr(i,CRam1);
              UART1_Write_Text(CRam1); UART1_Write(TAB);
              UART1_Write_Text(p1);
              ValColor=atoi(p1);
              IntToStr(ValColor,CRam1);
              UART1_Write_CText(" ValColor ");UART1_Write_CText(Colors[i]);
              UART1_Write(TAB); UART1_Write_Text(CRam1);
              CRLF1();
              Delay_ms(1000);
              i++;
              }
           }while (p1!=0) ;
           CRLF1();
           Delay_ms(1000);
        }
        strConstRamCpy(txt,"\n End of test \n");
        UART1_Write_Text(txt);
        CRLF1();
 //       RAZ_UART1(); // on nettoie tout
  //    } //if
  //  }
    while(1);
  }

Aide toi, le ciel ou FantasPic t'aidera

Donner un Nom evolutif à une variable
sylvain54
Avatar de l’utilisateur
Amateur
Amateur
Messages : 194
Âge : 53
Enregistré en : août 2015
Localisation : Dans l'est de la France

#8 Message par sylvain54 » mar. 9 févr. 2016 15:29

Il est fort le paulfjujo Merci !
C'est beaucoup plus clair que mes explications.
Effectivement, le ";" est préférable car la virgule est utilisé pour les décimales d'où un risque de confusion pour la personne qui relit le code par la suite +1

Et en bonus, l'exemple qui va bien.

Donner un Nom evolutif à une variable
Jérémy
Administrateur du site
Administrateur du site
Messages : 2750
Âge : 46
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#9 Message par Jérémy » mar. 9 févr. 2016 16:35

C'est vrai qu'il est fort, mais le HIC, c'est que j'ai pas tout compris même avec les commentaires :oops:
C'est moi le boulet, mais je pense avoir saisi le principe . Je regarderais ca à tête reposé ce soir si les enfants me laissent tranquille :D
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Donner un Nom evolutif à une variable
Gérard
Avatar de l’utilisateur
Expert
Expert
Messages : 1941
Âge : 67
Enregistré en : septembre 2015
Localisation : Alsace - Haut-Rhin

#10 Message par Gérard » mar. 9 févr. 2016 17:25

Jérémy a écrit :C'est vrai qu'il est fort, mais le HIC, c'est que j'ai pas tout compris même avec les commentaires :oops:
C'est moi le boulet, mais je pense avoir saisi le principe . Je regarderais ca à tête reposé ce soir si les enfants me laissent tranquille :D


T'inquiète, t'es pas le seul boulet... avec moi, on est déjà 2.

:bravo: Paul, tu es vraiment très fort, nous avons tous à en apprendre de toi.
Le 18/04/19 je suis devenu papy de jumeaux, le 01/09/23 une petite cousine des jumeaux est née.


Retourner vers « Langage C »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 11 invités