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 :

#11 Message par Jérémy » mer. 10 févr. 2016 18:37

Bonsoir,

Même a tête reposée j'ai du mal ! . trop de fonction nouvelle, et le travaille avec les pointeurs n'est vraiment pas encore une chose acquise pour moi. Je manque cruellement d’expérience, mais j'y travaille lol .
C'est en faisant des erreurs, que l'on apprend le mieux !!!

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 :

#12 Message par Jérémy » jeu. 11 févr. 2016 13:28

Bonjour,

En fait je me suis emmêler les pinceaux !!!

car dans une chaine de caractères, on stock des char . Et moi je m'étais mis en tête, que pour récupérer une variable de valeur 255 par exemple il fallait reconstituer le chiffre . Mais pas du tout ! 0 à 255 est directement dans une case d'un tableau .
J'ai donc juste a pointer sur la bonne case .

Pour reste sur mon exemple je vais essayer ceci ce soir :
envoie depuis ma tablette via app inventor :
;1;42;25

Ensuite je récupérer toute la trame et la stocke dans un tableau txt[]

Sur mon PIC j'aurais juste a récupérer les valeurs comme ceci:

Variable_heure = txt[1];
Variable_minute= txt[3];
Variable_seconde= txt[5];
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

#13 Message par sylvain54 » jeu. 11 févr. 2016 18:50

C'est tout à fait ça.
Tu vois, tu finis par comprendre, pas si boulet que ça humour!!

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

#14 Message par paulfjujo » jeu. 11 févr. 2016 19:07

bonsoir,


Variable_heure = txt[1];
Variable_minute= txt[3];
Variable_seconde= txt[5]
;

pas tout à fait ...et meme faux dans l'exemple 1;42;25
de plus ,le premier index d'une table est 0.

car La longueur des chacun des strings HH MN SS peut avoir une longueur de 1 ou 2 cars..
l'index est donc variable

Le mieux est d'utiliser la fonction strok dont j'ai parlé precedement
Son avantage n'est pas vraiment mis en valeur pour seulement 3 donnees .. mais apparait bien lorqu'il y en a beaucoup.


Le premier appel de strok detecte la premiere occurence de ";" dans le buffer de reception ( UART du PIC )
et les appels suivant, avec un pointeur =0 , au lieu de Buffer, detecte chaque portion entre les ";"
voir exemple ci joint .. qui donne ce resultat

La chaine de caractere ( string) à tester est tapée sur le clavier terminal et validée par enter (CR)

Isolation des parametres
Stockage des parametre dans une table de unsigned char Time[3]
pour stoker les valeurs numeriques ( sur 8 bits , suffisant) de HH, MM,SS
car je suppose qu'on va les utiliser par ailleurs..

18F45K22_Test_Strok_function.jpg


source et Hex pour un 18F45K22 UART1 8MHz

18F45K22_Test_Saisie_info_from_Tablette_via_Strtok.zip
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Aide toi, le ciel ou FantasPic t'aidera

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 :

#15 Message par Jérémy » jeu. 11 févr. 2016 21:17

pas tout à fait ...et meme faux dans l'exemple 1;42;25
de plus ,le premier index d'une table est 0.


Non car j'ai bien mis un ; en premier.
Le premier chiffre se trouve bien en text[1]

car La longueur des chacun des strings HH MN SS peut avoir une longueur de 1 ou 2 cars..
l'index est donc variable

Je me suis certainement mal exprimé, car pour le coup , je n’affiche pas les variables je les stock seulement pour les traités .
Si je devais les affichées Ok, mais pas la ! Je vais faire comme sur le compte à rebours, tout convertir en seconde.

Donc ensuite je vaios multiplié par 3600 le heures et par 60 les minutes, puis additionné le tout .

