const uint16_t pulseScale = 520;
const uint8_t prologue[] = {
1,1, 1,1, 1,1, 1,1, 1,1, 1,1,
2,3, 1,1, 2,2, 1,1, 1,1, 2,1,
1,1, 1,1, 1,2, 1,1, 1,1, 1,1,
1,1, 1,1,
};
const size_t prologueSize = sizeof(prologue) / sizeof(uint8_t);
const uint8_t epilogue[] = {
1,2, 2,2, 1,3,
};
const size_t epilogueSize = sizeof(epilogue) / sizeof(uint8_t);
const uint8_t onSignal[] = {
2,2, 1,1, 1,1, 1,1, 1,1, 2,1, 1,1,
};
const size_t onSize = sizeof(onSignal) / sizeof(uint8_t);
const uint8_t offSignal[] = {
1,1, 1,1, 1,1, 1,1, 1,1, 2,2, 2,1,
};
const size_t offSize = sizeof(offSignal) / sizeof(uint8_t);
const int nTxPin = 7;
void transmitArray(const uint8_t pulses[], size_t pulseCount) {
for(size_t idx = 0; idx < pulseCount; idx+=2) {
digitalWrite(nTxPin, HIGH);
delayMicroseconds(pulseScale*pulses[idx]);
digitalWrite(nTxPin, LOW);
delayMicroseconds(pulseScale*pulses[idx+1]);
}
}
void transmitSignal(const uint8_t signal[], size_t signalSize) {
transmitArray(prologue,prologueSize);
transmitArray(signal,signalSize);
transmitArray(epilogue,epilogueSize);
}
void sendTrain(const uint8_t signal[], size_t signalSize) {
transmitSignal(signal,signalSize);
delay(1000);
transmitSignal(signal,signalSize);
delay(2000);
transmitSignal(signal,signalSize);
}
void setup()
{
pinMode(nTxPin, OUTPUT);
digitalWrite(nTxPin, LOW);
Serial.begin(9600);
Serial.println("Press 0 to turn off heating");
Serial.println("Press 1 to turn on heating");
}
void loop()
{
if (Serial.available() > 0)
{
int nIncomming = Serial.read();
if (nIncomming == 49) {
Serial.println("ON");
sendTrain(onSignal,onSize);
}
if (nIncomming == 48) {
Serial.println("OFF");
sendTrain(offSignal,offSize);
}
Serial.println("Press 0 to turn off heating");
Serial.println("Press 1 to turn on heating");
}
}