ho comprato una simpatica schedina di conversione da rs232 a TTL col classico max3232
adesso ho collegato la rs232 di un vecchio computer (sul mio nuovo manco c'era) con la schedina in questione e ho connesso i 4 pin sula stessa con arduino
vcc ai 5v, gnd al gnd e i pin TX e RX ai pin D20 e D22 (è un arduino mega!)
vorrei adesso leggere da PC una stringa di caratteri in arrivo da arduino
e vorrei leggere da arduino una stringa di caratteri in arrivo dal PC.
magari è molto semplice ma se potesse qualcuno spiegare passo passo la procedura gliene sarei grato.
(esiste qualche pagina dove viene trattato l'argomento dall'inizio alla fine?)
premetto che ho installato su PC Termite (al posto di Hyperterminal)
settato a COM1, 9600 Baud, 8data bits, 1 bit stop nessuna parita,controllo e inoltro.
Usa la SoftwareSerial per usare i pin digitali di tua scelta per rx/tx
I pin "fisici" della seriale delle MCU di Arduino Mega e Uno sono i pin 0 e 1 ma non usare quelli, perchè corrispondono anche alla USB delle schede stesse.
The Arduino Mega has three additional serial ports: Serial1 on pins 19 (RX) and 18 (TX), Serial2 on pins 17 (RX) and 16 (TX), Serial3 on pins 15 (RX) and 14 (TX).
quindi che faccio? Collego, ad esempio, il TX sui 4 pin della schedina col max3232 al pin 15 RX3 del mega
poi l' RX al pin 14 TX3 del mega [ cioè connetto RX-TX e TX-RX i suppose ]
e di seguito faccio comunque riferimento alla SoftwareSerial per cui
nel setup
pinMode(15 , INPUT);
pinMode(14, OUTPUT);
PortaSeriale.begin(9600);
PortaSeriale.read() per leggere
PortaSeriale.print(char) per scrivere ?
gpb01:
Ma a studiare i references si fa troppa fatica ? ? ?
Perché se guardi il reference, per la classe Serial, tutto è ben spiegato ...
mi sembra invece bel lungi dall'essere spiegato -chiaramente- piuttosto che -sommariamente- altrimenti non avrei espresso i suddetti dubbi.
Poi magari il concetto di "chiaro" e "non" si diversifica nella testa di un esperto piuttosto che in quella di un ingegnere cinquataquattrenne che ha ripreso l'elettronica in mano da qualche giorno dopo 25 anni di inattività dovuta a discordanti attività lavorative.
Nessuna polemica però. L'idea era quella di postare alcune mie perplessità al fine di ottenere (se possibile) un aiuto da qualcuno che avesse già fatto la stessa esperienza e che avesse la così detta "ricetta pronta".. se poi non dovesse essere possibile o moralmente inaccettabile per un qualche livello di purezza didattica richiesto per la frequentazione di questo forum..nessun problema, ho detto tante di quelle volte "studia" ai mie studenti che posso tranquillmente farmelo dire anch'io a raffica senza batter ciglio.
Un abbraccio (cit. Gianni Morandi)
csf0137:
...ho detto tante di quelle volte "studia" ai mie studenti che posso tranquillmente farmelo dire anch'io a raffica senza batter ciglio.
Ottimo perché ... ecco il seguito del cazziatone ...
he Arduino Mega has three additional serial ports: Serial1 on pins 19 (RX) and 18 (TX), Serial2 on pins 17 (RX) and 16 (TX), Serial3 on pins 15 (RX) and 14 (TX). To use these pins to communicate with your personal computer, you will need an additional USB-to-serial adaptor, as they are not connected to the Mega's USB-to-serial adaptor. To use them to communicate with an external TTL serial device, connect the TX pin to your device's RX pin, the RX to your device's TX pin, and the ground of your Mega to your device's ground. (Don't connect these pins directly to an RS232 serial port; they operate at +/- 12V and can damage your Arduino board.)
... quelli sono i nomi da usare con le chiamate della classe Serial (... dimentica quindi la SoftwareSerial)
Guglielmo
P.S. : Ho 10 anni più di te e quindi ... posso permettermi di farti i cazziatoni ...
gpb01:
Ottimo perché ... ecco il seguito del cazziatone ...
non so perché ma me lo aspettavo.
.. oggi mi arriva il cavetto seriale da Amazon e provo il tutto. [per trovare una porta seriale ho dovuto prendere un vecchio PC dalla cantina, su quelli nuovi non trovi più nemmanco la parallela]
Per il "giocattolo" che stò facendo deve leggere ed inviare comandi ad un braccio meccanico il quale deve poter leggere i valori di due sensori di Hall ed inviare comandi a quattro attuatori lineari posti su un letto motorizzato che si pone in ben 14 posizioni diverse percui ho dovuto attaccare ad un mega:
una batteria di 5+4+3 pulsanti per le posizioni e i vari comandi, due schedine con 4 relè ciascuna, un keypad, un display, un altoparlantino, una schedina con SD, un potenziometro a filo letti da analogico, due sensori di Hall e [forse] un rotary encoder più la seriale... speriamo bene.
comunque..
PROBLEMA 2:
noto che nel leggere la tensione da un potenziometro (che ho attaccato a partitore +5,GND e il centrale su un pin analogico) il pin analogico di arduino legge anche una marea di segnali spuri .. ho provato a mettere il filo schermato dal potenziometro al pin analogico collegando la schermatura al GND e va un po' meglio ma non è comunque una lettura "perfetta".. qualche indecisione ce l'ha sempre.
e PROBLEMA 3:
Anche la tensione non è proprio stabile come uno si aspetterebbe:
ad esempio:
ho collegato il keypad ad un solo pin collegandolo a partitore di tensione come fosse una resistenza variabile (cioè collegando un gruppo di resistenze ad hoc in serie a colonne e righe).
Mi sapettavo che la tensione prodotta dalla pressione di un determinato tasto fosse la stessa alimentando arduino con la USB o alimentandolo con il jack o con (tanto per fare un esempio) con una Pila a 9V.
Mi dicevo cioè .. c'è sicuramente il regolatore di tensione che livella tuto a 5V.
NISBA!
Se imposto i valori di tensione per far funzionare il keypad con l'alimentazione da USB.. quando poi collego l'alimentatore tramite il jack (o la pila) i valori cambiano e la pressione di alcuni (o tutti) i tasti sul kepad non viene più riconosciuta.
Addirittura con due pile a 9 V.. una nuova e l'altra -leggermente- scarica .. la lettura dei tasti fallava.
E varia NON DI POCO infatti per legger un tasto controllo la lettura se compresa tra un certo range di valori .. ma cambiando alientazione varia così tanto che i range scelti si sormontano!?
... la conversione è fortemente dipendente dalla stabilità dell'alimentazione e comunque ... il consiglio e sempre quello di non fare UNA sola lettura, ma almeno la media di una serie di letture (es. fai 10 letture e fanne la media)
Guglielmo
*P.S. : Se fai un po' di ricerche qui sul forum (... lo so, non è cosa facile, cerca con google limitando la ricerca alla sezione Italiana : "site:Italiano - Arduino Forum .......quello che cerchi........") se ne è parlato varie volte ... *
Per quanto riguarda la lettura sul pin analogico ho migliorato di molto la situazione facendo ovviamente la media di cento valori ma soprattutto usando, per il trasporto del segnale, un cavetto da antenna collegando la retina della schermatura al GND.
Inizialmente la lettura (poi mappata per un angolo da -45 a 90) ballava di 1 grado più o meno, adesso balla sull'ordine di 1/20 di grado ovvero sul visore stanno fisse le cifre intere dell'angolo e la prima cifra decimale, la seconda (che poi ometterò) è ballerina. Per l'utilizzo a cui sarà assegnato l'oggetto è già abbondantemetne meglio rispetto al minimo necessario (a dire il vero sarebbe bastato anche 1 grado +/-)
.. e mi è arrivato il cavetto rs232 da Amazon, domani provo la seriale.
volendo usare la Serial1
ho connesso il pin 19RX di arduino mega al pin TX della schedina rs232-TTL
e il pin 18TX di arduino al pin RX della stessa schedina
collegato GND e +5V
a questo punto
ho scritto su arduino nel setup
Serial1.begin(9600);
Serial1.println("PROVA");
ho connesso su PC Hyperterminal in ascolto COM1,9600,1bit stop, nessuna parità
lancio arduino e ... nada, non spedisce niente.
(ho provato anche con Termite e con lo stesso monitor seriale di della IDE posto su COM1. uguale)
ho poi provato a scrivere su arduino una procedura per la lettura
e un pulsante per la scrittura su seriale che se premuto invia
Serial1.write("A");
a questo punto quando invio "A" su serial1 col pulsante
invece di apparire sulla console di Hyperterminal mi appare sull'lcd
come se arduino leggesse di ritorno il carattere inviato
(legge quello e altra roba varia a casaccio ma insomma il carattere lo legge)
ma se invio stringhe su com1 da terminale o se cerco di leggerle [ovvero ciò che mi interessa] non succede niente.
ps: Qualche volta il terminale prende su qualche carattere a casaccio in lettura.. in scrittura niente.
spero che abbiate qualche consiglio perché sono abbastanza frastornato .
NON starai mica portando la RS232 sui pin di Arduino vero ? ? ? :o :o :o
DEVE essere un qualche cosa con dei traslatori di livello !!! La RS232 lavora con tensioni che oscillano anche da -15 a +15 ... Arduino lavora con una porta seriale TTL, 0 - 5V ... se lo colleghi direttamente distruggi solo la porta seriale e forse anche qualche altra cosa !
Però ... tu hai parlato di schedina rs232-TTL ... quindi immagino che gli adattatori di livello ci siano, quindi ... quale cavolo di prodotto stai usando ? ? ?
Guglielmo
P.S.: Senza un link non riusciamo a vedere le caratteristiche tecniche ...
gpb01:
NON starai mica portando la RS232 sui pin di Arduino vero ? ? ? :o :o :o
Però ... tu hai parlato di schedina rs232-TTL ... quindi immagino che gli adattatori di livello ci siano, quindi ... quale cavolo di prodotto stai usando ? ? ?
P.S.: Senza un link non riusciamo a vedere le caratteristiche tecniche ...
non so se hai presente.. Aliexpress..dove vendono anche gli Arduino mega a €5 l'uno [ già sento arrivare le critiche ]
...
ho usato però un cavo seriale -diretto- .. ovvero i cavetti usati per la stampanti, gli oscilloscopi, i monitor CE, i gps. ecc...
non è che si -suppone- di default l'uso di un cavo rs232 cross (tipo i null modem per intenderci) ?