Kann man LEDs mit einem Multiplexer steuern?

Kann man LEDs mit einem Multiplexer steuern?
ich habe es so im loop: digitalWrite(dataPin_10, LEDs*);*
```
*// +++ Leonardo: HAUPT TAB +++ //

#include <OneButton.h>

// Array für 3 achtfach Multiplexer (Buttons & LEDs)
byte butNummer[] = {20,21,22,23,24,25,26,27};
int LEDs[8] = {1,1,1,0,0,1,0,1};
int butWert = {0};
int Wert = {0};
int but = {0};

// selectPins Multiplexer
int multiBut_sA = 5;                  //select A
int multiBut_sB = 6;                  //select B
int multiBut_sC = 7;                  //select C

//dataPins Multiplexer
int dataPin_2 = 10;                    //But   R2  1- 8
int dataPin_10 = 13;                  //LEDs  R2  1- 8 (Buttons)

// 8 Buttons für OneButton zuweisen
OneButton buttons[8] = {
    { dataPin_2, true },
    { dataPin_2, true },
    { dataPin_2, true },
    { dataPin_2, true },
    { dataPin_2, true },
    { dataPin_2, true },
    { dataPin_2, true },
    { dataPin_2, true }
};

void setup() {
    Serial.begin(31250);
     while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
   }
   
  //Select-Pins 4051s
  pinMode(multiBut_sA,  OUTPUT);
  pinMode(multiBut_sB,  OUTPUT);
  pinMode(multiBut_sC,  OUTPUT);
  pinMode(dataPin_2,    INPUT_PULLUP);
  pinMode(dataPin_10,   OUTPUT);
}

void loop() {
  for (int i = 0; i < 8; i++){
    digitalWrite(multiBut_sA, HIGH && (i & B00000001));
    digitalWrite(multiBut_sB, HIGH && (i & B00000010));
    digitalWrite(multiBut_sC, HIGH && (i & B00000100));

butWert = digitalRead(dataPin_2);
      but = butNummer[i];
      buttons[i].attachClick(singleClick[i]);
      buttons[i].attachDoubleClick(doubleClick[i]);
      buttons[i].tick();
      digitalWrite(dataPin_10, LEDs[i]);
    }
  }
 
// +++ Leonardo: singleClick TAB +++ //

void singleClick(){
  Serial.println("");
  Serial.println("");
  Serial.println("");
  Serial.println("singleClick() detected.");
  Serial.println(but);
  Serial.println(butWert);
}

// +++ Leonardo: doubleClick TAB +++ //

void doubleClick(){
  Serial.println("");
  Serial.println("");
  Serial.println("");
  Serial.println("doubleClick() detected.");
  Serial.println(but);
  Serial.println(butWert);
}*
```


Ja, kann man aber das ist nicht effektiv.

Da immer nur ein "Ausgang" zum gemeinsamen Kontakt geschaltet wird kann dann immer nur 1 LED von 8 oder 16 leuchten.
Besser sind da Serial zu Paralell Schieberegister (SIPO); Port expander, oder LED Treiber dafür geeignet.

Grüße Uwe

m8trix:
Kann man LEDs mit einem Multiplexer steuern?

Ja.
Aus dem Rest werde ich nicht schlau. Willst Du einen DeMUX?

Ich danke euch.
@uwefed: Ich schau mal ob ich ein Schieberegister in meinen Starter-Set habe. Ansonsten bestelle ich mir den MEGA.

@my_xy_projekt: Was meinst du mit DeMUX?

m8trix:
@my_xy_projekt: Was meinst du mit DeMUX?

Das ist nicht Deine Frage oder?

Aber das ist ein schönes Beispiel um das Verstehen, wenn mit Begriffen gearbeitet wird, die nicht jeder auf Anhieb kennt.

Aber nu. Ein DeMux ist das Gegenteil vom Mux.

[edit] Zeilenumbruch eingefügt[/edit]

Es gibt den MAX7219, der Multiplexing für LEDs macht. Wenn ich mich recht entsinne, werden da die LEDs speziell mit Stromtreibern angesteuert, um eine gleichmäßige Helligkeit zu erzeugen. Ich nutze den zusammen mit 8x8 LED-Matrizes zur Darstellung von Text. Ob man da auch andere LEDs anschließen könnte, habe ich noch nicht in Erwägung gezogen.

agmue:
Es gibt den MAX7219, der Multiplexing für LEDs macht.

Ok. Du hast seinen Code verstanden...
Mal als Frage an Dich: Alternativ nen 4067 als 1 aus 16 Demultiplexer?

my_xy_projekt:
Mal als Frage an Dich: Alternativ nen 4067 als 1 aus 16 Demultiplexer?

Da kann immer nur 1 LED leuchten weil immer nur einer der 16 Anschlüße mit dem Common verbunden wird und dadurch Strom durch die LED fließen kann. Da ist die LED ca 16 dunkler als eine direkt angesteuerte.

Auch ist zu bedenken daß der Schalter zwischen Common und den 16 Pins ca 125Ohm hat. er kann 25mA schalten.

Grüße Uwe

@agmue: Danke für den Tipp ich da werde ich mir welche von bestellen für mein nächstes Projekt.

@my_xy_projekt: Nein DeMux soll es nicht sein.

Ich habe ein 74HC595 in meinen Starter Kit wie geil ist das den ich kann weiter machen an meinen freien Wochenende!!! Der Tag ist gerettet.

Dann habe ich da nochmal eine DUMME Frage (wie die vielen anderen auch!):
War der Gedanken Ansatz von der Programmierung ehr gut oder schlecht mir:
digitalWrite(dataPin_10, LEDs*); ?[/color]*

Du meinst vermutlich

digitalWrite(dataPin_10, LEDs[i]);

Das [ i ] steht für italic = kursiv.

agmue:
Du meinst vermutlich

digitalWrite(dataPin_10, LEDs[i]);

Das [ i ] steht für italic = kursiv.

wenn du meinst :wink:

Ich meine das auch.
Grüße Uwe

Und man kann es sogar sehen:
digitalWrite(dataPin_10, LEDs*); ? Klammer zu, Semikolon und Fragezeichen und dieser Text sind kursiv, bis man es durch* [/i] wieder aufrecht stellt.
Also ist das ursprünglich vorhandene [i] von der Forumssoftware als Änderung des Schriftschnitts interpretiert und damit unsichtbar geworden.

digitalWrite(dataPin_10, LEDs[ i ]);

Wenn man Leerzeichen einfügt dann wird's richtig dargestellt.
Aber besser mit CODE TAGS

digitalWrite(dataPin_10, LEDs[i]);

Grüße Uwe

uwefed:
Wenn man Leerzeichen einfügt dann wird's richtig dargestellt.

Ok. JETZT! Weiss ich, was da rumgefummelt wurde an den Scripten.
War früher TeleType noch eine Variante das zu umgehen, ist das jetzt nicht mehr der Fall.

Die Luft wird enger.

Ein InLine-Code-Tag für so kleine Sachen im Text wäre mal schön.
Das zu ignorierende [i] ohne Leerzeichen geht so: [nobbc][i][/nobbc]

Codetags verhindern die Interpretation zuverlässig. Es braucht also keine zusätzlichen Maßnahmen.

Gruß Tommy

Okay jetzt habe auch ich es verstanden [ i ]. Es ist mir gar nicht aufgefallen das etwas weg gelassen wurde und schließe
mich @Tommy56 an weder Codetags verwenden.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.