1 #include <BayEOSBuffer.h>
2 #include <BayEOSBufferRAM.h>
4 #include <BayEOSCommands.h>
8 #ifdef __AVR_ATmega168P__
21 #include <BaySerial.h>
22 bool serial_update=
false;
29 uint8_t command, channel;
31 uint8_t pipe_num, len;
32 uint8_t nrf_payload[32];
33 uint16_t rx_count, rx_error;
34 unsigned long last_buffer, last_data;
35 unsigned long last_command, ontime;
37 void sendCommand(uint8_t command, uint8_t channel = 0x01, uint8_t arg = 0) {
50 void int0SwitchHandler(
void);
55 void int1SwitchHandler(
void);
58 void commandHandler(
void);
61 pinMode(R1_PIN, OUTPUT);
62 pinMode(LED_BUILTIN, OUTPUT);
63 client.init(RF24ADDRESS, RF24CHANNEL);
64 client.setRetries(15, 15);
65 for (uint8_t i = 0; i < 6; i++) {
66 client.openReadingPipe(i, pipes[i]);
68 client.startListening();
70 digitalWrite(LED_BUILTIN, HIGH);
73 digitalWrite(2, HIGH);
74 int0 = digitalRead(2);
78 digitalWrite(3, HIGH);
79 int1 = digitalRead(3);
83 serial_client.setBuffer(myBuffer);
84 serial_client.begin(9600);
91 if (r1 && (millis() - last_command) > ontime) {
99 if ((millis() - last_buffer) > 2000) {
100 last_buffer = millis();
102 serial_client.sendFromBuffer();
109 if ((millis() - last_data) > 15000 || serial_update) {
110 last_data = millis();
112 serial_client.startDataFrame(BayEOS_LabelledChannelFloat32le);
113 serial_client.addChannelValue(r1,
"Relais");
114 serial_client.addChannelValue((r1?(
float)(ontime-(millis()-last_command))/60000:0),
"Time");
115 serial_client.addChannelValue(rx_count,
"RX");
116 serial_client.addChannelValue(rx_error,
"RX-Error");
117 serial_client.sendOrBuffer();
123 if ((millis() - last_data) > 600000) {
124 last_data = millis();
129 client.addChecksum();
139 while (scount < 20 && int0 != digitalRead(2)) {
144 if (scount == 20 && int0 != digitalRead(2)) {
145 int0 = digitalRead(2);
152 while (scount < 20 && int1 != digitalRead(3)) {
157 if (scount == 20 && int1 != digitalRead(3)) {
158 int1 = digitalRead(3);
164 if(Serial.available()){
165 if (! serial_client.readIntoPayload()) {
166 if (serial_client.getPayload(0) == BayEOS_Command
167 && serial_client.getPayload(1) == BayEOS_SwitchCommand) {
168 command = serial_client.getPayload(2);
169 channel = serial_client.getPayload(3);
170 arg=serial_client.getPayload(4);
171 if(serial_client.getPayloadLength()>4) arg+=256*serial_client.getPayload(5);
179 while (client.i_available(&pipe_num)) {
180 len = client.getDynamicPayloadSize();
185 client.read(nrf_payload, len);
187 for (uint8_t i = 1; i < len; i++) {
190 if (client.validateChecksum() == 0) {
193 if (nrf_payload[1] == BayEOS_Command
194 && nrf_payload[2] == BayEOS_SwitchCommand) {
195 command = nrf_payload[3];
196 channel = nrf_payload[4];
197 arg = nrf_payload[5];
200 client.setTXAddr(RF24FORWARD);
202 client.setTXAddr(RF24ADDRESS);
206 }
else if (nrf_payload[1] == BayEOS_OriginFrame) {
208 serial_client.startFrame(client.
getPayload(0));
210 serial_client.sendOrBuffer();
Definition: BayEOSBufferRAM.h:13
uint8_t getPacketLength(void) const
Definition: BayEOS.cpp:431
void startDataFrameWithOrigin(uint8_t subtype, const char *o, uint8_t checksum=0, uint8_t routed=0)
Definition: BayEOS.cpp:27
void setBuffer(BayEOSBuffer &buffer, uint16_t max_skip=0)
Definition: BayEOS.h:452
uint8_t addChannelValue(float v, uint8_t channel_number=0)
Definition: BayEOS.cpp:61
uint8_t sendFromBuffer(void)
Definition: BayEOS.cpp:394
void startFrame(void)
Definition: BayEOS.cpp:8
uint8_t addToPayload(uint8_t b)
Definition: BayEOS.h:469
const uint8_t * getPayload(void) const
Definition: BayEOS.cpp:435
uint8_t sendOrBuffer(void)
Definition: BayEOS.cpp:369
uint8_t sendPayload(void)
Definition: BayRF24.cpp:15
Definition: BaySerial.h:106