problema multiplexer e led

salve a tutti,

oggi sto provando a controllare dei led con il multiplexer e un potenzimetro,

ad ogni intervallo di valore faccio accendere un led con questo codice:

#include <Arduplex.h>
Multiplexer multiplexer;
int Outputs[] = {2,3,4,5};
int const potPin = A0;
int potVal;

void setup() {
 Serial.begin(9600);
 multiplexer.begin (2, 3, 4, 5, Multiplexer::NO_INHIBIT);
}

void loop() {
  potVal = analogRead(potPin);
  Serial.println(potVal, DEC);
 
    if (potVal <= 170) {
      multiplexer.select (10);
    }
    if (potVal >= 171 && potVal <= 340) {
      multiplexer.select (11);
    }
    if (potVal >= 341 &&  potVal <= 510 ) {
      multiplexer.select (12);
    }
    if (potVal >= 511 &&  potVal <= 680 ) {
      multiplexer.select (13);
    }
    if (potVal >= 680 &&  potVal <= 850 ) {
      multiplexer.select (14);
    }
     if (potVal >= 851 &&  potVal <= 1020 ) {
      multiplexer.select (15);
    }
    if (potVal >= 1021 &&  potVal <= 1023 ) {
      multiplexer.select (11);
      multiplexer.select (12);
      multiplexer.select (13);
      multiplexer.select (14);
      multiplexer.select (15);
      }
}

il problema sovviene null’ultimo if perchè sembra quasi che non riesca ad illuminare tutti i led assieme rimane acceso a piena potenza il pin 15 ma tutti gli altri sono fiochi, (la luna piena quando c’è nuvolo fa più luce :/) dov’è sta il problema? hardwere o softwere?

Per multiplexer intendi un registro a scorrimento? In tal caso è probabile che ad ogni select l'intero registro venga resettato, quindi si accende solo il 15.
Non riesco a trovare quella libreria se no potrei cercare di aiutarti di piu.

questa è la libreria fatta da un collega :smiley:

Veramente è già strano che siano fiochi, dovrebbero essere proprio spenti! Ricorda che un multiplexer come il tuo collega una entrata comune ad uno ed un solo pin di uscita selezionato tra 8/16 (o viceversa).

In pratica: ogni volta che fai una select() colleghi il nuovo pin e scolleghi il precedente!

Probabilmente l’apparire fiochi deriva dal fatto che quel codice è nel loop(), viene eseguito continuamente e quindi a ogni iterazione ogni led viene acceso per un brevissimo tempo, mentre l’ultimo resta acceso più a lungo.

infatti adesso che mi ci fai pensare sarebbe impossibile accendere piu di un led perchè se io do per esempio il comando 0, 0, 0, 0, non potrai mai fare nello stesso momento anche 0, 0, 0, 1,

che scemo :confused:

Dei multiplexer come il CD4051 o il CD4067 collegano un pin comune con UNO delle uscite. Per questo anche se quei multiplexer sono bidirezionale (comune-usita e uscita-commune) non puoi pilotare delle utenze perché é sempre soltanto UNO uscita attiva.

Prendi degli shift register tipo i 74HC595 e dei driver ULN2803.

Ciao Uwe