Multiplexering med Arduino - transistorer (jag gjorde det på techshop) (5 / 7 steg)
Steg 5:3 av 3 LED-Display exempel
Du kan se bilden med lysdioderna visas detta gjordes med hjälp av koden nedan. Koden är också fäst som en .ino-fil. Lysdioderna lyser är uppsättningen av 0x02, 0x05, 0x02. Decimalrepresentation av dessa hex värden är 00000010,00000101,00000010. Du kan se hur dessa värden matchar displayen.
Om du vill prova detta själv koden är tillgänglig nedan och bara kopiera kretsen från steg 3!
/ * Transistor Multiplexing 3 x 3 lysdioder
Av: Marty Peltz
Datum: 7/19/2013
Syfte: Kontroll 9 lysdioder i ett 3 x 3 mönster med hjälp av multiplexing.
Används i Martin Peltz Instructiable
*/
/ *** variabler *** /
char col1_cathode = 0;
char col2_cathode = 1;
char col3_cathode = 2;
char row1_anode = 3;
char row2_anode = 4;
char row3_anode = 5;
void setup()
{
Ställ in stift till utgångar
pinMode (col1_cathode, produktionen);
pinMode (col2_cathode, produktionen);
pinMode (col3_cathode, produktionen);
pinMode (row1_anode, produktionen);
pinMode (row2_anode, produktionen);
pinMode (row3_anode, produktionen);
Stäng av alla GPIO stift
digitalWrite (col1_cathode, låg);
digitalWrite (col2_cathode, låg);
digitalWrite (col3_cathode, låg);
digitalWrite (row1_anode, låg);
digitalWrite (row2_anode, låg);
digitalWrite (row3_anode, låg);
}
void loop()
{
display_LED(0x02,0x05,0x02);
}
/ *** visas LED funktion *** /
/ * Syfte: kallar denna funktion med parametern hexdecimal du vill visa
* Obs: Denna funktion styr katoden, i mitt fall kontrollera kolumner
*/
void display_LED (char c1, char c2, char c3)
{
row_anode(C1); Kalla row_anode med första hexdecimal värde
digitalWrite (col1_cathode, hög); Visa den första kolumnen
Delay(1); Vänta en liten stund så lyser för 1ms
digitalWrite (col1_cathode, låg); Inaktivera första kolumnen innan du fortsätter
row_anode(C2); Kalla row_anode med andra hexdecimal värde
digitalWrite (col2_cathode, hög); Visa kolumnen andra
Delay(1); Vänta en liten stund så lyser för 1ms
digitalWrite (col2_cathode, låg); Inaktivera andra kolumnen innan du fortsätter
row_anode(C3); Kalla row_anode med andra hexdecimal värde
digitalWrite (col3_cathode, hög); Visa kolumnen tredje
Delay(1); Vänta en liten stund så lyser för 1ms
digitalWrite (col3_cathode, låg); Inaktivera tredje kolumnen innan du fortsätter
(Obs försöka ändra den 1ms till 100ms - 1s du kommer se en skillnad)
}
/ *** Katoden (kolumner) funktion *** /
/ * Syfte: ta paramater värde och aktivera relaterade pins
* Obs: Som Arduinos digitalWrite måste du ange stift,
* men om du använder DDRx/PORTx kan du bara använda ett hexdecimal värde för att ställa in stiften på en port.
*/
void row_anode(char LEDs_on)
{
IF(LEDs_on == 0x00)
{
digitalWrite (row1_anode, låg);
digitalWrite (row2_anode, låg);
digitalWrite (row3_anode, låg);
}
annat if(LEDs_on == 0x01)
{
digitalWrite (row1_anode, hög);
digitalWrite (row2_anode, låg);
digitalWrite (row3_anode, låg);
}
annat if(LEDs_on == 0x02)
{
digitalWrite (row1_anode, låg);
digitalWrite (row2_anode, hög);
digitalWrite (row3_anode, låg);
}
annat if(LEDs_on == 0x03)
{
digitalWrite (row1_anode, hög);
digitalWrite (row2_anode, hög);
digitalWrite (row3_anode, låg);
}
annat if(LEDs_on == 0x04)
{
digitalWrite (row1_anode, låg);
digitalWrite (row2_anode, låg);
digitalWrite (row3_anode, hög);
}
annat if(LEDs_on == 0x05)
{
digitalWrite (row1_anode, hög);
digitalWrite (row2_anode, låg);
digitalWrite (row3_anode, hög);
}
annat if(LEDs_on == 0x06)
{
digitalWrite (row1_anode, låg);
digitalWrite (row2_anode, hög);
digitalWrite (row3_anode, hög);
}
annat if(LEDs_on == 0x07)
{
digitalWrite (row1_anode, hög);
digitalWrite (row2_anode, hög);
digitalWrite (row3_anode, hög);
}
}