GPS venemittaristoa (Versio 1.0 nyt toiminnassa).

En ole LCD-näytöillä vielä pelannut, mutta näyttäisi että tuon kitin napin painallus luetaan analogisesti ja mapataan esimerkkikoodin mukaan seuraavasti.
int adc_key_val[5] ={30, 150, 360, 535, 760 };
Eli:
<29: oikea
30-149: ylös
150-359: alas
360-534: vasen
535-759: valinta

=760: ei painettu
http://www.dfrobot.com/image/data/DFR0009/LCD4Bit_mod.zip

Tuon linkin takaa löytyy ihan hyvännäköinen koodinpätkä, mikä ei jää turhia blokkaamaan luupin sisälle. Turhat delayt luupin sisällä aiheuttavat sen, että näyttö ei vastaisi painalluksiin luotettavasti.

Tuo msgs[5][15] merkkijonotaulu on tässä turha. Sen sijaan pitäisi vain ohjata muuttujan key arvo vaikuttamaan siihen mitä näytöllä näytetään. Tai tarkemmin, jos key on jotain muuta kuin -1, niin päivitetään joku muuttuja kyseiseen arvoon. Sitten vaikka joku switch-case, tai if-else hässäkkä ajamaan tuon muuttujan perusteella se oikea funktio tai lcd.print tms. Minä rakentaisin ohjelman niin, että jokaista näytettävää moodia varten olisi oma funktionsa, mutta se vähän riippuu miten tätä piti ohjata. Käyttöliittymän voisi suunnitella vaikka tilakaaviona ja kirjoittaa sitten auki koodiksi.

Tai sitten jos on tosiaan vain kaksi moodia, niin siihen riittää tilamuuttuja, jolla on arvot 0 ja 1. Napin painallus vaihtaa tilan nollasta ykkökseksi ja päin vastoin. Kannattaa säilyttää koodista tuo key != oldkey ja key>=0 kohta, koska muuten se vetäisi villissä luupissa tilasta toiseen.