increased reciver time tolerance

This commit is contained in:
IMback
2018-11-27 18:48:34 +01:00
parent f963c5b312
commit 775ff9313b
6 changed files with 45 additions and 34 deletions

View File

@ -13,7 +13,7 @@
#include "W433DataReciver.h"
#define COMMAND_BUFFER_SIZE 64
#define SNPRINTF_BUFFER_SIZE 64
#define SNPRINTF_BUFFER_SIZE 96
#define MAX_RELAYS 32
#define RELAY_VECTOR_EEPROM_ADDR 32
@ -49,7 +49,6 @@ inline static void printHelp(Serial* serial)
rgb pattern [id] : RGB pattern.\n\
rgb preset [id] : set preset color.\n\
rgb fade [on/off] : turn Colorfade on or off.\n\
aux [on/off] : Turn on/off PWM Channel.\n\
aux set [VAL] : Set PWM value.\n"));
}
@ -58,6 +57,11 @@ void save()
EEPROM_write_class< SVector<WirelessRelay, MAX_RELAYS> > (RELAY_VECTOR_EEPROM_ADDR, relays);
}
void loadRGB(RgbLed* rgbled)
{
rgbled->setSolidColor(EEPROM_read_char(1), EEPROM_read_char(2), EEPROM_read_char(3));
}
void load()
{
EEPROM_read_class< SVector<WirelessRelay, MAX_RELAYS> > (RELAY_VECTOR_EEPROM_ADDR, &relays);
@ -66,12 +70,12 @@ void load()
void writeRelayState(Serial* serial, WirelessRelay* relay, uint8_t number)
{
uint16_t id = relay->getId();
snprintf(buffer, SNPRINTF_BUFFER_SIZE, "RELAY NUMBER: %u ID: %s%s%s NAME: %s STATE: %u\n", number,
snprintf(buffer, SNPRINTF_BUFFER_SIZE, "RELAY NUMBER: %u ID: %s%s%s STATE: %u NAME: %s\n", number,
bit_rep[ id >> 12],
bit_rep[(id & 0x0F00) >> 8 ],
bit_rep[(id & 0x00F0) >> 4 ],
relay->getName(),
relay->getExpectedState()
relay->getExpectedState(),
relay->getName()
);
serial->write(buffer, SNPRINTF_BUFFER_SIZE);
}
@ -176,7 +180,13 @@ void rgbDispatch(RgbLed* rgbled, char* token, Serial* serial)
char* bToken = strtok(NULL, " \n");
if(rToken != NULL && gToken != NULL && bToken != NULL)
{
rgbled->setSolidColor(atoi(rToken), atoi(gToken), atoi(bToken));
uint8_t r = atoi(rToken);
uint8_t g = atoi(gToken);
uint8_t b = atoi(bToken);
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"));
@ -228,21 +238,13 @@ void rgbDispatch(RgbLed* rgbled, char* token, Serial* serial)
void auxDispatch(Pwm16b* auxPwm, char* token, Serial* serial)
{
if(strcmp(token, "on") == 0 )
{
auxPwm->on();
serial->write_p(PSTR("Aux pwm on\n"));
}
else if(strcmp(token, "off") == 0 )
{
auxPwm->off();
serial->write_p(PSTR("Aux pwm off\n"));
}
else if(strcmp(token, "set") == 0 )
if(strcmp(token, "set") == 0 )
{
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"));
}
@ -251,7 +253,7 @@ void auxDispatch(Pwm16b* auxPwm, char* token, Serial* serial)
else
{
serial->write(token, COMMAND_BUFFER_SIZE-4);
serial->write_p(PSTR(" is not a valid subcommand: aux [on/off/set]\n"));
serial->write_p(PSTR(" is not a valid subcommand: aux set [value]\n"));
}
}
@ -264,7 +266,7 @@ void serialDispatch(Serial* serial, SVector<WirelessRelay, MAX_RELAYS>* relays,
unsigned int length = serial->getString(buffer, COMMAND_BUFFER_SIZE);
if(length > 2)
{
cli();
setBit(&PCICR, PCIE1, false);
char* token = strtok(buffer, " \n");
if(strcmp(token, "relay") == 0)
{
@ -294,6 +296,7 @@ void serialDispatch(Serial* serial, SVector<WirelessRelay, MAX_RELAYS>* relays,
for(uint8_t i = 0; i < relays->count(); i++)
{
writeRelayState(serial, &relays->at(i), i);
//serial->putChar('\n');
}
serial->write_p(PSTR("EOL\n"));
}
@ -320,7 +323,7 @@ void serialDispatch(Serial* serial, SVector<WirelessRelay, MAX_RELAYS>* relays,
{
serial->write_p(PSTR("Not a valid command\n"));
}
sei();
setBit(&PCICR, PCIE1, true);
}
}
}
@ -369,6 +372,7 @@ int main()
pwmTc2.off();
RgbLed rgbled( &pwmTc0, &pwmTc2 );
loadRGB(&rgbled);
Pwm16b pwmTc1 ( &TCCR1A, &TCCR1B, &OCR1A, &OCR1B, &ICR1, 0b00000001, true, false);
@ -423,3 +427,4 @@ int main()
return 0;
}