#define PIN_PUSHBUTTON 12
#define PIN_LED_ON_BOARD 13

// Related to Rx
String inputString = "";
boolean stringComplete = false;

// Related to Tx
int pushbuttonState;
unsigned long currentTimeMs;
unsigned long lastTransmitTimeMs = 0;
int TRANSMIT_INTERVAL_MS = 1000;

void setup() {
  Serial.begin(115200);

  // Rx setup
  inputString.reserve(200);
  pinMode(PIN_LED_ON_BOARD, OUTPUT);

  // Tx setup
  pinMode(PIN_PUSHBUTTON, INPUT_PULLUP);
}

void loop() {

  // Rx
  if (stringComplete) {
    // TODO: Parse the message.  Here thre is no 'real' parsing just looking at the whole message.
    if (inputString.equalsIgnoreCase("LED ON")) {
      digitalWrite(PIN_LED_ON_BOARD, HIGH);
    } else if (inputString.equalsIgnoreCase("LED OFF")) {
      digitalWrite(PIN_LED_ON_BOARD, LOW);
    }    
    inputString = "";
    stringComplete = false;
  }

  // Tx
  currentTimeMs = millis();
  if ((currentTimeMs - lastTransmitTimeMs) > TRANSMIT_INTERVAL_MS) {
    lastTransmitTimeMs = currentTimeMs;
    pushbuttonState = digitalRead(PIN_PUSHBUTTON);
    Serial.print("Button = ");
    Serial.println(pushbuttonState);
  }
}

// Rx
void serialEvent() {
  while (Serial.available()) {
    char inChar = (char)Serial.read();
    if (inChar == '\n') {
      stringComplete = true;
    } else {    
      inputString += inChar;
    }
  }
}