Bonsoir à tous
Afin de créer de nouvelles animations sur les réseaux de mon club, je souhaiterai utiliser un attiny85 en tant que décodeur d'acessoires.
Je me suis inspiré de ce lien:
https://rudysarduinoprojects.wordpress.com/2019/05/06/fun-with-arduino-29-dcc-accessory-decoder/Rudy Boer utilise la biblothèque
DCC_Decoder.h et son programme tourne sur un arduino Uno. je l'ai testé avec cette carte et il fonctionne parfaitement
Je souhaite le faire tourner sur un attiny85. J'ai donc modifier le code pour l'adapter à cette puce, mais rien n'y fait
voici mon code:
/*attiny-decodeur accessoires
* lien: https://rudysarduinoprojects.wordpress.com/2019/05/06/fun-with-arduino-29-dcc-accessory-decoder/
Brochage Attiny85
*
* 5 =|1 U 8|= VCC
* A3 3 =|2 7|= 2 entrée signal DCC
* A2 4 =|3 6|= 1 sortie pour adresse 11
* GND =|4 5|= 0 sortie pour adresse 10
*
*/
#define NUMACCESSORIES 2 // Entrez ici le nombre d'accessoires (max 4)
// ALLER AU setup() POUR CONFIGURER DCC ADDRESSES AND PIN NUMBERS
#include <DCC_Decoder.h>
#define kDCC_INTERRUPT 0
typedef struct DCCAccessoryData {
int address; // Adresse DCC configurable par l'utilisateur
byte outputpin; // Pin Attiny configurable par l'utilisateur
byte dccstate; // Utilisation interne Etat DCC de l'accessoire, 1 = ON, 0 = OFF
};
DCCAccessoryData accessory[NUMACCESSORIES];
// La bibliothèque DCC appelle cette fonction pour activer/désactiver les accessoires.
void BasicAccDecoderPacket_Handler(int address, boolean activate, byte data) {
address -= 1;
address *= 4;
address += 1;
address += (data & 0x06) >> 1;
//address = address - 4; // !!! uncomment cette ligne pour les multi maus Roco ou z21
boolean enable = (data & 0x01) ? 1 : 0;
for (byte i=0; i<NUMACCESSORIES; i++) {
if (address == accessory[i].address) {
if (enable) accessory[i].dccstate = 1;
else accessory[i].dccstate = 0;
}
}
}
void setup() {
// CONFIGURATION DES ACCESSOIRES
// Copier et coller autant de fois que vous avez d'accessoires
// la quantité doit être la même que celle définie dans NUMACCESSORIES
// ne pas oublier d'incrémenter l'index du tableau
accessory[0].address = 10; // adresse DCC
accessory[0].outputpin = 0; // pin Attiny
accessory[1].address = 11; // adresse DCC
accessory[1].outputpin = 1; // pin Attiny
// FIN DE LA CONFIGURATION DES ACCESSOIRES
DCC.SetBasicAccessoryDecoderPacketHandler(BasicAccDecoderPacket_Handler, true);
DCC.SetupDecoder( 0x00, 0x00, 0 );
// les pins sont définiées en sortie et au niveau 0
for(byte i=0; i<NUMACCESSORIES; i++) {
pinMode (accessory[i].outputpin, OUTPUT);
digitalWrite(accessory[i].outputpin, LOW);
}
}
void loop() {
DCC.loop(); // Appel de la fonction de bibliothèque qui lit les données DCC
for(byte i=0; i<NUMACCESSORIES; i++) {
if (accessory[i].dccstate)
digitalWrite(accessory[i].outputpin, HIGH);
else
digitalWrite(accessory[i].outputpin, LOW);
}
}
bien évidemment si quelqu'un a une idée, je suis preneur.
Merci par avance