Buongiorno a tutti,
sto iniziando a muovere i miei primi passi nel mondo della prototipazione con Arduino.
L'obiettivo finale è poter automatizzare alcuni dei test che vengono eseguiti nell'azienda dove lavoro, ma sono veramente acerbo di programmazione.
Ho provato a fare tutto quello che dovrei fare tramite WOWKI, e lì sembra funzionare tutto ok, ma ovviamente tra la simulazione e il reale ci passa il mondo.
Prima di far acquistare tutto quello che potrebbe servirmi, mi sto arrangiando con il materiale dello starter kit e devo far scrivere a display dei dati che vengono spediti in seriale, questo perché devo lasciare lo spazio libero sulla scheda dove ho caricato lo sketch "base" e il display l'ho collegato su una seconda scheda.
Ho trovato l'esempio di Adafruit, ma vedo a display dei caratteri spuri quando termino con "serial.println". Come posso fare ad eliminare questo dato e far apparire alcuni caratteri sulla seconda linea del display?
È più complicato da spiegare di quello che si può pensare
La sporcizia che vedi sul display rappresenta i due caratteri di fine riga e ritorno a capo (cerca codice ASCII di CR e LN, che cominci ad impratichirti col problema)
Il println fa esattamente questo: aggiunge i due codici dei due caratteri in questione
Che per convenzione stampanti, telescriventi e monitor usano appunto come fine riga e ritorno a capo
Sul display LCD la cosa non la puoi gestire direttamente
Devi ripensare all'intera gestione del display
Se spieghi cosa vorresti stampare e come lo fai adesso ci do uno sguardo
In questo momento semplicemente voglio scrivere sul display lo stato di due ingressi digitali, due uscite digitali e un ingresso analogico.
uso questo sketch che ho trovato già preconfezionato:
// include the library code:
#include <LiquidCrystal.h>
// initialize the library by associating any needed LCD interface pin
// with the Arduino pin number it is connected to
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
void setup() {
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
// initialize the serial communications:
Serial.begin(9600);
}
void loop() {
// when characters arrive over the serial port...
if (Serial.available()) {
// wait a bit for the entire message to arrive
delay(100);
// clear the screen
lcd.clear();
Serial.print(Serial.read());
// read all the available characters
while (Serial.available() > 0) {
// display each character to the LCD
// lcd.setCursor(0, 0);
// lcd.autoscroll();
lcd.write(Serial.read());
}
}
}
trovato in rete.
Nello sketch che origina i dati ho anche dovuto inserire degli spazi iniziali perché mi segava sempre l'iniziale (ad esempio "alore:" al posto di "Valore:")
Mi rende più semplice spostarmi verso l'applicazione reale, dove non so se riesco a tenere collegato il pc ad Arduino.
Per il momento allora devo riformattare le informazioni per poter essere interpretabili, poi quando avrò il materiale corretto (display i2c 20x4) potrebbe andare meglio, cioè come nel simulatore.
Si ma occhio, nel simulatore hai l'LCD "puro" ossia senza interfaccia I2C (la librerie per la I2C è "LiquidCrystal_I2C").
Se vuoi provare bene tutto il codice prima di realizzare fisicamente il progetto ti conviene usare l'I2C anche su Wokwi. E ricorda che su Wokwi puoi anche condividere il tuo progetto se vuoi mostrarci qualche cosa che non ti torna.
PS: ma per i display I2C "reali" ci sono più librerie I2C che si chiamano allo stesso modo, per cui quando imposterai il progetto "fisico" verifica bene quale libreria hai installato, prova per prima quella "standard" di Frank De Brabander (il nome lo vedi nella gestione librerie dell'IDE).