Cremona
Offline
Full Member
Karma: 2
Posts: 146
Arduino rocks
|
 |
« on: April 26, 2012, 05:55:27 am » |
Buongiorno, Se ho una stringa che contiene 0xB0 come posso convertirla in byte per poterla spedire con serial.write ?
Grazie, Alberto
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Tesla Member
Karma: 83
Posts: 8233
:(){:|:&};:
|
 |
« Reply #1 on: April 26, 2012, 06:12:00 am » |
salti i primi 2 caratteri che non ti servono. poi fai
//attenzione usare solo lettere masiuscole, non c'è controllo dell'input byte a =0; stringa [4] = "0xB1"; if (stringa[2] >= '0' && stringa[2] <= '9'){ //estraggo 'B' byte = stringa[0] - '0'; }else{ byte = stringa[0] - 'A'; } byte = byte << 4; //muovo il valore di 4 bit a sinistra if (stringa[3] >= '0' && stringa[3] <= '9'){ //estraggo '1' byte += stringa[0] - '0'; }else{ byte += stringa[0] - 'A'; } Serial.write (byte);
EDIT: corretti i segni delle if
|
|
|
|
« Last Edit: April 26, 2012, 07:41:12 am by lesto »
|
Logged
|
|
|
|
|
Cremona
Offline
Full Member
Karma: 2
Posts: 146
Arduino rocks
|
 |
« Reply #2 on: April 26, 2012, 07:07:38 am » |
Grazie lesto. Come si fa a creare una funzione che entrando una stringa mi ritorni il byte. Funzioni con ritorno valori non ne ho mai fatte  Grazie, Alberto
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Tesla Member
Karma: 83
Posts: 8233
:(){:|:&};:
|
 |
« Reply #3 on: April 26, 2012, 07:41:59 am » |
bhe, direi che puoi impararlo da solo  p.s. ho corretto un errore nelle if
|
|
|
|
|
Logged
|
|
|
|
|
Cremona
Offline
Full Member
Karma: 2
Posts: 146
Arduino rocks
|
 |
« Reply #4 on: April 26, 2012, 08:26:10 am » |
Semmai era così !! //attenzione usare solo lettere masiuscole, non c'è controllo dell'input byte a =0; stringa [4] = '0xB0'; if (stringa[2] >= '0' && stringa[2] <= '9'){ //estraggo 'B' a = (stringa[0] - '0'); }else{ a = stringa[0] - 'A'; } a = a << 4; //muovo il valore di 4 bit a sinistra if (stringa[3] >= '0' && stringa[3] <= '9'){ //estraggo '1' a += stringa[0] - '0'; }else{ a += stringa[0] - 'A'; } Serial.write (byte);
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Tesla Member
Karma: 83
Posts: 8233
:(){:|:&};:
|
 |
« Reply #5 on: April 26, 2012, 08:41:30 am » |
Semmai era così !!
non vedo alcuna differenza (a parte una parentesi). Invece sono sbagliati gli indici! //attenzione usare solo lettere masiuscole, non c'è controllo dell'input byte a =0; stringa [4] = '0xB0'; if (stringa[2] >= '0' && stringa[2] <= '9'){ //estraggo 'B' a = stringa[2] - '0'; }else{ a = stringa[2] - 'A'; } a = a << 4; //muovo il valore di 4 bit a sinistra if (stringa[3] >= '0' && stringa[3] <= '9'){ //estraggo '1' a += stringa[3] - '0'; }else{ a += stringa[3] - 'A'; } Serial.write (byte);
|
|
|
|
|
Logged
|
|
|
|
|
Cremona
Offline
Full Member
Karma: 2
Posts: 146
Arduino rocks
|
 |
