Ajout Doc

This commit is contained in:
Serge NOEL
2026-08-11 11:02:30 +02:00
parent 13930c5279
commit c505ecbd4a
2 changed files with 84 additions and 83 deletions
+46 -36
View File
@@ -4,28 +4,32 @@
#include <EEPROM.h>
// Affectation des PINs Arduino
#define DCC_SIGNAL_PIN 2
#define LED_PIN 3
#define PWM_PIN 5
#define SERVO_PIN 6
#define DCC_SIGNAL_PIN 2 // Pin pour le signal DCC
#define LED_PIN 3 // Pin pour la LED de signalisation
#define PWM_PIN 5 // Pin pour le signal PWM du moteur des pales
#define SERVO_PIN 9 // Pin pour le signal du servo moteur
// Valeurs des CV (Configuration Variables)
#define CV_ADDRESS_LSB 513
#define CV_ADDRESS_MSB 521
#define CV_PALES_SPEED 100
#define CV_MAX_UP 101
#define CV_MAX_DOWN 102
#define CV_ADDRESS_LSB 513
#define CV_ADDRESS_MSB 521
#define CV_PALES_SPEED 100
#define CV_MAX_UP 101
#define CV_MAX_DOWN 102
#define CV_RESET 512 // CV pour réinitialiser les valeurs par défaut (standard NMRA DCC)
// Valeurs par défaut des CV
#define DEFAULT_PALES_SPEED 255
#define DEFAULT_MAX_UP 180
#define DEFAULT_MAX_DOWN 0
#define DEFAULT_ADDRESS 1
#define VITESSE 40 // Temps en millisecondes entre chaque pas de servo
#define DEFAULT_PALES_SPEED 255 // Vitesse par défaut du moteur des pales (0-255)
#define DEFAULT_MAX_UP 180 // Position maximale par défaut pour le servo en haut (0-180)
#define DEFAULT_MAX_DOWN 0 // Position maximale par défaut pour le servo en bas (0-180)
#define DEFAULT_ADDRESS 1 // Adresse DCC par défaut du décodeur d'accessoire
#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 EEPROM_SIG_ADDR 0 // Position dans l'EEPROM pour stocker la signature de validation de la structure de configuration
#define EEPROM_SIG_VALUE 0xA5 // Valeur de signature pour vérifier la validité de la structure de configuration dans l'EEPROM
#define DIY_MANUFACTURER_ID 200 // Non utilisé actuellement d'après la spécification NMRA DCC,
// mais peut être utilisé pour identifier le fabricant du décodeur.
#define DIY_MODEL_ID 1 // Carte pilote Helicoptère, non utilisé actuellement d'après la spécification NMRA DCC,
// mais peut être utilisé pour identifier le modèle du décodeur.
#define DEBUG 1
@@ -69,8 +73,10 @@ unsigned long servoNextMillis = 0;
void notifyCVAck(void)
{
digitalWrite(LED_PIN, HIGH);
digitalWrite(LED_BUILTIN, HIGH);
delay(6);
digitalWrite(LED_PIN, LOW);
digitalWrite(LED_BUILTIN, LOW);
}
/**
@@ -81,27 +87,30 @@ void notifyCVAck(void)
*/
void notifyCVChange(uint16_t CV, uint8_t Value)
{
if (CV == CV_PALES_SPEED) {
PalesSpeed = Value;
} else if (CV == CV_MAX_UP) {
ServoMaxUp = Value;
if (CV == CV_PALES_SPEED)
{
// Taux du PWM de 0 à 255 pour la vitesse du moteur des pales
MyConfig.MotorSpeed = Value;
} else if (CV == CV_MAX_UP)
{
// La valeur maximale pour la position du servo en haut (0-180)
if (Value > 180) Value = 180; // Limite la valeur à 180
MyConfig.ServoMaxUp = Value;
} else if (CV == CV_MAX_DOWN) {
ServoMaxDown = Value;
// La valeur maximale pour la position du servo en bas (0-180)
if (Value > 180) Value = 180; // Limite la valeur à 180
MyConfig.ServoMaxDown = Value;
} else if (CV == CV_ADDRESS_LSB || CV == CV_ACCESSORY_DECODER_ADDRESS_LSB) {
currentAddress = (currentAddress & 0xFF00) | Value;
if (CV == CV_ADDRESS_LSB) {
Dcc.setCV(CV_ACCESSORY_DECODER_ADDRESS_LSB, Value);
} else {
Dcc.setCV(CV_ADDRESS_LSB, Value);
}
MyConfig.address = (MyConfig.address & 0xFF00) | Value;
} else if (CV == CV_ADDRESS_MSB || CV == CV_ACCESSORY_DECODER_ADDRESS_MSB) {
currentAddress = (currentAddress & 0x00FF) | ((Value & 0x07) << 8);
if (CV == CV_ADDRESS_MSB) {
Dcc.setCV(CV_ACCESSORY_DECODER_ADDRESS_MSB, Value & 0x07);
} else {
Dcc.setCV(CV_ADDRESS_MSB, Value);
}
MyConfig.address = (MyConfig.address & 0x00FF) | ((Value & 0x07) << 8);
} else if (CV == CV_RESET && Value == 8) {
// Réinitialiser les valeurs par défaut
initDefaultConfig();
}
// Sauver les nouvelles valeurs dans l'EEPROM
EEPROM.write(EEPROM_SIG_ADDR, EEPROM_SIG_VALUE);
EEPROM.put(1, MyConfig);
}
/**
@@ -113,7 +122,8 @@ void notifyCVChange(uint16_t CV, uint8_t Value)
uint8_t notifyCVValid (uint16_t CV, uint8_t Writable)
{
if (CV == CV_PALES_SPEED || CV == CV_MAX_UP || CV == CV_MAX_DOWN ||
CV == CV_ADDRESS_LSB || CV == CV_ADDRESS_MSB || CV == CV_ADDRESS_LSB || CV == CV_ADDRESS_MSB) {
CV == CV_ADDRESS_LSB || CV == CV_ADDRESS_MSB ||
CV == CV_RESET) {
return 1;
}
@@ -124,7 +134,7 @@ void initDefaultConfig()
{
MyConfig.Sig = EEPROM_SIG_VALUE;
MyConfig.ManufacturerID = DIY_MANUFACTURER_ID;
MyConfig.Version = 1;
MyConfig.Version = DIY_MODEL_ID;
MyConfig.address = DEFAULT_ADDRESS;
MyConfig.MotorSpeed = DEFAULT_PALES_SPEED;
MyConfig.ServoMaxUp = DEFAULT_MAX_UP;