batt display, low batt shutdown, timeout shutdown

This commit is contained in:
2021-03-27 14:00:37 +01:00
parent 79edcef8ce
commit 0146c32da4
14 changed files with 4962 additions and 3865 deletions

View File

@@ -1,35 +1,11 @@
#ifndef BOARDH
#define BOARDH
#define HARDWAREVERSION 11
#ifndef UNIT_TEST
#if HARDWAREVERSION==11
#define LED3 PB2 //D3
#define LED2 PB8 //D4
#define LED1 PB7 //D5
#define DETECT3 PA6 //A5
#define DETECT2 PA5 //A4
#define DETECT1 PA4 //A3
#define SWITCH3 PA7 //A6 TOGGLE1
#define SWITCH32 PA2 //A7 MOMENTARY1
#define SWITCH2 PA1 //A1 TOGGLE1
#define SWITCH22 PA3 //A2 MOMENTARY1
#define SWITCH1 PB6 //D11 TOGGLE1
#define SWITCH12 PB5 //D12 MOMENTARY1
#define LD3LED PB3
#define WAKEUPPIN PA2
#define REDLEDRES
#define YELLOWLEDRES
#define GREENLEDRES
#elif HARDWAREVERSION==10
#if HARDWAREVERSION==9 //proto board with nucleo32l031 board
#define LED3 PB0 //D3
#define LED2 PB7 //D4
@@ -49,15 +25,70 @@
#define LD3LED PB3
#define WAKEUPPIN PA2
#define REDLEDRES
#define YELLOWLEDRES
#define GREENLEDRES
#elif HARDWAREVERSION==10 //v1.0 PCB
#define LED3 PB2
#define LED2 PB8
#define LED1 PB7
#define DETECT3 PA6
#define DETECT2 PA5
#define DETECT1 PA4
#define SWITCH3 PA7 //A6 TOGGLE1
#define SWITCH32 PA2 //A7 MOMENTARY1
#define SWITCH2 PA1 //A1 TOGGLE1
#define SWITCH22 PA3 //A2 MOMENTARY1
#define SWITCH1 PB6 //D11 TOGGLE1
#define SWITCH12 PB5 //D12 MOMENTARY1
#define LD3LED PB3
#define WAKEUPPIN PA2
#define VBATTPIN PA0 //A0 VBATT
#define R12 3.3
#define R13 10
#define REDLEDRES
#define YELLOWLEDRES
#define GREENLEDRES
#elif HARDWAREVERSION==11
#define LED3 PB2
#define LED2 PB8
#define LED1 PB7
#define DETECT3 PA6
#define DETECT2 PA5
#define DETECT1 PA4
#define SWITCH3 PA7 //A6 TOGGLE1
#define SWITCH32 PA2 //A7 MOMENTARY1
#define SWITCH2 PA1 //A1 TOGGLE1
#define SWITCH22 PA3 //A2 MOMENTARY1
#define SWITCH1 PB6 //D11 TOGGLE1
#define SWITCH12 PB5 //D12 MOMENTARY1
#define LD3LED PB3
#define WAKEUPPIN PA2
#define VBATTPIN PA0 //A0 VBATT
#define R12 4.7
#define R13 10
#define MEASTRIGGER PA8
#define REDLEDRES
#define YELLOWLEDRES
#define GREENLEDRES
#else
#error No hardware version defined
#error No hardware version defined!!
#endif
#else
#else //UNIT_TEST
#define LED1 0 //D3
#define LED2 1 //D4

View File

