4*4!
This commit is contained in:
67
4By4/4By4.ino
Normal file
67
4By4/4By4.ino
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
#include "TimerOne.h"
|
||||||
|
#define TIME_PER_LAYER_IN_US 750
|
||||||
|
#define ANODE_START_PIN 22
|
||||||
|
#define CATHODE_START_PIN 8
|
||||||
|
|
||||||
|
int LED_status[4] = {0}; // 16 bit * 4
|
||||||
|
byte current_layer = 0;
|
||||||
|
|
||||||
|
void setup() {
|
||||||
|
Serial.begin(115200);
|
||||||
|
Timer1.initialize();
|
||||||
|
Timer1.setPeriod(TIME_PER_LAYER_IN_US);
|
||||||
|
Timer1.attachInterrupt(drawOneLayer);
|
||||||
|
for (int i = 0; i < 16; i++) {
|
||||||
|
pinMode(ANODE_START_PIN + i, OUTPUT);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < 4; i++) {
|
||||||
|
pinMode(CATHODE_START_PIN + i, OUTPUT);
|
||||||
|
}
|
||||||
|
|
||||||
|
randomSeed(analogRead(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop() {
|
||||||
|
// for (int i = 0; i < 4; i++) {
|
||||||
|
// for (int j = 0; j < 16; j++) {
|
||||||
|
// LED_status[i] ^= 1 << j;
|
||||||
|
// delay(500);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
int count = 0;
|
||||||
|
while (count < 64) {
|
||||||
|
int num = random(64);
|
||||||
|
if ((LED_status[num / 16] >> (num % 16) ) & 1) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
LED_status[num / 16] ^= 1 << (num % 16);
|
||||||
|
delay(50);
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
|
||||||
|
delay(1000);
|
||||||
|
|
||||||
|
while (count > 0) {
|
||||||
|
int num = random(64);
|
||||||
|
if ((LED_status[num / 16] >> (num % 16) ) & 1) {
|
||||||
|
LED_status[num / 16] ^= 1 << (num % 16);
|
||||||
|
delay(50);
|
||||||
|
count--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
delay(1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
void drawOneLayer() {
|
||||||
|
digitalWrite(CATHODE_START_PIN + current_layer, LOW);
|
||||||
|
|
||||||
|
current_layer = (current_layer + 1) % 4;
|
||||||
|
for (int j = 0; j < 16; j++) {
|
||||||
|
digitalWrite(ANODE_START_PIN + j, (LED_status[current_layer] >> j) & 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
digitalWrite(CATHODE_START_PIN + current_layer, HIGH);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user