Étape 10 : Bouton et capteur code
Le code gère les boutons, l’interrupteur et le capteur tactile est divisé en deux fonctions, pour vérifier si les touches sont pressées et un pour faire ce que les boutons doit si elles sont pressées c'est-à-dire réglage de l’heure, réglage de l’alarme, snooze et activer ou désactiver l’alarme.Tout d’abord, j’ai écrit le code avec debouncing pour les boutons, mais plus tard quand j’ai testé mes boutons, que j’ai remarqué que je ne semble pas en avoir besoin, alors j’ai enlevé l’antirebonds pour obtenir moins et plus facile à lire le code, mais j’ai inclus la fonction avec debouncing dans le f_comments_etc d’onglet dans le sketch.
Recherchez sur les touches :
Le code qui vérifie si les boutons sont pressés sont très simples. Il lit juste l’état des broches boutons. Les résistances de pullup interne arduinos sont utilisés afin que les États de boutons sont élevés lorsqu’elles ne sont pas pressées et faible lorsqu’elles sont pressées.
Le capteur tactile est lu avec l’aide de la bibliothèque CapSense: touch_sensor.capSense(10) ce mesurera la capacité 10 fois et retour en moyenne. Selon la valeur retournée de la snooze_button_state variable va être définie soit haute ou basse. J’ai trouvé que quand je repose ma main sur le couvercle de l’horloge je vais obtenir une valeur d’environ 150 et avec aucune main environ 30 (si je me souviens bien). J’ai donc utilisé 100 comme limite pour modifier l’état de la répétition-« bouton ». Modifiez la valeur si nécessaire.
______________________________________________________________________
La fonction qui vérifie les touches :
Sub update_buttons_state()
{
hour_button_state = digitalRead(hour_button_pin) ;
minute_button_state = digitalRead(minute_button_pin) ;
setting_switch_state = digitalRead(setting_switch_pin) ;
/ * Lire le capteur de touche snooze: * /
if(touch_sensor.capSense(10) > 100) / / ajuster cette valeur si nécessaire
snooze_button_state = bas ;
d’autre
snooze_button_state = élevé ;
l’if-else ci-dessus j’ai pense que peut être écrite plus courtes comme :
snooze_button_state = (touch_sensor.capSense(10) > 100) ? BAS : HAUT ;
}
______________________________________________________________________
Faire des choses si les boutons sont pressés :
Le commutateur de réglages modifiera les deux pointeurs hours_p minutes_p pour pointer vers soit les variables heures et les minutes, ou les alarm_hours et les alarm_minutes. Le code pour les boutons heure et minute utilisera ces pointeurs, donc lorsque le commutateur change ils définira automatiquement la bonne chose ; alarme ou l’heure. La fonction d’affichage utilise également le hours_p et minutes_p pointeurs alors lorsque le sélecteur de paramètres est sur alarme, l’heure de l’alarme est affiché.
L’heure et minute boutons augmentation les heures et minutes en un temps elles sont pressées.
La touche snooze va désactiver le signal d’alarme et définir un Roupillon hors temps (heure + 10 minutes) quand le signal devrait recommencer. Il affecte également la variable snooze_on la valeur true, cela provoquera la fonction d’alarme pour commencer à vérifier lors de la répétition du temps est.
Si le bouton snooze est maintenu enfoncée pendant 3 secondes, il basculera l’alarme désactivée ou activée. Un ton aigu est joué lorsque l’alarme est activée et une tonalité faible pente est émises lorsque l’alarme est désactivée.
______________________________________________________________________
La fonction des boutons :
VARIABLES « INTERNES » POUR LES BOUTONS DE FONCTION :
Boolean first_time_hour = true ; ceux-ci sont utilisés pour s’assurer que les heures
Boolean first_time_minute = true ; et minutes seulement est augmenté une fois chaque keypress.
unsigned long snooze_button_timer ; utilisée pour garder une trace de combien de temps le bouton snooze a
été maintenue enfoncée. Quand la touche a été enfoncée
un certain laps de temps, l’alarme est activée
de complètement.
Sub buttons()
{
BAS == touche enfoncée
HAUT == relâchez le bouton
(c’est parce que les résistances pullup est utilisé)
/ / Décider si nous devons définir l’heure ou :
(cela donne aussi l’afficheur indique l’heure de l’alarme)
if(setting_switch_state==Low) / / faible = temporisation
{
hours_p = & heures ;
minutes_p = & minutes ;
}
else / / HIGH = alarme
{
hours_p = & alarm_hours ;
minutes_p = & alarm_minutes ;
}
Si l’heure est enfoncée, augmenter le nombre d’heures :
Si (hour_button_state == LOW & & first_time_hour) / / seulement augmenter les heures une fois
{/ / appuyer sur chaque bouton.
Si (* hours_p < 23)
(* hours_p) ++ ;
d’autre
* hours_p = 0 ;
first_time_hour = false ;
if(DEBUG)
{
Serial.println ("augmentation d’heure") ;
Serial.println(hour_button_state) ;
}
}
d’autre if(hour_button_state==HIGH)
{
first_time_hour = true ; remis à zéro quand le bouton est relâché,
} / / afin que la presse prochaine sera inscrit.
/ / Si la touche minute, augmentation minutes :
Si (minute_button_state == LOW & & first_time_minute) / / seulement augmenter le procès-verbal
{/ / une fois appuyer sur chaque bouton.
Si (* minutes_p < 59)
(* minutes_p) ++ ;
d’autre
* minutes_p = 0 ;
first_time_minute = false ;
}
d’autre if(minute_button_state==HIGH)
{
first_time_minute = true ; remis à zéro quand le bouton est relâché,
} / / afin que la presse prochaine sera inscrit.
if(snooze_button_state==Low)
{
if(signal_on)
{
régler l’heure lorsque le signal d’alarme reprendra à nouveau
Cela vous donnera 10 minutes snooze :
if(minutes<50)
{
snooze_off_minutes = minutes + 10 ;
snooze_off_hours = heures ;
}
d’autre
{
snooze_off_minutes = minutes - 50 ;
snooze_off_hours = heures + 1 ;
}
snooze_on = true ;
signal_on = false ;
}
Si le bouton snooze a été maintenu enfoncée pour plus de 3 secondes activer/désactiver l’alarme
if((Millis() - snooze_button_timer) > 3000)
{
if(alarm_on) / / si on, éteignez
{
signal_on = false ;
alarm_on = false ;
Jouez le ton afin que l’utilisateur connaît l’alarme désactivée :
tone_maker.Play (NOTE_A3, 100) ;
}
if(alarm_on==false) Else / / si off, allumez
{
alarm_on = true ;
Jouez le ton afin que l’utilisateur connaît l’alarme désactivée :
tone_maker.Play (NOTE_A7, 100) ;
}
réinitialiser le compteur de bouton snooze
snooze_button_timer=Millis() ;
}
}
d’autre
{
réinitialiser le compteur de bouton snooze
snooze_button_timer=Millis() ;
}
}
___________________________________________________________________