Auteur Sujet: éclairage bâtiments avec allumages et extinctions variés  (Lu 4070 fois)

brunodujura

  • Newbie
  • *
  • Messages: 9
    • Voir le profil
éclairage bâtiments avec allumages et extinctions variés
« le: août 11, 2025, 03:45:44 pm »
Bonjour,

J'ai une douzaine de bâtiments pour lesquels j'ai soudé sur une plaque de prototypage une LED blanche 1210 CMS (12mA suffisent pour un éclairage suffisant)

Ces 12 Leds BAT1, BAT2.....BAT12 seront connectées à un seul arduino

Avec un programme classique de clignotement je dis au BAT1 de rester allumé 2 min, de s'éteindre 30 sec

Dans le meme programme j'aimerais donner des valeurs d'allumage et d'extinction différents aux 12 bâtiments, y a t'il moyen de faire un programme léger ?

Merci

Fantasio

  • Newbie
  • *
  • Messages: 49
    • Voir le profil
Re : éclairage bâtiments avec allumages et extinctions variés
« Réponse #1 le: août 11, 2025, 08:29:51 pm »
Bonsoir brunodujura

Inspire toi du code utilisé pour l'animation lumineuse d'un BV réalisée par Dominique: https://forum.locoduino.org/index.php?topic=336.0
Tu le modifieras pour l'adapter pour tourner sur un UNO mais c'est une très bonne base pour piloter des leds.

Bonne continuation à toi.

CATPLUS

  • Sr. Member
  • ****
  • Messages: 458
    • Voir le profil
Re : éclairage bâtiments avec allumages et extinctions variés
« Réponse #2 le: août 12, 2025, 07:42:05 am »
Bonjour
Ci-joint programme aléatoire.
Best Regards

brunodujura

  • Newbie
  • *
  • Messages: 9
    • Voir le profil
Re : éclairage bâtiments avec allumages et extinctions variés
« Réponse #3 le: août 12, 2025, 07:32:25 pm »
Bonjour,

J'ai étudié le programme aléatoire pour lequel j'aurai plus tard une ou deux questions.
Sur ma breadboard cela fonctionne (j'ai une seule led pour le test mais j'essaye toutes les sorties)

Par contre sur Tinkercad il bloque sur lightsw:

 In function 'void loop()':
13:69: error: 'lightsw' was not declared in this scope

Pourquoi d'après toi ?

Merci
« Modifié: août 12, 2025, 07:34:41 pm par brunodujura »

Thierry

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 865
    • Voir le profil
Re : éclairage bâtiments avec allumages et extinctions variés
« Réponse #4 le: août 12, 2025, 08:58:46 pm »
Bonsoir. Ca bloque parce que la fonction lightsw() est utilisée AVANT d'être déclarée. Au moment où le compilateur traite la ligne 13 qui contient l'appel de la fonction, il n'a pas encore vu cette fonction.
Il y a deux manières de corriger ça : soit en déclarant explicitement la fonction avec la ligne

boolean lightsw();

tout en haut du source, avant le setup.

soit en déplaçant toute la fonction (lignes 16 à 19) à ce même endroit.

brunodujura

  • Newbie
  • *
  • Messages: 9
    • Voir le profil
Re : éclairage bâtiments avec allumages et extinctions variés
« Réponse #5 le: août 13, 2025, 07:46:00 am »
Merci cela fonctionne, je vais regarder de plus près

Pourquoi cette déclaration tardive peut être supportée dans un cas et pas dans l'autre ?

Thierry

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 865
    • Voir le profil
Re : éclairage bâtiments avec allumages et extinctions variés
« Réponse #6 le: août 13, 2025, 10:17:29 am »
Ca c'est une bonne question. Le langage C (ou C++) qui est utilisé par Arduino fonctionne comme je l'ai dit. Toute fonction ou variable doit être déclarée avant d'être utilisée. C'est la raison d'être des fichiers include, les .h, dont le rôle est de partager ces déclarations avec d'autres fichiers du projet.
L'équipe Arduino a exploité le fonctionnement du langage pour simplifier au maximum le code que l'utilisateur de l'IDE a besoin de remplir pour faire fonctionner son programme. Ainsi les déclarations des fonctions setup() et loop(), nécessaires pour que ça compile, sont cachées dans des include qui sont ajoutés avant la compilation d'un fichier ino. L'utilisateur ne le sait pas et c'est très bien comme ça.
Dans le cas des simulateurs, c'est encore pire. A la couche d'abstraction d'Arduino dont je viens de parler est ajoutée une couche pour permettre au simulateur de remplacer les fonctions Arduino par les siennes. C'est peut être à ce niveau que ça se joue... Et puis un simulateur ajoute des contraintes, et peut être que Tinkercad ne permet pas d'avoir des fonctions autres que setup() et loop() ?

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1726
    • Voir le profil
