Stránka 1 z 1

Problém zobrazeni znaku v obsahu FRID (arduino, C)

Napsal: 26 zář 2019 17:50
od Mr_Egot
Nazdar vlčáci !

[Pouzity material] :
- Arduino UNO
- RFID - RC522
(vyzkouseno na dvou modelech Fruiduino / FreeNove + ELEGOO)

- Muj problém spociva ve zobrazeném vysledném obsahu, ktery na misto zobrazeni spravnych znaku zobrazuje znaky jako "wׅa⸮⸮(⸮
" snad mi rozumite. Coz mi nasledovne vrati neco jako :
JGIE002⸮*&Iv⸮2⸮w
JGIE002⸮*&Iv⸮2⸮
atd. Jen ta prvni polovina JGIE002 se zda ze je zobrazena korektne.

V "seriovém monitoru" to pak vypada nejak nasledovne :
Obrázek

[Ucel]
- Ceho bych potreboval dosahnout, je prekopirovat mou klicenku k otvirani dveri, jelikoz jsem jednu jiz stratil, chtel bych si naklonovat tu jednu zbyvajici. Jde o takovou tu modrou placku nebo jak to nazvat k otvirani domovnich dveri (RFID cipova karta / klicenka). Problém je ale v tom, ze ji nedokazu korektne precist, jelikoz mi vraci ruzné 'chars'.
Obrázek

- Je-li potreba, dokladam i pouzity kod:

Kód: Vybrat vše

//Mr.Egot https://pc-help.cnews.cz
#include <SPI.h>
#include <RFID.h>
//D10: deklarace pin SDA. D9: pin RST
RFID rfid(10,9);   
//4-bytové sériové cislo karty -- paty  bajt je kontrolni bajt
unsigned char serNum[5];
unsigned char status;
unsigned char str[MAX_LEN];
unsigned char blockAddr; //Vybrat  adresu provozniho bloku: od 0 do 63     
 
unsigned char writeDate[16] = "Vytvorit promenou ktera ulozi predchozi nacteni karty cislo 1"
//16 sektoru - délka  v kazdém sektoru je 6 bajtu
unsigned char sectorKeyA[16][16] = {
  {  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF  } ,
  {  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF  } ,
  {  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF  } ,
  {  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF  } ,
  {  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF  } ,
  {  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF  } ,
  {  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF  } ,
  {  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF  } ,
  {  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF  } ,
  {  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF  } ,
  {  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF  } ,
  {  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF  } ,
  {  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF  } ,
  {  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF  } ,
  {  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF  } ,
  {  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF  } ,
  };
void setup()
{
  Serial.begin(9600);
  SPI.begin();
  rfid.init();
}
void loop()
{
  rfid.findCard(PICC_REQIDL, str);
    if (rfid.anticoll(str) == MI_OK){     
      Serial.print("ID pouzité karty je:  ");
      for(int i = 0; i < 4; i++){
        Serial.print(0x0F & (str[i] >> 4),HEX);
        Serial.print(0x0F & str[i],HEX);
      }
      Serial.println("");
      memcpy(rfid.serNum,str,5);
    }
  rfid.selectTag(rfid.serNum);
  /*
  Zvolit zapis nebo cteni
  writeCard(4); //Zapis na ctecku karet
  */
  readCard(4); //Nacteni z ctectky karet
  rfid.halt(); //Prechod do stavu spanku
}
//Zapis na kartu
void writeCard(int blockAddr){ 
  if (rfid.auth(PICC_AUTHENT1A, blockAddr, sectorKeyA[blockAddr/4], rfid.serNum) == MI_OK) 
  {
    //status = rfid.write((blockAddr/4 + 3*(blockAddr/4+1)), sectorKeyA[0]);
    Serial.print("Nastavit novy obsah karty / upravit data sektoru: ");
    Serial.println(blockAddr/4,DEC);
    if(rfid.write(blockAddr, writeDate) == MI_OK){
      Serial.println("Zapis na kartu OK!");
    }
  }
}
//Cteni z karty
void readCard(int blockAddr){
  if ( rfid.auth(PICC_AUTHENT1A, blockAddr, sectorKeyA[blockAddr/4], rfid.serNum) == MI_OK) 
  {
    Serial.print("Nacteni block Addr chipu sektor cislo: ");
    Serial.println(blockAddr,DEC);
    if( rfid.read(blockAddr, str) == MI_OK){
      Serial.print("Zobrazeni ulozenych dat: ");
      Serial.println((char *)str);
    }
  }
}


Predem dekuji za mozné navrhy ci pomoc.

Mr.Egot

Re: Problém zobrazeni znaku v obsahu FRID (arduino, C)

Napsal: 26 zář 2019 20:18
od faraon
A jaké mají být ty "správné" znaky? Nepatří do jiné znakové sady?

Zkus místo řetězce vypsat ASCII kódy jednotlivých znaků, ať je vidět co to vlastně obsahuje.

Re: Problém zobrazeni znaku v obsahu FRID (arduino, C)

Napsal: 26 zář 2019 21:15
od Mr_Egot
faraon píše:Zkus místo řetězce vypsat ASCII kódy jednotlivých znaků, ať je vidět co to vlastně obsahuje.


Dekuji.
Mate nejaky navrh, jak bych to mohl provést ?
Mozna je to tim, ze uz to dlouho zkousim, ale nejak se mi nedari.
Nebranim se tomu , kdyby to mohlo byt s mensi ukazkou (upravou) kodu :-)

Re: Problém zobrazeni znaku v obsahu FRID (arduino, C)  Vyřešeno

Napsal: 27 zář 2019 05:26
od faraon
V normálním Céčku by to šlo takhle:

Kód: Vybrat vše

for (i=0; str[i]; ++i)
    printf("%d\t%c\n", str[i], str[i]);

Koukni do manuálu a najdi způsob, jak na tu sériovou linku vypsat číslo, hodnotu nějakého bajtu.

Re: Problém zobrazeni znaku v obsahu FRID (arduino, C)

Napsal: 27 zář 2019 17:20
od Mr_Egot
Zabralo to !
Mockrat dekuji za pomoc s vyresenim mého problému.

Preji Vam pekny zbytek dne.