Stap 10: Knop en sensor code
De code behandeling van de knoppen, is de schakelaar en de touch sensor verdeeld in twee functies hebben, één voor het controleren of de knoppen zijn ingedrukt en één voor het doen van wat de knoppen moet als ze worden ingedrukt, dat wil zeggen de tijd, het instellen van het alarm, snooze en activeren of deactiveren het alarm.Ik voor het eerst schreef de code met debouncing voor de knoppen, maar later toen ik mijn knoppen die ik merkte testte dat ik lijken niet nodig, dus ik verwijderde de debouncing om minder en makkelijker te lezen van de code, maar ik de functie met debouncing opgenomen in de f_comments_etc van de tab in de schets.
Selectievakje voor knooppersen:
De code controleert als de toetsen worden ingedrukt zijn echt eenvoudig. Het leest gewoon de stand van de knoppen pinnen. De arduinos interne pullup weerstanden worden gebruikt zodat de knoppen Staten zijn hoog als ze niet worden ingedrukt en lage wanneer ze worden ingedrukt.
De touch sensor wordt gelezen met behulp van de bibliotheek van CapSense: touch_sensor.capSense(10) dit zal meten de capaciteit 10 keer en een gemiddelde terug te keren. Afhankelijk van de waarde die het resultaat van de snooze_button_state variabele ingesteld op hoog of laag. Ik heb gemerkt dat wanneer ik mijn hand laat op het deksel van de klok rusten zou ik een waarde rond 150 en met geen hand ongeveer 30 krijgen zal (als ik me goed herinner). dus ik gebruikte 100 als de limiet te wijzigen van de status van de snooze-"button". De waarde desgewenst wijzigen.
______________________________________________________________________
De functie controleert voor knooppersen:
VOID update_buttons_state()
{
hour_button_state = digitalRead(hour_button_pin);
minute_button_state = digitalRead(minute_button_pin);
setting_switch_state = digitalRead(setting_switch_pin);
/ * Lees de snooze touch sensor: * /
if(touch_sensor.capSense(10) > 100) / / deze waarde desgewenst aanpassen
snooze_button_state = laag;
anders
snooze_button_state = hoog;
de als-anders hierboven ik denk korter als kon worden geschreven:
snooze_button_state = (touch_sensor.capSense(10) > 100)? LAAG: HOOG;
}
______________________________________________________________________
Dingen te doen als de knoppen worden ingedrukt:
De schakelaar van de instellingen zal veranderen de twee pointers hours_p en minutes_p te wijzen de variabelen uren en minuten, of alarm_hours en alarm_minutes. De code voor de knoppen uur en minuut zal het gebruiken van deze aanwijzingen, dus wanneer de schakeloptie wijzigt zij het juiste ding; automatisch ingesteld alarm of tijd. De display-functie gebruikt ook de hours_p en minutes_p aanwijzers dus als de schakelaar instellingen op alarm, de alarmtijd wordt weergegeven.
De uur en minuut knoppen verhoging van het aantal uren en minuten door een ieder tijd zij worden ingedrukt.
De snooze-knop moet uitschakelen van het alarmsignaal en stel een snooze-tijd uitschakelen (huidige tijd + 10 minuten) wanneer het signaal opnieuw moet beginnen. het wordt ook de variabele snooze_on ingesteld op true, zal hierdoor de alarmfunctie om te starten om te controleren wanneer de snooze tijd is.
Als de snooze-knop 3 seconden ingedrukt wordt gehouden, zal het het alarm aan of uit schakelen. Een hoge doordringende Toon wordt afgespeeld wanneer het alarm is ingeschakeld en een laag gooide Toon wordt afgespeeld wanneer het alarm wordt uitgeschakeld.
______________________________________________________________________
De functie van de knoppen:
"INTERNE" VARIABELEN VOOR DE FUNCTIE VAN DE KNOPPEN:
Boole first_time_hour = waar; deze worden gebruikt om ervoor te zorgen dat de uren
Boole first_time_minute = waar; en minuten alleen wordt verhoogd eenmaal elke ToetsIndrukken (KeyPress).
unsigned long snooze_button_timer; gebruikt om bij te houden hoe lang de snooze-knop heeft
is ingedrukt. Wanneer de knop heeft plaatsgevonden naar beneden
een bepaalde hoeveelheid tijd, het alarm zal worden gedraaid
van volledig.
VOID buttons()
{
LAAG == knop ingedrukt
HOOG == knop vrijgegeven
(dit is omdat pullup resistors wordt gebruikt)
/ / Beslissen als we tijd of alarm moet instellen:
(Hierdoor wordt ook het display tonen de alarmtijd)
if(setting_switch_state==low) / / laag = tijdinstelling
{
snooze_button_timer=Millis();
}
}
___________________________________________________________________