programmable wireless relay store changes
This commit is contained in:
@ -14,7 +14,7 @@ void WirelessRelay::sendId()
|
|||||||
|
|
||||||
for(short i = 0; i<10; i++)
|
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<util/delay.h>
|
||||||
#include"writepin.h"
|
#include"writepin.h"
|
||||||
|
|
||||||
#define LARGE_TIME 750
|
|
||||||
#define SMALL_TIME 250
|
|
||||||
|
|
||||||
class WirelessRelay
|
class WirelessRelay
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
static const uint16_t LARGE_TIME = 750;
|
||||||
|
static const uint8_t SMALL_TIME = 250;
|
||||||
|
|
||||||
static const uint16_t MAX_NAME_LENGTH = 32;
|
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)
|
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) );
|
||||||
}
|
}
|
||||||
|
34
main.cpp
34
main.cpp
@ -11,7 +11,7 @@
|
|||||||
#include "bitrep.h"
|
#include "bitrep.h"
|
||||||
#include "staticvector.h"
|
#include "staticvector.h"
|
||||||
|
|
||||||
#define COMMAND_BUFFER_SIZE 32
|
#define COMMAND_BUFFER_SIZE 64
|
||||||
#define SNPRINTF_BUFFER_SIZE 64
|
#define SNPRINTF_BUFFER_SIZE 64
|
||||||
|
|
||||||
#define MAX_RELAYS 16
|
#define MAX_RELAYS 16
|
||||||
@ -26,13 +26,13 @@ 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\
|
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 delete : Delete last Relay.\n\
|
||||||
relay list : Print list of saved Wireless Relays.\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\
|
relay [on/off] [nn] : Turn on/off nth relay.\n\
|
||||||
state : Get machine readable state.\n\
|
state : Get machine readable state.\n\
|
||||||
erase : Erase epprom.\n\
|
erase : Erase epprom.\n\
|
||||||
|
dump : Dump epprom.\n\
|
||||||
rgb [on/off] : Turn on/off RGB leds at current value.\n\
|
rgb [on/off] : Turn on/off RGB leds at current value.\n\
|
||||||
rgb print : Print current RGB value.\n\
|
rgb print : Print current RGB value.\n\
|
||||||
rgb set [RRR] [GGG] [BBB] : Set RGB value, pattern must be 0.\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 preset [id] : set preset color.\n\
|
||||||
rgb fade [on/off] : turn Colorfade on or off.\n\
|
rgb fade [on/off] : turn Colorfade on or off.\n\
|
||||||
aux [on/off] : Turn on/off PWM Channel.\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()
|
void save()
|
||||||
@ -75,7 +75,8 @@ void relayDispatch(SVector<WirelessRelay, MAX_RELAYS>* relays, Pwm16b* auxPwm, c
|
|||||||
uint16_t id = strtol(token, nullptr, 2 );
|
uint16_t id = strtol(token, nullptr, 2 );
|
||||||
if(id != 0 && relays->remainingCapacity() > 0)
|
if(id != 0 && relays->remainingCapacity() > 0)
|
||||||
{
|
{
|
||||||
token = strtok(NULL, " \n");
|
id = id << 4;
|
||||||
|
token = strtok(NULL, "\0");
|
||||||
if( token == NULL )
|
if( token == NULL )
|
||||||
{
|
{
|
||||||
char name[] = "";
|
char name[] = "";
|
||||||
@ -87,6 +88,8 @@ void relayDispatch(SVector<WirelessRelay, MAX_RELAYS>* relays, Pwm16b* auxPwm, c
|
|||||||
WirelessRelay relay(id, token);
|
WirelessRelay relay(id, token);
|
||||||
relays->push_back(relay);
|
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();
|
save();
|
||||||
}
|
}
|
||||||
else if(relays->remainingCapacity() == 0) serial->write_p(PSTR("Relay storage full.\n"));
|
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 )
|
else if( strcmp(token, "delete") == 0 )
|
||||||
{
|
{
|
||||||
relays->erase(relays->count());
|
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();
|
save();
|
||||||
}
|
}
|
||||||
else if( strcmp(token, "list") == 0 )
|
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++)
|
for(uint8_t i = 0; i < relays->count(); i++)
|
||||||
{
|
{
|
||||||
uint16_t id = relays->at(i).getId();
|
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 >> 12],
|
||||||
bit_rep[(id & 0x0F00) >> 8 ],
|
bit_rep[(id & 0x0F00) >> 8 ],
|
||||||
bit_rep[(id & 0x00F0) >> 4 ],
|
bit_rep[(id & 0x00F0) >> 4 ],
|
||||||
bit_rep[ id & 0x000F ],
|
|
||||||
relays->at(i).getName());
|
relays->at(i).getName());
|
||||||
serial->write(buffer, SNPRINTF_BUFFER_SIZE);
|
serial->write(buffer, SNPRINTF_BUFFER_SIZE);
|
||||||
}
|
}
|
||||||
serial->putChar('\n');
|
serial->write_p(PSTR("EOL\n"));
|
||||||
}
|
}
|
||||||
else if( strcmp(token, "on") == 0 )
|
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)
|
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"));
|
serial->write_p(PSTR("EEPROM erased\n"));
|
||||||
load();
|
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)
|
else if(strcmp(token, "help") == 0)
|
||||||
{
|
{
|
||||||
printHelp(serial);
|
printHelp(serial);
|
||||||
@ -328,9 +341,10 @@ int main()
|
|||||||
|
|
||||||
Pwm16b pwmTc1 ( &TCCR1A, &TCCR1B, &OCR1A, &OCR1B, &ICR1, 0b00000001, true, false);
|
Pwm16b pwmTc1 ( &TCCR1A, &TCCR1B, &OCR1A, &OCR1B, &ICR1, 0b00000001, true, false);
|
||||||
|
|
||||||
|
serial.write_p(PSTR("RGBController v0.7 starting\n"));
|
||||||
|
|
||||||
load();
|
load();
|
||||||
|
|
||||||
serial.write_p(PSTR("RGBController v0.7 starting\n"));
|
|
||||||
while(true)
|
while(true)
|
||||||
{
|
{
|
||||||
serialDispatch(&serial, &relays, &rgbled, &pwmTc1);
|
serialDispatch(&serial, &relays, &rgbled, &pwmTc1);
|
||||||
|
@ -32,7 +32,7 @@ public:
|
|||||||
|
|
||||||
T back()
|
T back()
|
||||||
{
|
{
|
||||||
return array[stored];
|
return array[stored-1];
|
||||||
}
|
}
|
||||||
|
|
||||||
bool empty() const
|
bool empty() const
|
||||||
|
Reference in New Issue
Block a user