Ecco la relase 1.0 beta del tutto, scaricabile
qui.
All'interno del file rar c'è sia la nuova versione dell'eseguibile per pc che la libreria per Arduino, la cartella vLcd va copiata dentro la cartella delle librerie di Arduino.
Nella cartella examples della libreria c'è un semplicissimo sketch di esempio che riporto più sotto.
Alla fine ho optato per gestire tutto quanto dal programma per pc invece che da Arduino perché sarebbe stato necessario creare in ram un buffer da 80 byte per simulare la memoria interna del display, cosa assolutamente inaccettabile viste le limitate risorse del micro.
Visto quanto sopra ho abbandonato l'idea iniziale di clonare le classi della libreria liquidcrystal, anche perché sarei rimasto limitato alle sue funzionalità mentre il display virtuale può fare molto di più, e ho creato una libreria ex novo composta da una collezione di funzioni con nomi molti simili a quelli utilizzati dalla liquidicrystal, ma con il vantaggio di non essere limitato nelle espansioni future e con un impegno veramente minimo di flash e ram, solo pochi byte per quest'ultima.
Attualmente sono disponibili tre funzioni:
vLcdInit(); // inizializza la libreria e la porta seriale a 115200 bps
vLcdClear(); // cancella il display e posiziona il cursore alla prima colonna della prima riga
vLcdSetCursor(riga, colonna); // posiziona il cursore sulla riga (0-3) e colonna (0-39) desiderata
Tutto quello che viene inviato tramite la Serial.print() viene visualizzato sul display partendo a scrivere dalla posizione corrente del cursore e andando automaticamente a capo alla fine della riga, se si supera l'ultimo carattere dell'ultima riga la scrittura riparte dalla prima posizione andando a sovrascrivere quanto già presente.
Prossimamente nuove funzioni per la libreria come la cancellazione delle singole righe, e non di tutto il display, lo scrolling per righe o per tutto il display, etc.
#include "vLcd.h"; // Libreria vLcd
void setup()
{
vLcdInit(); // inizializza la porta seriale (115200 bps)
vLcdClear(); // cancella display
Serial.print("12345678901234567890");
Serial.print("abcdefeghijklmnopqrs");
Serial.print("prova prova prova pr");
Serial.print("test test test");
delay(1000);
vLcdClear();
delay(1000);
vLcdSetCursor (2,3); // sposta il cursore
Serial.print("123456789012345678");
//Serial.print("abcdefeghijklmnopqrs");
//Serial.print("prova prova prova pr");
//Serial.print("test test test");
}
void loop()
{
}