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 ( ) ;
2018-11-28 15:16:59 +01:00
//beeps = 0;
PORTB | = ( 1 < < BUZZER ) ;
2018-11-21 23:17:31 +01:00
}
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
}
}
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 ) ;
}
2018-11-28 15:16:59 +01:00
void ioController : : startBuzzer ( ) {
//beeps = 0;
//PORTB |= (1 << BUZZER); // switch Buzzer on
PORTB & = ~ ( 1 < < BUZZER ) ;
// Set the Timer Mode to CTC
TCCR0A | = ( 1 < < WGM01 ) ;
// Set the value that you want to count to
OCR0A = 0xFF ;
TIMSK0 | = ( 1 < < OCIE0A ) ; //Set the ISR COMPA vect
TCCR0B | = ( 1 < < CS02 ) | ( 1 < < CS00 ) ;
// set prescaler to 1024 and start the timer
sei ( ) ;
//enable interrupts
}
void ioController : : stopBuzzer ( ) {
/*
if ( beeps < 100 ) {
if ( beeps % 10 = = 0 ) {
PORTB ^ = ( 1 < < BUZZER ) ;
}
beeps + + ;
} else {
//PORTB &= ~(1 << BUZZER); // switch Buzzer off
PORTB | = ( 1 < < BUZZER ) ;
TCCR0B = 0 ; //stop timer
beeps = 0 ;
}
*/
}