CTRL library / Multiplexers
Daisy chaining multiplexers
This sketch demonstrates the implementation of 3 daisy-chained multiplexers. One multiplexer has buttons, the other has rotary encoders & the third has pots.
The code
#include <CTRL.h> /* Now we create 3 multiplexers and provide the following parameters: - signal pin (sig) - s0 - s3: the channel select pins Note that all multiplexers use the same channel select pins (s0 - s3).*/ // The button mux. Connect 'sig' to a digital pin on your board.CtrlMux btnMux(7, 3, 4, 5, 6); // The potentiometer mux. Connect 'sig' to an analog pin on your board.CtrlMux potMux(A0, 3, 4, 5, 6); // The encoder mux. Connect 'sig' to a digital pin on your board.CtrlMux encMux(2, 3, 4, 5, 6); void onPress1() { Serial.println("Button 1 pressed"); }void onRelease1() { Serial.println("Button 1 released"); }CtrlBtn button1(0, 15, onPress1, onRelease1, nullptr, &btnMux); void onPress2() { Serial.println("Button 2 pressed"); }void onRelease2() { Serial.println("Button 2 released"); }CtrlBtn button2(1, 15, onPress2, onRelease2, nullptr, &btnMux); void onValueChange1(int value) { Serial.print("Pot 1 value: "); Serial.println(value); }CtrlPot pot1(0, 100, 0.05, onValueChange1, &potMux); void onValueChange2(int value) { Serial.print("Pot 2 value: "); Serial.println(value); }CtrlPot pot2(1, 100, 25, onValueChange2, &potMux); void onTurnLeft1() { Serial.println("Encoder 1 turn left"); }void onTurnRight1() { Serial.println("Encoder 1 turn right"); }CtrlEnc encoder1(0, 1, onTurnLeft1, onTurnRight1, &encMux); void onTurnLeft2() { Serial.println("Encoder 2 turn left"); }void onTurnRight2() { Serial.println("Encoder 2 turn right"); }CtrlEnc encoder2(2, 3, onTurnLeft2, onTurnRight2, &encMux); void setup() { Serial.begin(9600); btnMux.setSwitchInterval(2); // In microseconds. potMux.setSwitchInterval(2); // In microseconds. encMux.setSwitchInterval(2); // In microseconds.} void loop() { btnMux.process(); potMux.process(); encMux.process();}