Skapa ett charlieplexed LED rutnät att köra på ATTiny85 (4 / 5 steg)
Steg 4: Charlieplexing i programvara - Visa en bild
Här ska vi ställa in vår variabel att hålla 20 värdena (pixlar) för vår LED-bild. Standard visas nedan (alla 0). Detta skulle visas som en mörk bild, med alla lysdioder avstängd, men vi kan ändra detta i programvaran.
char led_grid [20] = {
000, 000, 000, 000, 000,
000, 000, 000, 000, 000,
000, 000, 000, 000, 000,
000, 000, 000, 000, 000
};
Jag också så att denna variabel till butiken mer än bara 1 och 0 är, men större siffror. Jag vill göra min LED dimmer ibland. Så jag har beslutat för detta projekt värdet 100 kommer att vara full ljusstyrka och 0 kommer att vara avstängd.
Följande funktion kommer att loopa igenom alla 20 positioner i led_grid och om värdet av varje pixel är över noll, lämpliga lysdioden tänds. Eftersom du kan bara tända en LED i taget, måste bilden vara åter dras hela tiden, och tillräckligt snabbt för att du inte märker blinkande/flimmer med ögonen. Normalt är detta inte ett problem med de hastigheter som du kan köra på en mikrokontroller.
void draw_frame(void) {
char ledde, bright_val, b;
för (ledde = 0; ledde < = 19; ledde ++) {
programvara PWM
bright_val = led_grid [ledde];
för (b = 0; b < bright_val; b + = 4) {light_led(led);} //delay samtidigt på
för (b = bright_val; b < 100; b + = 4) {leds_off();} //delay medan off
}
}