Sari la conținut
ELFORUM - Forumul electronistilor

Manipulare date pe serial/rs232


moro

Postări Recomandate

Va salut, vreau sa imi fac o telecomanda pentru o jucarie, folosind un pic18f pe post de emitator si un stm32f4 pe post de "jucarie".

Legatura intre cele doua am zis ca le fac prin module wireless care lucreaza pe serial cu microcontrolerul.

Partea proasta este ca n-am lucrat cu serial niciodata...

 

Aici vin cu o intrebare... cum este mai bine sa trimit datele? In format "charstring" sau hex?

 

Am incercat cu strings

 

Dau un exemplu de 4 canale pentru telecomanda, prin care trimit valori de la 00 la 99, fiecare canal este format din id si valoare id1 - xx, id2 -xx, id3-xx, id4-xx.

 

Toate astea imi vin pe serial intr-un buffer char

 

char buffer[21]="id166id233id322id488"

 

char *c1 = strstr(bfr, "id1");  // cauta id1 in buffer-ul meu si il aloca in c1

 

int pos1=c1-bfr; // determina pozitia lui id1 in buffer, in cazul de fata il gaseste pe id1 la pozitia 0

 

Stiind astfel pozitia lui id1 care este 0 (pos1==0) , atunci  pot deduce ca buffer[pos1+3] si buffer[pos1+4] sunt caracterele care contin valoarea ce o vreau de pe id1, respectiv 66

 

In cazul de fata m-am blocat la faza cu asignarea separata pentru buffer[3] si buffer[4], pe care vreau sa-i iau separat ca si char, apoi sa-i concatenez.

Adica ceva de genul

 

char aa=buffer[3]

char bb=buffer[4]

char zz =strcat(aa, bb); // il adaug pe bb la sfarsitul lui aa, apoi le bag in zz

 

 

 

 

Link spre comentariu
  • Răspunsuri 1
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

Zile populare

Top autori în acest subiect

De ce te complici degeaba cu string? De ce nu trimiti direct binar?De ce mai ai nevoie de id daca informatia e redundanta?(pozita e tot acolo?) "id66332288" e mult mai scurt dar nici asta nu e cea mai buna solutie deoarece trebuie convertit din string in binar si trebuie trimis 10 biti.Daca trimit direct binar de ex F066332288 direct in binar (5 biti) F0 reprezinta header, (eventual inca una pt crc ca sa sti ca datele sunt corecte),asa nu trebuie convertit nimic.Cauti F0 si bagi direct in variabaila unsigned char id1=buffer[pos+1];Iar daca lungimea variaza si variabilele sunt doar 0-99 (sub 127) atunci se poate folosi msb pt. a da id-ul dorit urmat de variabala.

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări