Stap 6: Instellen van de tijd met Potentiometers
Als je nieuwsgierig bent, werkt een potientiometer als een divider spanning. De reden waarom de weerstand van de potmeter niet nodig is is omdat het de enige belasting tussen 5V en grond. Dus, op extreme videoconnectors aan de knop die u direct bent verbonden met grond (0V), op het andere uiterste dat u verbinding rechtstreeks naar 5V, en tussendoor krijg je een soepele transistion van 0 tot 5V. Als u sommige andere lading in serie aan toegevoegd een van de externe pinnen, dan moet u zorgvuldig overwegen welke weerstand de potmeter moet worden.
Lezing waarden uit Potentiometers
Om de tijd instellen met behulp van potentiometers, we haak één buiten leiden tot grond en de andere buiten voorsprong naar 5V en meten van de spanning van de middelste lead met behulp van analogRead(). Dit geeft een waarde tussen 0 (0V) en 1023 (5V). Na dat is het gewoon een kwestie van schalen de waarde aan het aantal uren (24) en minuten (60). We zullen de uren lezen van pin A0, en de minuten van pin A1.
Gedrag van Potentiometers (ie, Taper)
De relatie tussen de hoek van de knop en de hoeveelheid van de weerstand staat bekend als de conus. Volume knoppen hebben vaak een niet-lineaire taper, waar het vereist meer van een bocht in de buurt van het einde om een verschil te maken. Aangezien alle uur en minuut waarden gelijk zijn, lijkt het logisch dat een lineaire taper.
De Code
Alles wat nodig is is om in te stellen de m_inTimeSetMode op true voor deze stap en de uitvoering voor de methode getTimeFromPots() aan het testen van onze tijdinstelling toevoegen:
Boole m_inTimeSetMode = waar;
int HOUR_INPUT_PIN = A0;
int MIN_INPUT_PIN = a1 worden verkregen;
/**
* Deze methode leest de waarden van de 2 potentiometers, zet hen aan
* minuten en uren, en reeksen m_minute en m_hour naar de bijbehorende waarden.
*/
VOID getTimeFromPots()
{
Lees de potentiometers
int hourSensor = analogRead(HOUR_INPUT_PIN);
int minuteSensor = analogRead(MIN_INPUT_PIN);
schaal van de lezingen (van 0 tot 1023) naar de juiste schaal (0 tot en met 23 uur, 0 tot en met 59 minuten)
setTime (kaart (hourSensor, 0, 1023, 0, 23), kaart (minuteSensor, 0, 1023, 0, 59), 0);
We stellen de laatste teek op nu, omdat wanneer wij m_inTimeSetMode ingesteld op false,
kunnen veel seconden zijn verstreken sinds de laatste keer, en de tijd vooruit zou springen
m_lastTick = millis();
}