[RISOLTO] udp.read caratteri strani, come interpretarli?

Mi autorispondo...dopo vari tentativi ecco il codice completo e funzionante... ho anche aggiunto la possibilità di collegarmi tramite browser (con una paginetta html attualmente scarna ma giusto per avere un idea di cosa si può fare...)

//Includo le librerie necessarie
#include <SPI.h>
#include <Ethernet.h>
#include <EthernetUdp.h>


//Configurazione di rete
byte mac[] = { 0xAA, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress IP(192, 168, 1, 250);
//Porta UDP per la ricezione dei MagicPacket
unsigned int localPort = 9;
EthernetUDP Udp;
const int MAGIC_PACKET_SIZE = 102;
char packetBuffer[MAGIC_PACKET_SIZE];
//Porta utilizzata per il web server
EthernetServer server(80);


//Pin digitali usati per leggere lo stato di accensione del pc e per inviare il segnale di accensione
int on_PIN = 2;
int check_PIN = 3;
//Variabili utilizzate per il conteggio dei MagicPacket e per la gestione del web server
unsigned long previousMillis = 0;
#define max_wait 5000
byte flag = 0;
boolean error = false;
String state = "";
String readString;


void setup() {
  //Avvio la connessione di rete e imposto Arduino in ascolto
  Ethernet.begin(mac, IP);
  Udp.begin(localPort);
  server.begin();
  //Avvio il monitor seriale per debug
  //Serial.begin(9600);
  //Imposto come ingresso il pin di controllo stato del pc e come uscita LOW per non inviare segnali di accensione quello di accensione
  pinMode(check_PIN, INPUT);
  pinMode(on_PIN, OUTPUT);
  digitalWrite(on_PIN, LOW);
}


void loop() {
  //////////////////
  /// WEB SERVER ///
  //////////////////
  //Imposto il server in ascolto di eventuali client
  EthernetClient client = server.available();
  if (client) {
    //Una richiesta http termina con una linea vuota, uso la variabile per identificare il termine di una richiesta
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        //Leggo la richiesta http un carattere alla volta per analizzare la URL richiesta
        if (readString.length() < 100) {
          readString += c;
        }
        //Ricevendo una riga vuota, la richiesta http è terminata e possiamo mandare la risposta
        if (c == '\n' && currentLineIsBlank) {
          //Se ricevo la stringa wta=0 vuol dire che è stato lanciato il comando per lo spegnimento/sospensione remota del pc
          if (readString.indexOf("index.php?wta=0") > 0) {
            if (digitalRead(check_PIN) ==  LOW) state = "Pc gia' spento!";
            else {
              state = "Comando inviato, attendere lo spegnimento!";
              //Imposto il pin d'accensione come HIGH per un tempo simile alla pressione di un pulsante
              digitalWrite(on_PIN, HIGH);
              delay(300);
              //Rimetto il pin come LOW, ormai il pc si è acceso
              digitalWrite(on_PIN, LOW);
            }
          }
          //Se ricevo la stringa wta=1 vuol dire che è stato lanciato il comando per l'accensione remota del pc
          else if (readString.indexOf("index.php?wta=1") > 0) {
            if (digitalRead(check_PIN) ==  LOW) {
              state = "Comando inviato, attendere l'accensione!";
              //Imposto il pin d'accensione come HIGH per un tempo simile alla pressione di un pulsante
              digitalWrite(on_PIN, HIGH);
              delay(300);
              //Rimetto il pin come LOW, ormai il pc si è acceso
              digitalWrite(on_PIN, LOW);
            }
            else state = "Pc gia' acceso!";
          }
          //La stringa check.php controlla lo stato del pc e restituisce la risposta html
          else if (readString.indexOf("check.php") > 0) {
            if (digitalRead(check_PIN) ==  LOW) state = "Pc attualmente spento!";
            else state = "Pc attualmente acceso!";
          }
          //Se non è stato trovata nessuna stringa compatibile con i comandi riconosciuti, genera un errore
          else error = true;
          //Genera l'output considerando eventuali errori altrimenti fornendo lo stato della serranda dopo un movimento o per un semplice controllo
          if (error == false) client.println("HTTP/1.0 200 OK");
          else client.println("HTTP/1.0 404 Not Found");
          client.println("Content-Type: text/html");
          client.println("Connection: close");
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html><body>");
          if (error == false) client.println(state);
          client.println("</body></html>");
          break;
        }
        //Controllo se ho ricevuto una riga vuota per inviare poi la risposta
        if (c == '\n') {
          currentLineIsBlank = true;
        }
        else if (c != '\r') {
          currentLineIsBlank = false;
        }
      }
    }
    //Attendi per la fine della trasmissione dei dati e chiudi la connessione
    delay(1);
    client.stop();
    //Pulisci la variabili per le prossime letture
    readString = "";
    error = false;
  }
  //////////////////
  // MAGIC PACKET //
  //////////////////
  //Controllo ed azzeramento a tempo della variabile in cui viene memorizzata la ricezione del pacchetto per lo spegnimento/sospensione
  if ((flag == 1) && (millis() - previousMillis > max_wait)) flag = 0;
  //Controllo la dimensione del pacchetto ricevuto
  int packetSize = Udp.parsePacket();
  if (packetSize) {
    /*Serial.print("Ricevuto Magic Packet dall'IP: ");
    IPAddress remote = Udp.remoteIP();
    for (int i = 0; i < 4; i++) {
    Serial.print(remote[i], DEC);
    if (i < 3) {
    Serial.print(".");
    }
    }
    Serial.print(", porta: ");
    Serial.println(Udp.remotePort());
    */
    Udp.read(packetBuffer, MAGIC_PACKET_SIZE);
    //Serial.println("Contenente:");
    byte mac2[] = {
    };
    byte I2 = 0;
    for (byte I = 6; I < 12; I ++) {
      //Serial.print(packetBuffer[I], HEX);
      //Serial.print("\t");
      mac2[I2] = packetBuffer[I];
      if (mac[I2] != mac2[I2]) break;
      I2++;
      //Se il Magic Packet contiene il mac address di questa scheda di rete, controllo lo stato del pc ed invio il comando di accensione/spegnimento/sospensione
      //Se il confronto è risultato positivo per tutte e 6 le coppie vuol dire che il MAC address è quello di Arduino
      if (I2 == 6) {
        //Se il computer è spento e quindi il check_PIN non riceve tensione, accendi il pc
        if (digitalRead(check_PIN) ==  LOW) {
          //Imposto il pin d'accensione come HIGH per un tempo simile alla pressione di un pulsante
          digitalWrite(on_PIN, HIGH);
          delay(300);
          //Rimetto il pin come LOW, ormai il pc si è acceso
          digitalWrite(on_PIN, LOW);
        }
        //Se invece il computer è già acceso, ignora il primo pacchetto ma memorizane l'arrivo e manda il comando di spegnimento/sospensione all'arrivo di un secondo pacchetto in un determinato lasso di tempo
        else {
          if (flag == 0) {
            previousMillis = millis();
            flag = 1;
          }
          else {
            //Imposto il pin d'accensione come HIGH per un tempo simile alla pressione di un pulsante
            digitalWrite(on_PIN, HIGH);
            delay(300);
            //Rimetto il pin come LOW, ormai il pc si è acceso
            digitalWrite(on_PIN, LOW);
            flag = 0;
          }
        }
      }
    }
  }
}