Buonasera a tutti, avrei necessità di connettermi con Arduino ad una linea seriale rs232(regolatore di carica pannello fotovoltaico) per la quale il costruttore mi ha inviato protocollo di comunicazione, il problema è che per il calcolo della checksum viene riportato un esempio scritto in Java.
Qualcuno può aiutarmi a "tradurlo" per Arduino?
Grazie!
//questo è il codice java di esempio
public static String getCheckSum (String.s){
String result = "";
int sum = 0;
for (int i = 0, i < s.length() - 1, i = i+2) {
String temp = s.substring (i, i + 2);
int x = Integer.parseInt (temp, 16);
sum += x;
}
result = Integer.toHexString (sum);
while (result.length() < 4) {
result = "0" + result;
}
return result.toUpperCase();
}
Grazie Paolo per la tua risposta, intanto sul tuo codice mio figlio sta studiando..... è una cosa che facciamo insieme, io ho solo vecchie esperienze in assembler z80 lui invece fa il Liceo e sta muovendo i primi passi nel c++ con arduino.
Anche per rispondere a Fratt, si in effetti avrei dovuto mostrare subito il protocollo, comunque eccolo!
String getCheckSum (String s) {
String result = "";
int sum = 0;
for (int i = 0; i < (s.length() - 1); i += 2) {
String temp = s.substring(i, i + 2);
int x = temp.toInt();
sum += x;
}
// result = Integer.toHexString (sum);
while (result.length() < 4) {
result = "0" + result;
}
result.toUpperCase();
return result;
}
Manca la conversione da numero a esadecimale. Non ho idea se funzioni e del risultato. Però compila correttamente. :)
ancora non sono in grado di comunicare con il device ma ritengo che debba apparire come: 55AA010000 non so se in coda ci vanno anche i due Byte relativi alla lunghezza......
Comunque provato il codice, credo ci sia un errore nella riga int x = temp.toInt(); dove in x mettiamo la conversione in decimale della substringa esadecimale, praticamente tratta i i due digit AA come 0.
Grazie Paolo, a questo punto occorre andare sul pratico e provare ad inviare una query con il checksum che risulta dal codice e vediamo se risponde. mi devo procurare un convertitore usb-rs232 e poi attaccarmi al device con hiperterminal.
il Data lenght nella query è sempre 0x00 0x00 mentre nella messaggio di ritorno dove ci sono i valori dei vari parametri allora la lunghezza viene calcolata partendo da 0x55 ovvero dalla posizione 0.
Adesso come passo successivo dovrò mettere a punto uno sketch in grado di generare le query e leggere salvando le stringhe di risposta in un buffer, inoltre dovrò realizzare un interfaccia rs232 - ttl