Paso 10: Botón y sensor del código
El código de manipulación de los botones, el interruptor y el sensor de contacto se divide en dos funciones, una para comprobar si se pulsan los botones y uno para hacer lo que los botones debe pulsar que son es decir, establecer tiempo, configuración de la alarma, snooze y activar o desactivar la alarma.Primero escribí el código contra rebotes para los botones, pero más tarde, cuando probé mi botones que me di cuenta de que no parece necesitarla, por lo que quité el debouncing obtener menos y más fácil de leer código, sin embargo incluí la función contra rebotes en la pestaña f_comments_etc en el bosquejo.
Verificación de pulsar un botón:
El código que comprueba si se pulsan los botones son realmente sencillos. Simplemente lee el estado de los pines botones. Las resistencias de pullup interna arduinos se utilizan para que los Estados de botones son altos cuando no se presionan y baja cuando se presionan.
El sensor de contacto se lee con ayuda de la biblioteca CapSense: touch_sensor.capSense(10) esto medir la capacitancia de 10 veces y regresar un promedio. Según el valor devuelto de la snooze_button_state variable se establecerá ya sea alta o baja. He encontrado que cuando apoye mi mano sobre la tapa del reloj será obtener un valor alrededor de 150 y con ninguna mano cerca de 30 (si recuerdo mal). usé 100 como límite para cambiar el estado de pausa-"botón". Cambiar el valor.
______________________________________________________________________
La función que pulsar un botón:
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);
/ * Leer el sensor de contacto snooze: * /
if(touch_sensor.capSense(10) > 100) / / Ajuste este valor si es necesario
snooze_button_state = bajo;
otra cosa
snooze_button_state = alto;
el if-else de arriba yo creo que se podría escribir más corto como:
¿snooze_button_state = (touch_sensor.capSense(10) > 100)? BAJA: ALTA;
}
______________________________________________________________________
Hacer las cosas si se pulsan los botones:
El interruptor de configuración cambiarán los dos punteros hours_p y minutes_p para indicar tanto las horas variables y minutos, o alarm_hours y alarm_minutes. El código para los botones hour y minute utilizará estos punteros, así que cuando el interruptor se establece automáticamente lo correcto; alarma o tiempo. La función de visualización también utiliza el hours_p y minutes_p punteros así que cuando el interruptor de configuración está en alarma, la hora de alarma se muestra.
Hora y minuto botones aumento el tiempo horas y minutos por cada uno que se pulsan.
El botón snooze se apague la señal de alarma y establecer una pausa de tiempo (hora + 10 minutos) cuando la señal debe empezar de nuevo. también establece la variable snooze_on a true, esto hará que la función de alarma empezar a comprobar cuando la repetición del tiempo.
Si se mantiene el botón snooze pulsado durante 3 segundos accionará la alarma apagada o encendida. Un tono agudo se toca cuando la alarma está activada y un tono bajo tono se reproduce cuando la alarma se apaga.
______________________________________________________________________
La función de botones:
VARIABLES "INTERNAS" PARA LA FUNCIÓN DE BOTONES:
Boolean first_time_hour = true; se utilizan para asegurarse de que las horas
Boolean first_time_minute = true; minutos sólo se incrementa una vez cada tecla.
snooze_button_timer largo sin firmar; utilizado para realizar un seguimiento de cuánto tiempo tiene el botón snooze
se ha pulsado. Cuando se ha celebrado el botón de
una cierta cantidad de tiempo, la alarma se activará
de totalmente.
void buttons()
{
BAJO == botón pulsado
ALTO == botón liberado
(esto es porque se utiliza de enderezamiento)
/ / Decidir si deberíamos establecer hora o alarma:
(esto también hace la pantalla muestra la hora de alarma)
if(setting_switch_state==Low) / / bajo = tiempo
{
hours_p = & horas;
minutes_p = & minutos;
}
Else / / alta = alarma
{
hours_p = & alarm_hours;
minutes_p = & alarm_minutes;
}
Si se presiona el botón de la hora, aumentar horas:
Si (hour_button_state == baja & & first_time_hour) / / sólo aumentar las horas una vez
{/ / Pulse cada botón.
Si (* hours_p < 23)
(* hours_p) ++;
otra cosa
* hours_p = 0;
first_time_hour = false;
if(DEBUG)
{
Serial.println ("aumento de horas");
Serial.println(hour_button_state);
}
}
if(hour_button_state==HIGH) más
{
first_time_hour = true; Cuando se suelta el botón,
} / / para que la prensa siguiente sean registrados.
/ / Si se pulsa el botón de minutos, minutos aumentar:
Si (minute_button_state == baja & & first_time_minute) / / sólo para aumentar los minutos
{/ / una vez que pulsa cada botón.
Si (* minutes_p < 59)
(* minutes_p) ++;
otra cosa
* minutes_p = 0;
first_time_minute = false;
}
if(minute_button_state==HIGH) más
{
first_time_minute = true; Cuando se suelta el botón,
} / / para que la prensa siguiente sean registrados.
if(snooze_button_state==Low)
{
if(signal_on)
{
ajustar la hora cuando la señal de alarma comenzará de nuevo,
Esto le dará pausa de 10 minutos:
if(minutes<50)
{
snooze_off_minutes = minutos + 10;
snooze_off_hours = horas;
}
otra cosa
{
snooze_off_minutes = minutos - 50;
snooze_off_hours = horas + 1;
}
snooze_on = true;
signal_on = false;
}
Si el botón snooze ha sido presionado para más de 3 segundos activar/desactivar la alarma
if((Millis() - snooze_button_timer) > 3000)
{
if(alarm_on) / / si, apagar
{
signal_on = false;
alarm_on = false;
jugar a tono para que el usuario sepa la alarma apagada:
tone_maker.Play (NOTE_A3, 100);
}
if(alarm_on==false) else / / si apagado, encender
{
alarm_on = true;
jugar a tono para que el usuario sepa la alarma apagada:
tone_maker.Play (NOTE_A7, 100);
}
reiniciar el temporizador botón de snooze
snooze_button_timer=Millis();
}
}
otra cosa
{
reiniciar el temporizador botón de snooze
snooze_button_timer=Millis();
}
}
___________________________________________________________________