Arduino a zadrhel zacatecnika

Pavel Kutina hw na prelude.cz
Neděle Březen 1 22:45:10 CET 2015


Tenhle zpusob konverze mne nenapadnul (a mel a mohl), za to nemuze Cecko 
ano Arduino, ale hlava...

Diky, ty posuvy budou to prave, fakt nepremyslim, dal uz je to jednoduche.

Pavel Kutina



Dne 1.3.2015 v 22:26 Petr Labaj napsal(a):
> Aniž bych znal knihovny Arduina, tak jste si odpověděl sám.
> Pokud chcete posílat data ven v binárním tvaru, a pokud máte
> k dispozici jen knihovní funkci pro vyslání jednoho byte (Serial.write),
> tak ji prostě musíte v cyklu zavolat tolikrát, kolik byte potřebujete poslat.
>
> Takže jediný problém je, jak z původní 4-bytové proměnné udělat
> 4 jednobytové. Tak to můžete udělat snadni tak, že ty paměťovou
> oblast, kde je to uloženo, prostě přetypujete. Takže procesor místo
> po 4 byte najednou to bude brát po jednom. Jenže je to tak trochu
> prasácké, protože záleží na tom, jaké máte v tom stroji indiány
> (tedy jaká je endianita).
> Pokud to chcete udělat čistě (i za cenu pomalejšího zpracování),
> tak prostě posuvy vymlátíte z toho intu 4 chary, nějak takhle:
> c1 = i & 0xff;
> c2 = (i >> 8) & 0xff;
> c3 = (i >> 16) & 0xff;
> c4 = (i >> 24) & 0xff;
>
> Nebo lépe:
> c[0] = i & 0xff;
> atd.
>
> PL
>
> *********************************
>
> From: "Pavel Kutina" <hw na prelude.cz>
> To: <hw-list na list.hw.cz>
> Sent: Sunday, March 01, 2015 10:01 PM
> Subject: Arduino a zadrhel zacatecnika
>
>
> Zdravim,
>
> C neni muj kamarad a to ani v Arduinu... Resim nasledujici problem (prosim,
> nebijte mne, fakt vim o C stale dost malo, takze je velmi pravdepodobne, ze
> se ptam na trivialitu a unika mi neco zakladniho):
>
> Mam promennou (int), v ni nejakou namerenou hodnotu.
> Mam seriovy kanal, pres ktery bych tu hodnotu rad dostal ven.
> Kdyz pouziju Serial.print(promenna), tak mi to do serioveho kanalu vysype to
> jako soubor znaku.
>
> tedy:
>
> uint32_t pokus = 65;
> Serial.print(pokus);
>
> vystupem na seriovem kanalu jsou znaky '6', '5'.
>
> Ano, existuje parametr pro print ve tvaru
>
> Serial.print(pokus, HEX);
>
> pak jsou vystupem znaky '4', '1';
>
> Trochu problem je, ze ja bych si rad obsah te promenne nejdriv rozebral po
> bajtech, pridal jeste nejaky bitovy flag, potom udelal kontrolni soucet, ten
> prilepil k puvodni zprave  a pak to cele odeslal v hex pres seriak do sveta,
> jak to tak vidim, tak tu nejjednodussi metodu odeslani HEX cisla asi
> nepouziju.
>
> Variantou je Serial.write(char);
> Ten samozrejme v tom predchozim prikladu odesle znak 'A', tedy odesle 0x41;
>
> Umi ale odeslat jen bajt po bajtu, takze bych potreboval nejak zkonvertovat
> tu hodnotu do hex, nahodit jeste par bitu jako indikator, pak ji bajt po
> bajtu nejak zCRCat, prilepit CRC k tomu puvodnimu cislu a zase bajt po bajtu
> poslat ven.
>
> Zjevne mi neco zasadniho unika (navic jsem silne nastydly, takze hlava moc
> nefunguje) - napadne vas nejake (pokud mozno transparentni a pochopitelne i
> pro blbce, pointer na pointer pointeru jsem nepobral dodnes) reseni? Na
> druhe strane si to budu resit v Pascalu, tam snad vim, jak na to, ale na
> vysilaci mam Arduino a tenhle divny jazyk...
>
> Diky za kazdy kopanec spravnym smerem.
>
> Pavel Kutina
>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
>


Další informace o konferenci Hw-list