Chalieplexing 4 RGB-lysdioder med 4 trådar på Arduino (5 / 5 steg)
Steg 5: Plug and Play med programvara
Allt är nu klart att testa systemet. Ta ut din älskade Arduino (eller om du är scard din Ruggduino), kopiera och klistra in koden i din Arduino skiss och ändra det som krävs. Några förbättringar är välkomna
/*
CharliePlexing bibliotek
(c) av Olivier Chatelain 2014
Denna kod är CC-av-SA-3.0
*/
#define CHARLIE_PINS 4
#define CHARLIE_FIRST 9
Installationsprogrammet för minnet
#define CHARLIE_COUNT CHARLIE_PINS*(CHARLIE_PINS-1)
Charlie Level (0 = av, 255 = max)
#define CHARLIE_LOW 0
#define CHARLIE_HIGH 255
#define CHARLIE_OFF 0
#define CHARLIE_MAX 255
Charlie nivåer för anod/katod pin-par
uint8_t charliePins [CHARLIE_PINS] [CHARLIE_PINS];
#define CHARLIE_GREEN 0
#define CHARLIE_BLUE 1
#define CHARLIE_RED 2
int charlieRGB [CHARLIE_PINS] [3] = {{1, 2, 3}, {2, 3, 0}, {3, 0, 1}, {0, 1, 2}};
void charlieClear() {
för (int jag = 0; jag < CHARLIE_PINS; i ++) {
för (int j = 0; j < CHARLIE_PINS; j ++) {
charliePins [i] [j] = CHARLIE_OFF;
}
}
}
void charlieSetAll() {
för (int jag = 0; jag < CHARLIE_PINS; i ++) {
för (int j = 0; j < CHARLIE_PINS; j ++) {
charliePins [i] [j] = CHARLIE_MAX;
}
}
}
void charlieSetAllLevel (uint8_t nivå) {
för (int jag = 0; jag < CHARLIE_PINS; i ++) {
för (int j = 0; j < CHARLIE_PINS; j ++) {
charliePins [i] [j] = nivå.
}
}
}
void charlieWrite (int src, int dst, uint8_t nivå) {
charliePins [src % CHARLIE_PINS] [dst % CHARLIE_PINS] = nivå.
}
aktuell rad visas
int charlie_line = CHARLIE_PINS-1;
void charliePlexLine (uint8_t nivå) {
Inaktivera sista raden visas
pinMode (CHARLIE_FIRST + charlie_line, ingång);
om (++ charlie_line > = CHARLIE_PINS) charlie_line = 0;
int jag = charlie_line;
int MasterPin = CHARLIE_FIRST + i.
Använda andra som följer stift (hög eller INPUT)
för (int j = 0; j < CHARLIE_PINS; j ++) {
int SlavePin = CHARLIE_FIRST + j.
om (MasterPin! = SlavePin) {
om (charliePins [i] [j] > nivå) {
pinMode (SlavePin, OUTPUT);
digitalWrite (SlavePin, låg);
} annat {
pinMode (SlavePin, indata);
}
}
}
pinMode (MasterPin, OUTPUT);
digitalWrite (MasterPin, hög);
}
void charliePlex() {
Ställa in en leadpin (låg)
för (int jag = 0; jag < CHARLIE_PINS; i ++) {
för (int j = 0; j < CHARLIE_MAX; j ++) {
charliePlexLine(j);
delayMicroseconds(10);
}
}
}
Rutinen installationsprogrammet körs en gång när du trycker på reset:
void setup() {
}
void loop() {
//*
Prov 1: Första LED(0,1) "På"
//
charlieClear();
charlieWrite(0,1,CHARLIE_MAX);
charliePlex();
//*/
/*
Prov 2: DIMM-vit
för (int jag = 0; jag < 8; i ++) {
charlieSetAllLevel (1 << i);
charliePlex();
}
för (int jag = 7; jag > -1; i--) {
CHARLIE_PINS (1 << i);
charliePlex();
}
//*/
/*
Prov 3: Alternativa färger
charlieClear();
för (int jag = 0; jag < CHARLIE_PINS; i ++) {
charlieWrite i, charlieRGB [i] [CHARLIE_RED], CHARLIE_MAX.
}
charliePlex();
charlieClear();
för (int jag = 0; jag < CHARLIE_PINS; i ++) {
charlieWrite i, charlieRGB [i] [CHARLIE_GREEN], CHARLIE_MAX.
}
charliePlex();
charlieClear();
för (int jag = 0; jag < CHARLIE_PINS; i ++) {
charlieWrite i, charlieRGB [i] [CHARLIE_BLUE], CHARLIE_MAX.
}
charliePlex();
//*/
}
Njuta av det!