Salve a tutti, mi stò cimentando in un progetto che prevede la comunicazione con un software su pc, tramite la seriale via usb.
Il codice per comunicare con il software prevede la comunicazione seriale a 112000, e con i semplici comandi serial.println o serial.read riesco a comunicare con il software.
Il problema è che adesso vorrei utilizzare dei display grafici i2c per visualizzare i dati letti dal software.
A questo punto mi chiedo la cosa è possibile?
Già quando mi connetto con il software, poi non riesco più ad utilizzare ad esempio il monitor seriale, perchè la seriale risulta occupata.
Poi avrei sotto mano un display i2c che però prevede la comunicazione a 9600, quindi suppongo che sia impossibile impostare 2 velocità diverse.
Avrei anche un mega2560 che pare abbia più seriali, ma non sono del tipo i2c?
Ovvero hanno i pin rx e tx e non clk e sda, quindi suppongo non utilizzabili?
Gianluca devi farti un po' di chiarezza sulle diverse periferiche disponibili nei microcontrollori.
Stai mischiando le solite pere con le solite mele...
La seriale di cui imposti il baudrate è un a periferica di tipo UART (Universal Asynchronous Receiver-Transmitter)... la classica seriale a cui tutti siamo abituati (più o meno).
La periferica i2c invece è un bus master/slave, sempre seriale ma di tipo sincrono (c'è il segnale di clock).
Sono due cose distinte tra loro.
Quando scrivi che il tuo display i2c "prevede la comunicazione a 9600" c'è qualcosa che non torna.
Hai ragione, ho scaricato la libreria e codice di esempio per il display, e nel setup ci hanno infilato dentro l'istruzione serial.begin(9600) che mi ha confuso le idee.
In realtà poi ristudiando il tutto, vedo che in caso di errore viene stampato sul monitor seriale l'errore, da qui l'esigenza di impostare il baudrate, che ovviamente a questo punto non è necessario per comunicare con il display.
Certo.
Nel 99% degli esempi troverai il Serial.begin() a prescindere perché è il modo più immediato di fare un minimo di debug usando il monitor seriale.
Io cerco sempre di evitare di impegnare la UART dei pin D0 e D1 proprio per poter in qualsiasi momento non solo caricare un aggiornamento del programma senza dover staccare le connessioni, ma anche per avere spazio per fare debug.
Quindi come ti ha detto cotestatnt non hai problemi ad usare la I2C (che agisce su altri pin) e se devi comunicare a 115200 (non 112000 ) non puoi usare la SoftwareSerial (non è affidabile per velocità oltre 19200 o 38400 massimo) quindi per tenere libera la comunicazione USB-seriale forse la cosa migliore è usare la Mega e quindi usare la Serial2 per la comunicazione.
docdoc:
... non è affidabile per velocità oltre 19200 o 38400 massimo ...
... da prove che fece a suo tempo SukkoPera su un Arduino UNO, la massima velocità consigliata per la SoftwareSerial è 9600, dopo ... cominciano i problemi e gli errori ... :
Molto meglio usare la AltSoftSerial che, pur imponendo i pin TX ed RX, permette di raggingere velocità superiori oltretutto in modo più ottimizzato.
Scusate, ho detto una caz... cavolata, non avevo tenuto conto che lui ha scritto che il software è su PC e quindi deve usare la USB per questa comunicazione. Per liberare la UART (ossia la "Serial" base dei pin 0 ed 1) dovrebbe usare la Mega ma aggiungere anche un adattatore seriale(TTL)->USB.
Per cui la cosa più semplice ed "indolore" è solo quella di restare com'è ora, visto che I2C usa ben altri pin (che se non deve utilizzare per altri scopi sono disponibili).
docdoc:
Scusate, ho detto una caz... cavolata, non avevo tenuto conto che lui ha scritto che il software è su PC e quindi deve usare la USB per questa comunicazione.
... beh, l'adattatore seriale <-> USB, che comunque gli serve, può usarlo anche su due pin con una seriale emulata
Certo, usare le vere seriali della MEGA è sempre meglio, ma ... se ha già la UNO ... :