16
Aide / Re : Commande de passage à niveau par DCC
« le: février 27, 2023, 04:24:26 pm »
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.
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.
Code: [Sélectionner]
// 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();
}