From 9e35f65520ee632ee469fb0fea676152e3b0765a Mon Sep 17 00:00:00 2001 From: John Shaver Date: Wed, 12 Dec 2018 18:17:58 -0800 Subject: [PATCH] Added button for nap time --- runSchedule.js | 41 +++++++++++++++++++++++++++++++++++------ 1 file changed, 35 insertions(+), 6 deletions(-) diff --git a/runSchedule.js b/runSchedule.js index 2b30623..cbe5d74 100644 --- a/runSchedule.js +++ b/runSchedule.js @@ -1,9 +1,12 @@ const Gpio = require("pigpio").Gpio; const schedule = require("./schedule.json"); const HZ = 40000; +const NAP_DURATION = 100 * 60 * 1000; let ledRed = new Gpio(12, {mode: Gpio.OUTPUT}); let ledGreen = new Gpio(13, {mode: Gpio.OUTPUT}); +let napButton = new Gpio(6, {mode: Gpio.INPUT, pullUpDown: Gpio.PUD_UP, alert: true }); +napButton.glitchFilter(10000); let timings = schedule.times.reduce((result, time) => { result.push({start: time.time, color: time.color}); @@ -21,18 +24,44 @@ let state = { updateState(); -let updateStateInterval = setInterval(updateState, 1000); +let updateStateInterval = setInterval(updateColorState, 1000); let renderInterval = setInterval(render, 50); -function updateState() { - let time = getTime(); - let timing = timings.find(x => x.start <= time && x.end > time); - if(timing.color !== state.color) { - state = { +napButton.on("alert", startNap); + +function startNap(level, tick) { + state = { ...state, + napTime: true, + napEnd: Date.now() + NAP_DURATION + } +} + + +function updateColorState() { + let newColor = state.color; + switch(state.napTime) { + case true: + if(Date.now() < state.napEnd) { + newColor = "red"; + break; + } else { + state = { ...state, + napTime: false, + napEnd: 0, + }; + } + case false: + let time = getTime(); + let timing = timings.find(x => x.start <= time && x.end > time); + newColor = timing.color + } + if(newColor !== state.color) { + state = { ...state, color: timing.color }; } + } function render() {