-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrelayboard.cpp
108 lines (94 loc) · 2.19 KB
/
relayboard.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#include "Arduino.h"
#include "relayboard.h"
#include "setup.h"
#include "bv4627.h"
void RelayBoard::init()
{
_board = new BV4627(_address);
_board->reset();
}
RelayBoard::RelayBoard(uint8_t id, uint8_t address) : Device(id, NO_NVSLOT, RELAYBOARD)
{
_address = address;
init();
}
RelayBoard::RelayBoard(uint8_t id, unsigned char *initData): Device(id,initData)
{
_address = initData[_offset++];
init();
}
RelayBoard::~RelayBoard()
{
_board->off();
delete _board;
}
void RelayBoard::setAddress(uint8_t address)
{
Serial.print(F("Setting relayboard address to "));
Serial.print(address,DEC);
Serial.print(F(" (0x"));
Serial.print(address,HEX);
Serial.println(F(")"));
_board->setaddress(address<<1);
_address = address;
}
uint8_t RelayBoard::saveConfig(unsigned char *initData)
{
uint8_t offset = Device::saveConfig(initData);
initData[offset++]=_address;
return offset;
}
void RelayBoard::setOn(uint8_t relay,uint8_t state)
{
status1(1);
if(verbose)
{
Serial.print(F("Setting relayboard "));
Serial.print(getId());
Serial.print(F(" relay "));
Serial.print(relay);
Serial.print(F(" to "));
Serial.println(state);
}
_board->click(relay, state, 1);
status1(0);
}
void RelayBoard::delayedSetOn(uint8_t relay,uint8_t state, int seconds)
{
status1(1);
_board->click(relay, state, 1 + seconds * 13);
status1(0);
}
void RelayBoard::printInfo()
{
Device::printInfo();
Serial.print(F("\taddress 0x"));
Serial.println(_address,HEX);
uint16_t k=1;
char s[10];
// device id
Serial.println();
Serial.print(F("\tDevice ID "));
Serial.println(_board->deviceid());
// firmware version
*s=0;
_board->version(s);
Serial.print(F("\tFirmware Version "));
Serial.println(s);
}
void RelayBoard::printDefinition(uint8_t first)
{
{
char buffer[40];
sprintf(buffer,"define relayboard %d %d",getId(), _address);
Serial.println(buffer);
}
Device::printDefinition(0);
};
bool RelayBoard::isType(enum DeviceType type)
{
if(type == RELAYBOARD)
return true;
else
return Device::isType(type);
}