Ajout Doc
This commit is contained in:
+46
-36
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user