2018-11-21 23:17:31 +01:00
# include "openChargeMicro.h"
2018-11-22 20:43:21 +01:00
charger * chargers ;
2018-11-22 23:27:20 +01:00
clock * clk ;
2018-11-22 20:43:21 +01:00
void createChargers ( ) ;
void printStatus ( ) ;
2018-11-22 21:41:46 +01:00
void checkForBattery ( ) ;
2018-11-25 16:58:13 +01:00
void updateGUI ( ) ;
2018-11-22 23:27:20 +01:00
bool everySec ( ) ;
2018-11-22 11:50:11 +01:00
2018-11-25 16:58:13 +01:00
unsigned short int indexCount = 0 ;
2018-11-21 23:17:31 +01:00
int main ( void ) {
serialSetup ( ) ;
2018-11-22 21:41:46 +01:00
serialSend ( " Hello World - " ) ;
serialSend ( __DATE__ __TIME__ ) ;
serialSend ( " \r \n " ) ;
2018-11-21 23:17:31 +01:00
2018-11-22 21:41:46 +01:00
chargers = ( charger * ) malloc ( CHARGER_SIZE * sizeof ( charger ) ) ;
2018-11-22 23:27:20 +01:00
clk = ( clock * ) malloc ( sizeof ( clock ) ) ;
clock tmp ;
clk = & tmp ;
ioController io ;
2018-11-24 15:27:14 +01:00
io . setBuzzer ( false ) ;
2018-11-21 23:17:31 +01:00
io . deactivateChargers ( ) ;
io . setActiveLED ( true ) ;
io . activateChargers ( ) ;
2018-11-25 16:58:13 +01:00
gui ui ;
2018-11-22 21:41:46 +01:00
2018-11-25 16:58:13 +01:00
createChargers ( ) ;
2018-11-24 15:27:14 +01:00
2018-11-25 12:54:48 +01:00
io . setWS2812 ( 0 , 255 , 255 ) ;
2018-11-24 15:27:14 +01:00
2018-11-22 21:41:46 +01:00
//loop till power off
while ( true ) {
checkForBattery ( ) ;
2018-11-23 13:03:13 +01:00
printStatus ( ) ;
2018-11-25 16:58:13 +01:00
//updateChargers();
updateGUI ( ) ;
2018-11-22 21:41:46 +01:00
}
2018-11-22 14:17:39 +01:00
2018-11-22 21:41:46 +01:00
return 0 ;
}
2018-11-22 14:17:39 +01:00
2018-11-25 16:58:13 +01:00
void updateGUI ( ) {
//if (everySec()) { //updates the ui every sec
serialSend ( " - \r \n " ) ;
//}
}
2018-11-22 23:27:20 +01:00
bool everySec ( ) {
static uint32_t time ;
if ( clk - > getTime ( ) ! = time ) {
time = clk - > getTime ( ) ;
return true ;
}
return false ;
}
void updateChargers ( ) {
2018-11-25 16:58:13 +01:00
//serialSend("updateChargers\r\n");
2018-11-22 23:27:20 +01:00
if ( everySec ( ) ) { //updates the chargers every sec
for ( int i = 0 ; i < CHARGER_SIZE ; i + + ) {
if ( chargers [ i ] . getStatus ( ) ) {
//charger active --> battery pluged on
chargers [ i ] . update ( ) ;
}
}
}
}
2018-11-22 21:41:46 +01:00
void checkForBattery ( ) {
for ( int l = 0 ; l < CHARGER_SIZE ; l + + ) {
2018-11-22 14:17:39 +01:00
2018-11-22 21:41:46 +01:00
bool zero = false ;
double tmp1 = 0.0 ;
double tmp2 = 0.0 ;
2018-11-23 13:03:13 +01:00
double difference = 0.1 ;
2018-11-22 14:17:39 +01:00
2018-11-23 13:03:13 +01:00
for ( int i = 0 ; i < 8 ; i + + ) {
2018-11-22 21:41:46 +01:00
tmp2 = tmp1 ;
tmp1 = chargers [ l ] . getVoltage ( ) ;
if ( ( tmp1 = = 0.0 ) | | ( ( ( tmp1 - tmp2 > difference ) ) & & i ! = 0 ) ) {
zero = true ;
}
}
if ( ! zero ) {
/*
char charVal [ 10 ] ;
dtostrf ( chargers [ 0 ] . getVoltage ( ) , 4 , 2 , charVal ) ;
serialSend ( " Charger01 - " ) ;
serialSend ( charVal ) ;
serialSend ( " Volt \r \n " ) ;
*/
chargers [ l ] . setStatus ( true ) ;
} else {
//serialSend("blocked\r\n");
chargers [ l ] . setStatus ( false ) ;
2018-11-22 23:27:20 +01:00
chargers [ l ] . reset ( ) ;
2018-11-22 21:41:46 +01:00
}
}
2018-11-21 23:45:26 +01:00
2018-11-22 11:50:11 +01:00
}
2018-11-21 23:45:26 +01:00
2018-11-22 20:43:21 +01:00
void createChargers ( ) {
2018-11-21 23:17:31 +01:00
s_charger charger_settings ;
2018-11-22 20:43:21 +01:00
charger_settings . chU = CH0_U ;
charger_settings . chI = CH0_I ;
charger_settings . nr = CH0_NR ;
charger chrg0 = charger ( charger_settings ) ;
chargers [ 0 ] = chrg0 ;
charger_settings . chU = CH1_U ;
charger_settings . chI = CH1_I ;
charger_settings . nr = CH1_NR ;
charger chrg1 = charger ( charger_settings ) ;
chargers [ 1 ] = chrg1 ;
charger_settings . chU = CH2_U ;
charger_settings . chI = CH2_I ;
charger_settings . nr = CH2_NR ;
charger chrg2 = charger ( charger_settings ) ;
chargers [ 2 ] = chrg2 ;
charger_settings . chU = CH3_U ;
charger_settings . chI = CH3_I ;
charger_settings . nr = CH3_NR ;
charger chrg3 = charger ( charger_settings ) ;
chargers [ 3 ] = chrg3 ;
}
2018-11-21 23:17:31 +01:00
2018-11-22 20:43:21 +01:00
void printStatus ( ) {
2018-11-22 21:41:46 +01:00
//serialSend("printing status .. \r\n");
2018-11-22 20:43:21 +01:00
for ( int i = 0 ; i < CHARGER_SIZE ; i + + ) {
2018-11-22 21:41:46 +01:00
if ( chargers [ i ] . getStatus ( ) ) {
2018-11-25 16:58:13 +01:00
chargers [ i ] . getInfo ( ) ; //print values
2018-11-24 14:55:51 +01:00
//char charVal[10];
2018-11-23 21:23:40 +01:00
//dtostrf(chargers[i].getCurrent(), 4, 0, charVal);
2018-11-24 14:55:51 +01:00
//sprintf(charVal, "%i µAh\r\n", chargers[i].getCapacity());
//serialSend(charVal);
2018-11-23 21:23:40 +01:00
//serialSend(" mA\r\n");
2018-11-22 20:43:21 +01:00
}
2018-11-21 23:17:31 +01:00
}
}
void serialSetup ( void ) {
//Register settings
//High and low bits
UBRR0H = ( BUAD_RATE_CALC > > 8 ) ;
UBRR0L = BUAD_RATE_CALC ;
//transimit and recieve enable
UCSR0B = ( 1 < < TXEN0 ) | ( 1 < < TXCIE0 ) | ( 1 < < RXEN0 ) | ( 1 < < RXCIE0 ) ;
UCSR0C = ( 1 < < UCSZ01 ) | ( 1 < < UCSZ00 ) ; //8 bit data format
}
void serialSend ( const char * sendString ) {
for ( unsigned int i = 0 ; i < strlen ( sendString ) ; i + + ) {
while ( ( UCSR0A & ( 1 < < UDRE0 ) ) = = 0 ) {
} ;
UDR0 = sendString [ i ] ;
}
}