Problema lettura e scrittura con smartcard

Salve sono in possesso della seguente smartshield:
http://www.elettroinnova.it/

Ho delle SLE4442,su cui dovrei scrivere e leggere dei dati provenienti da un contapezzi.Una volta inserita la smartcard,bisognera' leggerne il contenuto,e un volta contati i pezzi ,aggiungerli,sovrascrivendo quelli presenti.
La variabile e' di tipo intero: int contatore.
Il mio problema e' che non riesco a capire come leggere e scrivere i dati.Mi spiego meglio:
Analizzando per esempio lo sketch di scrittura ho :

 //write byte to address 0x20
      smartcard.WriteByte4442(0x20,0x50);

dove 0x20 e l'indirizzo di memoria,e 0x50 e' il dato.

WriteByte4442(address,data);

Ho pensato di usare i puntatori, magari a quanto pare non e' possibile,perche' in questo caso non sto "puntando" ad una locazione di memoria "interna" di arduino,almeno cosi' ho capito!Come dovrei fare?

Di seguito gli sketch di lettura e di scrittura delle SLE4442

Ecco lo sketch completo, di scrittura:

/*
  Smartcard Library - WriteCard
 
 Demonstrates the use of a SLE4442 sync smartcard.  The Smartcard
 library works with the Arduino Smartcard shield.
 
 This sketch demonstrates the use of the VerifyPSC4442() and 
 WriteByte4442() functions. Please check the correct PSC code of
 smartcard, otherwise after three incorrect attempts the card
 will be blocked. 
 
 The circuit:
 SmartShield (http://www.elettroinnova.it)
 
 Library originally added 12 Apr 2012
 by Fabio Riscica
  
 This example code is in the public domain.

*/

// include the SPI library:
#include <SPI.h>

//include the Smartcard library
#include <Smartcard.h>

// initialize the library with address of slave select pin
Smartcard smartcard(7);

//convert from hexadecimal to ASCII for display the result 
void HexToAsc(char *c){
	if (((*c&0x0F)>=0)&&((*c&0x0F)<=9))
		*(c+1) = (*c&0x0F)+0x30;
	else
		*(c+1) = (*c&0x0F)+0x37;

	if ((((*c&0xF0)>>4)>=0)&&(((*c&0xF0)>>4)<=9))
		*c = ((*c&0xF0)>>4)+0x30;
	else
		*c = ((*c&0xF0)>>4)+0x37;
}

void setup() {
  // start the serial library:
  Serial.begin(9600);
}

void loop() {
      unsigned char data[16];
      char ascii_data[2];
      unsigned char psc[3];
    
      Serial.print("Wait smartcard insertion... ");
      
      //wait smartcard
      while(!smartcard.IsCardPresent(1)){
        delay(500);  
      }
      Serial.println("done");
      Serial.println();
 
      //reset smartcard
      smartcard.PowerOnATRSC(data);
      
      Serial.println(">> VerifyPSC4442 <<");
      Serial.println();
      
      //check PSC
      psc[0] = 0x17;
      psc[1] = 0x05;
      psc[2] = 0x65;
      data[0] = smartcard.VerifyPSC4442(psc);
      
      switch(data[0]){
        case 0x07 :  
                     break;
        case 0x06 :
                     Serial.println("failed - two attempts remaining");
                     Serial.println();
                     break;
        case 0x04 :
                     Serial.println("failed - one attempt remaining");
                     Serial.println();
                     break;
        case 0x00 :
                     Serial.println("locked");
                     Serial.println();
                     break;                     
      }
            
      Serial.println(">> Write Byte <<");
      Serial.println();

      //write byte to address 0x20
      smartcard.WriteByte4442(0x20,0x50);

      Serial.print("Wait smartcard extraction...");
      
      smartcard.PowerOffSC();

      //wait smartcard extraction
      while(smartcard.IsCardPresent(1)){
        delay(500);  
      }
      Serial.println("done");
      Serial.println();

  }

E quello di lettura:

/*
  Smartcard Library - WriteCard
 
 Demonstrates the use of a SLE4442 sync smartcard.  The Smartcard
 library works with the Arduino Smartcard shield.
 
 This sketch demonstrates the use of the VerifyPSC4442() and 
 WriteByte4442() functions. Please check the correct PSC code of
 smartcard, otherwise after three incorrect attempts the card
 will be blocked. 
 
 The circuit:
 SmartShield (http://www.elettroinnova.it)
 
 Library originally added 12 Apr 2012
 by Fabio Riscica
  
 This example code is in the public domain.

*/

// include the SPI library:
#include <SPI.h>

//include the Smartcard library
#include <Smartcard.h>

