코코아팹은 누구나 창의적 아이디어를 현실로 만들어 낼 수 있도록
만들고, 공유하고, 배울 수 있는 터전이
되고자 합니다.
아이디와 비밀번호를 잊으셨나요?아이디 / 비밀번호 찾기
코코아팹 회원이 아니신가요? 회원가입
2014-09-05 15:47:46
NO | 부품명 | 수량 | 상세정보 |
1 | 아두이노 보드 | 1 | |
2 | 브레드보드 | 1 | |
3 | 8x8 LEDmatrix | 1 | |
4 | 좌표 터치 센서 | 1 | |
5 | 케이블 | 10 |
부품명 | 아두이노 보드 | 브레드보드 | 8x8 LEDmatrix | 좌표 터치 센서 | 케이블 |
부품사진 |
#include <Wire.h>
#include <mpr121.h>
#include <swRTC.h>
#include "Adafruit_LEDBackpack.h"
#include "Adafruit_GFX.h"
Adafruit_BicolorMatrix matrix = Adafruit_BicolorMatrix();
int x, y;
int difficultie = 15; //난이도 변수
int randomX, randomY;
int redScore, greenScore = 0;
int nowSecond = 0;
swRTC rtc;
int score[8][8];
//초기화하는 함수
//swRTC와 점수를 초기화 시키며 초기화 후에 게임 시작을 위해 Start를 준비한다
void initialize() {
redScore = 0;
greenScore = 0;
rtc.stopRTC();
rtc.setTime(0,0,0); //시간, 분, 초 초기화
rtc.startRTC();
delay(1000);
//시작전 텍스트 출력
matrix.setTextSize(1);
matrix.setTextColor(LED_RED);
matrix.setCursor(1,0);
matrix.clear();
matrix.print("3");
matrix.writeDisplay();
delay(1000);
matrix.clear();
matrix.setCursor(1,0);
matrix.print("2");
matrix.writeDisplay();
delay(1000);
matrix.clear();
matrix.setCursor(1,0);
matrix.print("1");
matrix.writeDisplay();
delay(1000);
Serial.println("Start!!");
matrix.clear();
matrix.writeDisplay();
}
//8x8배열 초기화
void initialize_array(int arr[][8]) {
for(int i = 0; i<8; i++) {
for(int j = 0; j<8; j++) {
arr[i][j] = 3;
}
}
}
void setup() {
Serial.begin(9600);
Serial.println("8x8 LED Matrix Game");
Wire.begin();
CapaTouch.begin(); //터치패드 초기화
matrix.begin(0x70); //LEDmatrix 초기화
initialize_array(score);
initialize();
}
void loop()
{
while(true) {
while(nowSecond <= 15) { //15초가 흐르지 않았다면 게임 계속 진행
nowSecond = rtc.getSeconds();
//아두이노는 랜덤숫자를 받아서 matrix에 랜덤한 위치를 빨간색으로 바꾸게 된다
//빨간색으로 칠해진 픽셀은 2차원 배열에서 1로 세팅된다.
randomX = random(8);
randomY = random(8);
score[randomX][randomY] = 1;
matrix.drawPixel(randomX, randomY, LED_RED);
matrix.writeDisplay();
//사용자가 matrix를 칠하는 부분
//터치패드에서 받아온 좌표값에 해당하는 위치의 픽셀을 녹색으로 바꾼다
//사용자가 칠한 픽셀은 2차원 배열에서 0으로 세팅된다.
for(int i = 0; i < difficultie; i++) {
x = CapaTouch.getX();
y = CapaTouch.getY();
if(x != -1 && y != -1) {
matrix.drawPixel(x-1, y-1, LED_GREEN);
score[x-1][y-1] = 0;
}
matrix.writeDisplay();
delay(10);
}
//15초가 지나면 2차원 배열의 값으로 점수를 계산하고 출력한다
if(nowSecond == 15) {
for(int i = 0; i<8; i++) {
for(int j = 0; j<8; j++) {
if(score[i][j] == 0)
greenScore += 1;
else if(score[i][j] == 1)
redScore += 1;
}
}
Serial.print("green score is ");
Serial.println(greenScore);
Serial.print("red score is ");
Serial.println(redScore);
//빨간색이 많으면 LED를 빨간색으로 채우고 녹색이 많으면 LED를 녹색으로 채운다
if(greenScore > redScore) {
Serial.println("Greenteam win!");
matrix.fillRect(0,0, 8,8, LED_GREEN);
}
else if(greenScore < redScore) {
Serial.println("GAME OVER. Redteam win!");
matrix.fillRect(0,0, 8,8, LED_RED);
}
delay(1000);
}
}
//게임이 끝난 후 왼쪽 아래를 누르게 되면 난이도를 한 단계 올려서 시작한다
if(CapaTouch.getX()<=2 && 12<= CapaTouch.getY()) {
Serial.println("difficultie UP!");
difficultie--;
Serial.print("stage is ");
Serial.println(abs(difficultie-15));
initialize();
initialize_array(score);
nowSecond = rtc.getSeconds();
}
//게임이 끝난 후 오른쪽 아래를 누르게 되면 이번 난이도를 다시 플레이한다
else if(CapaTouch.getX()>=8 && 12<= CapaTouch.getY()) {
Serial.println("Retry. cheer up!");
Serial.print("stage is ");
Serial.println(abs(difficultie-15));
initialize();
initialize_array(score);
nowSecond = rtc.getSeconds();
}
}
}
void initialize_array(int arr[][8]) { for(int i = 0; i<8; i++) { for(int j = 0; j<8; j++) { arr[i][j] = 3; } } }
randomX = random(8); randomY = random(8); score[randomX][randomY] = 1; matrix.drawPixel(randomX, randomY, LED_RED); matrix.writeDisplay();
for(int i = 0; i < difficultie; i++) { x = CapaTouch.getX(); y = CapaTouch.getY(); if(x != -1 && y != -1) { matrix.drawPixel(x-1, y-1, LED_GREEN); score[x-1][y-1] = 0; } matrix.writeDisplay(); delay(10); }
for(int i = 0; i<8; i++) {
for(int j = 0; j<8; j++) {
if(score[i][j] == 0)
greenScore += 1;
else if(score[i][j] == 1)
redScore += 1;
}
}
수박쨈