// Simple Two Arduino Communication
// Change this value to select which Arduino to program:
// 1 = Sender, 2 = Receiver
#define ARDUINO_BOARD 1
#if ARDUINO_BOARD == 1
// ========== SENDER ==========
struct DataPLTS {
float Vtotal;
float Itotal;
uint8_t SOCtotal;
uint8_t SOC1;
float V[3];
float I1;
uint8_t relay[3];
};
DataPLTS data;
void setup() {
Serial.begin(115200);
//Serial1.begin(9600); // komunikasi ke Mega RX via Serial1 (TX1/RX1)
// Isi data dummy
data.Vtotal = 50.9;
data.Itotal = -12.5;
data.SOCtotal = 89;
data.SOC1 = 98;
data.V[0] = 3.232;
data.V[1] = 3.112;
data.V[2] = 3.333;
data.I1 = -3.0;
data.relay[0] = 1;
data.relay[1] = 0;
data.relay[2] = 1;
}
void loop() {
//Serial1.write((uint8_t*)&data, sizeof(data)); // kirim data biner ke Mega RX
Serial.print("TX -> Mengirim ");
Serial.print(sizeof(data));
Serial.println(" byte ke RX...");
delay(2000);
}
#else
// ========== RECEIVER ==========
struct DataPLTS {
float Vtotal;
float Itotal;
uint8_t SOCtotal;
uint8_t SOC1;
float V[3];
float I1;
uint8_t relay[3];
};
DataPLTS data;
void setup() {
Serial.begin(115200);
Serial1.begin(9600); // terima data dari TX
}
void loop() {
if (Serial1.available() >= sizeof(data)) {
Serial1.readBytes((uint8_t*)&data, sizeof(data));
Serial.println("=== Data diterima dari Mega TX ===");
Serial.print("Vtotal = "); Serial.println(data.Vtotal);
Serial.print("Itotal = "); Serial.println(data.Itotal);
Serial.print("SOC total = "); Serial.print(data.SOCtotal); Serial.println("%");
Serial.print("SOC1 = "); Serial.print(data.SOC1); Serial.println("%");
for (int i = 0; i < 3; i++) {
Serial.print("V"); Serial.print(i + 1); Serial.print(" = ");
Serial.println(data.V[i]);
}
Serial.print("I1 = "); Serial.println(data.I1);
for (int i = 0; i < 3; i++) {
Serial.print("Relay "); Serial.print(i + 1);
Serial.print(" = "); Serial.println(data.relay[i] ? "ON" : "OFF");
}
Serial.println();
}
}
#endif