Super, j'ai récupéré le code Arduino qui est bien plus simple sur le site que Petitrain m'as indiqué et je l'ai transformé par essais et erreurs.
J'ai enlevé 1 ligne sur 2 et rendu la sortie ON ou off en permanence .
J'ai ensuite rajouté le même code pour les 17 sorties possibles de l'Arduino uno.
Chaque Pin de sortie est envoyée à un relais inverseur.
Une alimentation 14 volt AC attaque le contact central de l'inverseur et les contacts latéraux attaquent les diodes inversées sur les entrées marche avant/arrière du moteur Conrad.
Je l'ai testé avec un relais et un moteur Conrad et c'est OK.
Je suis stupéfait moi-même que cela fonctionne car je ne suis pas un spécialiste du Arduino.
Il y a surement encore moyen d'améliorer mais je suis déjà bien content.
Merci bien à Brut de pomme de m'avoir encouragé et à Petitrain pour le lien adéquat qu'il m'a envoyé.
J'ai fait une petite Vidéo visible sur ma Dropbox:
https://www.dropbox.com/s/fhmwzw6115bba ... s.mov?dl=0
Voici le code transformé:
Décodeur DCC sur Arduino UNO pour Commander 17 aiguillages avec moteur Conrad
_______________________________________________________________
#include <NmraDcc.h>
NmraDcc Dcc ;
DCC_MSG Packet ;
int pinf3 = 3;
int pinf4 = 4;
int pinf5 = 5;
int pinf6 = 6;
int pinf7 = 7;
int pinf8 = 8;
int pinf9 = 9;
int pinf10 = 10;
int pinf11 = 11;
int pinf12 = 12;
int pinf13 = 13;
int pinf14 = A0;
int pinf15 = A1;
int pinf16 = A2;
int pinf17 = A3;
int pinf18 = A4;
int pinf19 = A5;
// This function is called whenever a normal DCC Turnout Packet is received
void notifyDccAccState( uint16_t Addr, uint16_t BoardAddr, uint8_t OutputAddr, uint8_t State)
{
Serial.print("notifyDccAccState: ") ;
Serial.print(Addr,DEC) ;
Serial.print(',');
Serial.print(BoardAddr,DEC) ;
Serial.print(',');
Serial.print(OutputAddr,DEC) ;
Serial.print(',');
Serial.println(State, DEC) ;
// commande des accessoires de numéros 1 à 4
if (Addr==1 && OutputAddr==0 && State==8 ) digitalWrite(pinf3, HIGH);
if (Addr==1 && OutputAddr==1 && State==8 ) digitalWrite(pinf3, LOW);
if (Addr==2 && OutputAddr==2 && State==8 ) digitalWrite(pinf4, HIGH);
if (Addr==2 && OutputAddr==3 && State==8 ) digitalWrite(pinf4, LOW);
if (Addr==3 && OutputAddr==4 && State==8 ) digitalWrite(pinf5, HIGH);
if (Addr==3 && OutputAddr==5 && State==8 ) digitalWrite(pinf5, LOW);
if (Addr==4 && OutputAddr==6 && State==8 ) digitalWrite(pinf6, HIGH);
if (Addr==4 && OutputAddr==7 && State==8 ) digitalWrite(pinf6, LOW);
// (Ajout de Bernyca) commande des accessoires de numéros 5 à 17
if (Addr==5 && OutputAddr==0 && State==8 ) digitalWrite(pinf7, HIGH);
if (Addr==5 && OutputAddr==1 && State==8 ) digitalWrite(pinf7, LOW);
if (Addr==6 && OutputAddr==2 && State==8 ) digitalWrite(pinf8, HIGH);
if (Addr==6 && OutputAddr==3 && State==8 ) digitalWrite(pinf8, LOW);
if (Addr==7 && OutputAddr==4 && State==8 ) digitalWrite(pinf9, HIGH);
if (Addr==7 && OutputAddr==5 && State==8 ) digitalWrite(pinf9, LOW);
if (Addr==8 && OutputAddr==6 && State==8 ) digitalWrite(pinf10, HIGH);
if (Addr==8 && OutputAddr==7 && State==8 ) digitalWrite(pinf10, LOW);
if (Addr==9 && OutputAddr==0 && State==8 ) digitalWrite(pinf11, HIGH);
if (Addr==9 && OutputAddr==1 && State==8 ) digitalWrite(pinf11, LOW);
if (Addr==10 && OutputAddr==2 && State==8 ) digitalWrite(pinf12, HIGH);
if (Addr==10 && OutputAddr==3 && State==8 ) digitalWrite(pinf12, LOW);
if (Addr==11 && OutputAddr==4 && State==8 ) digitalWrite(pinf13, HIGH);
if (Addr==11 && OutputAddr==5 && State==8 ) digitalWrite(pinf13, LOW);
if (Addr==12 && OutputAddr==6 && State==8 ) digitalWrite(pinf14, HIGH);
if (Addr==12 && OutputAddr==7 && State==8 ) digitalWrite(pinf14, LOW);
if (Addr==13 && OutputAddr==0 && State==8 ) digitalWrite(pinf15, HIGH);
if (Addr==13 && OutputAddr==1 && State==8 ) digitalWrite(pinf15, LOW);
if (Addr==14 && OutputAddr==2 && State==8 ) digitalWrite(pinf16, HIGH);
if (Addr==14 && OutputAddr==3 && State==8 ) digitalWrite(pinf16, LOW);
if (Addr==15 && OutputAddr==4 && State==8 ) digitalWrite(pinf17, HIGH);
if (Addr==15 && OutputAddr==5 && State==8 ) digitalWrite(pinf17, LOW);
if (Addr==16 && OutputAddr==6 && State==8 ) digitalWrite(pinf18, HIGH);
if (Addr==16 && OutputAddr==7 && State==8 ) digitalWrite(pinf18, LOW);
if (Addr==17 && OutputAddr==0 && State==8 ) digitalWrite(pinf19, HIGH);
if (Addr==17 && OutputAddr==1 && State==8 ) digitalWrite(pinf19, LOW);
}
void setup()
{
Serial.begin(9600);
pinMode(pinf3, OUTPUT);
pinMode(pinf4, OUTPUT);
pinMode(pinf5, OUTPUT);
pinMode(pinf6, OUTPUT);
pinMode(pinf7, OUTPUT);
pinMode(pinf8, OUTPUT);
pinMode(pinf9, OUTPUT);
pinMode(pinf10, OUTPUT);
pinMode(pinf11, OUTPUT);
pinMode(pinf12, OUTPUT);
pinMode(pinf13, OUTPUT);
pinMode(pinf14, OUTPUT);
pinMode(pinf15, OUTPUT);
pinMode(pinf16, OUTPUT);
pinMode(pinf17, OUTPUT);
pinMode(pinf18, OUTPUT);
pinMode(pinf19, OUTPUT);
Serial.println("NMRA DCC Example 1");
// Call the main DCC Init function to enable the DCC Receiver
Dcc.init( MAN_ID_DIY, 10, FLAGS_OUTPUT_ADDRESS_MODE | FLAGS_DCC_ACCESSORY_DECODER | FLAGS_ENABLE_INT0_PULL_UP, 0 );
Serial.println("Init Done");
}
void loop()
{
Dcc.process();
}
________________________________________________________
Bernyca