LED cube 5×5×5
15095 단어 Arduino
소개
Arduino MEGA를 사용하여 5×5×5LED Cube를 만듭니다.
목차
1. 전자 부품 목록
이름
개수
Arduino MEGA
1개
LED
125개
저항 150Ω
5개
점퍼 라인
30개
2. 회로도

각각의 번호와 Arduino MEGA에 배선을 해갑니다.
Arduino MEGA 프로그램
LEDcube.rd#define LED_SIZE 25
#define FLOOR_SIZE 5
#define SIDE_SIZE 5
byte dots[] = {
22, 23, 24, 25, 26,
27, 28, 29, 30, 31,
32, 33, 36, 37, 38,
39, 40, 41, 42, 43,
44, 45, 46, 53, 52
};
byte floors[] = {
2, 3, 4, 5, 6
};
byte memmap[FLOOR_SIZE * LED_SIZE];
void pset(byte* pattern, int floor_num, int dot_num, byte value) {
pattern[floor_num * LED_SIZE + dot_num] = value;
}
byte pget(byte* pattern, int floor_num, int dot_num) {
return pattern[floor_num * LED_SIZE + dot_num];
}
void setup() {
int i, j;
randomSeed(analogRead(0));
for (i = 0; i < LED_SIZE; i++)
pinMode(dots[i], OUTPUT);
for (i = 0; i < FLOOR_SIZE; i++)
pinMode(floors[i], OUTPUT);
setFloor(0);
for (i = 0; i < FLOOR_SIZE; i++)
for (j = 0; j < LED_SIZE; j++)
pset(memmap, i, j, LOW);
}
// num: 0 origin
void writeDotValue(int num, int value) {
digitalWrite(dots[num], value);
}
// num: 0 origin
void setFloor(int num) {
int i;
for (i = 0; i < FLOOR_SIZE; i++)
digitalWrite(floors[i], i == num ? HIGH: LOW);
}
// 一回分の描画
#define DELAY_US 600
int setDots(byte* pattern) {
long current;
long wait_us = 0;
int f, i;
for (f = 0; f < FLOOR_SIZE; f++) {
current = micros();
setFloor(f);
for (i = 0; i < LED_SIZE; i++)
writeDotValue(i, pget(pattern, f, i));
delayMicroseconds(DELAY_US);
wait_us += micros() - current;
}
return (int)(wait_us / 1000);
}
void draw(byte* pattern, int ms) {
int total_ms = 0;
while (true) {
total_ms += setDots(pattern);
if (total_ms >= ms)
break;
}
}
void loop() {
int i, j;
for (i = 0; i < FLOOR_SIZE - 1; i++)
for (j = 0; j < LED_SIZE; j++)
pset(memmap, i, j,
pget(memmap, i + 1, j));
for (j = 0; j < LED_SIZE; j++)
pset(memmap, 4, j, random(10000) % 9 == 0 ? HIGH: LOW);
draw(memmap, 150);
}
4. 동영상
아래 이미지를 선택하면 동영상이 재생됩니다.
YouTube로 날아갑니다.

5. 정리
이번, LED의 다리가 짧은 것을 구입하고 있어 땜납할 때에 땜납 코테가 LED와 접촉해 버려 LED를 녹이는 해프닝이 자주 일어났습니다.
LED 다리는 긴 녀석을 사는 것을 추천합니다. 거기에 LED끼리의 간격이 넓은 쪽이 빛나고 있을 때에 깨끗하게 보입니다.
Reference
이 문제에 관하여(LED cube 5×5×5), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/m2y2/items/679d586862de4ae57bad
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)

각각의 번호와 Arduino MEGA에 배선을 해갑니다.
Arduino MEGA 프로그램
LEDcube.rd#define LED_SIZE 25
#define FLOOR_SIZE 5
#define SIDE_SIZE 5
byte dots[] = {
22, 23, 24, 25, 26,
27, 28, 29, 30, 31,
32, 33, 36, 37, 38,
39, 40, 41, 42, 43,
44, 45, 46, 53, 52
};
byte floors[] = {
2, 3, 4, 5, 6
};
byte memmap[FLOOR_SIZE * LED_SIZE];
void pset(byte* pattern, int floor_num, int dot_num, byte value) {
pattern[floor_num * LED_SIZE + dot_num] = value;
}
byte pget(byte* pattern, int floor_num, int dot_num) {
return pattern[floor_num * LED_SIZE + dot_num];
}
void setup() {
int i, j;
randomSeed(analogRead(0));
for (i = 0; i < LED_SIZE; i++)
pinMode(dots[i], OUTPUT);
for (i = 0; i < FLOOR_SIZE; i++)
pinMode(floors[i], OUTPUT);
setFloor(0);
for (i = 0; i < FLOOR_SIZE; i++)
for (j = 0; j < LED_SIZE; j++)
pset(memmap, i, j, LOW);
}
// num: 0 origin
void writeDotValue(int num, int value) {
digitalWrite(dots[num], value);
}
// num: 0 origin
void setFloor(int num) {
int i;
for (i = 0; i < FLOOR_SIZE; i++)
digitalWrite(floors[i], i == num ? HIGH: LOW);
}
// 一回分の描画
#define DELAY_US 600
int setDots(byte* pattern) {
long current;
long wait_us = 0;
int f, i;
for (f = 0; f < FLOOR_SIZE; f++) {
current = micros();
setFloor(f);
for (i = 0; i < LED_SIZE; i++)
writeDotValue(i, pget(pattern, f, i));
delayMicroseconds(DELAY_US);
wait_us += micros() - current;
}
return (int)(wait_us / 1000);
}
void draw(byte* pattern, int ms) {
int total_ms = 0;
while (true) {
total_ms += setDots(pattern);
if (total_ms >= ms)
break;
}
}
void loop() {
int i, j;
for (i = 0; i < FLOOR_SIZE - 1; i++)
for (j = 0; j < LED_SIZE; j++)
pset(memmap, i, j,
pget(memmap, i + 1, j));
for (j = 0; j < LED_SIZE; j++)
pset(memmap, 4, j, random(10000) % 9 == 0 ? HIGH: LOW);
draw(memmap, 150);
}
4. 동영상
아래 이미지를 선택하면 동영상이 재생됩니다.
YouTube로 날아갑니다.

