//*****************************************************//
// //
// Décodeur DCC (locomotive) pour kit Magnorail //
// avec lecteur MP3 //
// //
// UAICF Nevers-Vauzelles //
// http://www.modelisme58.fr //
// //
// Août 2025 - Vers 1.1 //
// //
//*****************************************************//
//*** A modifier si besoin ****************************************************
#define DEBUG_SERIAL // Affichage d'éléments sur le moniteur série
//#define DEBUG_SERIAL_DCC // Affichage d'éléments du signal DCC sur le moniteur série
// Lecteur MP3
#define Mp3DFPlayer // Utilisation du lecteur MP3
// Afficheur
//#define EcranTM1637
#define EcranLCD
#define I2C 0x27 // Adresse I2C de l'écran LCD
// Valeurs par defaut
#define DCC_ADDRESSIni 3 // Adresse DCC du décodeur par défaut
#define TempsPasIni 100 // Temps pas vitesse
#define VitessePasIniAcc 8 // Pas de vitesse pour incrémentation accélération
#define VitessePasIniDesc 8 // Pas de vitesse pour incrémentation décelération
#define VitesseDefautIni 108 // Vitesse par defaut du moteur (entre 0 et 128)
#define pwmMiniIni 40 // Fréquence mini pour PWM
#define pwmMaxiIni 255 // Fréquence maxi pour PWM
#define VolumeSonIni 20 // Volume sonore
#define Rebond 100 // Temps en milliseconde pour anti-rebond des boutons poussoirs
//*** Fin des modifications ***************************************************
#include <EEPROM.h>
#include <Arduino.h>
#include <AP_DCC_library.h>
#include <Bounce2.h>
#ifdef Mp3DFPlayer
#include <SoftwareSerial.h>
#include <DFRobotDFPlayerMini.h>
DFRobotDFPlayerMini myDFPlayer;
#endif
#ifdef EcranLCD
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(I2C, 16, 2);
#endif
#include "configuration.h"
#include "ecran.h"
#include "boutons.h"
#include "dcc.h"
#include "portSerie.h"
void setup()
{
delay(2000);
#ifdef EcranLCD
lcd.init();
lcd.backlight();
lcd.setCursor(3, 0);
lcd.print("Magnorail");
lcd.setCursor(6, 1);
lcd.print("v1.1");
#endif
Serial.begin(9600);
// Configuration des bornes du moteur
pinMode(MOTEUR_PWM, OUTPUT);
pinMode(MOTEUR_IN1, OUTPUT);
pinMode(MOTEUR_IN2, OUTPUT);
digitalWrite(MOTEUR_IN1, LOW);
digitalWrite(MOTEUR_IN2, LOW);
// Configuration du bouton à levier (lecture directe)
pinMode(BTN_FORCE_AVANT, INPUT_PULLUP);
// Configuration des boutons poussoirs avec Bounce2
btnDefaultVitesse.attach(BTN_DEFAULT_VITESSE, INPUT_PULLUP);
btnDefaultVitesse.interval(Rebond);
btnChangeDir.attach(BTN_CHANGE_DIR, INPUT_PULLUP);
btnChangeDir.interval(Rebond);
btnVitesseAugmente.attach(BTN_VITESSE_PLUS, INPUT_PULLUP);
btnVitesseAugmente.interval(Rebond);
btnVitesseDiminue.attach(BTN_VITESSE_MOINS, INPUT_PULLUP);
btnVitesseDiminue.interval(Rebond);
btnStop.attach(BTN_STOP, INPUT_PULLUP);
btnStop.interval(Rebond);
// Configuration des bornes
pinMode(CLK_PIN, OUTPUT);
pinMode(DIO_PIN, OUTPUT);
digitalWrite(CLK_PIN, HIGH);
digitalWrite(DIO_PIN, HIGH);
// Configuration des bornes des LEDs
pinMode(Led_Avant, OUTPUT);
pinMode(Led_Arriere, OUTPUT);
pinMode(Led_Forcee_Avant, OUTPUT);
// État initial
VitesseActuelle = 0;
VitesseCible = 0;
VitesseSauvegarde = 0;
DirectionCourante = true; // Avant par défaut
Direction_Cible = true;
dirChangeEtat = NORMAL_OPERATION;
Serial.print(F("\nDecodeur DCC pour kit Magnorail - "));
Serial.println(Date_Compilation);
Serial.println(F("Proposé par l'UAICF Nevers-Vauzelles - www.modelisme58.fr"));
#ifdef DEBUG_SERIAL_DCC
Serial.print(F("Direction : Avant | Vitesse = 0, Vitesse par défaut = ")); Serial.println(VitesseDefaut);
#endif
Serial.println(F("$C pour visualiser la configuration"));
Serial.println(F("$H pour afficher l'aide\n"));
Configuration_Generale();
#ifdef EcranTM1637
tm1637_init();
displayNumber(0000);
#endif
// Arrêt du moteur au démarrage
ArretMoteur();
Led_Maj();
#ifdef EcranLCD
lcd.clear();
AffichageLCD (0);
#endif
Serial.println(F("*** Fin Setup ***\n"));
}
void loop()
{
Reception_DCC(); // Traitement du signal DCC
Lecture_Boutons(); // Lecture de létat des boutons
Led_Maj(); // Mise à jour des LEDs
Moteur_MAJ(); // Mise à jour de la gestion du moteur
Gestion_Chgt_Vit_Dir(); // Gestion progressive de la vitesse et du changement de direction
}
Stop
Default
+++
- - -
Direction
Lecteur MP3
Bloquage
<<< __ >>>
Bloqué
PWM
Signal DCC