Cwik klocka v1.0 - An Arduino binär klocka (6 / 15 steg)
Steg 6: Ställa in tiden med potentiometrar
Om du är nyfiken, fungerar en potientiometer som en spänningsavdelare. Anledningen till att motståndet av potentiometern inte är nödvändigt är eftersom det är enda belastningen mellan 5V och marken. Således, på ena extrema änden av vredet du är ansluten direkt till marken (0V), på den andra ytterligheten som du är ansluten direkt till 5V, och däremellan får du en smidig transistion från 0 till 5V. Om du lagt någon annan belastning i serie till en utanför stift, då måste du noggrant överväga vilka motstånd potentiometern bör vara.
Behandlingen värden från potentiometrar
För att ställa in tid med hjälp av potentiometrar, vi koppla in en extern bly marken och andra utanför bly till 5V, och mäta spänningen från den mellersta lead med analogRead(). Detta kommer att returnera ett värde mellan 0 (0V) och 1023 (5V). Efter det är det bara en fråga om skalning värdet med antalet timmar (24) och minuter (60). Vi ska läsa i timmar från pin A0 och protokollet från stift A1.
Uppförandet av potentiometrar (dvs, avsmalnar)
Förhållandet mellan vinkeln på ratten och mängden motstånd kallas Kona. Volym knoppar har ofta en icke-linjär taper, där det krävs mer av en sväng i slutet att göra skillnad. Eftersom alla värden för timme och minut är lika, är det logiskt att ha en linjär taper.
Koden
Allt som behövs är att sätta m_inTimeSetMode till true för detta steg, och lägga till genomförandet för metoden getTimeFromPots() att testa våra tidsinställning:
booleska m_inTimeSetMode = sant;
int HOUR_INPUT_PIN = A0;
int MIN_INPUT_PIN = A1;
/**
* Denna metod läser värdena från de 2 potentiometrar, konverterar dem till
* några minuter och timmar, och uppsättningar m_minute och m_hour till de associerade värdena.
*/
void getTimeFromPots()
{
Läs potentiometrar
int hourSensor = analogRead(HOUR_INPUT_PIN);
int minuteSensor = analogRead(MIN_INPUT_PIN);
skala avläsningarna (från 0 till 1023) att i lämplig skala (0 till 23 timmar, 0 till 59 minuter)
setTime (karta (hourSensor, 0, 1023, 0, 23), karta (minuteSensor, 0, 1023, 0, 59), 0);
vi ställa in den sista markeringen nu, eftersom när vi in m_inTimeSetMode till false
många sekunder kunde har gått sedan sist, och tiden skulle hoppa framåt
m_lastTick = millis();
}