Grazie lesto.
Ora mi metto un poco in pausa

Comunque la tua soluzione è arrivata mentre stavo approcciando alla funzione che aveva suggerito Paolop
la strtol della quale avevo trovato un codicino che funzionava e stavo cominciando ad capirla per poi
adattarla alle mie esigenza. Sembra semplice !!
Appena arrivata la tua soluzione ho smesso di studiare

e tengo la tua

La metto comunque in questo thread in caso servisse:
/* strtol example */
#include <stdio.h>
#include <stdlib.h>
int main ()
{
char szNumbers[] = "2001 60c0c0 -1101110100110100100000 0x6fffff";
char * pEnd;
long int li1, li2, li3, li4;
li1 = strtol (szNumbers,&pEnd,10);
li2 = strtol (pEnd,&pEnd,16);
li3 = strtol (pEnd,&pEnd,2);
li4 = strtol (pEnd,NULL,0);
printf ("The decimal equivalents are: %ld, %ld, %ld and %ld.\n", li1, li2, li3, li4);
return 0;
}
Per completezza metto anche la tua funzione finita che ......... in futuro non si sa mai

void Midi_Send(byte cmd, byte data1, byte data2) {
Serial.write(cmd);
Serial.write(data1);
Serial.write(data2);
}
byte strConv(String str)
{
byte a =0;
/*
Serial.print("CHAR 2: ");
Serial.println(str.charAt(2));
Serial.print("CHAR 3: ");
Serial.println(str.charAt(3));
*/
if (str.charAt(2) >= '0' && str.charAt(2) <= '9'){ //estraggo 'B'
a = str.charAt(2) - '0';
}else{
a = str.charAt(2) - 'A'+10;
}
a = a << 4; //muovo il valore di 4 bit a sinistra
if (str.charAt(3) >= '0' && str.charAt(3) <= '9'){ //estraggo '1'
a += str.charAt(3) - '0';
}else{
a += str.charAt(3) - 'A'+10;
}
return a;
}
Grazie ancora.
Alla prossima, Alberto