Force Feedback med LCD-skärm (3 / 4 steg)
Steg 3: Detaljerat Program översikt
Här kommer vi att gå över de fyra nya funktioner som har lagts till, och förklara var och en. Om de andra delarna av koden förvirra dig, kontrollera övervaknings belastning Feedback Instructable för en detaljerad förklaring av resten av koden.
Första funktionen read_LCD_buttons(). Denna funktion gör en analogRead() på den knapp pin av LCD-skärmen, och jämför det värde som den läser av förinställda knappen värdena. Om värdet faller inom det inprogrammerade värdet (plus eller minus tröskeln), returnerar det vilken knapp trycktes. Om det misslyckas att matcha en av de programmerade värdena returneras som ingen knapp trycks.
adc_key_in = analogRead(A0); läsa värdet från sensorn
Delay(20);
om (adc_key_in > ingen - tröskeln & & adc_key_in < ingen + tröskel) återvända btnNONE;
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;
återvända btnNONE; När alla andra misslyckas, återvända ingen
Andra funktionen updateTrip(). Detta kontrollerar upp och ner knappar, och ökar eller minskar resa gränsen därför. Den har debouncing också, så resan värdet inte kan uppdatera för fort. Du kan justera updateTime om du vill ändra hur snabbt resa värdena uppdatera. Håll ned knappen för att snabbt byta resa värden. Genom att ändra updateTime, kan du ändra hur snabbt (eller långsam) resa värde ändringarna när du håller upp eller ner knappen ner. Om värdet träffar 0, och du fortsätter att gå ner, kommer det rulla över till 999. Om du träffar 999 och fortsätta upp, det kommer att rulla över till 0.
om (knappen == btnUP)
{
currentTimetrip = millis() - SenasteUppdatering;
om (currentTimetrip > updateTime)
{
maxAmps = maxAmps + 1.
om (maxAmps > 999) maxAmps = 0; //check för rollover
SenasteUppdatering = millis();
} //end om
} //end om btnUP
annars om (knappen == btnDOWN)
{
currentTimetrip = millis() - SenasteUppdatering;
om (currentTimetrip > updateTime)
{
maxAmps = maxAmps - 1;
om (maxAmps < 0) maxAmps = 999; //check för rollover
SenasteUppdatering = millis();
} //end om
} //end annars om btnDOWN
För det tredje är funktionen updateLCD(). Detta skriver nya värden till LCD-skärmen, så du kan se vad som händer i ditt program. SetCursor() används för att flytta markören runt på skärmen och lägga meddelanden på rätt plats. det första värdet i setCursor() är rad positionen som markören står i, det andra värdet är om markören är i den övre eller nedre raden. Sedan resa gränsen kan vara mellan 0-999, flyttas markören till olika ställen beroende om det är en 1, 2 eller 3-siffringa * värdet. Det finns utrymmen skrivs ut ("") som används för att rensa plats där numret skrivs ut. Om plats inte Avmarkerades när du byter från ett 2 siffrigt värde till ett värde av 1 siffra, kommer inte den andra siffran få bort när den första siffran är uppdaterad, vilket innebär att din LCD-skärm skulle Visa konstiga tal.
lcd.setCursor (0, 1);
LCD.Print ("ampere: 0");
lcd.setCursor (8, 1);
LCD.Print ("resa: 0");
lcd.setCursor (13, 1);
LCD.Print(""), //clear gamla värde
om (maxAmps > 99) lcd.setCursor (13, 1);
annars om (maxAmps > 9) lcd.setCursor (14, 1);
annat lcd.setCursor (15, 1);
LCD.Print (maxAmps), //write nya värde
Senast är funktionen printFeedback(). Det är mycket lik den updateLCD() funktionen, det är bara separat så att värdet av den nuvarande amp dra uppdateras i realtid, snarare än en gång varje gång programmet loopar. Denna funktion kallas för att uppdatera förstärkaren dra när funktionen getFeedback() anropas för att läsa vad amp Rita är.
lcd.setCursor (5, 1);
LCD.Print("");
om (CRaw > 99) lcd.setCursor (5, 1);
annars om (CRaw > 9) lcd.setCursor (6, 1);
annat lcd.setCursor (7, 1);
LCD.Print(CRaw);