Ciao a tutti, vorrei esporvi il mio problema.
Sto usando il cd74hc4067 come demux per avere 16 pulsanti che poi verranno letti dal mio arduino mega, e fin qui ci siamo... il problema sorge quando ne devo mettere piu di uno in parallelo... non trovo nulla su internet e non trovo una soluzione, perfavore aiutatemi.
Lascio tutto qui sotto, grazie in anticipo.
//Per fare un multiMux in teoria basta copiare e usare multiplexer2[16][4] e sig2
//funziona ancche con 2 mux
const int sig1 = 6;
const int sig2 = 7;
const int controlPin[4] = {2,3, 4, 5};
const int multiplexer[16][4] = { {0,0,0,0}, //canale 0
{0,0,0,1}, //canale 1
{0,0,1,0}, //canale 2
{0,0,1,1}, //canale 3
{0,1,0,0}, //canale 4
{0,1,0,1}, //canale 5
{0,1,1,0}, //canale 6
{0,1,1,1}, //canale 7
{1,0,0,0}, //canale 8
{1,0,0,1}, //canale 9
{1,0,1,0}, //canale 10
{1,0,1,1}, //canale 11
{1,1,0,0}, //canale 12
{1,1,0,1}, //canale 13
{1,1,1,0}, //canale 14
{1,1,1,1} //canale 15
};
const int multiplexer2[16][4] = { {0,0,0,0}, //canale 0
{0,0,0,1}, //canale 1
{0,0,1,0}, //canale 2
{0,0,1,1}, //canale 3
{0,1,0,0}, //canale 4
{0,1,0,1}, //canale 5
{0,1,1,0}, //canale 6
{0,1,1,1}, //canale 7
{1,0,0,0}, //canale 8
{1,0,0,1}, //canale 9
{1,0,1,0}, //canale 10
{1,0,1,1}, //canale 11
{1,1,0,0}, //canale 12
{1,1,0,1}, //canale 13
{1,1,1,0}, //canale 14
{1,1,1,1} //canale 15
};
void setup() {
for(int i=0; i<4; i++)
{
pinMode(controlPin[i], OUTPUT);// set pin as output
digitalWrite(controlPin[i], HIGH); // set initial state as HIGH
}
pinMode(sig1, INPUT_PULLUP);// set SIG pin as output
digitalWrite(sig1, HIGH);//lo metto high per i button in pullup
pinMode(sig2, INPUT_PULLUP);// set SIG pin as output
digitalWrite(sig2, HIGH);//lo metto high per i button in pullup
Serial.begin(9600);
}
void loop() {
//MUX1
for(int i=0; i<16; i++){
interfaccia(i);
digitalRead(i);
digitalRead(sig1);
//Serial.println(digitalRead(sig1));
//FUNZIONA
if (digitalRead(sig1) == LOW){
switch (i) {
case 0:
Command0Mux1();
break;
case 1:
Command1Mux1();
break;
case 2:
Command2Mux1();
break;
case 3:
Command3Mux1();
break;
case 4:
Command4Mux1();
break;
case 5:
Command5Mux1();
break;
case 6:
Command6Mux1();
break;
case 7:
Command7Mux1();
break;
case 8:
Command8Mux1();
break;
case 9:
Command9Mux1();
break;
case 10:
Command10Mux1();
break;
case 11:
Command11Mux1();
break;
case 12:
Command12Mux1();
break;
case 13:
Command13Mux1();
break;
case 14:
Command14Mux1();
break;
case 15:
Command15Mux1();
break;
default:
break;
}
}
}
//DA FARE LE FUNZIONI Command1Mux2();
//MUX2
for(int i=0; i<16; i++){
interfaccia2(i);
digitalRead(i);
digitalRead(sig2);
//Serial.println(digitalRead(sig2));
//FUNZIONA
if (digitalRead(sig2) == LOW){
switch (i) {
case 0:
Command0Mux2();
break;
case 1:
Command1Mux2();
break;
case 2:
Command2Mux2();
break;
case 3:
Command3Mux2();
break;
case 4:
Command4Mux2();
break;
case 5:
Command5Mux2();
break;
case 6:
Command6Mux2();
break;
case 7:
Command7Mux2();
break;
case 8:
Command8Mux2();
break;
case 9:
Command9Mux2();
break;
case 10:
Command10Mux2();
break;
case 11:
Command11Mux2();
break;
case 12:
Command12Mux2();
break;
case 13:
Command13Mux2();
break;
case 14:
Command14Mux2();
break;
case 15:
Command15Mux2();
break;
default:
break;
}
}
}
}
void interfaccia (int canale) {
digitalWrite(controlPin[0], multiplexer[canale][0]);
digitalWrite(controlPin[1], multiplexer[canale][1]);
digitalWrite(controlPin[2], multiplexer[canale][2]);
digitalWrite(controlPin[3], multiplexer[canale][3]);
/* Serial.print(canale);
Serial.print (": ");
Serial.print(multiplexer[canale][3]);
Serial.print(multiplexer[canale][2]);
Serial.print(multiplexer[canale][1]);
Serial.println(multiplexer[canale][0]);
delay(500);*/
}
void interfaccia2 (int canale) {
digitalWrite(controlPin[0], multiplexer[canale][0]);
digitalWrite(controlPin[1], multiplexer[canale][1]);
digitalWrite(controlPin[2], multiplexer[canale][2]);
digitalWrite(controlPin[3], multiplexer[canale][3]);
/* Serial.print(canale);
Serial.print (": ");
Serial.print(multiplexer[canale][3]);
Serial.print(multiplexer[canale][2]);
Serial.print(multiplexer[canale][1]);
Serial.println(multiplexer[canale][0]);
//delay(500);*/
}
void Command0Mux1() {
Serial.println("Command 1 funziona?");
}
void Command1Mux1() {
Serial.println("Command 2 funziona?");
}
void Command2Mux1() {
Serial.println("Command 3 funziona?");
}
void Command3Mux1() {
Serial.println("Command 4 funziona?");
}
void Command4Mux1() {
Serial.println("Command 5 funziona?");
}
void Command5Mux1() {
Serial.println("Command 6 funziona?");
}
void Command6Mux1() {
Serial.println("Command 7 funziona?");
}
void Command7Mux1() {
Serial.println("Command 8 funziona?");
}
void Command8Mux1() {
Serial.println("Command 9 funziona?");
}
void Command9Mux1() {
Serial.println("Command 10 funziona?");
}
void Command10Mux1() {
Serial.println("Command 11 funziona?");
}
void Command11Mux1() {
Serial.println("Command 12 funziona?");
}
void Command12Mux1() {
Serial.println("Command 13 funziona?");
}
void Command13Mux1() {
Serial.println("Command 14 funziona?");
}
void Command14Mux1() {
Serial.println("Command 15 funziona?");
}
void Command15Mux1() {
Serial.println("Command 16 funziona?");
}
void Command0Mux2() {
Serial.println("Command 1 funziona?");
}
void Command1Mux2() {
Serial.println("Command 2 funziona?");
}
void Command2Mux2() {
Serial.println("Command 3 funziona?");
}
void Command3Mux2() {
Serial.println("Command 4 funziona?");
}
void Command4Mux2() {
Serial.println("Command 5 funziona?");
}
void Command5Mux2() {
Serial.println("Command 6 funziona?");
}
void Command6Mux2() {
Serial.println("Command 7 funziona?");
}
void Command7Mux2() {
Serial.println("Command 8 funziona?");
}
void Command8Mux2() {
Serial.println("Command 9 funziona?");
}
void Command9Mux2() {
Serial.println("Command 10 funziona?");
}
void Command10Mux2() {
Serial.println("Command 11 funziona?");
}
void Command11Mux2() {
Serial.println("Command 12 funziona?");
}
void Command12Mux2() {
Serial.println("Command 13 funziona?");
}
void Command13Mux2() {
Serial.println("Command 14 funziona?");
}
void Command14Mux2() {
Serial.println("Command 15 funziona?");
}
void Command15Mux2() {
Serial.println("Command 16 funziona?");
}