From f75e87330ff9afb85600cd2e5d05b16b9ead8d19 Mon Sep 17 00:00:00 2001 From: Vassily Petrov <vassily@vassily.org> Date: Wed, 14 Oct 2020 17:48:56 -0500 Subject: [PATCH] added cutoff when battery voltage is too low --- athome_firmware.cpp | 42 +++++++++++++++++++++++++++++++++++++----- athome_firmware.h | 1 + defs.h | 3 ++- 3 files changed, 40 insertions(+), 6 deletions(-) diff --git a/athome_firmware.cpp b/athome_firmware.cpp index 844be2b..0cda75c 100644 --- a/athome_firmware.cpp +++ b/athome_firmware.cpp @@ -9,6 +9,7 @@ #include <avr/boot.h> #include <EEPROM.h> #include <avr/wdt.h> +#include <avr/sleep.h> #include "athome_firmware.h" #include "photo_measure.h" @@ -93,7 +94,7 @@ void main_a() Wire.begin(); analogReference(EXTERNAL); - pinMode(5, OUTPUT); // heater + pinMode(HEATER, OUTPUT); // heater pinMode(2, OUTPUT); pinMode(UV_LED, OUTPUT); pinMode(7, OUTPUT); //Blue Led @@ -102,7 +103,7 @@ void main_a() pinMode(16, OUTPUT); digitalWrite(7, HIGH); digitalWrite(UV_LED, LOW); - digitalWrite(5, LOW); // heater + digitalWrite(HEATER, LOW); // heater digitalWrite(2, LOW); Wire.beginTransmission(0x48); @@ -193,7 +194,7 @@ void main_a() // calibration mode. MCUSR = 0; wdt_disable(); - pinMode(5, LOW); // disable heater just in case. + digitalWrite(HEATER, LOW); // disable heater just in case. u8g2.firstPage(); do @@ -226,7 +227,7 @@ void main_a() // temp calibration measurement mode. MCUSR = 0; wdt_disable(); - pinMode(5, LOW); // disable heater just in case. + digitalWrite(HEATER, LOW); // disable heater just in case. while(1){ val = 0; for(int i=0; i< 32; i++){ @@ -299,6 +300,12 @@ void main_a() measure_trigger_delay = 0; } + if ( state == STATE_IDLE && voltage < 6.4){ + lowbatt(false); + }else if( voltage < 6){ + lowbatt(true); + } + //delay(5); } } @@ -370,6 +377,31 @@ void task_temp() dirs_idx = next; power = int(max(0.0, min(POWER_MAX, P * (setpoint - temp) + I * (integ / 100) + D * (10 * dirs_sum)))); } - analogWrite(5, power); + analogWrite(HEATER, power); } + + +void lowbatt( boolean disablescreen ) +{ + digitalWrite(HEATER, LOW); // disable heater + digitalWrite(UV_LED, LOW); // disable illimunator + digitalWrite(7, LOW); //Blue Led + digitalWrite(8, LOW); // Button + digitalWrite(9, LOW); // Green Led + + u8g2.firstPage(); + do + { + u8g2.setDrawColor(1); + u8g2.setFont(FONT); + u8g2.drawStr(14, 39, "LOW BATT"); + } while (u8g2.nextPage()); + + MCUSR = 0; + wdt_disable(); + cli(); + set_sleep_mode(SLEEP_MODE_PWR_DOWN); + while(1)sleep_mode(); + +} \ No newline at end of file diff --git a/athome_firmware.h b/athome_firmware.h index 4cebdec..4415f13 100644 --- a/athome_firmware.h +++ b/athome_firmware.h @@ -3,5 +3,6 @@ void main_a(); void task_temp(); +void lowbatt( boolean disablescreen ); #endif \ No newline at end of file diff --git a/defs.h b/defs.h index aaa75b4..c525286 100644 --- a/defs.h +++ b/defs.h @@ -13,6 +13,7 @@ #define FAN 16 #define UV_LED 6 +#define HEATER 5 // led plugged into fan temporarily //#define UV_LED 16 @@ -25,6 +26,6 @@ #define POWER_MAX 50.0 #define FONT u8g2_font_helvR14_tr -#define VERSION 25 +#define VERSION 26 #endif \ No newline at end of file -- GitLab