Stap 5: Plug en Play met de software
Nu is alles klaar om het systeem te testen. Neem je geliefde Arduino (of als je scard uw Ruggduino), de code kopiëren en plakken in uw Arduino schets en wijzigt deze zo nodig. Eventuele verbeteringen zijn welkom
/*
CharliePlexing bibliotheek
(c) door Olivier Chatelain 2014
Deze code is CC-door-SA-3.0
*/
#define CHARLIE_PINS 4
#define CHARLIE_FIRST 9
Instellen van het geheugen
#define CHARLIE_COUNT CHARLIE_PINS*(CHARLIE_PINS-1)
Charlie Level (0 = uit, 255 = max)
#define CHARLIE_LOW 0
#define CHARLIE_HIGH 255
#define CHARLIE_OFF 0
#define CHARLIE_MAX 255
Charlie niveaus voor anode/kathode pin-paren
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}};
ongeldig charlieClear() {}
for (int i = 0; ik < CHARLIE_PINS; i ++) {}
for (int j = 0; j < CHARLIE_PINS; j ++) {}
charliePins [i] [j] = CHARLIE_OFF;
}
}
}
ongeldig charlieSetAll() {}
for (int i = 0; ik < CHARLIE_PINS; i ++) {}
for (int j = 0; j < CHARLIE_PINS; j ++) {}
charliePins [i] [j] = CHARLIE_MAX;
}
}
}
VOID charlieSetAllLevel (uint8_t niveau) {}
for (int i = 0; ik < CHARLIE_PINS; i ++) {}
for (int j = 0; j < CHARLIE_PINS; j ++) {}
charliePins [i] [j] = niveau;
}
}
}
VOID charlieWrite (int src, int dst, uint8_t niveau) {}
charliePins [src % CHARLIE_PINS] [dst % CHARLIE_PINS] = niveau;
}
huidige regel weergegeven
int charlie_line = CHARLIE_PINS-1;
VOID charliePlexLine (uint8_t niveau) {}
Uitschakelen van de laatste regel weergegeven
pinMode (CHARLIE_FIRST + charlie_line, INPUT);
Als (++ charlie_line > = CHARLIE_PINS) charlie_line = 0;
int i = charlie_line;
int MasterPin = CHARLIE_FIRST + i;
Gebruik anderen als volgt pinnen (hoog of INPUT)
for (int j = 0; j < CHARLIE_PINS; j ++) {}
int SlavePin = CHARLIE_FIRST + j;
Als (MasterPin! = SlavePin) {}
Als (charliePins [i] [j] > niveau) {}
pinMode (SlavePin, uitvoer);
digitalWrite (SlavePin, laag);
} else {}
pinMode (SlavePin, INPUT);
}
}
}
pinMode (MasterPin, uitvoer);
digitalWrite (MasterPin, hoge);
}
ongeldig charliePlex() {}
Instellen van een leadpin (LOW)
for (int i = 0; ik < CHARLIE_PINS; i ++) {}
for (int j = 0; j < CHARLIE_MAX; j ++) {}
charliePlexLine(j);
delayMicroseconds(10);
}
}
}
de setup-routine wordt uitgevoerd zodra wanneer u drukt op reset:
VOID Setup {}
}
void loop {}
//*
Voorbeeld 1: Eerste LED(0,1) "On"
//
charlieClear();
charlieWrite(0,1,CHARLIE_MAX);
charliePlex();
//*/
/*
Voorbeeld 2: Dimm wit
for (int i = 0; ik < 8; i ++) {}
charlieSetAllLevel (1 << i);
charliePlex();
}
for (int i = 7; ik > -1; ik--) {}
CHARLIE_PINS (1 << i);
charliePlex();
}
//*/
/*
Voorbeeld 3: Afwisselend de kleuren
charlieClear();
for (int i = 0; ik < CHARLIE_PINS; i ++) {}
charlieWrite (i, charlieRGB [i] [CHARLIE_RED], CHARLIE_MAX);
}
charliePlex();
charlieClear();
for (int i = 0; ik < CHARLIE_PINS; i ++) {}
charlieWrite (i, charlieRGB [i] [CHARLIE_GREEN], CHARLIE_MAX);
}
charliePlex();
charlieClear();
for (int i = 0; ik < CHARLIE_PINS; i ++) {}
charlieWrite (i, charlieRGB [i] [CHARLIE_BLUE], CHARLIE_MAX);
}
charliePlex();
//*/
}
Geniet ervan!