Évidemment, quand on met du courant, ça marche tout de suite mieux !
Bon, problème résolu ! ! !
Voilà le programme modifié :
Code : Tout sélectionner
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * *
* * * * * Décodeur d'accessoires * * * * *
* * * * * * * * * *
* * * * * Vu sur le site : * * * * *
* * * * * Seine Modèle Club Ferroviaire - SMCF * * * * *
* * * * * https://www.modelisme-ferroviaire-rouen.fr/ * * * * *
* * * * * * * * * *
* * * * * Modifications faites pour l'APT * * * * *
* * * * * version ROCO * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
// Utilisation de la librairie DCC Decoder pour lire les trames DCC
#include "DCC_Decoder.h"
#define DCC_INTERRUPT 0
// Adresse de base du Arduino-Decodeur
#define baseAdresse 100
// Déclaration des éléments par rapport aux broches de l'Arduino
// La LED0 est connectée à la broche 6 et correspond à l'adresse DCC 100
// La LED1 est connectée à la broche 7 et correspond à l'adresse DCC 101
// La LED2 est connectée à la broche 8 et correspond à l'adresse DCC 102
// La LED3 est connectée à la broche 9 et correspond à l'adresse DCC 103
const int PinLed [4] = {6,7,8,9} ;
int Transmis = 0 ;
int A_Transmettre ;
int Transmission ;
boolean Chx ;
int i ; int y ; // Variables d'incrémentation
void setup()
{
Serial.begin(9600);
// Broches des LEDs en mode "Sortie"
for (i=0 ; i <= 3 ; i++){pinMode(PinLed [i], OUTPUT);
digitalWrite(PinLed [i], LOW); }
digitalWrite(PinLed [0], HIGH);
// Les 2 lignes suivantes permettent d'initialiser la librairie DCC Decoder
DCC.SetBasicAccessoryDecoderPacketHandler(BasicAccDecoderPacket_Handler, true);
DCC.SetupDecoder( 0x00, 0x00, DCC_INTERRUPT ); // DCC_INTERRUPT
}
void loop()
{
// Appel de la librairie DCC pour lire les valeurs
DCC.loop();
}
//******************************************************************
// Les Fonctions
//******************************************************************
void BasicAccDecoderPacket_Handler(int address, boolean activate, byte data)
// Cette fonction est appelée par la librairie pour
// activer / désactiver au niveau de chaque adresse
{
address -= 1;
address *= 4;
address += 1;
address += (data & 0x06) >> 1;
address = address + 4; // cette ligne devra être décommentée
// si centrale RocoMouse et/ou z21
boolean enable = (data & 0x01) ? 1 : 0;
Serial.print(F(" Adresse DCC Claire : "));
Serial.print(address);
Serial.print(" Enable : ");
Serial.print(enable);
Serial.print(" Activate : ");
Serial.println(activate);
/* Ex: si l'adresse de base est 100
alors l'arduino réagit aux adresse 100, 101, 102,...
Si l'adresse accessoire envoyée par la centrale
correspond à l'une de notre programme
Alors on récupère son état (activé/désactivé)
et on exécute en conséquence les actions
Ici la gestion de l'alimentation de 4 LEDs. */
Chx = false ;
for (i=0 ; i <= 3 ; i++)
{
if( address == baseAdresse + i )
{ if (enable) { A_Transmettre = i ; Chx = true ;} }
}
if (Chx){if ( A_Transmettre == Transmis ) {}
else { Transmis = A_Transmettre ; Envoyer () ; }
}
}
void Envoyer ()
{
// La led appelée s'allume, l'autre s'éteind .
for (i=0 ; i <= 3 ; i++){pinMode(PinLed [i], OUTPUT);
digitalWrite(PinLed [i], LOW); }
digitalWrite(PinLed [A_Transmettre], HIGH);
}
Pffff, les erreurs les plus grosses sont souvent les plus difficiles à trouver : environ 5 heures