Lähettimen lähdekoodi v1

From Pessin randon wiki

Lähettimen lähdekoodi V1

#include <RH_ASK.h>
#include <SPI.h>

RH_ASK driver(1000);
#define TX_PIN 12

#define DIP1 2
#define DIP2 3
#define DIP3 4
#define DIP4 5

byte crc8_dallas(const String &data) {
  byte crc = 0x00;
  for (int i = 0; i < data.length(); i++) {
    crc ^= data[i];
    for (int j = 0; j < 8; j++) {
      crc = (crc & 0x80) ? (crc << 1) ^ 0x31 : (crc << 1);
    }
  }
  return crc;
}

void setup() {
  driver.init();
  pinMode(DIP1, INPUT_PULLUP);
  pinMode(DIP2, INPUT_PULLUP);
  pinMode(DIP3, INPUT_PULLUP);
  pinMode(DIP4, INPUT_PULLUP);
  pinMode(TX_PIN, OUTPUT);
  randomSeed(analogRead(0));
}

String readDipCode() {
  String code = "";
  code += (digitalRead(DIP1) == LOW) ? '1' : '0';
  code += (digitalRead(DIP2) == LOW) ? '1' : '0';
  code += (digitalRead(DIP3) == LOW) ? '1' : '0';
  code += (digitalRead(DIP4) == LOW) ? '1' : '0';
  return code;
}

void loop() {
  String code = readDipCode();
  String core = "S" + code + "E";
  byte crc = crc8_dallas(core);
  String message = core + String(crc, HEX);

  driver.send((uint8_t*)message.c_str(), message.length());
  driver.waitPacketSent();

  delay(random(800, 1800));  // satunnainen lähetysväli
}