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