[Risolto] aiuti con comunicazione seriale tra pc e arduino

In questi ultimi giorni mi sto cimentando nella comunicazione seriale tra PC e Arduino. Per fare CIO ho utilizzato un adattatore di livelli ttl-rs232 e un convertitore rs232-usb, ho fatto tutti i collegamenti corretti ha prova di questo riesco a visualizzare le stringhe che invio tramite Arduino con un software sul PC, ma il problema sorge quando provo a ricevere dei valori dal PC ad Arduino. Infatti invece di ricevere delle stringhe ricevo solamente dei numeri che corrispondono al codice ASCII dei caratteri inviati dal PC. Mi potete dare dei suggerimenti o aiuti??
come posso convertire il codice ASCII in stinga?

vi ringrazio in anticipo

questo è il mio codice:

#include <SoftwareSerial.h>
#define tx 10
#define rx 6
SoftwareSerial gsm(tx, rx);
int i = 0;
String stringa;
void setup() {
  Serial.begin(9600);
  gsm.begin(9600);
}

void loop() {
  for (i; i < 10; i++) {
    gsm.println("papà");
    Serial.println("papà");
    delay(2000);
  }
  if (gsm.available() > 0) {
    stringa = gsm.read();
    Serial.println(stringa);
    delay(30);
  }
}

Alla fine ho risolto, infatti leggendo i dettagli del comando Serial.read(); ho capito che può leggere solo un bit alla volta quindi soltanto un carattere. A tal punto ho deciso di immagazzinare i valori arrivanti dal PC in una variabile di tipo char e scrivere i caratteri tutti insieme.

Questo è il codice:

#include <SoftwareSerial.h>
#define tx 10
#define rx 6
SoftwareSerial gsm(tx, rx);
int i = 0;
char carattere;
void setup() {
  Serial.begin(9600);
  gsm.begin(9600);
}

void loop() {
  for (i; i < 2; i++) {
    gsm.print("at \n");
    delay(1000);
  }
  if (gsm.available() > 0) {
    carattere = gsm.read();
    Serial.print(carattere);
  }
  delay(10);
}

È giusto il codice precedente dove usi il tipo di dato String.
String è un contenitore di caratteri char, quindi per collezionare i singoli char dentro la variabile string devi usare += gsm.read(); al posto del solo uguale.

if (gsm.available() > 0) {
    stringa += gsm.read();
    Serial.println(stringa);
    delay(30);
  }

Però il Serial.println(stringa) ti stamperà tante volte il contenuto di string che sarà sempre differente.

Ciao.

Va bene, :slight_smile: grazie per quest'altra soluzione :slight_smile: