Gestire molti PIN OUTPUT (CD74HC4067 )

Ciao a Tutti,
Ho la necessità di gestire diversi dispositivi con un solo arduino UNO.
(Non essendo esperto di elettronica) ho pensato di collegare ad arduino una CD74HC4067.

La prova che stò facendo è quella di avviare più ventole. Ho seguito lo schema di collegamento (a 2 fili):
image

il collegamemento con la CD:

ed il codice è il seguente (al momento ho solo 2 ventole disponibili)

//Mux control pins
int s0 = 8;
int s1 = 9;
int s2 = 10;
int s3 = 11;

//Mux in "SIG" pin
int SIG_pin = 0;

void setup()  {
  pinMode(s0, OUTPUT);
  pinMode(s1, OUTPUT);
  pinMode(s2, OUTPUT);
  pinMode(s3, OUTPUT);

  digitalWrite(s0, LOW);
  digitalWrite(s1, LOW);
  digitalWrite(s2, LOW);
  digitalWrite(s3, LOW);

  Serial.begin(9600);
}
void loop()  {

  for(int i = 0; i < 2; i ++){
    Serial.print("Value at channel ");
    Serial.print(i);
    Serial.print("is : ");
   Serial.println(readMux(i));
    delay(5000);
  }
}

int readMux(int channel){
  int controlPin[] = {s0, s1, s2, s3};

  int muxChannel[16][4]={
    {0,0,0,0}, //channel 0
    {1,0,0,0}, //channel 1
    {0,1,0,0}, //channel 2
    {1,1,0,0}, //channel 3
    {0,0,1,0}, //channel 4
    {1,0,1,0}, //channel 5
    {0,1,1,0}, //channel 6
    {1,1,1,0}, //channel 7
    {0,0,0,1}, //channel 8
    {1,0,0,1}, //channel 9
    {0,1,0,1}, //channel 10
    {1,1,0,1}, //channel 11
    {0,0,1,1}, //channel 12
    {1,0,1,1}, //channel 13
    {0,1,1,1}, //channel 14
    {1,1,1,1}  //channel 15
  };

  //loop through the 4 sig
  for(int i = 0; i < 4; i ++){
    digitalWrite(controlPin[i], muxChannel[channel][i]);
  }

  //read the value at the SIG pin
  analogWrite(SIG_pin,HIGH);

  return 0;
}

...ma non funziona. Le ventole non girano. Dove sbaglio?

È un multiplexer analogico

Non puoi aggiornarlo ogni 5 secondi

Anzi, temo tu non possa comunque usarlo per questo lavoro

Comunque hai fatto un po di confusione tra analog e digitalwrite, inoltre la gestione degli indirizzi è malfatta, come prima prova va bene, ma studiaci ancora, casomai chiedi

Ma tu vuoi solo accenderle o anche regolarne la velocità?

Voglio solo accendere.

Ho seguito una guida trovata qui sul forum adattandola alle mie esigenze :confounded:

Usa degli shift register

Quale guida trovata qui?

Non va bene, ed anche il codice non ha grosso senso, serve uno shift register come i 74HC595.

Per capire meglio come funziona la cosa, vedi ad esempio questo video (in italiano) per capire cosa usare e come farlo:

Grazie per le risposte.
Mi sono documentato meglio e con uno shift ho risolto il problema.

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