1
Aide / Re : éclairage bâtiments avec allumages et extinctions variés
« le: août 27, 2025, 07:18:00 pm »Ma petite contribution
Merci Fantasio, il est sympa ce petit programme ! Ca valait le coup d'insister.
Christophe
Le forum LOCODUINO est consacré aux discussions ayant trait à l'utilisation de l'Arduino dans les automatismes et les animations pour le train miniature. Nous avons eu récemment quelques inscriptions de personnes ayant des projets plus généraux mais surtout inapplicables au train miniature. Si votre projet ou vos questions ne concernent pas le modélisme ferroviaire, ne vous inscrivez pas, vous perdriez votre temps et nous aussi.
Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.
Ma petite contribution
//https://model-railroad-hobbyist.com/node/23026
//18/02/2025
#define numleds 16
byte ledpins[] = { 0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, A0, A1, A2, A3, A4 }; //0,3,4,5,6,8,9,10,11,12,13,A3,A2,A1,A0,A4,A5
void setup() {
for (int i = 1; i <= numleds; i++) {
pinMode(ledpins[i], OUTPUT);
digitalWrite(ledpins[i], LOW); //HIGH
}
}
void loop() {
digitalWrite(ledpins[random(0, numleds + 1)], lightsw());
delay(5000); //13000
}
boolean lightsw() {
if (random(0, 100) > 50) return LOW; //40
else return HIGH;
}
byte ledpins [ ] = { 0,3,4,5,6,7,8,9,10,11,12,13,A0,A1,A2,A3,A4 }
#define numleds 17
int i=1
la broche 0 n'est ni positionnée en output, ni placée à LOW puisque l'incrémentation commence à 1.void setup( ) {
for ( int i=1; i <= numleds; i++ ) {
pinMode ( ledpins [ i ], OUTPUT) ;
digitalWrite ( ledpins [ i ] , LOW) ;//HIGH
}
}
for ( int i = 0; i < numleds; i++ )
numleds + 1
par numleds
, sinon le programme va tenter de lire en dehors de la mémoire allouée au tableau et il y aura plantage assuré.void loop ( ) {
digitalWrite ( ledpins [ random ( 0, numleds ) ], lightsw ( ) ) ;
// Calcul du checksum utilisé pour vérifier l'intégrité des données.
byte_1 = (dccPacket.data & 0x000000001FE) >> 1;
byte_2 = (dccPacket.data & 0x0000003FC00) >> 10;
byte_3 = (dccPacket.data & 0x00007F80000) >> 19;
byte_4 = (dccPacket.data & 0x00FF0000000) >> 28;
byte_5 = (dccPacket.data & 0x1FE000000000) >> 37;
bool send = false;
switch (dccPacket.count) {
case 28:
crc = byte_1 ^ byte_2;
if (byte_3 == crc) {
Serial.println("send 28 bits");
send = true;
}
break;
case 37:
crc = (byte_1 ^ byte_2) ^ byte_3;
if (byte_4 == crc) {
Serial.println("send 37 bits");
send = true;
}
break;
case 46:
crc = ((byte_1 ^ byte_2) ^ byte_3) ^ byte_4;
if (byte_5 == crc) {
send = true;
Serial.println("send 46 bits");
}
break;
}