Spektrometern/LED-matris med Charlieplexed LED (6 / 6 steg)
Steg 6: Exempelkod och slutliga Video
Här är ett urval bibliotek som mappas till x och y-koordinater så att du kan lättare kod grejer och sedan kan du använda det för en mängd program som mappning ljudfrekvenser och volymer till x- och y-koordinater för att göra en grafisk equalizer, eller som jag har gjort i mitt prov koden nedan du kan rulla ett meddelande på skärmen som en av de tecken du ser överallt , eller något annat du kan drömma upp.
Detta är en funktion som kallas led(x,y,z) som kommer att slå på eller av
lysdioderna på koordinater (x, y) på min spektrum matris. Till exempel
Map(1,1,0) kommer att stänga av lampan i positionen x = 1 och y = 1.
Filnamn: array_pinmap.h
Först definiera vilka styrelsen stift du kopplade till den
Spectrum array huvud. Från vänster till höger.
#define PIN_1 2
#define PIN_2 3
#define PIN_3 4
#define PIN_4 5
#define PIN_5 6
#define PIN_6 7
#define PIN_7 8
void ledde (int x, int y, int z) {
int Y = 0;
om (z == 1) z = produktion;
annat z = ingång;
Switch(x) {
fall 1:
pinMode (PIN_1, z);
digitalWrite (PIN_1, 0x0);
bryta;
fall 2:
pinMode (PIN_2, z);
digitalWrite (PIN_2, 0x0);
bryta;
fall 3:
pinMode (PIN_3, z);
digitalWrite (PIN_3, 0x0);
bryta;
fall 4:
pinMode (PIN_4, z);
digitalWrite (PIN_4, 0x0);
bryta;
fall 5:
pinMode (PIN_5, z);
digitalWrite (PIN_5, 0x0);
bryta;
fall 6:
pinMode (PIN_6, z);
digitalWrite (PIN_6, 0x0);
bryta;
fall 7:
pinMode (PIN_7, z);
digitalWrite (PIN_7, 0x0);
bryta;
standard:
bryta;
}
IF((x-y) == 0) Y = 7.
annat if((x-y) > 0) Y = x-y;
annat Y = 7-y + x;
Switch(Y) {
fall 1:
pinMode (PIN_1, z);
digitalWrite (PIN_1, 0x1);
bryta;
fall 2:
pinMode (PIN_2, z);
digitalWrite (PIN_2, 0x1);
bryta;
fall 3:
pinMode (PIN_3, z);
digitalWrite (PIN_3, 0x1);
bryta;
fall 4:
pinMode (PIN_4, z);
digitalWrite (PIN_4, 0x1);
bryta;
fall 5:
pinMode (PIN_5, z);
digitalWrite (PIN_5, 0x1);
bryta;
fall 6:
pinMode (PIN_6, z);
digitalWrite (PIN_6, 0x1);
bryta;
fall 7:
pinMode (PIN_7, z);
digitalWrite (PIN_7, 0x1);
bryta;
standard:
bryta;
}
}
Och här är ett prov genomförandet av ovanstående som kommer att orsaka ett cirkulär mål att flytta över ledde matrisen. Observera att du måste ändra det för att köra på din arduino om du använder java IDE. Jag tror det blir ganska tydligt hur man gör. Jag har bifogat en video som visar resultatet av kör koden. Jag tror att om du har kommit så här långt kan du se att det finns oändliga sätt att använda detta verktyg och det är ganska lätt att ändra allt för att göra en som är mindre eller större.
#include ". / array_pinmap.h"
#define dröjsmål 2 / / antalet millisekunder för att vända på varje LED
int main(void) {
While(1) {
för (int j = 12; j > = 1; j--) {
IF(j>6) {
LED(j-5,4,1);
_delay_ms(delay);
LED(j-5,4,0);
LED(j-5,3,1);
_delay_ms(delay);
LED(j-5,3,0);
}
om (j > 5 & & j < 12) {
LED(j-4,5,1);
_delay_ms(delay);
LED(j-4,5,0);
LED(j-4,2,1);
_delay_ms(delay);
LED(j-4,2,0);
}
om (j > 4 & & j < 11) {
LED(j-3,6,1);
_delay_ms(delay);
LED(j-3,6,0);
LED(j-3,4,1);
_delay_ms(delay);
LED(j-3,4,0);
LED(j-3,3,1);
_delay_ms(delay);
LED(j-3,3,0);
LED(j-3,1,1);
_delay_ms(delay);
LED(j-3,1,0);
}
om (j > 3 & & j < 10) {
LED(j-2,6,1);
_delay_ms(delay);
LED(j-2,6,0);
LED(j-2,4,1);
_delay_ms(delay);
LED(j-2,4,0);
LED(j-2,3,1);
_delay_ms(delay);
LED(j-2,3,0);
LED(j-2,1,1);
_delay_ms(delay);
LED(j-2,1,0);
}
om (j > 2 & & j < 9) {
LED(j-1,5,1);
_delay_ms(delay);
LED(j-1,5,0);
LED(j-1,2,1);
_delay_ms(delay);
LED(j-1,2,0);
}
IF(j<8) {
LED(j,4,1);
_delay_ms(delay);
LED(j,4,0);
LED(j,3,1);
_delay_ms(delay);
LED(j,3,0);
}
_delay_ms(50); fördröjning mellan ramar som du flyttar över skärmen.
}
}
Return(0);
}