[Question] Cablage data

Bonjour a tous ,

Je viens pour avoir un éclaircis pour mon projet.

Je souhaite utiliser 4 (voir plus) câbles sur différents pin. ex: D1,D2,D3,D4
et que ces quatre câbles arrive sur le data d'un strip LED.
Chaque cable aura un switch qui me permet de diffuser le signal comme je le souhaite.

Je voulais savoir si cela ne posera pas de pb a mon arduino nano ou si il faut prévoir un élément pour eviter la casse.

Si mon explication n'est pas assez claire. Precisez le moi

Si mon explication n'est pas assez claire. Precisez le moi

Un petit dessin, même à main levée

Bonsoir,
à priori tu écris sur D1 ce que tu veux voir sur strip 1
sur D2 ce que tu veux voir sur strip 2, etc.
pas besoin de switch, ou bien ?

Chaque cable aura un switch.

Je n'utilise qu'un seul strip led

Si tu branches tes 4 sorties en court-circuit, il te faut prévoir des cartes Arduino de rechange en grande quantité. Chaque essai entrainera la destruction d'une carte

Chaque cable aura un switch.

Tu veux dire chaque fil vert je pense ?
Je ne vois pas trop l'intérêt de la manœuvre.

Même remarque que Alain46. Si tu laisses deux switchs fermés et que les 2 sorties ne sont pas au même potentiel ... badaboom.

@+

Je crois comprendre ce que tu cherches à faire

4 Animations distinctes choisie chacune par un bouton intercalé entre la sortie et le bandeau.

C'est pas ce qu'il y a de plus propre, surtout en cas d'appui sur 2 boutons en même temps.

Ce qui serai mieux, c'est de gérer 4 programmes d'animations avec des boutons mis sur des entrées de ta nano et de jouer ton animations sur une seul broche de sortie associée au ruban

Ce qui serai mieux, c'est de gérer 4 programmes d'animations avec des boutons mis sur des entrées de ta nano et de jouer ton animations sur une seul broche de sortie associée au ruban

Yes +1

bien vu Jambe !

Bonjour et merci pour vos reponses.

Effectivement ça me paraissait bancale.

L'idée des boutons me semble la meilleurs solutions. Il serait possible de branche 4 boutons et que chaque boutons active une couleur? (ex bouton1 : tout rouge. bouton2 : tout vert. bouton3 : vert et jaune etc etc)

Dans ce cas la comment se fait le branchement ?

Merci encore

https://letmeknow.fr/blog/2013/08/07/utiliser-un-bouton-poussoir/

( une led simule le strip)

tu as un exemple pour 1 boutton et 1led

Par la suite rien de "compliqué" d'ajouter 3 autre boutton, et autre leds( ou RGB ou strip)

Si j'ai bien compris le schema, je pourrais faire ainsi pour mes 4,5,6 etc boutons?

Et donc ensuite dire si bouton1 appuyer alors allume de telle couleur.

Bonjour,
oui, c'est tout à fait ça !
est-ce qu'un seul bouton rotatif pourrait aussi convenir pour ce que tu veux faire ?

trimarco232:
Bonjour,
oui, c'est tout à fait ça !
est-ce qu'un seul bouton rotatif pourrait aussi convenir pour ce que tu veux faire ?

Non il faut qu'il y est plusieurs bouton

mon projet un costumes et les boutons seront au bout des doigts. Je dois savoir quel bouton fait quoi.

c'est pas idiot.... tu met un gant et sur chaque doigts tu met un boutton qui commande chaque strip led et scenario..

Si tu appui sur bouton 1, alors toutes les led rouge
appui bouton 2, toute bleu.... ect...

Avec la librairy neopixel, c'est pas compliqué...

sur google tu as plein d'exemples...

hazerty565:
c'est pas idiot.... tu met un gant et sur chaque doigts tu met un boutton qui commande chaque strip led et scenario..

Si tu appui sur bouton 1, alors toutes les led rouge
appui bouton 2, toute bleu.... ect...

Avec la librairy neopixel, c'est pas compliqué...

sur google tu as plein d'exemples...

Exactement tu as deviner mon idée :smiley:

J'aimerais aussi qu'un des boutons disent led 1 a35 verte, led 36 a 58 jaune.

JE vais regarder Neopixel. Je n'est jamais utilisé.

merci du conseil

J'ai rajouter mon bouton et ça fonctionne nickel

par contre j'ai un autre soucis qui est apparue.

Mes led scintille maintenant. Je n'arrive pas a saovir si ça viens de mon cablage, de mes soudures ou juste de mon code

Video du soucis

