Multiplexering med Arduino - transistorer (jag gjorde det på techshop) (4 / 7 steg)
Steg 4: Multiplexing kod
För att genomföra den multiplexing du kommer att behöva kod på ett visst sätt. Det är faktiskt inte så komplicerat, kan säga att raden är "dominerande" över kolumnerna. Detta innebär en rad transistorn är aktiverat medan kolumnen i den raden är sprang genom en gång. Efter att du flyttar till nästa rad och göra samma sak igen och igen tills den upprepas!Problemet med uppfriskande lysdioderna tillräckligt snabbt för att inte märka är du inte kan ha ett synkront system. Detta innebär att du inte kan ha förseningar som varar under en längre tid. Så om du någonsin har en fördröjning på 1 sekund, om raderna och kolumnerna är visas det endast som en för hela andra.
Det enklaste sättet att göra detta möjligt är att använda två funktioner där appeller en andra gång på gång. Eftersom i detta fall rader är "dominerande" över kolumner har vi två funktioner låter kalla dem:
-Display_LED()
-Column_Load()
Så är här några sudo-kod:
void Display_LED (char, char b, char c). Upprepa beroende på antal rader
{
Column_Load(a);
digitalWrite (transistor_pin1, hög);
Delay(1);
digitalWrite (transistor_pin1, låg);
}
Funktionen Display_LED ovan är så "dominerande"-funktionen för rader. Återigen kan du använda antingen rader eller kolumner som den dominerande det ingen spelar egentligen roll. Du ringer först funktionen kolumn om du vill ange dessa transistorer på eller av. Du ange vissa rad transistorn hög. Jag har en kort fördröjning så lyser för 1ms. Om du ändrar det till 1000ms kan du verkligen se varje en förändring. Thats varför inte kan du använda förseningar i resten av ditt program. Därifrån du inaktiverar transistorn och upprepa koden med att byta från en till b och byta till den andra raden.
void Column_Load(char LEDs)
{
om (LEDs_on == 0x07)
{
digitalWrite (colum1_transistor, hög)
digitalWrite (colum2_transistor, hög)
digitalWrite (colum3_transistor, hög)
}
}
Denna funktion är ganska enkel, beroende på vilket värde parametern har du ställa in lysdioderna hur du vill ha dem. Om du använder PORT_ och DDR_ är det faktiskt enklare kod att skriva än att använda digitalWrites. I de flesta fall ställa jag vale som ett hexadecimalt värde så om jag in en 0x03 som betyder LED 1 och 3 är slå på medan 2 är avstängd.
Nästa steg är ett exempel på en 3 x 3 lysdioder med följande funktioner ovan. Den enda skillnaden är raderna och kolumnerna återförs.