5. 정리
이번, LED의 다리가 짧은 것을 구입하고 있어 땜납할 때에 땜납 코테가 LED와 접촉해 버려 LED를 녹이는 해프닝이 자주 일어났습니다.
LED 다리는 긴 녀석을 사는 것을 추천합니다. 거기에 LED끼리의 간격이 넓은 쪽이 빛나고 있을 때에 깨끗하게 보입니다.
Reference
이 문제에 관하여(LED cube 5×5×5), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/m2y2/items/679d586862de4ae57bad
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#define LED_SIZE 25
#define FLOOR_SIZE 5
#define SIDE_SIZE 5
byte dots[] = {
22, 23, 24, 25, 26,
27, 28, 29, 30, 31,
32, 33, 36, 37, 38,
39, 40, 41, 42, 43,
44, 45, 46, 53, 52
};
byte floors[] = {
2, 3, 4, 5, 6
};
byte memmap[FLOOR_SIZE * LED_SIZE];
void pset(byte* pattern, int floor_num, int dot_num, byte value) {
pattern[floor_num * LED_SIZE + dot_num] = value;
}
byte pget(byte* pattern, int floor_num, int dot_num) {
return pattern[floor_num * LED_SIZE + dot_num];
}
void setup() {
int i, j;
randomSeed(analogRead(0));
for (i = 0; i < LED_SIZE; i++)
pinMode(dots[i], OUTPUT);
for (i = 0; i < FLOOR_SIZE; i++)
pinMode(floors[i], OUTPUT);
setFloor(0);
for (i = 0; i < FLOOR_SIZE; i++)
for (j = 0; j < LED_SIZE; j++)
pset(memmap, i, j, LOW);
}
// num: 0 origin
void writeDotValue(int num, int value) {
digitalWrite(dots[num], value);
}
// num: 0 origin
void setFloor(int num) {
int i;
for (i = 0; i < FLOOR_SIZE; i++)
digitalWrite(floors[i], i == num ? HIGH: LOW);
}
// 一回分の描画
#define DELAY_US 600
int setDots(byte* pattern) {
long current;
long wait_us = 0;
int f, i;
for (f = 0; f < FLOOR_SIZE; f++) {
current = micros();
setFloor(f);
for (i = 0; i < LED_SIZE; i++)
writeDotValue(i, pget(pattern, f, i));
delayMicroseconds(DELAY_US);
wait_us += micros() - current;
}
return (int)(wait_us / 1000);
}
void draw(byte* pattern, int ms) {
int total_ms = 0;
while (true) {
total_ms += setDots(pattern);
if (total_ms >= ms)
break;
}
}
void loop() {
int i, j;
for (i = 0; i < FLOOR_SIZE - 1; i++)
for (j = 0; j < LED_SIZE; j++)
pset(memmap, i, j,
pget(memmap, i + 1, j));
for (j = 0; j < LED_SIZE; j++)
pset(memmap, 4, j, random(10000) % 9 == 0 ? HIGH: LOW);
draw(memmap, 150);
}
아래 이미지를 선택하면 동영상이 재생됩니다.
YouTube로 날아갑니다.

5. 정리
이번, LED의 다리가 짧은 것을 구입하고 있어 땜납할 때에 땜납 코테가 LED와 접촉해 버려 LED를 녹이는 해프닝이 자주 일어났습니다.
LED 다리는 긴 녀석을 사는 것을 추천합니다. 거기에 LED끼리의 간격이 넓은 쪽이 빛나고 있을 때에 깨끗하게 보입니다.
Reference
이 문제에 관하여(LED cube 5×5×5), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/m2y2/items/679d586862de4ae57bad
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(LED cube 5×5×5), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/m2y2/items/679d586862de4ae57bad텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)