2018-11-21 23:17:31 +01:00
/*
* ioController . cpp
*
* Created on : 20.11 .2018
* Author : Hendrik Schutter
*/
# include "openChargeMicro.h"
ioController : : ioController ( ) {
ports_init ( ) ;
adc_init ( ) ;
}
ioController : : ~ ioController ( ) {
}
double ioController : : get5VProbe ( ) {
int tmp = ( int ) readAdc ( 2 ) ;
double ret = ( ( double ) tmp ) * 0.006242 ;
return ret ;
}
double ioController : : get15VProbe ( ) {
int tmp = ( int ) readAdc ( 1 ) ;
double ret = ( ( double ) tmp ) * 0.014968 ;
return ret ;
}
void ioController : : ports_init ( ) {
DDRB | = 1 < < ACTIVELED ;
DDRB | = 1 < < BUZZER ;
DDRB | = 1 < < POWERON ;
DDRD | = 1 < < S2 ;
DDRD | = 1 < < S1 ;
DDRD | = 1 < < S0 ;
DDRC & = ~ ( 1 < < PROBE15V ) ;
DDRC & = ~ ( 1 < < PROBE5V ) ;
DDRC & = ~ ( 1 < < Z ) ;
}
void ioController : : activateChargers ( ) {
PORTB & = ~ ( 1 < < POWERON ) ; //OFF
}
void ioController : : deactivateChargers ( ) {
PORTB | = ( 1 < < POWERON ) ; //ON
}
void ioController : : setActiveLED ( bool pBool ) {
if ( pBool ) {
PORTB | = ( 1 < < ACTIVELED ) ; //ON
} else {
PORTB & = ~ ( 1 < < ACTIVELED ) ; //OFF
}
}
2018-11-22 20:43:21 +01:00
void ioController : : setBuzzer ( bool pBool ) {
//TODO needs testing
2018-11-24 15:27:14 +01:00
if ( ! pBool ) {
2018-11-22 20:43:21 +01:00
PORTB | = ( 1 < < BUZZER ) ; //ON
} else {
PORTB & = ~ ( 1 < < BUZZER ) ; //OFF
}
}
2018-11-21 23:17:31 +01:00
void ioController : : adc_init ( void ) {
ADMUX = ( 1 < < REFS0 ) ; //select AVCC as reference
ADCSRA = ( 1 < < ADEN ) | 7 ; //enable and prescale = 128 (16MHz/128 = 125kHz)
}
int ioController : : readAdc ( char ch ) {
ADMUX = ( 1 < < REFS0 ) | ( ch & 0x0f ) ; //select input and ref
ADCSRA | = ( 1 < < ADSC ) ; //start the conversion
while ( ADCSRA & ( 1 < < ADSC ) )
; //wait for end of conversion
return ADCW ;
}
void ioController : : setMultiplexer ( bool pS2 , bool pS1 , bool pS0 ) {
if ( pS0 ) {
PORTD | = ( 1 < < S0 ) ; //ON
} else {
PORTD & = ~ ( 1 < < S0 ) ; //OFF
}
if ( pS1 ) {
PORTD | = ( 1 < < S1 ) ; //ON
} else {
PORTD & = ~ ( 1 < < S1 ) ; //OFF
}
if ( pS2 ) {
PORTD | = ( 1 < < S2 ) ; //ON
} else {
PORTD & = ~ ( 1 < < S2 ) ; //OFF
}
}
2018-11-24 14:55:51 +01:00
void ioController : : setWS2812 ( const unsigned char red , const unsigned char green ,
const unsigned char blue ) {
WS2812 led ( LED_C ) ;
led . set_output ( & PORTD , & DDRD , DDD2 ) ;
Color strobe ;
uint8_t i ;
strobe . r = red ;
strobe . g = green ;
strobe . b = blue ;
for ( i = 0 ; i < LED_C ; i + + )
led . set_rgb_at ( i , strobe ) ;
led . sync ( ) ;
}
2018-11-26 22:04:00 +01:00
void ioController : : setWS2812_clear ( ) {
setWS2812 ( 0 , 0 , 0 ) ;
}
void ioController : : setWS2812_green ( ) {
setWS2812 ( 0 , BRIGHTNESS , 0 ) ;
}
void ioController : : setWS2812_red ( ) {
setWS2812 ( BRIGHTNESS , 0 , 0 ) ;
}