Bonjour,
voici le programme utilisé pour recevoir l'information depuis la centrale. Il allume une led verte sur la broche 3 si la fonction enable est envoyée sur l'adresse 117, et rouge sur la broche 4 dans le cas contraire.
C'est à partir de là que j'ai ajouté les fonctions du PN, certainement très maladroitement.
// Utilisation de la librairie DCC Decoder pour lire les trames DCC
#include "DCC_Decoder.h"
// Adresse de base du Arduino-Decodeur
#define baseAdresse 117
// Déclaration des éléments par rapport aux broches de l'Arduino
// La LED verte est connectée à la broche 3
// La LED rouge est connectée à la broche 4
const int Led_Verte = 3;
const int Led_Rouge = 4;
// Cette fonction est appelée par la librairie pour
// chaque activer / désactiver au niveau des adresses
void BasicAccDecoderPacket_Handler(int address, boolean activate, byte data) {
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;
// Ex: si 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 2 LEDs.
switch (address) {
case (baseAdresse):
if (enable) {
digitalWrite(Led_Rouge, LOW);
digitalWrite(Led_Verte, HIGH);
} else {
digitalWrite(Led_Rouge, HIGH);
digitalWrite(Led_Verte, LOW);
}
break;
// Cas pour les adresses suivantes
/*
case (baseAdresse + 1):
break;
case (baseAdresse + 2):
break;
*/
}
}
void setup() {
// Broche des LEDs en mode "Sortie"
pinMode(Led_Rouge, OUTPUT);
pinMode(Led_Verte, OUTPUT);
// Init les Voyants, par défaut Rouge actif
digitalWrite(Led_Rouge, HIGH);
digitalWrite(Led_Verte, LOW);
// Les 2 lignes suivantes permettent d'initialiser la librairie DCC Decoder
DCC.SetBasicAccessoryDecoderPacketHandler(BasicAccDecoderPacket_Handler, true);
DCC.SetupDecoder( 0x00, 0x00, 0 );
}
void loop() {
// Appel de la librairie DCC pour lire les valeurs
DCC.loop();
}