that are required to use the method (especially for larger arrays) that there is generally no cost savings over the traditional row-column scan method, unless the cost of a diode is only a fraction of the cost of an I/O pin, where that fraction is one over the number of I/O lines. GuGaplexing In 2008, Dhananjay V. Gadre devised Gugaplexing, which is like Charlieplexing with multiple drive voltages. Chipiplexing In 2008, Guillermo Jaquenod's so called Chipiplexing adds emitter followers to boost the strength of the row drive allowing rows wider than a single microcontroller port could drive to be lit simultaneously. Cross-plexing In 2010, the Austrian chip manufacturer austriamicrosystems AG (named ams AG since 2012, and ams-OSRAM AG since 2020) introduced the multiplexing LED driver IC AS1119, followed by the AS1130 in 2011. Also, the analog & mixed signal (AMS) division (named Lumissil Microsystems since 2020) of Integrated Silicon Solution Inc. (ISSI) introduced the IS31FL3731 in 2012 and the IS31FL3732 in 2015. They all use a technique they call cross-plexing, a variant of Charlieplexing with automatic detection of open or shorted connections and anti-ghosting measures. Tucoplexing In 2019, Micah Elizabeth Scott developed a method to use 3 pins to run 4 LEDs and 4 switches called Tucoplexing''. Pulse-width modulation Charlieplexing can even be used with pulse-width modulation to control the brightness of 12 LEDs with 4 pins. Code example In the following Arduino code example, the circuit uses ATtiny 8-pin microcontroller which has 5 I/O pins to create a 7-segment display. Since a 7-segment display only requires control of 7 individual LEDs, we use 4 of the ATtiny I/O pins as charlieplexed outputs (n*(n-1)). Leaving the fifth I/O pin to be used as digital or analog input or another output. // ATtiny code // Reads analog (or digital) input from pin 4 and every time the input goes below a set threshold // it counts one and displays the increase in count either by activating up one of four LEDs (or transistors) // or one of twelve charlieplexed LEDs. // SET THESE VALUES: int threshold = 500; int maxCount = 7; //////////////////// boolean sensorTriggered = false; int count = 0; int sensorValue = 0; long lastDebounceTime = 0; // the last time the output pin was toggled long debounceDelay = 50; // the debounce time; increase if the output flickers //////////////////////////////////////////////////////////////////////////////// void setup() { for (int pin=0; pin<4; pin++) {