Klein Arduino circuit met 16 ledjes in 4x4:
Eerste video:
De video van 6 juni:
De video van 17 juni, het is gesoldeerd:
De Arduino code staat hieronder met uitleg (update 15 juni, code is 650 lijnen korter geworden). Hopelijk is dit leesbaar:
void setup() {
for (int i = 0; i < 4; i++) {
pinMode(i + 2, OUTPUT); // column pins 2,3,4,5
pinMode(i + 8, OUTPUT); // row pins 8,9,10,11
digitalWrite(i + 2,LOW); // all rows off
digitalWrite(i + 8,LOW); // all cols off
}
}
void loop() {
sinksenfoor(); // start met alles aan en geflikker
for (int i=0; i < 5; i++) { streepjelinksrechts(); }
for (int i=0; i < 5; i++) { streepjebovenonder(); }
for (int i=0; i < 2; i++) { streepjelinksrechts(); streepjebovenonder(); }
for (int i=0; i < 5; i++) { buitenvierkantwandel(); }
binairtellen();
for (int i=0; i < 5; i++) { slash(); delay(20); backslash(); delay(20); }
for (int i=5; i > 3; i--) { kruis(); delay(i*10); kruis(); delay(i*10); }
for (int i=0; i < 9; i++) { kruis(); delay(20); }
for (int i=0; i < 40; i++) { kruis(); }
for (int i=0; i < 5; i++) { binnenvierkant(); delay(10); buitenvierkant(); delay(10); }
fakerandom();
delay(2000);
}
void blinkyblinky(int time) {
display4x4(15,15,15,15,0); delay(time);
display4x4(0,0,0,0,0); delay(time);
}
void sinksenfoor() {
for (int i=30; i > 1 ; i = i - 2) { blinkyblinky(i * 10); }
for (int i=0 ; i < 32; i = i + 1) { blinkyblinky(20); }
}
void slash() {
for (int i=0; i < 40; i++) { display4x4(8,4,2,1,4); }
}
void backslash() {
for (int i=0; i < 40; i++) { display4x4(1,2,4,8,4); }
}
void kruis() {
for (int i=0; i < 2; i++) { display4x4(9,6,6,9,4); }
}
void binnenvierkant() {
for (int i=0; i < 30; i++) { display4x4(0,6,6,0,4); }
}
void buitenvierkant() {
for (int i=0; i < 40; i++) { display4x4(15,9,9,15,4); }
}
void streepjelinksrechts() {
for (int i=1;i<=4;i++) { displayrow(15,i,50); }
for (int i=3;i>=1;i--) { displayrow(15,i,50); }
}
void streepjebovenonder() {
for (int i=1; i <= 8; i=i*2) {
for (int j=1; j <= 4; j++) { displayrow(i,j,0); }
delay(50);
display4x4(0,0,0,0,0);
}
for (int i=4; i>=1 ; i=i/2) {
for (int j=1; j <= 4; j++) { displayrow(i,j,0); }
delay(50);
display4x4(0,0,0,0,0);
}
}
void fakerandom() {
for (int i=0; i < 16; i++) {
display4x4(i%4,4+i%4,8+i%4,12+i%4,50);
display4x4(12+i%4,8+i%4,4+i%4,i%4,30);
}
}
void binairtellen() {
for (int i=0; i < 16; i++) {
for (int j=1; j <= 4; j++) {
displayrow(i,j,60);
}
}
}
void buitenvierkantwandel() {
displayrow(8,4,40);
displayrow(8,3,40);
displayrow(8,2,40);
displayrow(8,1,40);
displayrow(4,1,40);
displayrow(2,1,40);
displayrow(1,1,40);
displayrow(1,2,40);
displayrow(1,3,40);
displayrow(1,4,40);
displayrow(2,4,40);
displayrow(4,4,40);
}
void displayrow(byte b, byte r, int d) { // b = binary value, r = row, d = delay
if (b == 0) { digitalWrite(12-r,LOW); } // 0 = all leds on this row are off
else { digitalWrite(12-r,HIGH); } // not 0 = one or more leds are on
for (int i=0; i<4; i++) { // four columns
digitalWrite(5-i, b & (1<<i) ); // on when relevant bit = 1
}
if (d > 0) { // if d = 0 then exit now
delay(d) ;
for (int i = 0; i < 4; i++) {
digitalWrite(i+2,LOW); // all rows off
digitalWrite(i+8,LOW); // all cols off
}
}
}
void display4x4(byte b1, byte b2, byte b3, byte b4, byte d) {
displayrow(b1,1,d);
displayrow(b2,2,d);
displayrow(b3,3,d);
displayrow(b4,4,d);
}
Terug naar de Syntra Arduino website.