Re : Re : éclairage bâtiments avec allumages et extinctions variés
« Réponse #7 le: août 18, 2025, 11:12:22 am »
Merci cela fonctionne, je vais regarder de plus près

Pourquoi cette déclaration tardive peut être supportée dans un cas et pas dans l'autre ?

Bonjour,

L'IDE Arduino utilise un pré-processeur qui extrait toutes les fonctions définies dans le sketch pour ajouter automatiquement leur prototype (c'est à dire le nom et les arguments de la fonction, c'est ce qu'explique Thierry 3 messages au dessus) au début du fichier du sketch avant de compiler en C++

Il semblerait que Tinkercad néglige cette étape ?
Cordialement

brunodujura

  • Newbie
  • *
  • Messages: 9
    • Voir le profil
Re : éclairage bâtiments avec allumages et extinctions variés
« Réponse #8 le: août 26, 2025, 09:35:03 am »
Merci à Catplus pour son programme qui fonctionne parfaitement et alimente déjà 5 bâtiments

bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1197
  • HO avec DCC++ / 3R avec centrale MFX en DIY
    • Voir le profil
Re : éclairage bâtiments avec allumages et extinctions variés
« Réponse #9 le: août 26, 2025, 07:02:40 pm »
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

chris_bzg

  • Sr. Member
  • ****
  • Messages: 386
    • Voir le profil
Re : éclairage bâtiments avec allumages et extinctions variés
« Réponse #10 le: août 27, 2025, 09:14:59 am »
L'allumage réaliste des appartements d'un immeuble (ou des chambres d'un hôtel) a été décrit dans mon guide "Animez votre réseau" chez LR-Presse page 50 avec renvoi sur simulateur Tinkercad et sur simulateur Wokwi afin de récupérer le programme.  ;)

bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1197
  • HO avec DCC++ / 3R avec centrale MFX en DIY
    • Voir le profil
Re : éclairage bâtiments avec allumages et extinctions variés
« Réponse #11 le: août 27, 2025, 09:23:45 am »
Comment est-il possible d'accéder à ce programme ???

Christophe

brunodujura

  • Newbie
  • *
  • Messages: 9
    • Voir le profil
Re : éclairage bâtiments avec allumages et extinctions variés
« Réponse #12 le: août 27, 2025, 01:43:33 pm »
Merci pour ces explications sur le programme qui me sont bien utiles même si j'avais modifié les pins utilisés, je comprends notamment pourquoi ma première broche ne s'allumait pas...

chris_bzg

  • Sr. Member
  • ****
  • Messages: 386
    • Voir le profil
Re : Re : éclairage bâtiments avec allumages et extinctions variés
« Réponse #13 le: août 27, 2025, 05:23:45 pm »
Comment est-il possible d'accéder à ce programme ???

Christophe

Bonjour Christophe,

Les liens vers les simulateurs sont donnés dans mon guide. Un simple copier-coller du programme permet alors de le récupérer.
Tout cela avait aussi été décrit dans LR869 de décembre 2019 et le programme est aussi sur le forum de Loco-Revue, rubrique Arduino.
L'algorithme tient compte du matin et du soir car l'allumage ne se fait pas de la même manière entre les gens qui reviennent du boulot et ceux qui se lèvent pour y partir.
Le programme fourni par CATPLUS est, je crois tiré, de la revue Model-Railroad mais contient des bugs comme tu l'as souligné.

 ;)

bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1197
  • HO avec DCC++ / 3R avec centrale MFX en DIY
    • Voir le profil
Re : éclairage bâtiments avec allumages et extinctions variés
« Réponse #14 le: août 27, 2025, 05:31:04 pm »
Si je comprends bien, il faut acheter le bouquin ou un exemplaire de Loco Revue !

Le programme est il open source au moins ?

Christophe