diff options
| author | Daniel Friesel <derf@finalrewind.org> | 2020-03-23 22:25:43 +0100 | 
|---|---|---|
| committer | Daniel Friesel <derf@finalrewind.org> | 2020-03-23 22:25:43 +0100 | 
| commit | cdd2c91952da3655fa960ef69bb6993cf5738be6 (patch) | |
| tree | 50ef1be0ad0e9f1e6068544f4594b4f3471ccadc /src/app | |
| parent | de23a47009bb301518417d097b3360253a01c635 (diff) | |
blinkencat: show approximate charge level on power-on
Diffstat (limited to 'src/app')
| -rw-r--r-- | src/app/blinkencat3/main.cc | 18 | 
1 files changed, 15 insertions, 3 deletions
| diff --git a/src/app/blinkencat3/main.cc b/src/app/blinkencat3/main.cc index 4498623..f543bf1 100644 --- a/src/app/blinkencat3/main.cc +++ b/src/app/blinkencat3/main.cc @@ -17,6 +17,7 @@ class Blinkencat {  	public:  		enum Mode : uint8_t {  			OFF = 0, +			CHARGE_LEVEL,  			RGBWHEEL_FAST,  			RGBWHEEL_SLOW,  			RGBFADE_FAST, @@ -32,6 +33,7 @@ class Blinkencat {  		};  		Mode mode; +		uint16_t vcc;  		void setup(void);  		void next_mode(void); @@ -42,7 +44,7 @@ class Blinkencat {  		void idle(void);  		void loop(void); -		Blinkencat() : btn_debounce(0), mode(OFF) {} +		Blinkencat() : btn_debounce(0), mode(OFF), vcc(0) {}  };  void Blinkencat::setup(void) @@ -109,14 +111,14 @@ void Blinkencat::check_battery(void)  		uint8_t adcr_l = ADCL;  		uint8_t adcr_h = ADCH;  		uint16_t adcr = adcr_l + (adcr_h << 8); -		uint16_t vcc = 1100L * 1023 / adcr; +		vcc = 1100L * 1023 / adcr;  		TIFR1 |= _BV(TOV1);  		ADCSRA |= _BV(ADIF);  		//kout << "VCC is " << vcc << endl;  		// 3.1 V under load ~~ 3.5 V idle -		if (vcc < 3100) { +		if (vcc < 3000) {  			for (uint8_t i = 0; i < 5; i++) {  				for (uint8_t i = 0; i < NUM_PIXELS; i++) {  					np.setPixelColor(i, np.Color(0, 0, 0)); @@ -190,6 +192,16 @@ void Blinkencat::loop(void)  			np.show();  			sleep();  			break; +		case CHARGE_LEVEL: +			for (uint8_t i = 0; i < NUM_PIXELS; i++) { +				if (i < ((vcc - 3400) * NUM_PIXELS / 700)) { +					np.setPixelColor(i, np.Color((vcc < 3850) * 200, (vcc > 3700) * 200, 0)); +				} +			} +			np.show(); +			_delay_ms(2000); +			mode = RGBWHEEL_FAST; +			// fall-through  		case RGBWHEEL_FAST:  		case RGBWHEEL_SLOW:  			for (uint16_t i = 0; i < NUM_PIXELS; i++) { | 
