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 ---
- 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 ---
Modérateur : Jérémy
Donner un Nom evolutif à une variable
Donner un Nom evolutif à une variable
-
Jérémy

Administrateur du site- Messages : 2750
- Âge : 46
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
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];
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];
Donner un Nom evolutif à une variable
Donner un Nom evolutif à une variable
- paulfjujo

Maître- Messages : 3262
- Âge : 75
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonsoir,
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..
source et Hex pour un 18F45K22 UART1 8MHz
;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..
source et Hex pour un 18F45K22 UART1 8MHz
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Donner un Nom evolutif à une variable
-
Jérémy

Administrateur du site- Messages : 2750
- Âge : 46
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
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) .
Donner un Nom evolutif à une variable
- paulfjujo

Maître- Messages : 3262
- Âge : 75
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
.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
Donner un Nom evolutif à une variable
-
Jérémy

Administrateur du site- Messages : 2750
- Âge : 46
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
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
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 .
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
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 .
Donner un Nom evolutif à une variable
- paulfjujo

Maître- Messages : 3262
- Âge : 75
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
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
Donner un Nom evolutif à une variable
-
Jérémy

Administrateur du site- Messages : 2750
- Âge : 46
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Hummmm .... je confussionne !!
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.
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.
Donner un Nom evolutif à une variable
- paulfjujo

Maître- Messages : 3262
- Âge : 75
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
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 .
ce qui donne sur mon ecran terminal :
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=0 ;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 :
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 5 invités


