Ajout Debug

This commit is contained in:
2026-08-11 09:58:47 +02:00
parent 45dcbc49db
commit 13930c5279
4 changed files with 113 additions and 21 deletions
+67 -21
View File
@@ -21,12 +21,24 @@
#define DEFAULT_MAX_UP 180
#define DEFAULT_MAX_DOWN 0
#define DEFAULT_ADDRESS 1
#define VITESSE 20 // Temps en millisecondes entre chaque pas de servo
#define VITESSE 40 // Temps en millisecondes entre chaque pas de servo
#define EEPROM_SIG_ADDR 0
#define EEPROM_SIG_VALUE 0xA5
#define DIY_MANUFACTURER_ID 13
#define DEBUG 1
#ifdef DEBUG
#define DEBUG_INITIALIZE_SERIAL Serial.begin(115200)
#define DEBUG_PRINT(x) Serial.print(x)
#define DEBUG_PRINTLN(x) Serial.println(x)
#else
#define DEBUG_INITIALIZE_SERIAL
#define DEBUG_PRINT(x)
#define DEBUG_PRINTLN(x)
#endif
struct DCCAccessoryConfig {
byte Sig; // Signature pour vérifier la validité de la structure (0x45)
byte ManufacturerID; // Manufacturer ID (0-255)
@@ -62,7 +74,8 @@ void notifyCVAck(void)
}
/**
* Notifie le changement d'une CV.
* Notifie le changement d'une CV. Appelé par le décodeur DCC lorsque la valeur d'une CV est modifiée.
* par la centrale DCC. Cette fonction met à jour les variables correspondantes et peut effectuer des actions supplémentaires si nécessaire.
* @param CV Le numéro de la CV à modifier.
* @param Value La nouvelle valeur de la CV.
*/
@@ -107,6 +120,17 @@ uint8_t notifyCVValid (uint16_t CV, uint8_t Writable)
return 0;
}
void initDefaultConfig()
{
MyConfig.Sig = EEPROM_SIG_VALUE;
MyConfig.ManufacturerID = DIY_MANUFACTURER_ID;
MyConfig.Version = 1;
MyConfig.address = DEFAULT_ADDRESS;
MyConfig.MotorSpeed = DEFAULT_PALES_SPEED;
MyConfig.ServoMaxUp = DEFAULT_MAX_UP;
MyConfig.ServoMaxDown = DEFAULT_MAX_DOWN;
}
/**
* Notifie la demande de réinitialisation des valeurs par défaut de la CV.
*/
@@ -117,10 +141,8 @@ void notifyCVResetFactoryDefault()
Dcc.setCV(CV_MAX_DOWN, DEFAULT_MAX_DOWN);
Dcc.setCV(CV_ACCESSORY_DECODER_ADDRESS_LSB, DEFAULT_ADDRESS & 0xFF);
Dcc.setCV(CV_ACCESSORY_DECODER_ADDRESS_MSB, (DEFAULT_ADDRESS >> 8) & 0x07);
MyConfig.address = DEFAULT_ADDRESS;
MyConfig.MotorSpeed = DEFAULT_PALES_SPEED;
MyConfig.ServoMaxUp = DEFAULT_MAX_UP;
MyConfig.ServoMaxDown = DEFAULT_MAX_DOWN;
initDefaultConfig();
EEPROM.write(EEPROM_SIG_ADDR, EEPROM_SIG_VALUE);
EEPROM.put(1, MyConfig);
}
@@ -130,27 +152,37 @@ void notifyCVResetFactoryDefault()
*/
void loadCv()
{
// Vérifie si les valeurs par défaut ont déjà été initialisées dans l'EEPROM
if (EEPROM.read(EEPROM_SIG_ADDR) != EEPROM_SIG_VALUE)
{
// Non, pas de valeurs par défaut initialisées, donc on les initialise maintenant
MyConfig.Sig = EEPROM_SIG_VALUE;
MyConfig.ManufacturerID = DIY_MANUFACTURER_ID;
MyConfig.Version = 1;
MyConfig.address = DEFAULT_ADDRESS;
MyConfig.MotorSpeed = DEFAULT_PALES_SPEED;
MyConfig.ServoMaxUp = DEFAULT_MAX_UP;
MyConfig.ServoMaxDown = DEFAULT_MAX_DOWN;
// Enregistrer la structure de configuration dans l'EEPROM
bool configValid = EEPROM.read(EEPROM_SIG_ADDR) == EEPROM_SIG_VALUE;
if (!configValid) {
DCCAccessoryConfig storedConfig;
EEPROM.get(1, storedConfig);
if (storedConfig.Sig == EEPROM_SIG_VALUE) {
MyConfig = storedConfig;
EEPROM.write(EEPROM_SIG_ADDR, EEPROM_SIG_VALUE);
configValid = true;
}
}
if (!configValid) {
DEBUG_PRINTLN("EEPROM not initialized, setting default values...");
initDefaultConfig();
DEBUG_PRINTLN("Writing default configuration to EEPROM...");
EEPROM.write(EEPROM_SIG_ADDR, EEPROM_SIG_VALUE);
EEPROM.put(1, MyConfig);
}
else
{
// Lire la structure de configuration depuis l'EEPROM
DEBUG_PRINTLN("EEPROM already initialized, loading configuration...");
EEPROM.get(1, MyConfig);
}
// Charger les valeurs des CV depuis la structure de configuration
DEBUG_PRINTLN(" MotorSpeed: " + String(MyConfig.MotorSpeed));
Dcc.setCV(CV_PALES_SPEED, MyConfig.MotorSpeed);
DEBUG_PRINTLN(" ServoMaxUp: " + String(MyConfig.ServoMaxUp));
DEBUG_PRINTLN(" ServoMaxDown: " + String(MyConfig.ServoMaxDown));
DEBUG_PRINTLN(" Address: " + String(MyConfig.address));
Dcc.setCV(CV_MAX_UP, MyConfig.ServoMaxUp);
Dcc.setCV(CV_MAX_DOWN, MyConfig.ServoMaxDown);
Dcc.setCV(CV_ACCESSORY_DECODER_ADDRESS_LSB, MyConfig.address & 0xFF);
@@ -229,6 +261,8 @@ void notifyDccSigOutputState(uint16_t Addr, uint8_t State)
*/
void setup()
{
DEBUG_INITIALIZE_SERIAL;
DEBUG_PRINTLN("DCC Helico system initialized...");
// Sens des PINs
pinMode(LED_PIN, OUTPUT);
pinMode(PWM_PIN, OUTPUT);
@@ -236,6 +270,11 @@ void setup()
servoMotor.attach(SERVO_PIN);
servoMotor.write(90);
// Initialise les valeurs de la platine
STROBE_ON = 1;
HelicoUP = 0;
currentServoPos = 0;
targetServoPos = 180;
// Attache l'interruption pour le signal DCC
#ifdef digitalPinToInterrupt
Dcc.pin(DCC_SIGNAL_PIN, 0);
@@ -243,12 +282,13 @@ void setup()
Dcc.pin(0, DCC_SIGNAL_PIN, 1);
#endif
// Lire les valeurs des CV depuis l'EEPROM et les charger dans le décodeur DCC
DEBUG_PRINTLN("Loading CVs from EEPROM...");
loadCv();
// Initialise le décodeur DCC en mode accessoire avec filtrage d'adresse sur l'adresse DCC courante.
Dcc.init(DIY_MANUFACTURER_ID, 10, FLAGS_MY_ADDRESS_ONLY | FLAGS_DCC_ACCESSORY_DECODER | FLAGS_OUTPUT_ADDRESS_MODE, 0);
Dcc.init(MyConfig.ManufacturerID, MyConfig.Version, FLAGS_MY_ADDRESS_ONLY | FLAGS_DCC_ACCESSORY_DECODER | FLAGS_OUTPUT_ADDRESS_MODE, 0);
loadCvFromDcc();
// loadCvFromDcc();
}
@@ -276,17 +316,20 @@ void loop()
servoMotor.write(currentServoPos);
}
}
// servoMotor.write(90);
if (STROBE_ON) {
switch (strobePhase) {
case 0:
digitalWrite(LED_PIN, HIGH);
digitalWrite(LED_BUILTIN, HIGH);
strobePhase = 1;
strobeNextMillis = now + 100;
break;
case 1:
if (now >= strobeNextMillis) {
digitalWrite(LED_PIN, LOW);
digitalWrite(LED_BUILTIN, LOW);
strobePhase = 2;
strobeNextMillis = now + 100;
}
@@ -294,6 +337,7 @@ void loop()
case 2:
if (now >= strobeNextMillis) {
digitalWrite(LED_PIN, HIGH);
digitalWrite(LED_BUILTIN, HIGH);
strobePhase = 3;
strobeNextMillis = now + 100;
}
@@ -301,6 +345,7 @@ void loop()
case 3:
if (now >= strobeNextMillis) {
digitalWrite(LED_PIN, LOW);
digitalWrite(LED_BUILTIN, LOW);
strobePhase = 4;
strobeNextMillis = now + 1000;
}
@@ -314,5 +359,6 @@ void loop()
} else {
strobePhase = 0;
digitalWrite(LED_PIN, LOW);
digitalWrite(LED_BUILTIN, LOW);
}
}