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.