// ============================================================================
// OPTION A — Arduino en mode "esclave"
// Il reçoit simplement :
// GR1 / GR0 → activer / désactiver relais Granules
// VB1 / VB0 → activer / désactiver relais Vibreur
//
// Il renvoie vers Processing :
// [R]Gr: ON|Vib: ON ou [R]Gr: OFF|Vib: OFF
//
// Et affiche les commandes sur lcd_Menu comme témoin.
// ============================================================================
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// ---------------------------------------------------------------------------
// BROCHES
// ---------------------------------------------------------------------------
const int PIN_RELAIS_GRANULES = 11;
const int PIN_RELAIS_VIBREUR = 3;
// ---------------------------------------------------------------------------
// LCD MENU — simple témoin d'activité
// ---------------------------------------------------------------------------
LiquidCrystal_I2C lcd_Menu(0x27, 20, 4);
// États logiciels
bool granulesON = false;
bool vibreurON = false;
// ---------------------------------------------------------------------------
// SETUP
// ---------------------------------------------------------------------------
void setup() {
Serial.begin(250000);
pinMode(PIN_RELAIS_GRANULES, OUTPUT);
pinMode(PIN_RELAIS_VIBREUR, OUTPUT);
digitalWrite(PIN_RELAIS_GRANULES, LOW);
digitalWrite(PIN_RELAIS_VIBREUR, LOW);
// LCD
lcd_Menu.init();
lcd_Menu.backlight();
lcd_Menu.clear();
lcd_Menu.setCursor(0,1);
lcd_Menu.print("System Ready");
}
// ---------------------------------------------------------------------------
// FONCTION : envoi de l'état vers Processing
// ---------------------------------------------------------------------------
void envoyerEtat() {
Serial.print("[R]");
Serial.print("Gr: ");
Serial.print(granulesON ? "ON" : "OFF");
Serial.print("|Vib: ");
Serial.println(vibreurON ? "ON" : "OFF");
}
// ---------------------------------------------------------------------------
// FONCTION : affiche la commande reçue sur lcd_Menu
// ---------------------------------------------------------------------------
void afficherCommande(const char* msg) {
lcd_Menu.clear();
lcd_Menu.setCursor(0,1);
lcd_Menu.print(msg);
}
// ---------------------------------------------------------------------------
// FONCTION : lecture des commandes série
// ---------------------------------------------------------------------------
void lireCommandeSerie() {
if (!Serial.available()) return;
String cmd = Serial.readStringUntil('\n');
cmd.trim();
if (cmd.startsWith("GR")) {
if (cmd.endsWith("1")) {
granulesON = true;
digitalWrite(PIN_RELAIS_GRANULES, HIGH);
afficherCommande("CMD: GR 1");
}
else {
granulesON = false;
digitalWrite(PIN_RELAIS_GRANULES, LOW);
afficherCommande("CMD: GR 0");
}
envoyerEtat();
}
else if (cmd.startsWith("VB")) {
if (cmd.endsWith("1")) {
vibreurON = true;
digitalWrite(PIN_RELAIS_VIBREUR, HIGH);
afficherCommande("CMD: VB 1");
}
else {
vibreurON = false;
digitalWrite(PIN_RELAIS_VIBREUR, LOW);
afficherCommande("CMD: VB 0");
}
envoyerEtat();
}
}
// ---------------------------------------------------------------------------
// LOOP
// ---------------------------------------------------------------------------
void loop() {
lireCommandeSerie();
}
Relais
Vibreur
Relais
Granules
Lcd_Menu
Lcd_Rapport
Lcd_Infos