@@ -8,9 +8,10 @@
#include "simpleled.h"
#include "buttons.h"
#include "led.h"
#include "power.h"
#define TIMEOUT 300000 // 5min* 60 sec * 1000ms
#define TIMEOUT 900000 // 15min* 60 sec * 1000ms
#define GAMESELECTTIMEOUT 10000 // 7sec * 1000ms
typedef enum
@@ -55,7 +56,7 @@ void HandleIdle(void)
if (buttonIsPressed(YELLOW) && buttonIsPressed(RED) && !buttonIsPressed(GREEN) & (nextGame == none))
{
//prepare for next game
nextGame = detectLED;
nextGame = SimpleLed;
turnOffLed(GREEN);
}
@@ -70,8 +71,8 @@ void HandleIdle(void)
void HandleGameSelectTimeout(void)
{
uint64_t currentmillis = millis();
// yellow && red && green all on
if (buttonIsPressed(YELLOW) && buttonIsPressed(RED) && buttonIsPressed(GREEN))
//if (yellow && red && green)
{
//all buttons pressed, wait for next game
if (!GameSelectTimer)
@@ -95,35 +96,33 @@ void HandleGameSelectTimeout(void)
}
}
// void HandleTimeOut(void)
// {
// uint64_t currentmillis = millis();
// if (!lasttimeOut)
// {
// lasttimeOut = currentmillis;
// buttonChanged = anybutton();
// }
void HandleTimeOut(void)
{
uint64_t currentmillis = millis();
if (!lasttimeOut)
{
lasttimeOut = currentmillis;
buttonChanged = anybutton();
}
// //check if lastTime is initialized or timeout expired
// if ((currentmillis - lasttimeOut > TIMEOUT))
// {
// LowPower.shutdown();
// }
// else
// {
// if (buttonChanged != anybutton())
// {
// buttonChanged = anybutton();
// //game in progress, update timer
// lasttimeOut = currentmillis;
// }
// }
// }
//check if lastTime is initialized or timeout expired
if ((currentmillis - lasttimeOut > TIMEOUT))
{
currentGame = sleep;
turnOffAllLed();
shutdown();
}
else
{
if (buttonChanged != anybutton())
{
buttonChanged = anybutton();
//game in progress, update timer
lasttimeOut = currentmillis;
}
}
}
// void initSleep( void )
// {
// LowPower.begin();
// }
void setup()
{
@@ -131,12 +130,14 @@ void setup()
initButtons();
initDetectLed();
initSimpleLed();
initLowPower();
initBattery();
}
void loop()
{
handleButtons();
//HandleTimeOut();
HandleTimeOut();
HandleGameSelectTimeout();
switch (currentGame)
@@ -175,10 +176,13 @@ void loop()
case none:
{
currentGame = SimpleLed;
if (buttonIsPressed(YELLOW))
batteryCheck();
batterydisplay();
delay(1000);
if (buttonIsPressed(GREEN))
{
currentGame = ChainGame;
turnOnLed(YELLOW);
turnOnLed(GREEN);
}
if (buttonIsPressed(RED))
{
@@ -186,14 +190,15 @@ void loop()
turnOnLed(RED);
}
if (buttonIsPressed(GREEN))
if (buttonIsPressed(YELLOW))
{
currentGame = detectLED;
turnOnLed(GREEN);
currentGame = SimpleLed;
turnOnLed(YELLOW);
}
//wait for all buttons idle
while (anybutton())
;
{}
turnOffAllLed();
}

75
src/power.cpp Normal file
View File

@@ -0,0 +1,75 @@
#include "power.h"
#include "board.h"
#include "rtc.h"
#include "low_Power.h"
#include "led.h"
#ifdef VBATTPIN
#include "Battery.h"
Battery battery(2500, 4160, VBATTPIN);
#endif
void initBattery(void)
{
#ifdef VBATTPIN
battery.begin(3300, (R12+R13)/R13); //R1 = 220K, R2 = 100K, factor = (R1+R2)/R2
#endif
}
uint16_t batteryGetVoltage( void )
{
return battery.voltage();
}
void batterydisplay(void)
{
#ifdef VBATTPIN
uint16_t currentlevel = battery.level();
uint16_t currentvoltage = batteryGetVoltage();
if(currentvoltage)
{
if (currentlevel > 90)
{
turnOnLed(3);
}
if (currentlevel > 50)
{
turnOnLed(2);
}
if (currentlevel > 20)
{
turnOnLed(1);
}
}
#endif
}
void batteryCheck(void)
{
#ifdef VBATTPIN
if (battery.level() < 10)
{
for( int i = 0; i < 10;i++)
{
turnOnLed(1);
delay(300);
turnOffLed(1);
delay(300);
}
delay(5000);
shutdown();
}
#endif
}
//low power
void initLowPower(void)
{
LowPower_init();
}
void shutdown(void)
{
LowPower_shutdown();
}

10
src/power.h Normal file
View File

@@ -0,0 +1,10 @@
#pragma once
//battery
void initBattery( void );
void batterydisplay( void );
void batteryCheck(void);
//low power
void initLowPower( void );
void shutdown( void );