Stap 1: LCD-scherm knoppen
Het LCD-scherm heeft zes knoppen, vijf die beschikbaar voor gebruik zijn. We gebruiken vier van hen voor ons project. De knoppen zijn omhoog, omlaag, naar links, rechts en selecteer Reset. De Reset-knop wordt de gehele Arduino hersteld. We zullen de vier directionele knoppen gebruiken. Omhoog en omlaag wordt ingesteld van de huidige limiet, links en rechts zal verplaatsen de actuator.
Het LCD-scherm zet alle vijf knoppen door middel van een digitaal naar Analoog Converter, zodat ze alleen oppakken van één pin. De andere kant aan dit is dat u wilt kalibreren van je rode knoppen.
De eenvoudigste manier om dit te doen is gebruik het Arduino AnalogReadSerial voorbeeld, en zie welke waarde krijg je voor elke druk op de knop. De meeste LCD-schermen gebruik pin A0 voor de knoppen. Zorg ervoor dat de om vertragingswaarde te wijzigen in AnalogReadSerial zodat u kunt eigenlijk zien wat de waarden worden weergegeven in de seriële monitor. Er zijn zes lezingen die u nodig hebt om te krijgen, de vijf lezingen van de knoppen, plus de lezing die je krijgt als geen toetsen worden ingedrukt.
Zodra u de lezingen van de knoppen hebt, kunt u hier de code om ervoor te zorgen dat ze allemaal werken. Een meer waarde die wordt gebruikt is de drempelwaarde. De drempel is om ervoor te zorgen dat wanneer u op de knop drukt, zal het eigenlijk registreren. Aangezien de knooppersen een DAC doorlopen, kunnen zij iets anders elke pers. Kunt u de drempelwaarde geven een +/-toevoeging zodat de knop indrukt binnen een bereik, eerder dan een exacte waarde kunt vallen. Meestal een kleine drempel zoals 2 of 3 is genoeg voor een één bord, maar als je wilt om een programma dat met vele verschillende LCD-panelen werken zal te maken (bijvoorbeeld, je maakt 10 exemplaren van uw project) dan u gebruik van een grotere drempel maken zou voor de kleine verschillen in de planken.
Extra opmerkingen hebben toegevoegd aan de code, zodat u wat alles is zien kunt voor. Nadat u hebt de code getest en alle waarden van uw knop gekregen, kunnen we gaan naar het volgende programma.
//Sample using LiquidCrystal library #include <LiquidCrystal.h> /******************************************************* This program will test the LCD panel and the buttons Mark Bramwell, July 2010 ******************************************************** // select the pins used on the LCD panel LiquidCrystal lcd(8, 9, 4, 5, 6, 7); //rs, enable, d4,d5,d6,d7 // define some values used by the panel and buttons int lcd_key = 0;//which button was pressed int adc_key_in = 0;//what was the input of the DAC #define btnRIGHT 0 #define btnUP 1 #define btnDOWN 2 #define btnLEFT 3 #define btnSELECT 4 #define btnNONE 5 //set button return values const int btnup = 130; const int btndown = 306; const int btnleft = 479; const int btnright = 0; const int select = 720; const int none = 127; //Put your button values here const int threshold = 2; //Put threshold value here int read_LCD_buttons() { adc_key_in = analogRead(A0); // read the value from the sensor if (adc_key_in > none - threshold && adc_key_in < none + threshold) return btnNONE; // We make this the 1st option for speed reasons since it will be the most likely result if (adc_key_in > btnup - threshold && adc_key_in < btnup + threshold) return btnUP; if (adc_key_in > btndown - threshold && adc_key_in < btndown + threshold) return btnDOWN; if (adc_key_in > btnleft - threshold && adc_key_in < btnleft + threshold) return btnLEFT; if (adc_key_in > btnright - threshold && adc_key_in < btnright + threshold) return btnRIGHT; if (adc_key_in > select - threshold && adc_key_in < select + threshold) return btnSELECT; //if else statements could be used, but since each statement uses return, you don't lose speed for using all if's return btnNONE; // when all others fail, return this... }//end read_LCD_Buttons void setup() { lcd.begin(16, 2); // start the library lcd.setCursor(0,0); // Set cursor to upper left corner lcd.print("Push the buttons"); // print a simple message }//end setup void loop() { lcd.setCursor(9,1); // move cursor to second line "1" and 9 spaces over lcd.print(millis()/1000); // display seconds elapsed since power-up lcd.setCursor(0,1); // move to the begining of the second line lcd_key = read_LCD_buttons(); // read the buttons switch (lcd_key) // depending on which button was pushed, we perform an action { case btnRIGHT: { lcd.print("RIGHT "); break; } case btnLEFT: { lcd.print("LEFT "); break; } case btnUP: { lcd.print("UP "); break; } case btnDOWN: { lcd.print("DOWN "); break; } case btnSELECT: { lcd.print("SELECT"); break; } case btnNONE: { lcd.print("NONE "); break; } }//end switch }//end loop