Central Heating controller using the real time clock, PHY module for internet, 1-wire interface for temperature sensors, a system log and a configuration file
Dependencies: net 1-wire lpc1768 crypto clock web fram log
/media/uploads/andrewboyson/heating.sch
/media/uploads/andrewboyson/heating.brd
/media/uploads/andrewboyson/eagle.epf
Diff: heating/hall-pb.c
- Revision:
- 58:d968191f46f2
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/heating/hall-pb.c Tue May 07 07:42:24 2019 +0000 @@ -0,0 +1,74 @@ +#include <stdbool.h> +#include <stdint.h> + +#include "gpio.h" +#include "radiator.h" +#include "program.h" +#include "mstimer.h" +#include "rit.h" + +#define HALL_PB_PIN FIO0PIN(05) // P0.05 == p29; + +#define DEBOUNCE_MS 20 +#define LONG_PRESS_MS 3000 +#define INACTIVE_REVERT_MS 30000 + +static int ms = 0; + +static void (*ritHook)(); + +static void ritHandler() +{ + if (ritHook) ritHook(); //Call the RIT function chain before this + + if (HALL_PB_PIN) { if (ms < DEBOUNCE_MS) ms++; } + else { if (ms > 0 ) ms--; } +} + +static bool getHallPbPressed() +{ + static bool pressed = false; + if (ms >= DEBOUNCE_MS) pressed = false; + if (ms <= 0) pressed = true; + return pressed; +} + +bool HallPbOverrideMode = true; + +void HallPbInit() +{ + ritHook = RitHook; + RitHook = ritHandler; +} +void HallPbMain() +{ + static uint32_t hallButtonPushedMsTimer = 0; + static uint32_t hallButtonNotPushedMsTimer = 0; + + static bool buttonWasPressed = false; + static bool buttonWasLongPressed = false; + + bool buttonIsPressed = getHallPbPressed(); + bool buttonIsLongPressed; + if (buttonIsPressed) + { + buttonIsLongPressed = MsTimerRelative(hallButtonPushedMsTimer, LONG_PRESS_MS); + hallButtonNotPushedMsTimer = MsTimerCount; + } + else + { + buttonIsLongPressed = false; + hallButtonPushedMsTimer = MsTimerCount; + } + + if (buttonIsLongPressed && !buttonWasLongPressed) HallPbOverrideMode = !HallPbOverrideMode; + if (MsTimerRelative(hallButtonNotPushedMsTimer, INACTIVE_REVERT_MS)) HallPbOverrideMode = true; + + if (!buttonIsPressed && buttonWasPressed && !buttonWasLongPressed) + { + if (HallPbOverrideMode) RadiatorChgOverride(); + else RadiatorChgWinter(); + } + buttonWasPressed = buttonIsPressed; + buttonWasLongPressed = buttonIsLongPressed; +} \ No newline at end of file