const uint8_t prologue[] = {
2, 2, 2, 2, 2, 2, 4,
2, 4, 2, 2, 3, 2, 2,
3, 2, 2, 2, 2, 2,
};
const uint8_t prologueSize = sizeof(prologue) / sizeof(uint8_t);
const uint8_t epilogue[] = {
3, 4, 3,
};
const uint8_t epilogueSize = sizeof(epilogue) / sizeof(uint8_t);
const uint8_t onSignal[] = {
4, 2, 2, 2, 2, 3, 2,
};
const uint8_t onSize = sizeof(onSignal) / sizeof(uint8_t);
const uint8_t offSignal[] = {
2, 2, 2, 2, 2, 4, 3,
};
const uint8_t offSize = sizeof(offSignal) / sizeof(uint8_t);
const int pulseScale = 260;
const int nTxPin = 7;
void transmitArray(const uint8_t pulses[], uint8_t pulseCount) {
for(int pulse = 0; pulse < pulseCount; ++pulse) {
int pulseWidth = pulses[pulse];
if (pulseWidth>0) {
digitalWrite(nTxPin, HIGH);
delayMicroseconds(pulseScale*pulseWidth);
}
else {
digitalWrite(nTxPin, LOW);
delayMicroseconds(pulseScale*(-pulseWidth));
}
}
}
void transmitSignal(const uint8_t signal[], uint8_t signalSize) {
transmitArray(prologue,prologueSize);
transmitArray(signal,signalSize);
transmitArray(epilogue,epilogueSize);
}
void sendTrain(const uint8_t signal[], uint8_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");
}
}