Stap 3: Gedetailleerd programma overzicht
Hier gaan we over de vier nieuwe functies die zijn toegevoegd, en elk wordt uitgelegd. Als de andere delen van de code u verwarren, controleert de controle de belasting Feedback Instructable voor een gedetailleerde uitleg van de rest van de code.
Ten eerste, de read_LCD_buttons()-functie. Deze functie doet een analogRead() op de knop pin van het LCD-scherm, en vergelijkt de waarde die deze naar de knop Voorinstelling waarden wordt gelezen. Als de waarde valt binnen de geprogrammeerde waarde (plus of minus de drempel), is resultaat het welke knop werd ingedrukt. Als het niet overeenkomt met een van de geprogrammeerde waarden, die wordt geretourneerd als geen knop wordt ingedrukt.
adc_key_in = analogRead(A0); // read the value from the sensor delay(20); if (adc_key_in > none - threshold && adc_key_in < none + threshold) return btnNONE; 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; return btnNONE; // when all others fail, return none
Ten tweede, de updateTrip()-functie. Dit controleert de Up en Down knoppen, en Hiermee vergroot of verkleint de limiet van de reis dienovereenkomstig. Het heeft debouncing ook, zodat de waarde van de reis niet te snel bijwerken. U kunt updateTime als u wilt wijzigen hoe snel de reis waarden bijwerken. U kunt Houd de knop reis waarden snel veranderen. Door het veranderen van updateTime, kunt u wijzigen hoe snel (of langzaam) de reis waarde verandert wanneer u omhoog houden of omlaag knop naar beneden. Als de waarde 0 raakt en u verder naar beneden, zal het rollen op 999. Als u 999 raken en blijven, zal het rollen op 0.
if (button == btnUP) { currentTimetrip = millis() - lastUpdate; if (currentTimetrip > updateTime) { maxAmps = maxAmps + 1; if (maxAmps > 999) maxAmps = 0;//check for rollover lastUpdate = millis(); }//end if }//end if btnUP else if (button == btnDOWN) { currentTimetrip = millis() - lastUpdate; if (currentTimetrip > updateTime) { maxAmps = maxAmps - 1; if (maxAmps < 0) maxAmps = 999;//check for rollover lastUpdate = millis(); }//end if }//end else if btnDOWN
Ten derde is de updateLCD() functie. Dit schrijft nieuwe waarden naar het LCD-scherm, zodat u kunt zien wat er gebeurt in uw programma. Het setCursor() gebruikt om de cursor rond het scherm, en de berichten op de juiste plaats zetten. de eerste waarde in setCursor() is de rijpositie waarin de cursor zich bevindt, de tweede waarde is of de cursor in de bovenste of onderste rij. Omdat de limiet van de reis tussen 0-999 worden kan, wordt de cursor verplaatst naar verschillende plekken afhankelijk van als een waarde van 1, 2 of 3 cijfers is. Er zijn afgedrukte spaties ("") die worden gebruikt om de plek waar het nummer is gedrukt. Als de plek niet gewist was, wanneer u van een 2 cijferige waarde tot een waarde van 1 cijfer, zal niet het tweede cijfer krijgen uitgeschakeld wanneer het eerste cijfer wordt bijgewerkt, wat betekent dat uw LCD-scherm rare getallen wilt weergeven.
lcd.setCursor(0, 1); lcd.print("Amps: 0"); lcd.setCursor(8, 1); lcd.print("Trip: 0"); lcd.setCursor(13, 1); lcd.print(" ");//clear old value if (maxAmps > 99) lcd.setCursor(13, 1); else if (maxAmps > 9) lcd.setCursor(14, 1); else lcd.setCursor(15, 1); lcd.print(maxAmps);//write new value
Laatste is de printFeedback() functie. Het is zeer vergelijkbaar met de updateLCD() functie, het is gewoon aparte zodat de waarde van de huidige amp loting wordt bijgewerkt in real-time, liever dan eens elke keer dat het programma een lus. Deze functie wordt aangeroepen voor het bijwerken van het amp trekt wanneer de functie getFeedback() wordt aangeroepen om te lezen wat het amp tekent is.
lcd.setCursor(5, 1); lcd.print(" "); if (CRaw > 99) lcd.setCursor(5, 1); else if (CRaw > 9) lcd.setCursor(6, 1); else lcd.setCursor(7, 1); lcd.print(CRaw);