reformat in uvostyle
This commit is contained in:
634
main.cpp
634
main.cpp
@ -33,13 +33,13 @@ static bool resendEnabled = false;
|
||||
|
||||
ISR(PCINT1_vect)
|
||||
{
|
||||
W433DataReciver::staticInterrupt();
|
||||
W433DataReciver::staticInterrupt();
|
||||
}
|
||||
|
||||
ISR(WDT_vect)
|
||||
{
|
||||
if(++resendCounter > 225)
|
||||
{
|
||||
{
|
||||
resendCounter = 0;
|
||||
if(resendEnabled)resendNow = true;
|
||||
}
|
||||
@ -47,8 +47,8 @@ ISR(WDT_vect)
|
||||
|
||||
inline static void printHelp(Serial* serial)
|
||||
{
|
||||
|
||||
serial->write_p(PSTR("Available Commands: \n\
|
||||
|
||||
serial->write_p(PSTR("Available Commands: \n\
|
||||
help : Show this prompt.\n\
|
||||
item add [id] [type] [name]: Add Wireless item. Save to make permant.\n\
|
||||
item delete [n] : Delete n'th item. Save to make permant.\n\
|
||||
@ -82,7 +82,7 @@ int freeRAM()
|
||||
void save()
|
||||
{
|
||||
EEPROM_write_char(4, resendEnabled);
|
||||
EEPROM_write_class< SVector<Item, MAX_ITEMS> > (ITEM_VECTOR_EEPROM_ADDR, items);
|
||||
EEPROM_write_class< SVector<Item, MAX_ITEMS> > (ITEM_VECTOR_EEPROM_ADDR, items);
|
||||
}
|
||||
|
||||
void loadRGB(RgbLed* rgbled)
|
||||
@ -93,47 +93,48 @@ void loadRGB(RgbLed* rgbled)
|
||||
void load()
|
||||
{
|
||||
resendEnabled = EEPROM_read_char(4);
|
||||
EEPROM_read_class< SVector<Item, MAX_ITEMS> > (ITEM_VECTOR_EEPROM_ADDR, &items);
|
||||
EEPROM_read_class< SVector<Item, MAX_ITEMS> > (ITEM_VECTOR_EEPROM_ADDR, &items);
|
||||
}
|
||||
|
||||
void writeItemState(Serial* serial, Item* relay, uint8_t number)
|
||||
{
|
||||
const uint16_t id = relay->id;
|
||||
snprintf(buffer, SNPRINTF_BUFFER_SIZE, "ITEM NUMBER: %u ID: %s%s%s%s TYPE: %u STATE: %u NAME: %s\n", number,
|
||||
bit_rep[ id >> 12],
|
||||
bit_rep[(id & 0x0F00) >> 8 ],
|
||||
bit_rep[(id & 0x00F0) >> 4 ],
|
||||
bit_rep[(id & 0x000F)],
|
||||
relay->type,
|
||||
relay->lastValue,
|
||||
relay->name
|
||||
);
|
||||
snprintf(buffer, SNPRINTF_BUFFER_SIZE, "ITEM NUMBER: %u ID: %s%s%s%s TYPE: %u STATE: %u NAME: %s\n", number,
|
||||
bit_rep[ id >> 12],
|
||||
bit_rep[(id & 0x0F00) >> 8 ],
|
||||
bit_rep[(id & 0x00F0) >> 4 ],
|
||||
bit_rep[(id & 0x000F)],
|
||||
relay->type,
|
||||
relay->lastValue,
|
||||
relay->name
|
||||
);
|
||||
serial->write(buffer, SNPRINTF_BUFFER_SIZE);
|
||||
}
|
||||
|
||||
void itemDispatch(SVector<Item, MAX_ITEMS>* items, Pwm16b* auxPwm, char* token, Serial* serial)
|
||||
{
|
||||
if( strcmp(token, "add") == 0 )
|
||||
{
|
||||
token = strtok(NULL, " \n");
|
||||
uint16_t id = strtol(token, nullptr, 2 );
|
||||
token = strtok(NULL, " \n");
|
||||
uint8_t type = strtol(token, nullptr, 10 );
|
||||
if(id != 0 && (type == 0 || type == 1) && items->remainingCapacity() > 0)
|
||||
{
|
||||
token = strtok(NULL, "\n\0");
|
||||
Item item;
|
||||
item.id = id;
|
||||
item.type = type;
|
||||
if( token != NULL ) item.setName(token);
|
||||
items->push_back(item);
|
||||
writeItemState(serial, &items->back(), items->count()-1);
|
||||
}
|
||||
else if(items->remainingCapacity() == 0) serial->write_p(PSTR("Relay storage full.\n"));
|
||||
else serial->write_p(PSTR("Usage: item add [id] [type] [name]\n [id] being a 16bit binary nummber and [name] an optional string\n"));
|
||||
}
|
||||
else if( strcmp(token, "delete") == 0 )
|
||||
{
|
||||
if( strcmp(token, "add") == 0 )
|
||||
{
|
||||
token = strtok(NULL, " \n");
|
||||
uint16_t id = strtol(token, nullptr, 2 );
|
||||
token = strtok(NULL, " \n");
|
||||
uint8_t type = strtol(token, nullptr, 10 );
|
||||
if(id != 0 && (type == 0 || type == 1) && items->remainingCapacity() > 0)
|
||||
{
|
||||
token = strtok(NULL, "\n\0");
|
||||
Item item;
|
||||
item.id = id;
|
||||
item.type = type;
|
||||
if( token != NULL ) item.setName(token);
|
||||
items->push_back(item);
|
||||
writeItemState(serial, &items->back(), items->count()-1);
|
||||
}
|
||||
else if(items->remainingCapacity() == 0) serial->write_p(PSTR("Relay storage full.\n"));
|
||||
else serial->write_p(
|
||||
PSTR("Usage: item add [id] [type] [name]\n [id] being a 16bit binary nummber and [name] an optional string\n"));
|
||||
}
|
||||
else if( strcmp(token, "delete") == 0 )
|
||||
{
|
||||
token = strtok(NULL, " \n");
|
||||
if(items->count() > 0)
|
||||
{
|
||||
@ -143,248 +144,250 @@ void itemDispatch(SVector<Item, MAX_ITEMS>* items, Pwm16b* auxPwm, char* token,
|
||||
serial->write(buffer, SNPRINTF_BUFFER_SIZE);
|
||||
items->erase(index);
|
||||
}
|
||||
}
|
||||
else if( strcmp(token, "on") == 0 )
|
||||
{
|
||||
char* token = strtok(NULL, " \n");
|
||||
if( token != NULL)
|
||||
{
|
||||
uint8_t selected = strtol(token, nullptr, 10);
|
||||
if (selected < items->count())
|
||||
{
|
||||
}
|
||||
else if( strcmp(token, "on") == 0 )
|
||||
{
|
||||
char* token = strtok(NULL, " \n");
|
||||
if( token != NULL)
|
||||
{
|
||||
uint8_t selected = strtol(token, nullptr, 10);
|
||||
if (selected < items->count())
|
||||
{
|
||||
items->at(selected).lastValue = true;
|
||||
if(items->at(selected).type == 0)WirelessRelay(items->at(selected)).setValue(true);
|
||||
else UvosItem(items->at(selected)).setValue(true);
|
||||
|
||||
writeItemState(serial, &items->at(selected), selected);
|
||||
}
|
||||
else serial->write_p(PSTR("No sutch item\n"));
|
||||
}
|
||||
else serial->write_p(PSTR("Usage: item on [nn]\n"));
|
||||
}
|
||||
else if( strcmp(token, "off") == 0 )
|
||||
{
|
||||
char* token = strtok(NULL, " \n");
|
||||
if( token != NULL)
|
||||
{
|
||||
uint8_t selected = strtol(token, nullptr, 10);
|
||||
if (selected < items->count())
|
||||
{
|
||||
else UvosItem(items->at(selected)).setValue(true);
|
||||
|
||||
writeItemState(serial, &items->at(selected), selected);
|
||||
}
|
||||
else serial->write_p(PSTR("No sutch item\n"));
|
||||
}
|
||||
else serial->write_p(PSTR("Usage: item on [nn]\n"));
|
||||
}
|
||||
else if( strcmp(token, "off") == 0 )
|
||||
{
|
||||
char* token = strtok(NULL, " \n");
|
||||
if( token != NULL)
|
||||
{
|
||||
uint8_t selected = strtol(token, nullptr, 10);
|
||||
if (selected < items->count())
|
||||
{
|
||||
items->at(selected).lastValue = false;
|
||||
if(items->at(selected).type == 0)WirelessRelay(items->at(selected)).setValue(false);
|
||||
else UvosItem(items->at(selected)).setValue(false);
|
||||
|
||||
writeItemState(serial, &items->at(selected), selected);
|
||||
}
|
||||
else serial->write_p(PSTR("No sutch item\n"));
|
||||
}
|
||||
else serial->write_p(PSTR("Usage: item off [nn]\n"));
|
||||
}
|
||||
else if( strcmp(token, "resend") == 0 )
|
||||
{
|
||||
char* token = strtok(NULL, " \n");
|
||||
if(items->at(selected).type == 0)WirelessRelay(items->at(selected)).setValue(false);
|
||||
else UvosItem(items->at(selected)).setValue(false);
|
||||
|
||||
writeItemState(serial, &items->at(selected), selected);
|
||||
}
|
||||
else serial->write_p(PSTR("No sutch item\n"));
|
||||
}
|
||||
else serial->write_p(PSTR("Usage: item off [nn]\n"));
|
||||
}
|
||||
else if( strcmp(token, "resend") == 0 )
|
||||
{
|
||||
char* token = strtok(NULL, " \n");
|
||||
serial->write_p(PSTR("Resend every 30 min is "));
|
||||
if( token != NULL )
|
||||
{
|
||||
if( token != NULL )
|
||||
{
|
||||
serial->write_p(PSTR("now "));
|
||||
if(strcmp(token, "on") == 0) resendEnabled = true;
|
||||
if(strcmp(token, "on") == 0) resendEnabled = true;
|
||||
else resendEnabled = false;
|
||||
}
|
||||
resendEnabled ? serial->write_p(PSTR("enabled.\n")) : serial->write_p(PSTR("disabled.\n")) ;
|
||||
}
|
||||
else
|
||||
{
|
||||
serial->write(token);
|
||||
serial->write_p(PSTR(" is not a valid subcommand: item [add/delete/on/off]\n"));
|
||||
}
|
||||
}
|
||||
resendEnabled ? serial->write_p(PSTR("enabled.\n")) : serial->write_p(PSTR("disabled.\n")) ;
|
||||
}
|
||||
else
|
||||
{
|
||||
serial->write(token);
|
||||
serial->write_p(PSTR(" is not a valid subcommand: item [add/delete/on/off]\n"));
|
||||
}
|
||||
}
|
||||
|
||||
void rgbDispatch(RgbLed* rgbled, char* token, Serial* serial)
|
||||
{
|
||||
if( strcmp(token, "on") == 0 )
|
||||
{
|
||||
rgbled->on();
|
||||
serial->write_p(PSTR("RGB lights on\n"));
|
||||
}
|
||||
else if( strcmp(token, "off") == 0 )
|
||||
{
|
||||
rgbled->off();
|
||||
serial->write_p(PSTR("RGB lights off\n"));
|
||||
}
|
||||
else if( strcmp(token, "print") == 0 )
|
||||
{
|
||||
snprintf(buffer, SNPRINTF_BUFFER_SIZE, "Current RGB values:\nR: %u G: %u B: %u\n", rgbled->getR(), rgbled->getG(), rgbled->getB());
|
||||
serial->write(buffer, SNPRINTF_BUFFER_SIZE);
|
||||
}
|
||||
else if( strcmp(token, "set") == 0 )
|
||||
{
|
||||
char* rToken = strtok(NULL, " \n");
|
||||
char* gToken = strtok(NULL, " \n");
|
||||
char* bToken = strtok(NULL, " \n");
|
||||
if(rToken != NULL && gToken != NULL && bToken != NULL)
|
||||
{
|
||||
if( strcmp(token, "on") == 0 )
|
||||
{
|
||||
rgbled->on();
|
||||
serial->write_p(PSTR("RGB lights on\n"));
|
||||
}
|
||||
else if( strcmp(token, "off") == 0 )
|
||||
{
|
||||
rgbled->off();
|
||||
serial->write_p(PSTR("RGB lights off\n"));
|
||||
}
|
||||
else if( strcmp(token, "print") == 0 )
|
||||
{
|
||||
snprintf(buffer, SNPRINTF_BUFFER_SIZE, "Current RGB values:\nR: %u G: %u B: %u\n", rgbled->getR(), rgbled->getG(),
|
||||
rgbled->getB());
|
||||
serial->write(buffer, SNPRINTF_BUFFER_SIZE);
|
||||
}
|
||||
else if( strcmp(token, "set") == 0 )
|
||||
{
|
||||
char* rToken = strtok(NULL, " \n");
|
||||
char* gToken = strtok(NULL, " \n");
|
||||
char* bToken = strtok(NULL, " \n");
|
||||
if(rToken != NULL && gToken != NULL && bToken != NULL)
|
||||
{
|
||||
uint8_t r = atoi(rToken);
|
||||
uint8_t g = atoi(gToken);
|
||||
uint8_t b = atoi(bToken);
|
||||
rgbled->setSolidColor(r,g,b);
|
||||
rgbled->setSolidColor(r,g,b);
|
||||
EEPROM_write_char(1, r);
|
||||
EEPROM_write_char(2, g);
|
||||
EEPROM_write_char(3, b);
|
||||
serial->write_p(PSTR("Set RGB values\n"));
|
||||
}
|
||||
else serial->write_p(PSTR("Usage: rgb set [RRR] [GGG] [BBB]\n"));
|
||||
}
|
||||
else if( strcmp(token, "pattern") == 0 )
|
||||
{
|
||||
token = strtok(NULL, " \n");
|
||||
if( token != NULL )
|
||||
{
|
||||
rgbled->setPattern(atoi(token));
|
||||
serial->write_p(PSTR("Set Pattern\n"));
|
||||
}
|
||||
else serial->write_p(PSTR("Usage: rgb pattern [id]\n"));
|
||||
}
|
||||
else if( strcmp(token, "preset") == 0 )
|
||||
{
|
||||
token = strtok(NULL, " \n");
|
||||
if( token != NULL )
|
||||
{
|
||||
rgbled->setPreset(atoi(token));
|
||||
serial->write_p(PSTR("Set Preset\n"));
|
||||
}
|
||||
else serial->write_p(PSTR("Usage: rgb preset [ID]\n"));
|
||||
}
|
||||
else if( strcmp(token, "fade") == 0 )
|
||||
{
|
||||
token = strtok(NULL, " \n");
|
||||
if( token != NULL )
|
||||
{
|
||||
if( strcmp(token, "on") == 0 )
|
||||
{
|
||||
rgbled->setFade(true);
|
||||
serial->write_p(PSTR("Turned on Fade\n"));
|
||||
}
|
||||
else
|
||||
{
|
||||
rgbled->setFade(false);
|
||||
serial->write_p(PSTR("Turned off Fade\n"));
|
||||
}
|
||||
}
|
||||
else serial->write_p(PSTR("Usage: rgb fade [on/off]\n"));
|
||||
}
|
||||
else
|
||||
{
|
||||
serial->write(token);
|
||||
serial->write_p(PSTR(" is not a valid subcommand: rgb [on/off/print/set/pattern/preset/fade]\n"));
|
||||
}
|
||||
serial->write_p(PSTR("Set RGB values\n"));
|
||||
}
|
||||
else serial->write_p(PSTR("Usage: rgb set [RRR] [GGG] [BBB]\n"));
|
||||
}
|
||||
else if( strcmp(token, "pattern") == 0 )
|
||||
{
|
||||
token = strtok(NULL, " \n");
|
||||
if( token != NULL )
|
||||
{
|
||||
rgbled->setPattern(atoi(token));
|
||||
serial->write_p(PSTR("Set Pattern\n"));
|
||||
}
|
||||
else serial->write_p(PSTR("Usage: rgb pattern [id]\n"));
|
||||
}
|
||||
else if( strcmp(token, "preset") == 0 )
|
||||
{
|
||||
token = strtok(NULL, " \n");
|
||||
if( token != NULL )
|
||||
{
|
||||
rgbled->setPreset(atoi(token));
|
||||
serial->write_p(PSTR("Set Preset\n"));
|
||||
}
|
||||
else serial->write_p(PSTR("Usage: rgb preset [ID]\n"));
|
||||
}
|
||||
else if( strcmp(token, "fade") == 0 )
|
||||
{
|
||||
token = strtok(NULL, " \n");
|
||||
if( token != NULL )
|
||||
{
|
||||
if( strcmp(token, "on") == 0 )
|
||||
{
|
||||
rgbled->setFade(true);
|
||||
serial->write_p(PSTR("Turned on Fade\n"));
|
||||
}
|
||||
else
|
||||
{
|
||||
rgbled->setFade(false);
|
||||
serial->write_p(PSTR("Turned off Fade\n"));
|
||||
}
|
||||
}
|
||||
else serial->write_p(PSTR("Usage: rgb fade [on/off]\n"));
|
||||
}
|
||||
else
|
||||
{
|
||||
serial->write(token);
|
||||
serial->write_p(PSTR(" is not a valid subcommand: rgb [on/off/print/set/pattern/preset/fade]\n"));
|
||||
}
|
||||
}
|
||||
|
||||
void auxDispatch(Pwm16b* auxPwm, char* token, Serial* serial)
|
||||
{
|
||||
if(strcmp(token, "set") == 0 )
|
||||
{
|
||||
token = strtok(NULL, " \n");
|
||||
if(token != NULL)
|
||||
{
|
||||
{
|
||||
token = strtok(NULL, " \n");
|
||||
if(token != NULL)
|
||||
{
|
||||
if(atoi(token) == 0) auxPwm->off();
|
||||
else auxPwm->on();
|
||||
auxPwm->setDutyA(atoi(token) << 8);
|
||||
serial->write_p(PSTR("Set PWM value\n"));
|
||||
}
|
||||
else serial->write_p(PSTR("Usage: aux set [VALUE]\n"));
|
||||
}
|
||||
else
|
||||
{
|
||||
serial->write(token, COMMAND_BUFFER_SIZE-4);
|
||||
serial->write_p(PSTR(" is not a valid subcommand: aux set [value]\n"));
|
||||
}
|
||||
auxPwm->setDutyA(atoi(token) << 8);
|
||||
serial->write_p(PSTR("Set PWM value\n"));
|
||||
}
|
||||
else serial->write_p(PSTR("Usage: aux set [VALUE]\n"));
|
||||
}
|
||||
else
|
||||
{
|
||||
serial->write(token, COMMAND_BUFFER_SIZE-4);
|
||||
serial->write_p(PSTR(" is not a valid subcommand: aux set [value]\n"));
|
||||
}
|
||||
}
|
||||
|
||||
void serialDispatch(Serial* serial, SVector<Item, MAX_ITEMS>* items, RgbLed* rgbled, Pwm16b* auxPwm, W433DataReciver* reciver)
|
||||
void serialDispatch(Serial* serial, SVector<Item, MAX_ITEMS>* items, RgbLed* rgbled, Pwm16b* auxPwm,
|
||||
W433DataReciver* reciver)
|
||||
{
|
||||
|
||||
if(serial->dataIsWaiting())
|
||||
{
|
||||
char buffer[COMMAND_BUFFER_SIZE];
|
||||
unsigned int length = serial->getString(buffer, COMMAND_BUFFER_SIZE);
|
||||
if(length > 2)
|
||||
{
|
||||
|
||||
if(serial->dataIsWaiting())
|
||||
{
|
||||
char buffer[COMMAND_BUFFER_SIZE];
|
||||
unsigned int length = serial->getString(buffer, COMMAND_BUFFER_SIZE);
|
||||
if(length > 2)
|
||||
{
|
||||
setBit(&PCICR, PCIE1, false);
|
||||
char* token = strtok(buffer, " \n");
|
||||
if(strcmp(token, "item") == 0)
|
||||
{
|
||||
reciver->waitForReciveIdle();
|
||||
itemDispatch(items, auxPwm, strtok(NULL, " \n"), serial);
|
||||
}
|
||||
else if(strcmp(token, "rgb") == 0)
|
||||
{
|
||||
rgbDispatch(rgbled, strtok(NULL, " \n"), serial);
|
||||
}
|
||||
else if(strcmp(token, "aux") == 0)
|
||||
{
|
||||
auxDispatch(auxPwm, strtok(NULL, " \n"), serial);
|
||||
}
|
||||
else if(strcmp(token, "pause") == 0)
|
||||
{
|
||||
sensorsPaused = true;
|
||||
char* token = strtok(buffer, " \n");
|
||||
if(strcmp(token, "item") == 0)
|
||||
{
|
||||
reciver->waitForReciveIdle();
|
||||
itemDispatch(items, auxPwm, strtok(NULL, " \n"), serial);
|
||||
}
|
||||
else if(strcmp(token, "rgb") == 0)
|
||||
{
|
||||
rgbDispatch(rgbled, strtok(NULL, " \n"), serial);
|
||||
}
|
||||
else if(strcmp(token, "aux") == 0)
|
||||
{
|
||||
auxDispatch(auxPwm, strtok(NULL, " \n"), serial);
|
||||
}
|
||||
else if(strcmp(token, "pause") == 0)
|
||||
{
|
||||
sensorsPaused = true;
|
||||
serial->write_p(PSTR("Sensors paused\n"));
|
||||
}
|
||||
else if(strcmp(token, "resume") == 0)
|
||||
{
|
||||
sensorsPaused = false;
|
||||
}
|
||||
else if(strcmp(token, "resume") == 0)
|
||||
{
|
||||
sensorsPaused = false;
|
||||
serial->write_p(PSTR("Sensors resumed\n"));
|
||||
}
|
||||
else if(strcmp(token, "state") == 0)
|
||||
{
|
||||
serial->write_p(PSTR("Items:\n"));
|
||||
for(uint8_t i = 0; i < items->count(); i++)
|
||||
{
|
||||
writeItemState(serial, &items->at(i), i);
|
||||
}
|
||||
serial->write_p(PSTR("EOL\n"));
|
||||
}
|
||||
else if(strcmp(token, "save") == 0)
|
||||
{
|
||||
save();
|
||||
serial->write_p(PSTR("State saved to EEPROM.\n"));
|
||||
}
|
||||
else if(strcmp(token, "load") == 0)
|
||||
{
|
||||
load();
|
||||
serial->write_p(PSTR("Loaded state from EEPROM.\n"));
|
||||
}
|
||||
else if(strcmp(token, "erase") == 0)
|
||||
{
|
||||
for(uint16_t i = 0; i < 1024; i++) EEPROM_write_char(i, 0);
|
||||
serial->write_p(PSTR("EEPROM erased\n"));
|
||||
load();
|
||||
}
|
||||
else if(strcmp(token, "dump") == 0)
|
||||
{
|
||||
for(uint16_t i = 0; i < 1024; i++)
|
||||
{
|
||||
if(i != 0) serial->putChar(',');
|
||||
serial->write((uint16_t)EEPROM_read_char(i));
|
||||
}
|
||||
serial->putChar('\n');
|
||||
}
|
||||
else if(strcmp(token, "free") == 0)
|
||||
{
|
||||
serial->write_p(PSTR("Free Ram: "));
|
||||
}
|
||||
else if(strcmp(token, "state") == 0)
|
||||
{
|
||||
serial->write_p(PSTR("Items:\n"));
|
||||
for(uint8_t i = 0; i < items->count(); i++)
|
||||
{
|
||||
writeItemState(serial, &items->at(i), i);
|
||||
}
|
||||
serial->write_p(PSTR("EOL\n"));
|
||||
}
|
||||
else if(strcmp(token, "save") == 0)
|
||||
{
|
||||
save();
|
||||
serial->write_p(PSTR("State saved to EEPROM.\n"));
|
||||
}
|
||||
else if(strcmp(token, "load") == 0)
|
||||
{
|
||||
load();
|
||||
serial->write_p(PSTR("Loaded state from EEPROM.\n"));
|
||||
}
|
||||
else if(strcmp(token, "erase") == 0)
|
||||
{
|
||||
for(uint16_t i = 0; i < 1024; i++) EEPROM_write_char(i, 0);
|
||||
serial->write_p(PSTR("EEPROM erased\n"));
|
||||
load();
|
||||
}
|
||||
else if(strcmp(token, "dump") == 0)
|
||||
{
|
||||
for(uint16_t i = 0; i < 1024; i++)
|
||||
{
|
||||
if(i != 0) serial->putChar(',');
|
||||
serial->write((uint16_t)EEPROM_read_char(i));
|
||||
}
|
||||
serial->putChar('\n');
|
||||
}
|
||||
else if(strcmp(token, "free") == 0)
|
||||
{
|
||||
serial->write_p(PSTR("Free Ram: "));
|
||||
serial->write(freeRAM());
|
||||
serial->write_p(PSTR(" Bytes.\n"));
|
||||
}
|
||||
else if(strcmp(token, "help") == 0)
|
||||
{
|
||||
printHelp(serial);
|
||||
}
|
||||
else
|
||||
{
|
||||
serial->write_p(PSTR("Not a valid command\n"));
|
||||
}
|
||||
setBit(&PCICR, PCIE1, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(strcmp(token, "help") == 0)
|
||||
{
|
||||
printHelp(serial);
|
||||
}
|
||||
else
|
||||
{
|
||||
serial->write_p(PSTR("Not a valid command\n"));
|
||||
}
|
||||
setBit(&PCICR, PCIE1, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void reciverError(uint8_t code, void* userData)
|
||||
@ -403,72 +406,73 @@ void sensorPacketRecived(uint32_t data, void* userData)
|
||||
if(!sensorsPaused)
|
||||
{
|
||||
Serial* serial = reinterpret_cast<Serial*>(userData);
|
||||
|
||||
|
||||
uint16_t field = data & 0x0000FFFF;
|
||||
|
||||
|
||||
serial->write_p(PSTR("SENSOR TYPE: "));
|
||||
serial->write(data >> 24);
|
||||
serial->write_p(PSTR(" ID: "));
|
||||
serial->write((data & 0x00FF0000) >> 16);
|
||||
|
||||
if(data >> 24 == 1) serial->write_p(PSTR(" TEMPERATURE: "));
|
||||
else if(data >> 24 == 2) serial->write_p(PSTR(" HUMIDITY: "));
|
||||
else serial->write_p(PSTR(" FIELD: "));
|
||||
|
||||
|
||||
if(data >> 24 == 1) serial->write_p(PSTR(" TEMPERATURE: "));
|
||||
else if(data >> 24 == 2) serial->write_p(PSTR(" HUMIDITY: "));
|
||||
else serial->write_p(PSTR(" FIELD: "));
|
||||
|
||||
serial->write(field);
|
||||
serial->putChar('\n');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int main()
|
||||
int main()
|
||||
{
|
||||
wdt_set(WDTO_8S);
|
||||
|
||||
DDRB = (1 << PB5) | ( 1 << PB1);
|
||||
DDRD = (1 << PD3) | (1 << PD5)| (1 << PD6);
|
||||
|
||||
//door watcher
|
||||
PORTB = (1<< PB3) | (1<< PB4); //Enable pull up on door watcher pins;
|
||||
|
||||
bool doorOne = readPin(&PINB, PB3);
|
||||
bool doorTow = readPin(&PINB, PB4);
|
||||
|
||||
sei();
|
||||
|
||||
Serial serial;
|
||||
|
||||
Pwm8b pwmTc0( &TCCR0A, &TCCR0B, &OCR0A, &OCR0B, 0b00000011, true, true );
|
||||
Pwm8b pwmTc2( &TCCR2A, &TCCR2B, &OCR2A, &OCR2B, 0b00000101, false, true );
|
||||
pwmTc0.off();
|
||||
pwmTc2.off();
|
||||
|
||||
RgbLed rgbled( &pwmTc0, &pwmTc2 );
|
||||
|
||||
DDRB = (1 << PB5) | ( 1 << PB1);
|
||||
DDRD = (1 << PD3) | (1 << PD5)| (1 << PD6);
|
||||
|
||||
//door watcher
|
||||
PORTB = (1<< PB3) | (1<< PB4); //Enable pull up on door watcher pins;
|
||||
|
||||
bool doorOne = readPin(&PINB, PB3);
|
||||
bool doorTow = readPin(&PINB, PB4);
|
||||
|
||||
sei();
|
||||
|
||||
Serial serial;
|
||||
|
||||
Pwm8b pwmTc0( &TCCR0A, &TCCR0B, &OCR0A, &OCR0B, 0b00000011, true, true );
|
||||
Pwm8b pwmTc2( &TCCR2A, &TCCR2B, &OCR2A, &OCR2B, 0b00000101, false, true );
|
||||
pwmTc0.off();
|
||||
pwmTc2.off();
|
||||
|
||||
RgbLed rgbled( &pwmTc0, &pwmTc2 );
|
||||
loadRGB(&rgbled);
|
||||
|
||||
Pwm16b pwmTc1 ( &TCCR1A, &TCCR1B, &OCR1A, &OCR1B, &ICR1, 0b00000001, true, false);
|
||||
|
||||
|
||||
Pwm16b pwmTc1 ( &TCCR1A, &TCCR1B, &OCR1A, &OCR1B, &ICR1, 0b00000001, true, false);
|
||||
|
||||
setBit(&PCICR, PCIE1, true);
|
||||
setBit(&PCMSK1, PCINT8, true);
|
||||
W433DataReciver reciver(&PINC, PC0, &TCNT1, &TIFR1, &sensorPacketRecived, reinterpret_cast<void*>(&serial), &reciverError);
|
||||
W433DataTransmitter transmitter(&PORTB, PB5);
|
||||
UvosItem::transmitter=&transmitter;
|
||||
|
||||
|
||||
serial.write_p(PSTR("RGBController v1.5 starting\n"));
|
||||
|
||||
load();
|
||||
|
||||
while(true)
|
||||
{
|
||||
serialDispatch(&serial, &items, &rgbled, &pwmTc1, &reciver);
|
||||
rgbled.logic();
|
||||
|
||||
if(doorOne != readPin(&PINB, PB3) && !sensorsPaused)
|
||||
{
|
||||
_delay_ms(10);
|
||||
if(doorOne != readPin(&PINB, PB3))
|
||||
{
|
||||
W433DataReciver reciver(&PINC, PC0, &TCNT1, &TIFR1, &sensorPacketRecived, reinterpret_cast<void*>(&serial),
|
||||
&reciverError);
|
||||
W433DataTransmitter transmitter(&PORTB, PB5);
|
||||
UvosItem::transmitter=&transmitter;
|
||||
|
||||
|
||||
serial.write_p(PSTR("RGBController v1.5 starting\n"));
|
||||
|
||||
load();
|
||||
|
||||
while(true)
|
||||
{
|
||||
serialDispatch(&serial, &items, &rgbled, &pwmTc1, &reciver);
|
||||
rgbled.logic();
|
||||
|
||||
if(doorOne != readPin(&PINB, PB3) && !sensorsPaused)
|
||||
{
|
||||
_delay_ms(10);
|
||||
if(doorOne != readPin(&PINB, PB3))
|
||||
{
|
||||
doorOne = readPin(&PINB, PB3);
|
||||
serial.write_p(PSTR("SENSOR TYPE: "));
|
||||
serial.putChar('0');
|
||||
@ -477,15 +481,15 @@ int main()
|
||||
serial.write_p(PSTR(" STATE: "));
|
||||
serial.write(doorOne);
|
||||
serial.putChar('\n');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(doorTow != readPin(&PINB, PB4) && !sensorsPaused)
|
||||
{
|
||||
_delay_ms(10);
|
||||
if(doorTow != readPin(&PINB, PB4))
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(doorTow != readPin(&PINB, PB4) && !sensorsPaused)
|
||||
{
|
||||
_delay_ms(10);
|
||||
if(doorTow != readPin(&PINB, PB4))
|
||||
{
|
||||
doorTow = readPin(&PINB, PB4);
|
||||
serial.write_p(PSTR("SENSOR TYPE: "));
|
||||
serial.putChar('0');
|
||||
@ -494,22 +498,22 @@ int main()
|
||||
serial.write_p(PSTR(" STATE: "));
|
||||
serial.write(doorTow);
|
||||
serial.putChar('\n');
|
||||
}
|
||||
}
|
||||
|
||||
if(resendNow)
|
||||
}
|
||||
}
|
||||
|
||||
if(resendNow)
|
||||
{
|
||||
for(uint16_t i = 0; i < items.count(); i++)
|
||||
for(uint16_t i = 0; i < items.count(); i++)
|
||||
{
|
||||
reciver.waitForReciveIdle();
|
||||
reciver.waitForReciveIdle();
|
||||
items[i].type == 0 ? WirelessRelay(items[i]).resend() : UvosItem(items[i]).resend();
|
||||
_delay_ms(100);
|
||||
}
|
||||
resendNow = false;
|
||||
}
|
||||
_delay_ms(2);
|
||||
}
|
||||
_delay_ms(2);
|
||||
}
|
||||
|
||||
return 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user