|
Charlieplexing!
Ovvero, multiplazione di 12 LED utilizzando soltanto 4 uscite.
/* ---------- Inizio programma ------------------------------------------
* Charlieplexing 12 LEDs
* Comando di 12 LED con 4 linee di uscita.
* Achille De Santis V2.1 del 15-02-2018
--------------------------------------------------------------
Row 1 (R1): Arduino Pin 13
Row 2 (R2): Arduino Pin 12
Row 3 (R3): Arduino Pin 11
Row 4 (R4): Arduino Pin 10
-------------------------------------------------------------
variable pinMode state
L OUTPUT LOW
H OUTPUT HIGH
Z INPUT LOW
Z INPUT LOW
-----------------------------------------------------------
R1(Pin 13) R2(Pin 12) R3(Pin 11) R4(Pin 10)
L1 L H Z Z
L2 H L Z Z
L3 Z L H Z
L4 Z H L Z
L5 L Z H Z
L6 H Z L Z
L7 L Z Z H
L8 H Z Z L
L9 Z L Z H
L10 Z H Z L
L11 Z Z L H
L12 Z Z H L
----------------------------------------------------------
LED Cathode Anode LED Cathode Anode
1 R2 R1 2 R1 R2
3 R3 R2 4 R2 R3
5 R3 R1 6 R1 R3
7 R1 R4 8 R4 R1
9 R2 R4 10 R4 R2
11 R3 R4 12 R4 R3
------------------------------------------------------------
*/
#define R1 13 // Riga 1
#define R2 12 // Riga 2
#define R3 11 // Riga 3
#define R4 10 // Riga 4
void intestazione()
{ Serial.println(" ---------------------------------------------- ");
Serial.println(" - Tecnatron - ing. Achille De Santis - ");
Serial.println(" - tecnatron@gmail.com - ");
Serial.println(" - Charlieplexing 12 LEDs - ");
Serial.println(" - D13 R1 13 Riga 1 - ");
Serial.println(" - D12 R2 12 Riga 2 - ");
Serial.println(" - D11 R3 11 Riga 3 - ");
Serial.println(" - D10 R4 10 Riga 4 - ");
Serial.println(" ---------------------------------------------- ");
}
void setup()
{
// il set-up è variabile!
// il setup fisso può essere questo
Serial.begin(9600); // stabilisco la velocità di comunicazione
intestazione(); // intestazione, inviata alla seriale
}
void charlie(int L1, int L2, int L3, int L4) // Routine per la gestione dei Led
{ // Basso, Alto, Z, Z)
// accende il LED generico
pinMode(L1, OUTPUT); digitalWrite(L1, LOW); // Riga 1
pinMode(L2, OUTPUT); digitalWrite(L2, HIGH); // Riga 2
pinMode(L3, INPUT); digitalWrite(L3, LOW); // Riga 3
pinMode(L4, INPUT); digitalWrite(L4, LOW); // Riga 4
delay(500);
}
void loop()
{
charlie(R1, R2, R3, R4); //turn on LED1
charlie(R2, R1, R3, R4); //turn on LED2
charlie(R2, R3, R1, R4); //turn on LED3
charlie(R3, R2, R1, R4); //turn on LED4
charlie(R1, R3, R2, R4); //turn on LED5
charlie(R3, R1, R2, R4); //turn on LED6
charlie(R1, R4, R2, R3); //turn on LED7
charlie(R4, R1, R2, R3); //turn on LED8
charlie(R2, R4, R1, R3); //turn on LED9
charlie(R4, R2, R1, R3); //turn on LED10
charlie(R3, R4, R1, R2); //turn on LED11
charlie(R4, R3, R1, R2); //turn on LED12
}
// ---------- Fine programma ----------------------------------------------
Lo sketch e la simulazione del circuito sono disponibili per l'analisi e il download.
Simulazione:
Charlieplexing con 6 LED
Argomenti correlati:
tecnatronATgmail.com
> Arduino N° 83
Nessun commento:
Posta un commento