// Manual multiplexing of 4x4 LEDs using Arduino UNO
// The potentiometer sets the delay between setting the individual LEDs
/*
const int row0 = 6, row1 = 7, row2 = 8, row3 = 9, row4 = 10, row5 = 11, row6 = 12, row7 = 13;
const int col0 = 18, col1 = 17, col2 = 16, col3 = 15, col4 = 2, col5 = 3, col6 = 4, col7 = 5;
*/
const int rows[8] = {6, 7, 8, 9, 10, 11, 12, 13};
const int cols[8] = {18, 17, 16, 15, 2, 3, 4, 5};
void setup() {
// set the pins to output
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
pinMode(15, OUTPUT);
pinMode(16, OUTPUT);
pinMode(17, OUTPUT);
pinMode(18, OUTPUT);
// set potentimeter pin to input
pinMode(A0, INPUT);
}
void loop() {
int count = sizeof(cols)/sizeof(cols[0]);
int delay_time = map(analogRead(A0), 0, 1023, 1, 500); // set the delay time based on the potentiometer value
// Egle
int egle = 500;
while (egle > 0)
{
// 0;1 : 3;4;7
for (int i = 0; i < count; i++)
{
if (i != 3 && i != 4)
{
digitalWrite(cols[i], LOW);
}
else
{
digitalWrite(cols[i], HIGH);
}
}
digitalWrite(rows[0], LOW);
digitalWrite(rows[1], LOW);
for (int i = 2; i < count; i++)
{
digitalWrite(rows[i], HIGH);
}
digitalWrite(rows[7], LOW);
delay(delay_time);
// 2-3:2-5
for (int i = 0; i < count; i++)
{
if (i < 2 || i > 5)
{
digitalWrite(cols[i], LOW);
}
else
{
digitalWrite(cols[i], HIGH);
}
}
for (int i = 0; i < count; i++)
{
if (i != 2 && i != 3)
{
digitalWrite(rows[i], HIGH);
}
else
{
digitalWrite(rows[i], LOW);
}
}
delay(delay_time);
// 4:1-6
for (int i = 0; i < count; i++)
{
if (i < 2 || i > 5)
{
digitalWrite(cols[i], LOW);
}
else
{
digitalWrite(cols[i], HIGH);
}
}
for (int i = 0; i < count; i++)
{
if (i != 4)
{
digitalWrite(rows[i], HIGH);
}
else
{
digitalWrite(rows[i], LOW);
}
}
delay(delay_time);
// 5-6:all
for (int i = 0; i < count; i++)
{
digitalWrite(cols[i], HIGH);
}
for (int i = 0; i < count; i++)
{
if (i != 5 && i != 6)
{
digitalWrite(rows[i], HIGH);
}
else
{
digitalWrite(rows[i], LOW);
}
}
delay(delay_time);
egle -= 1;
}
// Sniegpārsliņa
int sniegp = 500;
while (sniegp > 0)
{
// 0-2; 4-6 : 3
for (int i = 0; i < count; i++)
{
if (i != 3)
{
digitalWrite(cols[i], LOW);
}
else
{
digitalWrite(cols[i], HIGH);
}
}
for (int i = 0; i < count; i++)
{
if (i != 3 && i != 7)
{
digitalWrite(rows[i], LOW);
}
else
{
digitalWrite(rows[i], HIGH);
}
}
delay(delay_time);
// 1;5:1;5
for (int i = 0; i < count; i++)
{
if (i != 1 && i != 5)
{
digitalWrite(cols[i], LOW);
digitalWrite(rows[i], HIGH);
}
else
{
digitalWrite(cols[i], HIGH);
digitalWrite(rows[i], LOW);
}
}
delay(delay_time);
// 2;4:2-4
for (int i = 0; i < count; i++)
{
if (i < 2 || i > 4)
{
digitalWrite(cols[i], LOW);
}
else
{
digitalWrite(cols[i], HIGH);
}
}
for (int i = 0; i < count; i++)
{
if (i != 2 && i != 4)
{
digitalWrite(rows[i], HIGH);
}
else
{
digitalWrite(rows[i], LOW);
}
}
delay(delay_time);
// 3 : 0-2;4-6
for (int i = 0; i < count; i++)
{
if (i != 3 && i != 7)
{
digitalWrite(cols[i], HIGH);
}
else
{
digitalWrite(cols[i], LOW);
}
}
for (int i = 0; i < count; i++)
{
if (i != 3)
{
digitalWrite(rows[i], HIGH);
}
else
{
digitalWrite(rows[i], LOW);
}
}
delay(delay_time);
sniegp -= 1;
}
// Dāvana
int davana = 500;
while (davana > 0)
{
// 0:2;5
for (int i = 0; i < count; i++)
{
if (i != 2 && i != 5)
{
digitalWrite(cols[i], LOW);
}
else
{
digitalWrite(cols[i], HIGH);
}
}
digitalWrite(rows[0], LOW);
for (int i = 1; i < count; i++)
{
digitalWrite(rows[i], HIGH);
}
delay(delay_time);
// 1-2:1;3-4;6
digitalWrite(cols[0], LOW);
for (int i = 1; i < count; i++)
{
if (i != 2 && i != 5 && i != 7)
{
digitalWrite(cols[i], HIGH);
}
else
{
digitalWrite(cols[i], LOW);
}
}
digitalWrite(rows[0], HIGH);
digitalWrite(rows[1], LOW);
digitalWrite(rows[2], LOW);
for (int i = 3; i < count; i++)
{
digitalWrite(rows[i], HIGH);
}
delay(delay_time);
// 2-6:0-7
for (int i = 0; i < count; i++)
{
digitalWrite(cols[i], HIGH);
}
digitalWrite(rows[0], HIGH);
digitalWrite(rows[1], HIGH);
digitalWrite(rows[2], HIGH);
for (int i = 3; i < count; i++)
{
digitalWrite(rows[i], LOW);
}
delay(delay_time);
davana -= 1;
}
}