rc-gateway/gateway/include/Protocol_Doorbell.h
2024-05-18 21:17:23 +02:00

65 lines
1.5 KiB
C++

#pragma once
#include "Protocol.h"
#define BIT_LENGTH 40
#define BIT_LENGTH_3 BIT_LENGTH*3
#define TX_DELAY 620
class Protocol_Doorbell : public Protocol {
public:
Protocol_Doorbell() : Protocol(16) {}
void ring() {
preamble();
for (int i = 0; i < 7; i++) {
delayMicroseconds(TX_DELAY);
code("00000000110100101000100");
}
}
void fromJson(JsonObjectConst& rcSwitch, RCSwitch& rcDevice) override {
}
void toJson(unsigned long value, JsonDocument& jsonDoc) override {
}
private:
void transmitBit(uint8_t value) {
digitalWrite(SEND_PIN, value);
delayMicroseconds(BIT_LENGTH);
digitalWrite(SEND_PIN, LOW);
}
void transmitHigh() {
digitalWrite(SEND_PIN, HIGH);
delayMicroseconds(BIT_LENGTH_3);
digitalWrite(SEND_PIN, LOW);
delayMicroseconds(BIT_LENGTH);
}
void transmitLow() {
digitalWrite(SEND_PIN, HIGH);
delayMicroseconds(BIT_LENGTH);
digitalWrite(SEND_PIN, LOW);
delayMicroseconds(BIT_LENGTH_3);
}
void preamble() {
noInterrupts();
for (int i = 0; i < 370; i++) {
transmitBit(HIGH);
transmitBit(LOW);
}
interrupts();
}
void code(const char* value) {
noInterrupts();
for (const char* p = value; *p; p++) {
*p == '1' ? transmitHigh() : transmitLow();
}
interrupts();
}
} doorbell;