Stap 9: De "Code" :)) externe code
De code is vrij groot en het is vrij moeilijk uit te leggen en ook geen foto's helpt: P
De eerste pogingen kreeg ik 99% microcontroller geheugen, de flitser en de RAM, dus ik geleerd te gebruiken "programem" in te schrijven een int EPROM, ook LCD stuurprogramma of bibliotheek... en nog veel meer.
OK laten we beginnen met het LCD-scherm.
Eerst moet u de bibliotheek #include. In de bibliotheek maakte ik een klasse zo "statische PCF8814 lcd;" nuttig kan zijn, zodat u het kunt gebruiken zoals "lcd.print ("auto-remote")". Ik zette het LCD-scherm van de kant in het geval dus in setup is zoiets als dit "lcd.begin(); LCD.Rotate(1);". De functie van het begin begint het LCD-scherm en definieer de pinnen dat gebruik van de arduino te conect met LCD-scherm, dus als u verbinding moet maken in andere pins, Raadpleeg de PCF8814.h om er zeker van te zijn dat de volgorde van de pins maar ik denk is als dit, van standaard lcd.begin(13,11,12,10); Rotate() met 1 zet de img op lcd kant naar beneden en met 0 is normaal.
u kunt afdrukken met lcd.print() koord; de cursor met lcd.setCursor(y,x), y wordt de rij (1 nld = 8 pixels) op dit lcd heb je 8 rijen, eerste rij is 0 laatste 7 en y wordt het nummer van de pixel uit depot naar rechts; en kunt u meer doen, maar u zult het later zien.
Nu hoe te lezen van de analoge toetsen.
int analogValue = analogRead(analogKeyPin); / / / geeft een waarde afhankelijk van wat u knop duwen (gewoon kijken naar de schema's en proberen om na te denken waar de lopende stromen, zul je diferit rezistance op elke knop). seriële monitor kunt u lezen van hen of de lcd.print(analogValue) te drukken ze op LCD-scherm, dan sommige als-s of -switch/case en je bent klaar bv.
if (analogValue > 25 && analogValue < 40){ key = "meniu"; }
else if (analogValue > 40 && analogValue < 70){key = "back"; }
Ik gebruikte de tekenreeks voor het opslaan van de sleutel, omdat is gemakkelijker te programma maar een int kunt u meer RAM-geheugen opslaan.
De bigest probleem dat ik had was de tekenreeksen voor de menius dus ik de programem gebruikte voor het blokkeren van de snaren in flash-geheugen. Dus maakte ik een matrix als volgt:
prog_char meniu_0[] PROGMEM = "Obtions"; prog_char meniu_1[] PROGMEM = "Autoset"; prog_char meniu_2[] PROGMEM = "Stearing set";
PROGMEM const char *meniu[] = { meniu_0,meniu_1, meniu_2 };
Op deze manier kunt u easyely genereren de menius
for (uint8_t x = 0; x < 7 ; x++){ // 7 is the number of option you have in menu, so stop the for at 6 poz lcd.setCursor(6, x); //read from progrmem strcpy_P(buffer, (char*)pgm_read_word(&(meniu[pozMeniu + x]))); lcd.print(buffer); }
7 is het aantal optie hebt u in het menu, zodat de "voor" 7 keer, vervolgens instellen cursor af te drukken vanuit de eerste row(0) met x als dit gaat in de volgende nld als de prog maken de tweede keer de voor, ik beginnen de afdrukopties van de 6de pixel omdat van 0 tot 6 ik cursor zal trekken. Nu strcpy_P functie kopiëren de tekenreeks programen in een buffer die ik verklaar met 50 tekens is een beetje te veel, maar je hebt om er zeker van te zijn dat is genoeg, nadat die alleen de buffer afdrukken.
pgm_read_word(&(meniu[pozMeniu + x]))
dit leest de waarde van programem matrix menu [0], als de pozMeniu en x is "0". Ik gebruik pozMeniu omdat wanneer zal ik de cursor en ik wil Navigeer naar boven en beneden en laten we zeggen ik heb 10 obtions een slechts 7 rijen, als ik ga met de cursor op de 7de optie en ik wil gaan downer ik alleen maar pozMeniu maken zal = 1 als dit druk ik zal beginnen met de tweede optie en op de 7de rij zal ik heb de 8e optie. Voor dat ik maakte een kleine functie waarvoor u een parameter, het aantal obtions. Dus voor de laatste is voorbeeld "upDown_navigate(6);" (ook start tellen met "0"). Als je de code downloaden heb ik de functie er uitgelegd.
De upDown_navigate(); ook geeft als resultaat een "pozCursor" dat het veranderen zal wanneer u omhoog en omlaag gaan, zodat u kunt een cursor als volgt afdrukken:
lcd.setCursor(0, pozCursor);
lcd.print("\2");
De "/ 2" is de tweede char dat ik definiëren. is de cursor die een zei. Ja, u kunt het toevoegen van aangepaste tekens, ziet u in de link met de volledige code.
Als u wilt doen van een submenu kunt u het doen uitzien (is gewoon een idee, ik maakte het zo uitziet):
"niveau" - deze i gebruiken in void loop naar een specifieke scherm (ik heb de functie voor elke menu)
"countUpDown" - Dit is gegenereerd door upDown_navigate(), slaat de positie op de matrix (je weet wel wat obtion die u selecteert)
<p>if (key == "ok"){ switch (countUpDown) { case 0: level = 2; countUpDown = 0; pozCursor = 0; pozMeniu = 0; lcd.clear(); break; case 1: level = 3; countUpDown = 0; pozCursor = 0; pozMeniu = 0; lcd.clear(); break; case 2: level = 4; countUpDown = 0; pozCursor = 0; pozMeniu = 0; lcd.clear(); break;