buzzer setup

This commit is contained in:
Hendrik Schutter 2018-11-28 15:16:59 +01:00
parent a144e547cc
commit 1676f9843d
7 changed files with 86 additions and 27 deletions

View File

@ -36,6 +36,9 @@
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="de.innot.avreclipse.compiler.option.incpath.2022106753" name="Include Paths (-I)" superClass="de.innot.avreclipse.compiler.option.incpath" valueType="includePath">
<listOptionValue builtIn="false" value="/usr/avr/sys-root/include/"/>
</option>
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="de.innot.avreclipse.compiler.option.def.266185078" name="Define Syms (-D)" superClass="de.innot.avreclipse.compiler.option.def" valueType="definedSymbols">
<listOptionValue builtIn="false" value="DEBUG"/>
</option>
<inputType id="de.innot.avreclipse.compiler.winavr.input.507254525" name="C Source Files" superClass="de.innot.avreclipse.compiler.winavr.input"/>
</tool>
<tool id="de.innot.avreclipse.tool.cppcompiler.app.debug.1143634285" name="AVR C++ Compiler" superClass="de.innot.avreclipse.tool.cppcompiler.app.debug">
@ -44,6 +47,7 @@
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="de.innot.avreclipse.cppcompiler.option.incpath.823066655" name="Include Paths (-I)" superClass="de.innot.avreclipse.cppcompiler.option.incpath" valueType="includePath">
<listOptionValue builtIn="false" value="/usr/avr/sys-root/include/"/>
</option>
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="true" id="de.innot.avreclipse.cppcompiler.option.def.1747193420" name="Define Syms (-D)" superClass="de.innot.avreclipse.cppcompiler.option.def" valueType="definedSymbols"/>
<inputType id="de.innot.avreclipse.cppcompiler.input.250930691" superClass="de.innot.avreclipse.cppcompiler.input"/>
</tool>
<tool id="de.innot.avreclipse.tool.linker.winavr.app.debug.853456894" name="AVR C Linker" superClass="de.innot.avreclipse.tool.linker.winavr.app.debug"/>

View File

@ -78,7 +78,7 @@ void charger::update() {
full++;
if (full == 2) {
if (full == 5) {
//not charging --> battery full
status.active = false;
full = 0;
@ -93,6 +93,8 @@ void charger::update() {
const double div = 0.000277778;
capacity = capacity + ((unsigned long int) (div * getCurrent() * 1000));
//serialSend("update\r\n");
full = 0;
}
}

View File

@ -94,9 +94,9 @@ ISR (TIMER1_COMPA_vect) {
}
#ifdef DEBUG
ISR(__vector_default) {
}
#endif

View File

@ -10,6 +10,8 @@
ioController::ioController() {
ports_init();
adc_init();
//beeps = 0;
PORTB |= (1 << BUZZER);
}
ioController::~ioController() {
@ -58,15 +60,6 @@ void ioController::setActiveLED(bool pBool) {
}
}
void ioController::setBuzzer(bool pBool) {
//TODO needs testing
if (!pBool) {
PORTB |= (1 << BUZZER); //ON
} else {
PORTB &= ~(1 << BUZZER); //OFF
}
}
void ioController::adc_init(void) {
ADMUX = (1 << REFS0); //select AVCC as reference
ADCSRA = (1 << ADEN) | 7; //enable and prescale = 128 (16MHz/128 = 125kHz)
@ -130,3 +123,45 @@ void ioController::setWS2812_red() {
setWS2812(BRIGHTNESS, 0, 0);
}
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;
}
*/
}

View File

@ -11,8 +11,10 @@
class ioController {
private:
void setWS2812(const unsigned char red, const unsigned char green,
const unsigned char blue);
void stopBuzzer();
public:
ioController();
@ -23,7 +25,7 @@ public:
void activateChargers();
void deactivateChargers();
void setActiveLED(bool pBool);
void setBuzzer(bool pBool);
void adc_init(void);
int readAdc(char chan);
void setMultiplexer(bool pS2, bool pS1, bool pS0);
@ -31,6 +33,9 @@ public:
void setWS2812_clear(void);
void setWS2812_green(void);
void setWS2812_red(void);
void startBuzzer();
};
#endif /* SRC_IOCONTROLLER_H_ */

View File

@ -30,7 +30,6 @@ int main(void) {
io = (ioController*) malloc(sizeof(ioController));
io->setBuzzer(false);
io->deactivateChargers();
io->setActiveLED(true);
io->activateChargers();
@ -42,8 +41,7 @@ int main(void) {
clk = &tmp;
createChargers();
//io.setWS2812(0, 255, 255);
io->setActiveLED(false);
//loop till power off
while (true) {
@ -73,23 +71,37 @@ void updateGUI() {
static struct time_t lastStamp[CHARGER_SIZE];
static unsigned int lastCapacity[CHARGER_SIZE];
static bool fullAlert[CHARGER_SIZE];
if (chargers[indexCount].getStatus().active) {
//charging
lastStamp[indexCount] = clk->getTime(chargers[indexCount].getStartTime());
ui->gui_print((indexCount + 1), true,
lastStamp[indexCount],
lastStamp[indexCount] = clk->getTime(
chargers[indexCount].getStartTime());
lastCapacity[indexCount] =
chargers[indexCount].getCapacity();
fullAlert[indexCount] = false;
ui->gui_print((indexCount + 1), true, lastStamp[indexCount],
chargers[indexCount].getVoltage(),
chargers[indexCount].getCurrent(),
chargers[indexCount].getCapacity());
lastCapacity[indexCount]);
io->setWS2812_red();
} else {
//full
ui->gui_print((indexCount + 1), false,
lastStamp[indexCount],
chargers[indexCount].getVoltage(),
chargers[indexCount].getCurrent(),
chargers[indexCount].getCapacity());
chargers[indexCount].getVoltage(), 0,
lastCapacity[indexCount]);
io->setWS2812_green();
if (fullAlert[indexCount] == false) {
fullAlert[indexCount] = true;
//io->startBuzzer();
}
}
notfound = false;
@ -117,12 +129,14 @@ bool everySec() {
}
void updateChargers() {
io->setActiveLED(true);
for (int i = 0; i < CHARGER_SIZE; i++) {
if (chargers[i].getStatus().connected) {
//charger active --> battery pluged on
chargers[i].update();
}
}
io->setActiveLED(false);
}
void checkForBattery() { //TODO
@ -130,7 +144,6 @@ void checkForBattery() { //TODO
static int errorCount[CHARGER_SIZE];
for (int l = 0; l < CHARGER_SIZE; l++) {
bool zero = false;
double tmp1 = 0.0;
double tmp2 = 0.0;
@ -243,7 +256,7 @@ void serialSetup(void) {
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
UCSR0C = (1 << UCSZ01) | (1 << UCSZ00);//8 bit data format
}
void serialSend(const char* sendString) {

View File

@ -1,5 +1,5 @@
#define DEBUG
//#define DEBUG
/* system header */
@ -69,7 +69,7 @@ void serialSend(const char* sendString);
/* ws2812 */
#define LED_C 1
#define BRIGHTNESS 20 //0 to 255
#define BRIGHTNESS 255 //0 to 255
void updateChargers();