programmable wireless relay store changes
This commit is contained in:
@ -14,7 +14,7 @@ void WirelessRelay::sendId()
|
||||
|
||||
for(short i = 0; i<10; i++)
|
||||
{
|
||||
sendBit( _id & 1 << (15 - i) ? true : false );
|
||||
sendBit( _id & 1 << (15 - i) );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4,12 +4,11 @@
|
||||
#include<util/delay.h>
|
||||
#include"writepin.h"
|
||||
|
||||
#define LARGE_TIME 750
|
||||
#define SMALL_TIME 250
|
||||
|
||||
class WirelessRelay
|
||||
{
|
||||
public:
|
||||
static const uint16_t LARGE_TIME = 750;
|
||||
static const uint8_t SMALL_TIME = 250;
|
||||
|
||||
static const uint16_t MAX_NAME_LENGTH = 32;
|
||||
|
||||
|
2
eeprom.h
2
eeprom.h
@ -47,5 +47,5 @@ template <class T> T EEPROM_read_class(uint16_t address)
|
||||
|
||||
template <class T> void EEPROM_read_class(uint16_t address, T* in)
|
||||
{
|
||||
EEPROM_read_string( address, reinterpret_cast<char*>(&in), sizeof(T) );
|
||||
EEPROM_read_string( address, reinterpret_cast<char*>(in), sizeof(T) );
|
||||
}
|
||||
|
36
main.cpp
36
main.cpp
@ -11,7 +11,7 @@
|
||||
#include "bitrep.h"
|
||||
#include "staticvector.h"
|
||||
|
||||
#define COMMAND_BUFFER_SIZE 32
|
||||
#define COMMAND_BUFFER_SIZE 64
|
||||
#define SNPRINTF_BUFFER_SIZE 64
|
||||
|
||||
#define MAX_RELAYS 16
|
||||
@ -26,13 +26,13 @@ inline static void printHelp(Serial* serial)
|
||||
|
||||
serial->write_p(PSTR("Available Commands: \n\
|
||||
help : Show this prompt.\n\
|
||||
relay add [id] : Add Wireless Relay.\n\
|
||||
relay add [id] [name] : Add Wireless Relay.\n\
|
||||
relay delete : Delete last Relay.\n\
|
||||
relay list : Print list of saved Wireless Relays.\n\
|
||||
relay machine [on/off] : Get machine readable relay state when state changes.\n\
|
||||
relay [on/off] [nn] : Turn on/off nth relay.\n\
|
||||
state : Get machine readable state.\n\
|
||||
erase : Erase epprom.\n\
|
||||
dump : Dump epprom.\n\
|
||||
rgb [on/off] : Turn on/off RGB leds at current value.\n\
|
||||
rgb print : Print current RGB value.\n\
|
||||
rgb set [RRR] [GGG] [BBB] : Set RGB value, pattern must be 0.\n\
|
||||
@ -40,7 +40,7 @@ inline static void printHelp(Serial* serial)
|
||||
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, pattern must be 0.\n"));
|
||||
aux set [VAL] : Set PWM value.\n"));
|
||||
}
|
||||
|
||||
void save()
|
||||
@ -75,7 +75,8 @@ void relayDispatch(SVector<WirelessRelay, MAX_RELAYS>* relays, Pwm16b* auxPwm, c
|
||||
uint16_t id = strtol(token, nullptr, 2 );
|
||||
if(id != 0 && relays->remainingCapacity() > 0)
|
||||
{
|
||||
token = strtok(NULL, " \n");
|
||||
id = id << 4;
|
||||
token = strtok(NULL, "\0");
|
||||
if( token == NULL )
|
||||
{
|
||||
char name[] = "";
|
||||
@ -87,6 +88,8 @@ void relayDispatch(SVector<WirelessRelay, MAX_RELAYS>* relays, Pwm16b* auxPwm, c
|
||||
WirelessRelay relay(id, token);
|
||||
relays->push_back(relay);
|
||||
}
|
||||
snprintf(buffer, SNPRINTF_BUFFER_SIZE, "Adding relay NUMBER: %u NAME: %s\n", relays->count()-1, relays->back().getName());
|
||||
serial->write(buffer, SNPRINTF_BUFFER_SIZE);
|
||||
save();
|
||||
}
|
||||
else if(relays->remainingCapacity() == 0) serial->write_p(PSTR("Relay storage full.\n"));
|
||||
@ -95,6 +98,8 @@ void relayDispatch(SVector<WirelessRelay, MAX_RELAYS>* relays, Pwm16b* auxPwm, c
|
||||
else if( strcmp(token, "delete") == 0 )
|
||||
{
|
||||
relays->erase(relays->count());
|
||||
snprintf(buffer, SNPRINTF_BUFFER_SIZE, "Deleting relay NUMBER: %u NAME: %s\n", relays->count(), relays->at(relays->count()).getName());
|
||||
serial->write(buffer, SNPRINTF_BUFFER_SIZE);
|
||||
save();
|
||||
}
|
||||
else if( strcmp(token, "list") == 0 )
|
||||
@ -103,15 +108,14 @@ void relayDispatch(SVector<WirelessRelay, MAX_RELAYS>* relays, Pwm16b* auxPwm, c
|
||||
for(uint8_t i = 0; i < relays->count(); i++)
|
||||
{
|
||||
uint16_t id = relays->at(i).getId();
|
||||
snprintf(buffer, SNPRINTF_BUFFER_SIZE, "NUMBER: %u ID: %s%s%s%s NAME: %s\n", i,
|
||||
snprintf(buffer, SNPRINTF_BUFFER_SIZE, "NUMBER: %u ID: %s%s%s NAME: %s\n", i,
|
||||
bit_rep[ id >> 12],
|
||||
bit_rep[(id & 0x0F00) >> 8 ],
|
||||
bit_rep[(id & 0x00F0) >> 4 ],
|
||||
bit_rep[ id & 0x000F ],
|
||||
bit_rep[(id & 0x00F0) >> 4 ],
|
||||
relays->at(i).getName());
|
||||
serial->write(buffer, SNPRINTF_BUFFER_SIZE);
|
||||
}
|
||||
serial->putChar('\n');
|
||||
serial->write_p(PSTR("EOL\n"));
|
||||
}
|
||||
else if( strcmp(token, "on") == 0 )
|
||||
{
|
||||
@ -286,10 +290,19 @@ void serialDispatch(Serial* serial, SVector<WirelessRelay, MAX_RELAYS>* relays,
|
||||
}
|
||||
else if(strcmp(token, "erase") == 0)
|
||||
{
|
||||
for(uint16_t i = 0; i < MAX_RELAYS*2+1; i++) EEPROM_write_char(i, 0);
|
||||
for(uint16_t i = 0; i < sizeof(*relays)+RELAY_VECTOR_EEPROM_ADDR; 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 < sizeof(*relays)+RELAY_VECTOR_EEPROM_ADDR; i++)
|
||||
{
|
||||
if(i != 0) serial->putChar(',');
|
||||
serial->write((uint16_t)EEPROM_read_char(i));
|
||||
}
|
||||
serial->putChar('\n');
|
||||
}
|
||||
else if(strcmp(token, "help") == 0)
|
||||
{
|
||||
printHelp(serial);
|
||||
@ -328,9 +341,10 @@ int main()
|
||||
|
||||
Pwm16b pwmTc1 ( &TCCR1A, &TCCR1B, &OCR1A, &OCR1B, &ICR1, 0b00000001, true, false);
|
||||
|
||||
serial.write_p(PSTR("RGBController v0.7 starting\n"));
|
||||
|
||||
load();
|
||||
|
||||
serial.write_p(PSTR("RGBController v0.7 starting\n"));
|
||||
while(true)
|
||||
{
|
||||
serialDispatch(&serial, &relays, &rgbled, &pwmTc1);
|
||||
|
@ -32,7 +32,7 @@ public:
|
||||
|
||||
T back()
|
||||
{
|
||||
return array[stored];
|
||||
return array[stored-1];
|
||||
}
|
||||
|
||||
bool empty() const
|
||||
|
Reference in New Issue
Block a user