Čtečka RFID-RC522, přepis hodnot

Odpovědět
onlyvikastar
Příspěvky: 2
Registrován: 12 kvě 2019, 12:34
Reputation: 0

Čtečka RFID-RC522, přepis hodnot

Příspěvek od onlyvikastar » 12 kvě 2019, 12:59

Dobrý den, již několik dní laboruji s přepisem hodnot na kartě/tagu. Ke komunikaci používám čtečku RFID-RC522. Bohužel jsem zatím nebyl úspěšný.

Jde mi o to, abych dosáhl stavu, kdy budu za pomoci sériové linky měnit čtyři hodnoty (formát: h h h h ) na tagu. Sektor, na který budu ukládat, mám samozřejmě definován. Využívám program z již před vytvořených programu Arduina ReadAndWrite.

Problém je, že pokud zadávám hodnoty přímo v programu je vše v pořádku. Ovšem pokud data zadávám za pomoci příkazu Serial.read(), pak vždy dojde k ''zmizeni hodnoty'' a je zobrazena stará hodnota. Což nechci, a proto se obracím na místní komunitu s žádostí o pomoc.

Předem děkuji.
Přílohy
soucasny_stav_ob2.png
soucasny_stav_ob.png

zbysek
Site Admin
Příspěvky: 125
Registrován: 22 úno 2017, 15:18
Reputation: 0

Re: Čtečka RFID-RC522, přepis hodnot

Příspěvek od zbysek » 30 kvě 2019, 14:59

Dobrý den, při zběžném prohlédnutí vidím následující problém:

Kód: Vybrat vše

dataBlock[0, HEX] = Serial.read();
To HEX je tam nejenom zbytečné, ale hlavně na škodu :)

Co se tedy ve vašem programu děje:
a) HEX je konstanta, která je nastavená na hodnotu 16.
b) V C/C++ existuje operátor , (čárka). Ten funguje tak, že se postupně vyhodnocuje výraz a má hodnotu, která je za čárkou.

Třeba:

Kód: Vybrat vše

byte a;
a = 1, 2;
dopadne tak, že a bude mít hodnotu 2.

U vás tedy dojde k následujícímu:

Kód: Vybrat vše

dataBlock[0, HEX] = Serial.read();

se dá přepsat jako 

dataBlock[0, 16] = Serial.read();

a to se dá dále přepsat jako 

dataBlock[16]= Serial.read();

Takže se do pole dataBlock vždy zapíše na index 16, což není chování, kterého chcete dosáhnout :)

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 6 hostů