Force Feedback med LCD-skärm (1 / 4 steg)
Steg 1: LCD-skärm knappar
LCD-skärmen har sex knappar på den, fem som är tillgängliga för användning. Vi kommer att använda fyra av dem för vårt projekt. Knapparna är upp, ner, vänster, höger och välj Återställ. Knappen Återställ återställer hela Arduino. Vi använder de fyra riktningsknapparna. Upp och ner ställer den nuvarande gränsen, vänster och höger flyttar manöverdonet.
LCD-skärmen sätter alla fem knappar genom en Digital till Analog omvandlare så att de bara tar upp en PIN-kod. Baksidan till detta är att du måste kalibrera dina knappar.
Det enklaste sättet att göra detta är att använda Arduino AnalogReadSerial exempel, och se vilket värde du får för varje knapptryckning. De flesta LCD-skärmar använder pin A0 för knapparna. Ska du ändra fördröjningen värdet i AnalogReadSerial så att du kan faktiskt se vilka värden visas i den seriella monitorn. Det finns sex behandlingar som du behöver få, de fem avläsningarna av knappar, plus den behandlingen som du får när någon knapp trycks.
När du har avläsningarna av knappar, kan du använda koden här att se till att de alla arbetar. En mer värde som används är tröskeln. Tröskeln är att se till att när du trycker på knappen, det faktiskt kommer att registrera. Eftersom knapptryckningar går igenom en DAC, de kan vara lite olika varje tryck. Du använda tröskelvärdet för att ge en +/-tillägg så att den knapptryckningar kan falla inom ett intervall, snarare än en exakt värde. En liten tröskel som 2 eller 3 är vanligtvis tillräckligt för en enda styrelse, men om du vill göra ett program som kommer att arbeta med många olika LCD (till exempel, du gör 10 exemplar av projektet) då du skulle använda en större tröskel för att redovisa de små skillnaderna i styrelser.
Extra kommentarer har lagts till koden så att du kan se vad allt är till för. När du har testat koden och fått alla din knapp värden, kan vi gå vidare till nästa program.
Prov med LiquidCrystal biblioteket
#include < LiquidCrystal.h >
/*******************************************************
Detta program kommer att testa LCD-panelen och knapparna
Mark Bramwell, juli 2010
********************************************************
Välj stift används på LCD-panelen
LiquidCrystal lcd (8, 9, 4, 5, 6, 7); rs, aktivera, d4, d5, d6 och d7
definiera vissa värden används av panel och knappar
int lcd_key = 0; //which knappen trycktes
int adc_key_in = 0; //what var tillförsel av DAC
#define btnRIGHT 0
#define btnUP 1
#define btnDOWN 2
#define btnLEFT 3
#define btnSELECT 4
#define btnNONE 5 //set knappen returnera värden
CONST int btnup = 130;
CONST int btndown = 306;
CONST int btnleft = 479;
CONST int btnright = 0;
CONST int Välj = 720;
CONST int ingen = 127; Sätta din knapp värden här
CONST int tröskel = 2; Lägg tröskelvärde här
int read_LCD_buttons()
{
adc_key_in = analogRead(A0); läsa värdet från sensorn
om (adc_key_in > ingen - tröskeln & & adc_key_in < ingen + tröskel) återvända btnNONE; Vi gör detta alternativet 1. hastighet skäl eftersom det är mest sannolikt resultatet
om (adc_key_in > btnup - tröskeln & & adc_key_in < btnup + tröskel) återvända btnUP;
om (adc_key_in > btndown - tröskeln & & adc_key_in < btndown + tröskel) återvända btnDOWN;
om (adc_key_in > btnleft - tröskeln & & adc_key_in < btnleft + tröskel) återvända btnLEFT;
om (adc_key_in > btnright - tröskeln & & adc_key_in < btnright + tröskel) återvända btnRIGHT;
om (adc_key_in > Välj - tröskeln & & adc_key_in < Välj + tröskel) återvända btnSELECT;
om else-satser kan användas, men eftersom varje sats använder avkastningen, förlorar du inte hastighet för att använda alla om
återvända btnNONE; När alla andra misslyckas, tillbaka detta...
} //end read_LCD_Buttons
void setup()
{
LCD.BEGIN (16, 2); Starta biblioteket
lcd.setCursor(0,0); Ställa markören till övre vänstra hörnet
LCD.Print ("Push knappar"); skriva ut ett enkelt budskap
} //end setup
void loop()
{
lcd.setCursor(9,1); flytta markören till andra raden "1" och 9 utrymmen över
LCD.Print(Millis()/1000); Display sekunder som förflutit sedan uppstart
lcd.setCursor(0,1); flytta till början av den andra raden
lcd_key = read_LCD_buttons(); Läs knapparna
växel (lcd_key) / / beroende på vilken knapp var sköt, vi utför en åtgärd
{
fall btnRIGHT:
{
LCD.Print ("höger");
bryta;
}
fall btnLEFT:
{
LCD.Print ("vänster");
bryta;
}
fall btnUP:
{
LCD.Print ("UP");
bryta;
}
fall btnDOWN:
{
LCD.Print ("ned");
bryta;
}
fall btnSELECT:
{
LCD.Print("Select");
bryta;
}
fall btnNONE:
{
LCD.Print ("NONE");
bryta;
}
} //end switch
} //end loop