// initialize the library with address of slave select pin
Smartcard smartcard(7);

//convert from hexadecimal to ASCII for display the result 
void HexToAsc(char *c){
	if (((*c&0x0F)>=0)&&((*c&0x0F)<=9))
		*(c+1) = (*c&0x0F)+0x30;
	else
		*(c+1) = (*c&0x0F)+0x37;

	if ((((*c&0xF0)>>4)>=0)&&(((*c&0xF0)>>4)<=9))
		*c = ((*c&0xF0)>>4)+0x30;
	else
		*c = ((*c&0xF0)>>4)+0x37;
}

void setup() {
  // start the serial library:
  Serial.begin(9600);
  pinMode(2, OUTPUT);
  
}

void loop() {
      unsigned char data[16];
      char ascii_data[2];
    
      Serial.print("Wait smartcard insertion... ");
      
      //wait smartcard
      while(!smartcard.IsCardPresent(1)){
        delay(500);  
      }
      Serial.println("done");
      Serial.println();
 
      //reset smartcard
      smartcard.PowerOnATRSC(data);
      
      Serial.println(">> ReadByte4442 <<");
      Serial.println();
      
      ascii_data[0] = smartcard.ReadByte4442(0x20);
      HexToAsc(ascii_data);      
    
      if((ascii_data[0] == '5')&&(ascii_data[1] == '0'))
      {
        digitalWrite(2, HIGH);
        Serial.println(">> LED OFF <<");
        Serial.println();
      }
      else
       { 
         digitalWrite(2, LOW);
         Serial.println(">> LED ON <<");
         Serial.println();
      }
      Serial.print("Wait smartcard extraction...");
      
      smartcard.PowerOffSC();

      //wait smartcard extraction
      while(smartcard.IsCardPresent(1)){
        delay(500);  
      }
      Serial.println("done");
      Serial.println();

  }

Se non ho capito male ti servirebbe una funzione per memorizzare un int nella smartcard.

Un int è composto da due byte, quindi devi usare due locazione contigue (ad esempio 0x20 e 0x21) per memorizzare Il LSB (Last Significant Byte) ed il MSB (Most Significant Byte).

Puoi usare le funzioni lowByte() e highByte() per estrarre dall'int i due byte da memorizzare, mentre per l'operazione contraria di lettura puoi ricombinare i due byte letti in un int con questa formula:

IntVal = MSB * 0xFF + LSB;

Allora io ho implementato queste funzioni:
Per la scrittura :

void Scrivi_numero_pezzi ( unsigned int contatore )
{
  unsigned int contatore_locale;
  byte LSB, MSB;
  
  contatore_locale = contatore;

  LSB = lowByte(contatore_locale);
  Serial.println(LSB);
  
  MSB = highByte(contatore_locale);
  Serial.println(MSB);
  // adesso ho il mio unsigned integer (16 bit) diviso in due valori da 8 bit
  
  // ora scrivo nella smartcard
  
        smartcard.WriteByte4442(0x20, LSB);
        smartcard.WriteByte4442(0x21, MSB);
  
  // Scritto in due celle adiacenti un numero (contatore) che al massimo vale 65535!
}

E per la lettura:

unsigned int Leggi_numero_pezzi (void) {
  byte LSB,MSB; 
unsigned int numeropezzi; 
LSB = smartcard.ReadByte4442(0x20); 
Serial.println(LSB);
MSB = smartcard.ReadByte4442(0x21); 
Serial.println(MSB);
numeropezzi = word(MSB,LSB); 
return numeropezzi; }

La chiamata in scrittura e' stata effettuata in questo modo:

if ((distance1<7) && premuto == false) {  // Se la distanza e'minore di 7 comincia a contare
              Contatore_PS ++;  // incrementa contatore
              Timer = millis();  // timer partito/resettato
              premuto = true;
              Serial.print("Contatore PS: ");
              Serial.println(Contatore_PS);
              Scrivi_numero_pezzi(Contatore_PS);
                    }

Mentre per la lettura:

leggi=Leggi_numero_pezzi();
        Serial.println(leggi);

dove :

unsigned int leggi;

Ma non funziona ottengo sempre:

il lettura:
Inserire la simcard prego........OK

SIMCARD VALIDA

80
0
80

in scrittura:
Scelta effettuata : PS
Contatore PS: 1
1
0
Contatore PS: 2
2
0
Contatore PS: 3
3
0
Contatore PS: 4
4
0
Contatore PS: 5
5
0

Cosa sbaglio??

Sarebbe meglio che tu ci inviassi il listato completo e ci facessi capire cosa c'è di sbagliato nei risultati.