// =========================================================================
// DEFINTIEVE HUB CODE - AFGESTEMD OP JOUW ARDUINO NANO SCHEMA
// =========================================================================
#include <SoftwareSerial.h>
// Definieer de poorten naar de slaves exact volgens jouw gekleurde lijnen:
SoftwareSerial SlaveWissels(2, 3); // Paars/Roze lijnen naar Slave Wissels (RX=2, TX=3)
SoftwareSerial SlaveBeveiliging(4, 5); // Groene lijnen naar Slave Beveiliging (RX=4, TX=5)
bool noodstopStatus = false;
void verwerkInkomendSignaal(String cmd) {
cmd.trim();
if (cmd.length() == 0) return;
// 1. NOODSTOP (Direct naar ALLEBIJ de slaves sturen!)
if (cmd == "STOP") {
noodstopStatus = true;
SlaveWissels.println("STOP");
SlaveBeveiliging.println("STOP");
return;
}
if (cmd == "START") {
noodstopStatus = false;
SlaveWissels.println("START");
SlaveBeveiliging.println("START");
return;
}
// 2. VERLICHTING (Naar Slave Wissels & Verlichting)
if (cmd.startsWith("L") && (cmd.endsWith("_AAN") || cmd.endsWith("_UIT"))) {
SlaveWissels.println(cmd);
return;
}
// 3. WISSELS VERTALEN (Vanaf Master Wissels -> Vertaal W_R1 naar W1_RECHT)
if (cmd.startsWith("W_")) {
String richtingLetter = cmd.substring(2, 3); // 'R' of 'A'
int wisselNummer = cmd.substring(3).toInt();
String nieuwCommando = "W" + String(wisselNummer) + "_";
if (richtingLetter == "R") {
nieuwCommando += "RECHT";
} else if (richtingLetter == "A") {
nieuwCommando += "AFB";
}
SlaveWissels.println(nieuwCommando); // Stuur het vertaalde commando naar de juiste slave
return;
}
// 4. SEINEN (Direct 1-op-1 doorsturen naar de Beveiligings-Slave)
if (cmd.startsWith("M_")) {
SlaveBeveiliging.println(cmd);
return;
}
}
void setup() {
// De hardware poort luistert naar de twee Masters (Blauwe/Oranje lijnen op pin 0 en 1)
Serial.begin(9600);
// Start de software poorten naar de twee verschillende Mega Slaves
SlaveWissels.begin(9600);
SlaveBeveiliging.begin(9600);
}
void loop() {
// Luister continu naar de poort waar de twee Masters hun commando's op afvuren
if (Serial.available()) {
String cmd = Serial.readStringUntil('\n');
verwerkInkomendSignaal(cmd);
}
}