Problema invio dati seriali a dispositivo

Buongiorno a tutti,
ho necessità di pilotare un pannello led messaggi che solitamente usa un software proprietario , io invece vorrei creare un "telecomando" che permetta di variare il messaggio visualizzato , è una semplice comunicazione seriale, i messaggi sono già in memoria del pannello, basta mandare il comando per attivare quello voluto.
Tramite un monitor seriale ho estratto dal programma pc la stringa di caratteri da inviare in base al numero del programma e se la invio da pc tramite Teraterm funziona bene, è una stringa di caratteri esadecimali del tipo 0x0f 0x53 ecc...
Tuttavia non riesco a inviare correttamente i caratteri con Arduino, leggendo cosa viene inviato tramite la seriale del pc da Arduino, non corrisponde a ciò che mi aspetto.

il device colloquia con velocità 19200, 8N1, quindi in apertura della seriale uso

Serial.begin(19200,SERIAL_8N1);

e per l'invio uso

Serial.write(0x0f);

ma verificando con il serial monitor del PC (non quello di Arduino, tramite un'altra seriale) , ottengo altri caratteri (nell'esempio 0xFE se non sbaglio).

Ho fatto mille ricerche su internet, ma non capisco perché non ottengo l'invio che mi aspetto.

Grazie a chi mi aiuterà.

Prova a mettere un log completo del messaggio inviato al pannello.

Con l'istruzione Serial.write(0x0f); tu stai inviando un singolo byte non una sequenza, quindi o la ripeti per ogni byte da inviare oppure crei uno o più array dove metti tutti i byte previsti dal protocollo.

Essendo un nuovo utente, ci sarebbe l'annosa questione della presentazione e della lettura del regolamento. Se arriva @gpb01 ci cazia tutti...

Cortesemente, come prima cosa, leggi attentamente il REGOLAMENTO della sezione Italiana del forum, (prestando molta attenzione al punto 15), dopo di che, come da suddetto regolamento, fai la tua presentazione NELL'APPOSITA DISCUSSIONE spiegando bene quali esperienze hai in elettronica e programmazione, affinché noi possiamo conoscere la tua esperienza ed esprimerci con termini adeguati.

Grazie, igor

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposita discussione, nel rispetto del succitato regolamento nessuno ti risponderà (eventuali risposte verrebbero temporaneamente nascoste), quindi ti consiglio di farla al più presto. :wink:

P.S. ulteriore : dicci anche che Arduino usi. Uno, Mega, Nano... ???

ESATTO ! :smiling_imp:

@cotestatnt ... sempre controllare ...

Guglielmo

Scusate, in realtà sono iscritto a questo forum da svariati anni e pensavo di essermi presentato all'epoca, ma non ho mai partecipato attivamente, sono molto fai da te, ma questa volta non ne vengo fuori...comunque ho rimediato.

Utilizzo come hardware un Arduino UNO originale, anche se per il progetto definitivo penso userò un nano.

Questo è lo sketch , molto base:

/* Test invio messagio seriale
*/

void setup() {
  Serial.begin(19200,SERIAL_8N1);
  delay(500);
}
void loop() {
  Serial.write(0xfe);
  delay(2000);
}

Tramite RealTerm sulla seriale del PC, collegando il pin 1 dell'Arduino al pin 2 del DB9 della seriale, leggo 00 in esadecimale , 00000000 in binario.
Diversamente se metto in corto RX e TX della seriale PC e da RealTerm invio 0xfe ottengo ... 0xfe o 11111110 in binario.

Per inviare la stringa poi non ho problemi, creerò degli array e li invio con

Serial.write(arraymessaggio, sizeof(arraymessaggio));

Eureka!

Grazie comunque per le risposte, ma per qualche ignoto credo algoritmo di Google, mentre tentavo di fare la stessa cosa con Python su Raspberry , mi è apparsa questa discussione :
https://forum.arduino.cc/t/libreria-softserial-e-guglielmo/312164

e ho risolto semplicemente invertendo la logica ... incredibile, erano settimane che passavo le serate a googlare!

Non è incredibile, lo standard RS232 prevede l'inserimento di un driver RS232 tra MC e porta RS232 , ad esempio il MAX232 che effettua oltre all'inversione di TX e RX, anche degli altri segnali di handshake e la traslazione di livello da TTL a livelli RS232 cioè con tensioni da -9V e +9V, e infine aumento della corrente in uscita e protezione per cavo fino a 15 metri, se non ti si è ancora bruciato Arduino è solo perché hai collegato solo il PIN TXD di Arduino

Azzo ! come detto anche da "icio", su seriale DB9 girano 9V, arduino a 5V !!
Uso almeno un modulino tipo max3232 rs232 to ttl
image

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