leggere carta regionale dei servizi

Ciao, vorrei leggere i dati dalla mia carta regionale dei servizi, ho fatto qualche tentativo ma la cosa è più complessa del previsto, almeno per me.
Ho questo lettore di card http://en.china-creator.com/product_show.asp?id=472 qui un po’ di doc Loading.... Ha un’interfaccia seriale con livelli logici TTL quindi posso collegarla direttamente ad Arduino e comunicare con esso.

Qualcuno ha esperienza in materia?

La prima operazione che stò provando a fare è il RESET, da quello che vedo Loading... dovrei inviare il comando 0x02 0x00 0x02 0x30 0x30 0x03 BCC . Ho provato in questo modo

void setup() {
  Serial.begin(9600);
  Serial1.begin(9600);
}

void loop() {

  //et_prepareMessage();
  Serial1.write("02");
  Serial1.write("00");
  Serial1.write("02");
  Serial1.write("30");
  Serial1.write("30");
  Serial1.write("03");      
  Serial1.write(getCheckSum("0200020x300x300x03"));
  
  if (Serial1.available()) {
    int inByte = Serial1.read();
    Serial.write(inByte); 
    Serial1.write('0x05');
  }
  delay(1000);
}

void et_prepareMessage() {
  buffer[0] = '0x02';
  buffer[1] = '0x00';
  buffer[2] = '0x02';
  buffer[3] = '0x30';
  buffer[4] = '0x30';
  buffer[5] = '0x03';
  buffer[6] =   getCheckSum(buffer);
}

int getCheckSum(char *string) {
  int i;
  int XOR;
  int c;
  // Calculate checksum ignoring any 

ma non ritorna niente.
Stò usando un arduino mega adk ed il lettore è collegato ai pin 18(TX1) e 19(RX1).
Qualcuno sa darmi qualche dritta?
Grazies in the string
  for (XOR = 0, i = 0; i < strlen(string); i++) {
    c = (unsigned char)string[i];
    if (c == ‘*’) break;
    if (c != ’


ma non ritorna niente.
Stò usando un arduino mega adk ed il lettore è collegato ai pin 18(TX1) e 19(RX1).
Qualcuno sa darmi qualche dritta?
Grazie) XOR ^= c;
  }
  return XOR;
}

ma non ritorna niente.
Stò usando un arduino mega adk ed il lettore è collegato ai pin 18(TX1) e 19(RX1).
Qualcuno sa darmi qualche dritta?
Grazie

non puoi fare la write con delle stringhe, così stai stampando l'indirizzo in ram della stringa.

tu vuoi inviare quel valore ESADECIMALE quindi:

Serial1.write(0x02);
Serial1.write(0x00);
Serial1.write(0x02);
Serial1.write(0x30);
Serial1.write(0x30);
Serial1.write(0x03);

ci pensa il compilatore a trasformare il valore HEX in byte (anzi, in int, quindi mi sa che devi fare il cast a (byte), se è implementata la write(int), altrimenti il cast avviene in automatico e non devi far nulla )

Grazie. Per il calcolo del checksum devo passare la stringa esatto?

ni, dovresti passare la stringa coposta dai caratteri corrispondeti a quei valori esadecimali.

void et_prepareMessage() {
  buffer[0] = 0x02;
  buffer[1] = 0x00;
  buffer[2] = 0x02;
  buffer[3] = 0x30;
  buffer[4] = 0x30;
  buffer[5] = 0x03;
  buffer[6] =  getCheckSum(buffer);
}

notare la mancanza delle ', che trasformava il contenuto in un carattere, il fatto che tra '' ci fossero più faratteri faceva un casino osceno (sommava il valore dei caratteri)