Il y a des choses bizarres dans le programme !!!
//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;
}
Il y a 17 broches dans le tableau byte ledpins [ ] = { 0,3,4,5,6,7,8,9,10,11,12,13,A0,A1,A2,A3,A4 }
Il faut donc donner comme valeur à numleds #define numleds 17
Par ailleurs, dans le setup, avec 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
}
}
Il faut écrire ceci : for ( int i = 0; i < numleds; i++ )
Et donc dans le loop, remplacer 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 ( ) ) ;
Sinon, c'est un petit programme au résultats qui effectivement doivent être amusants.
Christophe