Problema invio CRLF fine stringa via seriale

buonasera a tutti, sto scrivendo un programma per interfacciare Arduino Uno, con il bus SCS. Premetto che ho un convertitore seriare SCS della casa madre e che funziona con il pc via RS232, inoltre ho collegato un convertitore di livello Seriale TTL ad arduino affinchè possa comunicare con ila seriale 232. ho scritto un programma in Visual c# che invia una stringa al convertitore e mi accende e spegne un relè correttamente. mi sono accorto che la stringa per essere interpretata correttamente dal sistema necessitava del carattere CR e LF, senza di essi veniva ignorata. passo ad arduino e prendo la stessa stringa che invio da Visual c# e la inserisco come da codice allegato. aggiungo anche \r e \n, viene inviata perchè la leggo con un'altra seriale in parallelo ma il sistema la ignora. non riesco a capire dov'è il problema.
grazie in anticipo.

#include <SoftwareSerial.h>

SoftwareSerial seriale(10, 11);

String test="$0352521200";
void setup() {
  
  Serial.begin(38400);
  seriale.begin(38400); 

}

void loop() {

  serial.print(test + '\r' + '\n');
  Serial.print(test + '\r' + '\n');
  delay(2000);
 
}

Buonasera e benvenuto, :slight_smile:
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione tutto il su citato REGOLAMENTO ... Grazie. :slight_smile:

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposito thread, nessuno ti potrà rispondere, quindi ti consiglio di farla al più presto. :wink:

Se invece di print usi println che succede?

Intanto nel codice che hai messo c'è un errore per cui NON compilerebbe, quindi .... NON è quello che stai usando, o, quantomeno, NON hai fatto il copia/icolla :wink:

Ricorda poi che se invece di usare Serial.print() usi Serial.prinln() automaticamnete viene inviato \r\n senza che lo debba aggiungere tu.

Sempre studiarsi bene il reference e i vari metodi che ci sono a disposizione.

Guglielmo

P.S.: fratt, in contemporanea, ha dato un suggerimento simile :wink:

L'errore nel codice l'ho notato anche io ma ho dato per scontato che fosse dovuto alla riscrittura invece del copia / incolla

L’errore sul serial, invece che seriale è di battitura, nel senso che tra copia e incolla in notepad per le prove quello è uno che non compilava proprio x quello, comunque ho provato sia print che println, stesso risultato. L’unica cosa che mi viene in mente è che con arduino ho usato solo i pin tx, rx e gnd. Mentre quando ho usato il programma in visual c# ho usato tutta la seriale compreso rts, cts ecc... forse il problema è la. Dovrei usare un max232 invece del convertitore bello e fatto cinese

blacksnake86:
... con arduino ho usato solo i pin tx, rx e gnd. ...

Che sono gli unici che puoi usare dato che Arduno NON gestisce gli altri segnali. Quindi è molto più probabile che i caratteri siano esatti e tutti, ma che manchino i segnali HW per consetire la ricezione ...

Prova a ponticellare DSR con DTR e RTS con CTS ... così glie li simuli ...

Guglielmo

Grazie Guglielmo, lunedì provo a ponticellare i segnali restanti della com e vi notizio. Volendo potrei provare anche con un max 232 ma gestirei solo il DTR, inizio con i ponticelli come suggerito.

Grazie e buona giornata

Provato a ponticellare come suggerito, ma nulla stesso problema. con la seriale pura del pc tutto ok ma con arduino non riesco a pilotare. :frowning:

Aggiornamento, collegato oscilloscopio alla seriale mi sono accorto che il segnale DTR e CTS quando aprivo la seriale del computer passava dal livello basso -6v a circa +10. allora ho collegato il pin 12 di arduino all'ingresso libero del MAX232 per convertirmi il livello di segnale e l'ho posto LOW nel setup dell'IDE. il CTS non mi serve in quanto non devo ricevere dati ma solo inviarli quindi l'ho lasciato scollegato. lo schema del MAX 232 è il classico da datasheet con i 4 condensatori da 1uF, per la mia versione altrimenti bisogna guardare nel datasheet dell'integrato. In questo modo sono riuscito ad inviare correttamente il comando con Serial.println(), che come suggeriva Guglielmo da già i caratteri LF e CR.

Grazie per l'aiuto.

+1 per aver trovato e pubblicato la soluzione.

Ciao, Ale.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.