C'est la diversité et c'est très bien.





Amigorl a écrit : 15 janv. 2026, 18:29 Je n'impose pas mes solutions, j'expose simplement ce que j'ai fait. Y a toujours plein de solutions différentes pour arriver au but, elles sont toutes respectables.
C'est la diversité et c'est très bien.
![]()




Amigorl a écrit : 15 janv. 2026, 18:59 Un chercheur qui cherche, on en trouve, un chercheur qui trouve, on en cherche.......








Code : Tout sélectionner
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * *
* * * * * Décodeur d'accessoires * * * * *
* * * * * * * * * *
* * * * * Vu sur le site : * * * * *
* * * * * Seine Modèle Club Ferroviaire - SMCF * * * * *
* * * * * https://www.modelisme-ferroviaire-rouen.fr/ * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
// Utilisation de la librairie DCC Decoder pour lire les trames DCC
#include "DCC_Decoder.h"
// Adresse de base du Arduino-Decodeur
#define baseAdresse 100
// Déclaration des éléments par rapport aux broches de l'Arduino
// La LED1 est connectée à la broche 6
// La LED2 est connectée à la broche 7
// La LED3 est connectée à la broche 8
// La LED4 est connectée à la broche 9
const int Led_1 = 6;
const int Led_2 = 7;
const int Led_3 = 8;
const int Led_4 = 9;
// 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_1, LOW);
digitalWrite(Led_2, HIGH);
} else {
digitalWrite(Led_1, HIGH);
digitalWrite(Led_2, LOW);
}
break;
case (baseAdresse + 1):
if (enable) {
digitalWrite(Led_3, LOW);
digitalWrite(Led_4, HIGH);
} else {
digitalWrite(Led_3, HIGH);
digitalWrite(Led_4, LOW);
}
break;
/* Et ainsi de suite
case (baseAdresse + 2):
break;
*/
}
}
void setup() {
// Broche des LEDs en mode "Sortie"
pinMode(Led_1, OUTPUT);
pinMode(Led_2, OUTPUT);
pinMode(Led_3, OUTPUT);
pinMode(Led_4, OUTPUT);
// Init les Voyants, par défaut Rouge actif
digitalWrite(Led_1, HIGH);
digitalWrite(Led_2, LOW);
digitalWrite(Led_3, LOW);
digitalWrite(Led_4, 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();
}









Pour faire fonctionner le décodeur dcc il est nécessaire de :

Oui, je pense qu'il n'y a pas besoin de pullup devant un optocoupleurherwat a écrit : 18 janv. 2026, 19:15 Sur le schémas que j'utilise, il y a une résistance de 10 K entre les pin 7 et 8 de l'optocoupleur, probablement pour forcer l'entrée de la porte au niveau haut .
Le problème viendrait-il de là ?
Pour le moment j'utilise DCC monitor .
Et la pin 2 de l'arduino pour l'interruption 0


Pas bête !Amigorl a écrit : 18 janv. 2026, 19:26
J'ai ajouté une led sur la sortie avec une résistance. Comme cela je vois si alim dcc.....
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité