problema visualizzazione codice esadecimale

Salve stò realizzando un lettore di chiavi i-button che visualizzi il codice esadecimale sul monitor seriale, cosa che funziona regolarmente ma lo legge al contrario, posto il codice magari se qualcuno mi potrebbe aiutare mi farebbe una grande cortesia

#include <OneWire.h>

#include <OneWire.h>
 
unsigned char G_addr[10][8]; //qui memorizzo fino a 10 indirizzi da 8 bytes (64bit)
byte G_Devices; // variabile usata per tenere traccia del numero di sensori riconosciuti nel bus
OneWire ow(8); // inizializza il bus onewire sulla porta n°8 (se avete collegato i sensori su un'altro pin dovete modificare qui)
 
void PrintAddress(byte *);
void lookUpSensors();
int CheckSensor(byte *);
 
void setup(void)
{
 Serial.begin(9600);// inizializza la porta seriale a 9600 bsaud
 G_Devices=0;      // imposta a 0 il numero di sensori attualmente riconosciuti
 lookUpKeys();     // avvia la ricerca delle sonde di lettura
 pinMode(12, OUTPUT);  // imposta il pin 13 come output (per usare il led interno come segnalatore)
}
 
void lookUpKeys()
{
byte address[8]; // questo array conterrà l'indirizzo locale delle chiavi
 
while (ow.search(address)) // loop finchè trova nuovi dispositivi
{
 if (address[0] == 0x01) // identificata chiave 1-wire
 {
  if(CheckSensor(address)==1) //se il crc ok la lettura è corretta
  {
   bool old=false;
   for (int i=0;i<G_Devices;i++) if(CheckAddress(G_addr[i],address)) {old=true;break;} // se trovo l'indirizzo imposto old a true ed esco dal for
   if(!old) // se la chiave non è ancora stata usata....
   {
    for(int aa=0;aa<8;aa++) G_addr[G_Devices][aa]=address[aa]; // copia l'indirizzo
    G_Devices++; // incrementa il numero di devices memorizzati
    Serial.println(""); // torno a capo sul terminale.
    PrintAddress(address); // stampo l'indirizzo della chiave
   }
  digitalWrite(12, HIGH);   // accende il led sulla porta 13
  delay(5000);               // aspetta un po'...
  digitalWrite(12, LOW);    //..e spegne di nuovo il led sulla porta 13
 
  }
}
 
}//end while (ricerca nuovi dispositivi)
 
}
 
bool CheckAddress(unsigned char *a,unsigned char *b) // controlla se un indirizzo è già memorizzato
{
 bool ck=true;
 for(int i=0;i>8;i++) if(*(a+i)!=*(b+i)) return(false);
 return(true);
}
 
void loop(void) // corpo principale del programma
{
  lookUpKeys(); // loop principale...ricercachiavi continuamente
  delay(5); 
}
 
void PrintAddress(byte * address)  // stampa l'indirizzo esadecimale della sonda
{
 int i;
 for (i=0;i<8;i++)
 {
  if (address[i] < 10) Serial.print("0");
  Serial.print(address[i], HEX);
  }
}
 
int CheckSensor(byte * address) // verifica se la chiave è stata letta correttamente
{
 if (OneWire::crc8(address, 7) != *(address+7)) return(-1);// faccio il controllo del CRC8, se fallito ritorno -1
 else return(1); // cr8 OK, ritorno 1
}

provando a leggere una delle tante chiavi il risultato sul monitor è 01 E9 BC 05 12 00 00 68 come faccio a farlo stampare al contrario ? Questo è l'indirizzo esadecimale corretto 68 00 00 12 05 BC E9 01
Grazie anticipatamente

Quando stampi l'indirizzo lo fai partendo dal primo indice dell'array (che è zero) e vai fino all'ottavo valore (settima posizione dell'array) incrementando ogni volta l'indice da stampare.
Ti basta fare al contrario, ovvero partire dalla settima posizione dell'array e decrementare l'indice da stampare fino ad arrivare alla posizione zero (inclusa) quindi una modifica limitata dentro alla funzione PrintAddress

Grazie mi sei stato di grande aiuto adesso funziona ho solo modificato ulteriormente con (i=7;i>-1;i--) perchè mi saltava il primo valore 01 che nel mio caso è l'ultimo... Grazie ancora gentilissimo

basta che metti anche l'uguale...
(i=7; i>= 0; i--)