leOS - un semplice OS per schedulare piccoli task

d407336:
il mio problema è che devo aggiornare un display lcd, e lo vorrei fare non più velocemente di ogni secondo, perchè se no non si leggerebbe bene e non mi serve istantaneamente vedere le variazioni.
farò con il metodo blinkwithoutdelay, è una buona idea secondo te?

Secondo me la soluzione più semplice è quella di crearsi un buffer video e poi di riversare ogni xxx ms tale buffer sul display.
Cos'è un buffer video? E' una memoria tampone usata per scrivere le informazioni che poi devono essere visualizzate. Chi ha usato un Commodore ai tempi degli anni '80 sa di cosa parlo: lì esisteva una parte della RAM riservata alla memoria video suddivisa in 1024 byte per i dati e 1024 byte per gli attributi colore. L'utente poteva scrivere direttamente in quel buffer, era compito del chip video generare l'immagine video da spedire alla TV per la visualizzazione.
Tu puoi fare così, simulando appunto un buffer video in cui scrivi le tue informazioni.
Ad esempio, hai un display LCD 20x4? Ti crei un array di 20x4 caratteri.
Quando tu vuoi scrivere qualcosa a video NON spedisci i dati direttamente all'LCD ma li scrivi in questo buffer con la stessa tecnica. Ad esempio, se sulla 1a riga, dalla 1a colonna, vuoi scrivere "CIAO" basterà scrivere la stringa a partire dalla locazione 0,0 dell'array.
Il task si preoccuperà, al suo intervallo, di spedire le 4 righe di 20 caratteri l'una al display. In questo modo l'operazione sarà più rapida.

Se hai voglia di approfondire, puoi guardare il mio sketch "Gamepack":
http://www.leonardomiliani.com/?page_id=374
si tratta di una raccolta di 3 giochini che scrissi 1 anno e mezzo fa per l'Arduino ed uno shield LCD con minijoystick di Nuelectronics dove usai il concetto di buffer video. Quel codice, a distanza di 1 anno e mezzo, mi fa ridere (fu il mio primo lavoro serio fatto con l'Arduino), non avevo minimamente conoscenze sui timer quindi aggiornavo il display a mano. Però ti può risultare utile per capire il concetto.