Et mon code

    #include <FastLED.h>
    #define LED_PIN  2
    #define BUT_PIN 9
    #define NUM_LEDS 118
     
    CRGB leds[NUM_LEDS];

    void setup() {
      FastLED.addLeds<WS2812B, LED_PIN, GRB>(leds, NUM_LEDS);

     pinMode(LED_PIN, OUTPUT); //L1 est une broche de sortie
     pinMode(BUT_PIN, INPUT); // BP est une broche d'entree
    }
    void loop() {
    
      int test = digitalRead(BUT_PIN); // Lecture de l'entree BP et sockage du résultats dans test

      if(test==LOW) // Si test est à l'état bas
      {
      digitalWrite(LED_PIN, HIGH); // Allumer L1
      
     
      for (int i = 0; i <= 26; i++) {
        leds[i] = CRGB ( 255,255,0);
      }    
      for (int i = 26; i <= 40; i++) {
         leds[i] = CRGB (0,128,0);
      }
      for (int i = 40; i <= 66; i++) {
        leds[i] = CRGB ( 255,255,0);
      }  
      for (int i = 66; i <= 92; i++) {
        leds[i] = CRGB (0,128,0);
      } 
      for (int i = 92; i <= 118; i++) {
        leds[i] = CRGB ( 255,255,0);

      }
      FastLED.show();  
      }
      
       else // Sinon
      {
      digitalWrite(LED_PIN, LOW); // Eteindre L1
      
      for (int i = 0; i <= 118; i++) {
        leds[i] = CRGB ( 0,0,255);

      }
      FastLED.show();  
      }
      }

C'est un phénomène dit de "flickering", en gros tu rafraichis trop vite l'état de tes LEDs, d'où ce problème de scintillement.

Comme à chaque tour de loop(), tu lis le bouton et tu applique une consigne ça fait clignoter les LEDs.

Il te faudrait une variable en plus, dis communément un "flag" afin de mémoriser l'état précédent du bouton afin de traiter uniquement un changement d'état du bouton

D'accord je vois le soucis
Merci beaucoup

du coup j'ai deja ma variable qui s'appelle test.

Il faudrait que je la passe dans mon setup comme ceci?

    #include <FastLED.h>
    #define LED_PIN  2
    #define BUT_PIN 9
    #define NUM_LEDS 118
     
    CRGB leds[NUM_LEDS];

    void setup() {
      FastLED.addLeds<WS2812B, LED_PIN, GRB>(leds, NUM_LEDS);

     pinMode(LED_PIN, OUTPUT); //L1 est une broche de sortie
     pinMode(BUT_PIN, INPUT); // BP est une broche d'entree
     int test = digitalRead(BUT_PIN); // Lecture de l'entree BP et sockage du résultats dans test

    }

    void loop() {
   
     
      if(test==LOW) // Si test est à l'état bas
      {
      digitalWrite(LED_PIN, HIGH); // Allumer L1
     
     
      for (int i = 0; i <= 26; i++) {
        leds[i] = CRGB ( 255,255,0);
      }   
      for (int i = 26; i <= 40; i++) {
         leds[i] = CRGB (0,128,0);
      }
      for (int i = 40; i <= 66; i++) {
        leds[i] = CRGB ( 255,255,0);
      } 
      for (int i = 66; i <= 92; i++) {
        leds[i] = CRGB (0,128,0);
      }
      for (int i = 92; i <= 118; i++) {
        leds[i] = CRGB ( 255,255,0);

      }
      FastLED.show(); 
      }
     
       else // Sinon
      {
      digitalWrite(LED_PIN, LOW); // Eteindre L1
     
      for (int i = 0; i <= 118; i++) {
        leds[i] = CRGB ( 0,0,255);

      }
      FastLED.show(); 
      }
      }

on ne peut pas faire fonctionner un programme sans un peu d'analyse

un programme tourne comme ça :
je fais ça, puis ceci, puis cela, et je recommence
je fais ça, puis ceci, puis cela, et je recommence
je fais ça, puis ceci, puis cela, et je recommence
(ad lib en boucle)
dans le cas d'un petit programme, l'ordre de grandeur de la durée d'une boucle est le milliseconde, en d'autres termes, un programme fera "ça, puis ceci, puis cela, et je recommence" 1000 fois par seconde

si dans ton programme tu mets :
"je fais ça, puis si le bouton est appuyé j'envoie la commande pour mettre le strip au vert, et je recommence"
cela fera que si tu appuies sur le bouton pendant 1 seconde, le strip recevra 1000 fois la commande de se mettre au vert (et se demandera 999 fois ce que tu fiches)

il convient par conséquent de n'envoyer la commande qu'une fois, quand le bouton vient d'être appuyé. Pour faire cela il faut avoir en mémoire l'état du bouton dans la boucle précédente (soit 1ms avant, si tu as bien suivi)

pour avoir ceci en mémoire, il faut déclarer puis utiliser une variable, qui dans ce cas peut être booléenne, soit True si le bouton a été appuyé, False si il ne l'a pas été
quand dans ta boucle tu regardes si le bouton est appuyé, il faut distinguer les cas :
1) si oui, appuyé
on regarde comment le bouton était avant
a) si appuyé (bouton1 == true)

  • il n'y a rien de nouveau, on ne fait rien
    b) si non appuyé (bouton1 == false)
  • il y a du nouveau, on envoie la commande correspondant à bouton1 appuyé
  • on n'oublie pas de mettre à jour la variable (bouton1 = true)
    2) si non, pas appuyé
    on regarde comment le bouton était avant
    a) si non appuyé (bouton1 == false)
  • il n'y a rien de nouveau, on ne fait rien
    b) si appuyé (bouton1 == true)
  • il n'y a du nouveau, mais on ne veut rien faire dans ce cas, donc on ne fait rien
  • on n'oublie pas de mettre à jour la variable (bouton1 = false)