« Reply #6 on: April 26, 2012, 08:58:21 am » |
Hai ragione per gli indici ma avevi messo al posto di a hai messo byte la funzione è questa byte strConv(String str) { //attenzione usare solo lettere masiuscole, non c'è controllo dell'input byte a =0; stringa [4] = str; if (stringa[2] >= '0' && stringa[2] <= '9'){ //estraggo 'B' a = stringa[2] - '0'; }else{ a = stringa[2] - 'A'; } a = a << 4; //muovo il valore di 4 bit a sinistra if (stringa[3] >= '0' && stringa[3] <= '9'){ //estraggo '1' a += stringa[3] - '0'; }else{ a += stringa[3] - 'A'; } return str; }
sto provando ad usarla
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Tesla Member
Karma: 83
Posts: 8233
:(){:|:&};:
|
 |
« Reply #7 on: April 26, 2012, 09:05:51 am » |
yep hai ragione!  non ritorni str (cioè la stringa), ma a (cioè il byte) infatti Serial.write (byte); avresti dovuto cambiarla in Serial.write (a);
|
|
|
|
|
Logged
|
|
|
|
|
Cremona
Offline
Full Member
Karma: 2
Posts: 146
Arduino rocks
|
 |
« Reply #8 on: April 26, 2012, 10:30:32 am » |
Come si fa a far andare questo sputo di codice Ero riuscito ma con tutte le prove che ho fatto mi sono incasinato tra i vari ide e non riesco più a farlo andare ....... (bestemmione)
char inByte; char data; void setup() { Serial.begin(9600); }
void loop() { if (Serial.available()>0) { inByte = Serial.read(); data = inByte; Serial.print (strConv(data)); } }
byte strConv(String str) { byte a =0; String stringa[4] = str; if (stringa[2] >= '0' && stringa[2] <= '9'){ //estraggo 'B' a = stringa[2] - '0'; }else{ a = stringa[2] - 'A'; } a = a << 4; //muovo il valore di 4 bit a sinistra if (stringa[3] >= '0' && stringa[3] <= '9'){ //estraggo '1' a += stringa[3] - '0'; }else{ a += stringa[3] - 'A'; } return a; }
|
|
|
|
|
Logged
|
|
|
|
|
Cremona
Offline
Full Member
Karma: 2
Posts: 146
Arduino rocks
|
 |
« Reply #9 on: April 26, 2012, 11:15:07 am » |
@Lesto Il codice che mi hai consigliato non funziona. Prova a testarlo se vuoi char inByte; char data;
void setup() { Serial.begin(9600); }
void loop() { if (Serial.available()>0) { Serial.print (strConv('0x00'),DEC); } }
byte strConv(String str) { byte a =0; if (str[2] >= '0' && str[2] <= '9'){ //estraggo 'B' a = str[2] - '0'; }else{ a = str[2] - 'A'; } a = a << 4; //muovo il valore di 4 bit a sinistra if (str[3] >= '0' && str[3] <= '9'){ //estraggo '1' a += str[3] - '0'; }else{ a += str[3] - 'A'; } return a; }
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Tesla Member
Karma: 83
Posts: 8233
:(){:|:&};:
|
 |
« Reply #10 on: April 26, 2012, 12:53:28 pm » |
per forza, str deve essere un array di char, non una classe String 
|
|
|
|
|
Logged
|
|
|
|
|
Cremona
Offline
Full Member
Karma: 2
Posts: 146
Arduino rocks
|
 |
« Reply #11 on: April 26, 2012, 04:34:49 pm » |
E come faccio a passare una'array di char ad una funzione ?
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Tesla Member
Karma: 83
Posts: 8233
:(){:|:&};:
|
 |
« Reply #12 on: April 26, 2012, 05:52:05 pm » |
passa la string e poi usa il metodo getArray() (forse non si chama così ma guarda nel reference)
|
|
|
|
|
Logged
|
|
|
|
|
Cremona
Offline
Full Member
Karma: 2
Posts: 146
Arduino rocks
|
 |
« Reply #13 on: April 26, 2012, 06:17:11 pm » |
Ascolta lesto, non ce la faccio proprio. I tuoi consigli sono stati utili ma ci ho perso un'altra giornata e non ho risolto.
Ora non vorrei perdere un'altra giornata con getarray, se è quello.
Non è possibile entrati nella funzione, ciclare la stringa e mettere il relativo char del carattere nell'array ? Anche qui a parole lo so dire ma a codice mi servirebbe una mano.
Grazie, Alberto
|
|
|
|
|
Logged
|
|
|
|
|
Cremona
Offline
Full Member
Karma: 2
Posts: 146
Arduino rocks
|
 |
« Reply #14 on: April 26, 2012, 07:04:10 pm » |
Così gli passo la stringa e la converto in array di char ma non funziona !! byte b1; byte b2; byte b3;
void setup() { Serial.begin(9600); }
void loop() {
String b = "0xB0"; String c = "0x02"; String d = "0x7F"; while (Serial.available()>0) { Serial.read(); b1=(strConv(b)); b2=(strConv(c)); b3=(strConv(d));
// Serial.println(b1,BYTE); // Serial.println(b2,BYTE); // Serial.println(b3,BYTE);
Midi_Send(b1,b2,b3); } }
void Midi_Send(byte cmd, byte data1, byte data2) { Serial.println(cmd,DEC); Serial.println(data1,DEC); Serial.println(data2,DEC); }
byte strConv(String str) { //Serial.println(str); String cmd=str; char stringa[5]; String mystr=cmd.substring(0,5); mystr.toCharArray(stringa,5);
Serial.println(stringa[0]); Serial.println(stringa[1]); Serial.println(stringa[2]); Serial.println(stringa[3]);
byte a =0; if (stringa[2] >= '0' && stringa[2] <= '9'){ //estraggo 'B' a = stringa[2] - '0'; }else{ a = stringa[2] - 'A'; } a = a << 4; //muovo il valore di 4 bit a sinistra if (stringa[3] >= '0' && stringa[3] <= '9'){ //estraggo '1' a += stringa[3] - '0'; }else{ a += stringa[3] - 'A'; } return a; }
|
|
|
|
|
Logged
|
|
|
|
|
|