Cancellare ultima lettera (LCD)

Ciao Guglielmo,
mi è arrivata una tua notifica e sono passato :slight_smile:

Un saluto a tutti i nuovi ingressi, sono già passati 3 anni .....

Vedo che Banzi è tornato alle origini, il primissimo forum dove scrivevamo quando è nato arduino era tutto bianco come questo :slight_smile:

Vedo che hanno forkato la mia libreria del forum e l'hanno piazzata su github ?
E' da tempo che stavo pensando di pubblicare sia questa sia le altre cose che avevo scritto su github, magari colgo l'occasione di fare repo ufficiali.

@cotestatnt
se hai idee migliorative e vuoi collaborare allo sviluppo sei il benvenuto, recupero il tutto e posto i link dei repo

Grazie Testato ... era un po' che non ti si vedeva :wink:

Si, sarebbe interessante che mettessi proprio la TUA su github così, chi vuole collaborare e proporre integrazioni ed aggiunte (vd. la funzione status()), può farlo :grin:

... in realtà dalle preferenze puoi cambiare tra bianco, scuro e proprio nero. Io uso la versione "scuro", da meno fastidio agli occhi :wink:

Guglielmo

eccolo

carico anche le altre lib e aggiorno i relativi topic

1 Like

... ho idea che saranno stati chiusi dal BOT automatico :roll_eyes:. Nel nuovo forum, dopo 4 mesi che nessuno usa un thread, viene automaticamente chiuso.

Eventualmente mandami in MP i link che te li riapro :wink:

Guglielmo

credo, e mi sembrerebbe assurdo che qualche genio informatico indiano, e non me ne vogliano gli indiani, nè i pellerossa nè gli asiatici, avesse pensato il contrario, l'autore puo' sempre editare il post, ed infatti l'ho già sistemato.

Comunque chi ha pensato ad una cosa del genere non sa minimamente gestire un forum, specialmente un forum tecnico dove appunto dopo anche un anno o 5 anni (non siamo qui a discutere di una lib di forse 5 anni fa ?) è giusto che arrivino nuovi commenti, richieste, aiuti, sempre sullo stesso topic anche se vecchio.

Riferisci al management che continuano a fare cazzate :slight_smile:

1 Like

questi sono i due post, li ho potuti editare ma come dici tu non posso scrivere un nuovo messaggio.
Se li riapri ci scriviamo sotto la news, anche se il messaggio principale l'ho già sistemato, pero' almeno cosi' arriva la notifica a chi stava seguendo le due librerie

Ciao
Grazie

Fatto :grin:, sono stati riaperti ... ora per 4 mesi restano aperti ... sbrigati ...

Guglielmo

P.S.: Ora gli Indianini non c'entrano più ... siamo passati a "discourse"

perfetto, allora possiamo partire con la fase "era meglio quando stavamo con gli indiani" :slight_smile:

:rofl: :rofl: :rofl: ... ci sono state già lungissime discussioni su quest'argoemnto ... arrivi tardi ...

Guglielmo

1 Like

... ora però torniamo in tema.

@arius007 : se non vuoi cambiare libreria forse la cosa più semplice è fare come ti avevo detto all'inizio, tenere traccia della riga/colonna dove hai scritto e fare come ti ho detto. Intanto noi proviamo a mettere le mani nella libreria di Testato e vediamo se riusciamo ad aggiungerci qualche bella funzioncina :wink:

Guglielmo

Fatto :sunglasses:

Aggiunto il metodo privato read() e due pubblici, status() e getCursor()
Infine ho fatto un esempio al volo GetCursor.ino

Per adesso trovate tutto nel fork appena creato in attesa che @testato revisioni ed eventualmente accetti il pull request.

Credo che forse sarebbe una buona idea riorganizzare il sorgente della libreria secondo lo schema attualmente supportato dall'IDE, c'era una specie di vademecum da qualche parte.
Forse @gpb01 può aiutarci a trovarlo?

Ho utilizzato la lettura molti anni fa , 20 circa, facendo lampeggiare l'underscore sul punto di inserimento, se ricordo bene funziona solo con data bus 8 bit e non in modalità nibble a 4 bit.
Ovviamente il data bus deve essere bidirezionale e essere presente il bit write! Come è stato detto

No, funziona anche a 4 bit altrimenti non sarei riuscito ad aggiungere il metodo alla libreria in questione.

Allora ricordo male, ricordo solo che una cosa non riuscivo a farla a 4 bit ma solo 8 bit, ma non ricordo quale

Beh, io comunque anche senza modifiche particolari farei una cosa molto semplice, basta wrappare i metodi setCursor e print, tenendo in memoria due variabili per riga e colonna che verranno aggiornate quando ci si sposta, o in base alla lunghezza di ciò che si scrive .
Una cosa di questo tipo: due variabili globali (es. "lcdRow", "lcdCol", ovviamente byte), una "lcdSetCursor()" che memorizza riga e colonna passati a parametro e poi richiama la setCursor() dell'lcd, poi una "lcdPrint()" che aggiorna la variabile colonna (almeno) sommandogli la lunghezza della stringa da scrivere e poi richiama la print() dell'lcd (occhio a gestire l'eventuale overflow).
Ed infine basta leggere le variabili lcdRow ed lcdCol si ha ciò che si cerca. Ho semplificato troppo? :wink:

Ovvero quanto già consigliato da tempo ... mio post #6 che gli diceva di, in qualche modo, tenere traccia di riga/colonna dove scriveva e di usare lo spazio per cancellare il carattere non voluto ... soluzione piuttosto semplice implementabile in vari modi ... :wink:

... ma da questo è partita una bella discussione per lo sviluppo delle librerie :grin:

Guglielmo

Il meccanismo è simile a quanto si ottiene "leggendo" dal display perché comunque questo restituisce solo un anonimo indirizzo di memoria che poi bisogna "tradurre" in riga-colonna.
Il vantaggio è non dover gestire "manualmente" questi indici andando a contare di volta in volta la lunghezza del testo scritto.

Diciamo che in generale, questa funzionalità non è che sia poi cosi importante secondo me... in fondo se scrivo sul display qualcosa, lato firmware conosco sempre (o almeno dovrei) in che "condizioni" mi trovo e non dovrebbe esserci necessità di leggerle dal controller.

Comunque, la cosa è fattibile senza troppi problemi e allora ben vengano nuove funzionalità.
Ad esempio questa mattina ho aggiunto il metodo per muovere il cursore, quello per leggere il carattere visualizzato alla posizione attuale del cursore (nell'ipotetico utilizzo per un data entry ad esempio) e infine quello per leggere il testo in un array di caratteri.

Li testo un po' e poi metto online.

// Spostamento UP, DOWN, LEFT, RIGHT
lcd.moveCursor(PCF8574_HD44780_I2C::LCD_LEFT, 5);

// Singolo carattere
char ch = lcd.getChar();

// Array di caratteri
char buffer[COLS +1];
lcd.getString(buffer, 10);

1 Like

Beh ,

Secondo me il metodo di tenere traccia con due globali è in effetti solo un ripiego

Ricordando che IIC è multimaster multislave è importante ricordarsi che anche 'qualcos'altro' rispetto ad arduino potrebbe comandare il display

E che anche un singolo arduino potrebbe avere più display da comandare

Grazie.
Vorrei approfondire questo metodo. Se non ti dispiace, potresti spiegarmi meglio come crearlo. Magari aggiungendo alla spiegazione dei codici.

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