This is the code used on my video series "Hybrid Supercapacitor Car Battery" for my own hardware monitoring system. THe videos can be found on madelectronengineering.com

Dependencies:   BurstSPI Fonts INA219 mbed LPC1114_WakeInterruptIn

Fork of SharpMemoryLCD by Paul Staron

Revision:
2:0c49a8f32f6e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Tue Dec 26 21:30:09 2017 +0000
@@ -0,0 +1,159 @@
+/* This is a project for madelectronengineering.com
+ This code is used for a hardware monitoring system for the Hybrid Supercapacitor Car Battery to monitor the supercap voltage, the LiFeP04 voltage,
+current, and wattage, plus also monitor 3 seperate temperature points.
+
+Required hardware:
+    STM32 NUCLEO-L073RZ
+    TMP36 Temperature Sensors (x3)
+    INA219 Current & Voltage Breakout (modify by removing 0.1Ohm resistor and replacing with 0.01Ohm Resistor to measure up to 32Amps
+    ST NUCLEO Protoboard
+    30k & 7.5k resistors for voltage divider to measure supercap voltage
+    0.1Ohm 25W current limiting power resistor in between supercap array and LiFeP04 battery
+    Sharp Memory LCD 400x240
+    
+The INA219 measures the current and amperage on the battery side of the current limiting resistor to keep an eye on the LiFeP04 battery.
+voltage divider connects directly to + of supercap array
+
+Arduino equivelant connections:
+A0 - TMP36 #1
+A1 - TMP36 #2
+A2 - TMP36 #3
+A3 - Voltage divider Input
+A4&A5 - I2C for INA219
+
+Arduino equivelant connections for LCD Screen:
+D13 - SClk
+D11 - MOSI
+D10 - CD
+D9 - Enable
+D8 - Extcom
+
+*/
+#include "mbed.h"
+#include "SharpLCD.h"
+#include "INA219.hpp"
+#include "Neu44x36.h"
+#include "Neu31x26.h"
+#include "WakeUp.h"
+
+SharpLCD display(PA_7, NC, PA_5, PB_6, PC_7, PA_9); //mosi, miso(not used), sck, cs, enable, extcom
+INA219 ina219(PC_1, PC_0, 0x40, 400000, RES_12BITS);
+AnalogIn   ain1(PA_0); // connect A0 to Vout(Temp36)
+AnalogIn   ain2(PA_1); // connect A1 to Vout(Temp36)
+AnalogIn   ain3(PA_4); // connect A2 to Vout(Temp36)
+AnalogIn   ain4(PB_0); // Connect A3 to Voltage Divider
+
+int main()
+{        
+    display.enableDisplay();  //enable sharp memory lcd
+    display.clearImmediate();   //clear the screen buffer and screen
+    
+    display.set_font(Neu44x36);
+       
+       //only send graphics and text once to the screen during bootup
+       display.locate(17,0);
+       display.printf("Hybrid Supercap");
+       display.locate(75,35);
+       display.printf("Car Battery");
+       
+       display.rect(0,73,195,239, Black);
+       display.rect(205,73,399,239, Black);
+       display.fillrect(195,73,10,167, Black);
+       display.line(1,174,194,174, Black);
+       display.line(1,176,194,176, Black);
+       display.line(1,107,194,107, Black);
+       display.line(206,107,399,107, Black);
+       display.line(1,141,194,141, Black);
+       display.line(206,141,399,141, Black);
+       display.line(1,175,194,175, Black);
+       display.line(206,175,399,175, Black);
+       display.line(1,209,194,209, Black);
+       display.line(206,209,399,209, Black);
+       
+       display.set_font(Neu31x26);
+       display.locate(15,76);
+       display.printf("Supercaps");
+       display.locate(240,76);
+       display.printf("LiFePo4");
+       display.locate(30,179);
+       display.printf("Resistor");
+       
+       display.locate(360,110);
+       display.printf("V");
+       display.locate(360,143);
+       display.printf("A");
+       display.locate(360,177);
+       display.printf("W");
+       display.locate(155,212);
+       display.printf("'F");
+       display.locate(360,212);
+       display.printf("'F");
+       display.locate(155,143);
+       display.printf("'F");
+       display.locate(155,110);
+       display.printf("V");
+       
+  while(1) {    
+       
+       float volt;
+       float current_ma;
+       float power;
+                  
+       volt       = ina219.read_bus_voltage();
+       current_ma = ina219.read_current_mA() / 1000;
+       power      = volt * current_ma;
+       
+       float V1 = ain1.read() * 3.3; // connect Vs(Tmp36) to 3.3V        
+       float tempC1 = (V1-0.5) * 100; // calculate temperature C
+       float tempF1 = (tempC1 * 9 / 5) + 32.0; // calculate temperature F
+       
+       float V2 = ain2.read() * 3.3; // connect Vs(Tmp36) to 3.3V        
+       float tempC2 = (V2-0.5) * 100; // calculate temperature C
+       float tempF2 = (tempC2 * 9 / 5) + 32.0; // calculate temperature F
+       
+       float V3 = ain3.read() * 3.3; // connect Vs(Tmp36) to 3.3V        
+       float tempC3 = (V3-0.5) * 100; // calculate temperature C
+       float tempF3 = (tempC3 * 9 / 5) + 32.0; // calculate temperature F
+ 
+       float V4 = (ain4.read()) * 3.3; // Voltage divider for supercap voltage
+       float voltage = (V4 * 5);   // Voltage divider is 1 to 5 ratio
+   
+       display.set_font(Neu31x26);
+       display.locate(210,110);
+       display.printf("      ");
+       display.locate(210,110);
+       display.printf("%+05.2f", volt);      
+       display.locate(210,143);
+       display.printf("      "); 
+       display.locate(210,143);
+       display.printf("%+04.1f", current_ma);      
+       display.locate(210,177);
+       display.printf("      ");
+       display.locate(210,177);
+       display.printf("%+05.1f", power);      
+       display.locate(20,212);
+       display.printf("      ");
+       display.locate(20,212);
+       display.printf("%+03.0f", tempF1);      
+       display.locate(210,212);
+       display.printf("      ");
+       display.locate(210,212);
+       display.printf("%+03.0f", tempF2);      
+       display.locate(20,143);
+       display.printf("      ");
+       display.locate(20,143);
+       display.printf("%+03.0f", tempF3);      
+       display.locate(20,110);
+       display.printf("      ");
+       display.locate(20,110);
+       display.printf("%+05.2f", voltage);       
+
+       display.update();
+ 
+//Set wakeup time for 1 second
+//        WakeUp::set_ms(500);
+        
+        //Enter deepsleep, the program won't go beyond this point until it is woken up
+//        deepsleep();   
+}
+}
\ No newline at end of file