je pense même que je vais rajouter la somme dans l'envoi pour vérifier l'exactitude de celui ci ; un espèce de checksum ( je crois que ca s'appelle comme ca) .
C'est en faisant des erreurs, que l'on apprend le mieux !!!

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

#16 Message par paulfjujo » ven. 12 févr. 2016 11:05

Attention!!
Je vais faire comme sur le compte à rebours, tout convertir en seconde
.

l'index d'une table ,n'est qu'un pointeur sur 1 seule valeur

donc à un moment donné il va fallor convertir tes valeurs en numerique ..
en tenant compte de ce que tu dis , (sans utiliser strok) , et si j'ai bien compris tu obtiendras
txt[]="';1;42;25"
soit :
txt[1]='1'
txt[3]='4' 1 seul caractere au lieu des 2 esperés
txt[5]='2' 1 seul caractere au lieu des 2 esperés
un seul caractere dans un indice quelconque de la table txt !
ce n'est pas, à mon avis, ce que tu veux .
Ne pas oublier qu'il faut un 0 en fin de string.
Pour pouvoir ensuite faire la convertion de string -> numerique
si on utilise un pointeur:
*(txt+3)='4''5' mais pas "45" car il faut txt[3] contenant '4' '5'et zero
Aide toi, le ciel ou FantasPic t'aidera

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 :

#17 Message par Jérémy » ven. 12 févr. 2016 11:37

Hello,

Je ne remet pas en cause ce que tu dis ; mais pourtant hier soir, j'ai réussis et j'obtiens les bonnes valeurs . Tu me mets le doute :oops:
je suis au taf, je n'ai pas le code ici , comme c'est le week-end ce soir je poste mes avancées ;

Mais dans txt[3] c'est bien la valeur 45 que j'ai . chaque case d'un tableau est composée de char ( de 0 à 255).

En fait la question de string n'intervient plus je pense , tant qu'on ne souhaite pas affiché les données ! J'utilise seulement les valeurs stockées dans mon tableau .
C'est en faisant des erreurs, que l'on apprend le mieux !!!

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

#18 Message par paulfjujo » ven. 12 févr. 2016 12:48

Mais dans txt[3] c'est bien la valeur 45 que j'ai .


non pas la valeur 45 mais les valeurs ascii correspondantes '4' et '5'
si tu ne passe pas par une conversion string -> numerique,
il faut que tes champs de remplissage txt soient immuables
;H;MM;SS
alors tu peut convertir directement
txt = ";1;24;25"
'1' - 48 => 1 * 3600
(('4'-48) *10 + '2'-48)*60
('2'-48) *10 ° + '5"-48
et somme des 3 resultats
Aide toi, le ciel ou FantasPic t'aidera

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 :

#19 Message par Jérémy » ven. 12 févr. 2016 13:13

Hummmm .... je confussionne !! :cry:

De tête , je stocke chaque valeur de tableau dans mes variables, je les additionnent , et je les affiches sur le PORTD .
Quand je mettais ;32;16;8; sur ma tablette que j’envoie ça en Bluetooth .

J'ai bien a la réception mon PORTD qui affiche les 3 leds (0b0111000) .

Mon le mieux en rentrant je post tout ca.
C'est en faisant des erreurs, que l'on apprend le mieux !!!

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

#20 Message par paulfjujo » ven. 12 févr. 2016 14:22

Là, je pense qu'il n'y aplus aucun rapport avec Heure,minutes,secondes

voila le bout de code qui devrait repondre au plus pres à ta demande
ON SUPPOSE QUE LE FORMAT D'ENVOI EST IMMUABLE ;H;MM;SS , sinon ça ne marche pas et retour à la soluce strok

nota: j'utilise buffer1 comme buffer de reception UART1
et la table Time[3] pour stoker les valeurs H,Mn,Sec
sachant que H est limité à 9 maxi ( car 1 digit seulement)

nota: le 3em parametre seconde commence à l'indice 6 .

Code : Tout sélectionner


     
// 3em methode : avec structure format Buffer immuable  ;H;MM;SS
     //  avec l'exemple ";1;42;25"
       indice=0;
       k=strlen(buffer1);
       Time[0]=buffer1[1]-48;  // maxima =9 !
       Time[1]=(buffer1[3]-48) *10 + buffer1[4]-48;
       Time[2]=(buffer1[6]-48) *10 + buffer1[7]-48;
       // verification stockage valeur numeriques
        for (indice=;indice<3;indice++)
        {
           WordToStr(Time[indice],CRam1);
           strConstRamCpy(txt,"Time[ ] = ");
           *(txt+5)=indice+48;   // indice en ascii
           strcat(txt,CRam1); // rajoute la valeur convertie en ascii prealablement
           UART1_Write_Text(txt);
           CRLF1();
          }
          Somme=(long)Time[0]*3600+ Time[1]*60+Time[2];
          LongToStr(Somme,CRam1);
          strConstRamCpy(txt,"\r\n Somme Time =");
          strcat(txt,CRam1);
          UART1_Write_Text(txt);
          CRLF1();
        strConstRamCpy(txt,"\n End of test \n");
        UART1_Write_Text(txt);
        CRLF1();


ce qui donne sur mon ecran terminal :

Test_HMS_chaine.jpg
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Aide toi, le ciel ou FantasPic t'aidera


Retourner vers « Langage C »

Qui est en ligne

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