Stap 3: Programmeren knoppen aan taken
Deze LCD schild heeft 6 knoppen, die slechts 4 waarvan ik gebruik in mijn programma. Er is een select, omhoog, omlaag, naar links, rechts, en reset knop. Het resetten is moeilijk bedraad in de Arduino Uno-reset, dus er is niets die wij ermee kunnen doen. De knop selecteren blijft off van mijn programma en ik gebruikte de rechterknop in plaats daarvan. Voor sommige reden dat de knop selecteren worden tot nu toe links van op en neer voelde onnatuurlijk voor menunavigatie.
De functie die bepaalt welke knop u gewoon ingedrukt heet evaluateButton(). Vlak voordat u roept u die functie moet je lezen van het analoge signaal van de A0 ingang op de Uno en bewaar het aan de readKey-variabele. Wanneer u roept de functie evaluateButton() maken het evaluateButton(readKey). Dit stuurt dat het signaal van A0 functie en de functie zal bepalen welke knop die is gekoppeld en de knop getal in geheel getal vorm retourneren.
Hier is een voorbeeld van roeping voor een knop-controle:
int button; // Declares a fresh button variablereadKey = analogRead(0); // Reads the analog signal from A0 and saves it to readKey if (readKey < 790) { // If the signal drops below 790 that means a button was // pressed. The if statement delays the program for 100 microseconds // to debounce the button press and let voltage stabilize delay(100); readKey = analogRead(0); // Once the voltage has stabilized read the signal again } button = evaluateButton(readKey); // Call the evaluateButton function and send it the readKey data // Whatever integer comes back save it to the button variable
De evaluateButton() functie ziet er zo uit:
int evaluateButton(int x) { int result = 0; if (x < 50) { result = 1; // right } else if (x < 195) { result = 2; // up } else if (x < 380) { result = 3; // down } else if (x < 790) { result = 4; // left } return result; }
De gemakkelijkste en schoonste manier om die knop variabele te gebruiken is met een switch/case. Een switch/case-functie kijkt naar die knop variabele in wezen en komt overeen met het "zaak". De programmering in dat geval wordt uitgevoerd als het overeenkomt met de ingedrukte knop. Bijvoorbeeld:
switch (button) { case 0: // When button returns as 0 break; case 1: // When button returns as 1 lcd.clear(); lcd.print("Forward Button"); break; case 2: // When button returns as 2 lcd.clear(); lcd.print("Up Button"); break; case 3: // When button returns as 3 lcd.clear(); lcd.print("Down Button"); break; }
Idealiter zal u nest de knop evaluatie oproep en de schakeloptie/case binnenkant van een Ken / terwijl of while lus dat uitvoeren blijven zal tot een knop is ingedrukt.