Ho dovuto per forza usare il char grazie .... fatto.
Però mi nasce un altro problema, i case non sono funzioni separate a quanto pare le variabili si disturbano tra loro (diciamolo in termini terra terra)
String Dbit = parz.substring(5,6)+"0";
char thisChar[Dbit.length()];
Dbit.toCharArray(thisChar, Dbit.length()) ;
byte a = atoi(thisChar); //trovo l'intero
char char_lett = parz.charAt(4); // carattere alla posizione 4
switch (char_lett)
{
case 'A':
byte my_port = PINA;
byte B[] = {22,23,24,25,26,27,28,29}; //pin corrispondenti al PORT_A
if(bitRead(PORTA, a) == 0) bitWrite(my_port, a, 1); else bitWrite(my_port, a, 0);
if(bitRead(DDRA, a) == 0) BitChange(Port[0], my_port, B, 0); else PORTA = my_port;
break;
case 'C':
byte my_port = PINC;
byte B[] = {37,36,35,34,33,32,31,30}; //pin corrispondenti al PORT_C
if(bitRead(PORTC, a) == 0) bitWrite(my_port, a, 1); else bitWrite(my_port, a, 0);
if(bitRead(DDRC, a) == 0) BitChange(Port[2], my_port, B, 2); else PORTC = my_port;
break;
case 'D':
byte my_port = PIND;
byte B[] = {21,20,19,18,99,99,99,38}; //pin corrispondenti al PORT_D
if(bitRead(PORTD, a) == 0) bitWrite(my_port, a, 1); else bitWrite(my_port, a, 0);
if(bitRead(DDRD, a) == 0) BitChange(Port[3], my_port, B, 3); else PORTD = my_port;
break;
case 'G':
byte my_port = PING;
byte B[] = {41,40,39,99,99,99,99,99}; //pin corrispondenti al PORT_G
if(bitRead(PORTG, a) == 0) bitWrite(my_port, a, 1); else bitWrite(my_port, a, 0);
if(bitRead(DDRG, a) == 0) BitChange(Port[5], my_port, B, 5); else PORTG = my_port;
break;
/*
case 'E':
case 'H':
ecc...*/
}
se li separo in singoli void l'array b[] lavora bene.
Questi byte B[] = {n,n,n,n,n,n,n,n}; dichiarati all'inizio sketch mi occuperebbero 72k messi così ne prendo 8 solo quando mi serveno
Ora chiedo è possibile usare un #define che non mi occupi la mem flash riservata alle variabili?
ciao