diff --git a/CMakeLists.txt b/CMakeLists.txt index d5ce2c0..885c8ba 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -19,7 +19,7 @@ set(COMPILE_FLAGS "" CACHE STRING "Additional Compiler Flags") # Set own source files # Simply list all your C / C++ source (not header!) files here -set(SRC_FILES main.cpp serial.cpp WirelessRelay.cpp pwm.cpp) +set(SRC_FILES main.cpp serial.cpp WirelessRelay.cpp pwm.cpp rgbled.cpp) # Compiler suite specification set(CMAKE_C_COMPILER /usr/bin/avr-gcc) diff --git a/eeprom.h b/eeprom.h index bb28b58..46e0772 100644 --- a/eeprom.h +++ b/eeprom.h @@ -1,8 +1,7 @@ void EEPROM_write_char(uint16_t address, unsigned char data) { /* Wait for completion of previous write */ - while(EECR & (1<on(); - pwmTc2->on(); + rgbled->on(); serial->putString("RGB lights on\n\n"); } else if( strncmp(inBuffer, "off", 3) == 0 ) { - pwmTc0->off(); - pwmTc2->off(); + rgbled->off(); serial->putString("RGB lights off\n\n"); } else if( strncmp(inBuffer, "print", 5) == 0 ) { char buffer[64]; - sprintf(buffer, "Current RGB values:\nR: %u G: %u B: %u\n\n", OCR0A, OCR0B, OCR2B); + sprintf(buffer, "Current RGB values:\nR: %u G: %u B: %u\n\n", rgbled->getR(), rgbled->getG(), rgbled->getB()); serial->putString(buffer, 64); } else if( strncmp(inBuffer, "set", 3) == 0 ) @@ -115,21 +114,27 @@ void rgbDispatch(Pwm8b* pwmTc0, Pwm8b* pwmTc2, char* inBuffer, Serial* serial) { inBuffer[7] = '\0'; inBuffer[11] = '\0'; - pwmTc0->setDutyA(atoi(inBuffer+4)); - pwmTc0->setDutyB(atoi(inBuffer+8)); - pwmTc2->setDutyB(atoi(inBuffer+12)); + rgbled->setSolidColor(atoi(inBuffer+4), atoi(inBuffer+8), atoi(inBuffer+12)); serial->putString("Set RGB values\n\n"); } else serial->putString("Usage: rgb set [RRR] [GGG] [BBB]\n\n"); } + else if( strncmp(inBuffer, "pattern", 7) == 0 ) + { + rgbled->setPattern(atoi(inBuffer+8)); + } + else if( strncmp(inBuffer, "preset", 6) == 0 ) + { + rgbled->setPreset(atoi(inBuffer+7)); + } else { serial->putString(inBuffer, COMMAND_BUFFER_SIZE-4); - serial->putString(" is not a valid subcommand: rgb [/on/off/print/set]\n\n"); + serial->putString(" is not a valid subcommand: rgb [/on/off/print/set/pattern/preset]\n\n"); } } -void serialDispatch(Serial* serial , WirelessRelayStore* relays, Pwm8b* pwmTc0, Pwm8b* pwmTc2) +void serialDispatch(Serial* serial , WirelessRelayStore* relays, RgbLed* rgbled) { if(serial->dataIsWaiting()) @@ -147,7 +152,7 @@ void serialDispatch(Serial* serial , WirelessRelayStore* relays, Pwm8b* pwmTc0, } else if(length > 2 && strncmp(buffer, "rgb", 3) == 0) { - rgbDispatch(pwmTc0, pwmTc2, buffer+4, serial); + rgbDispatch(rgbled, buffer+4, serial); } else if(length > 4 && strncmp(buffer, "erase", 5) == 0) { @@ -200,29 +205,22 @@ int main() */ Pwm8b pwmTc0( &TCCR0A, &TCCR0B, &OCR0A, &OCR0B, 0b00000011, true, true ); - Pwm8b pwmTc2( &TCCR2A, &TCCR2B, &OCR2A, &OCR2B, 0b00000101, false, true ); + pwmTc0.off(); + pwmTc2.off(); - bool pattern = true; + RgbLed rgbled( &pwmTc0, &pwmTc2 ); WirelessRelayStore relays; relays.count=0; restore_relays(&relays); - uint8_t counter = 0; - - serial.putString("RGBController v0.1 starting\n\n"); + serial.putString("RGBController v0.2 starting\n\n"); while(true) { - serialDispatch(&serial, &relays, &pwmTc0, &pwmTc2); - if(pattern) - { - counter++; - pwmTc0.setDutyA(counter); - pwmTc0.setDutyB(counter-64); - pwmTc2.setDutyB(counter-128); - _delay_ms(20); - } + serialDispatch(&serial, &relays, &rgbled); + rgbled.logic(); + _delay_ms(2); } return 0; //master interupt.