아두이노

메모리 큐브

내동 2017. 2. 5. 13:58

게임의 전체코드

#include<IRremote.h>

#include<stdllib.h>

 

int rows[]={2,3,4,5,6,7,8,9,}; //핀번호설정

int cols[]={10,11,12,13,A0,A1,A2,A3};

int rc=A5;

 

IRrecv irrecv(rc);

 

decode_results results;

 

int stage =1;

int point =0;

int LEDran[25];

int input[25];

int result =0;

 

void setup() //핀을 출력용도로 설정

{

for (int i=0; i< 8 ; i++) {

pinMode(rows[i] , OUTPUT);

pinMode(cols[i] , OUTPUT);

}

pinMode(rc , INPUT);

 

Serial.begin(9600);

irrecv.enableIRIn();

}

 

 

void clear() //모든LED끄는함수

{

for ( I=0 ; i<8 ; I++) {

digitalWrite(rows[i], LOW);

digitalWrite(cols[[i],HIGH);

}

}

 

void ready(){ //문제출제후 대각선으로 LED출력함수

for ( i=0 ; i<8 ; I++){

digitalWrite(rows[i+2], HIGH);

digitalWrite(cols[[i], LOW);

delay(300);

clear();

}

}

 

void all() { //모든LED켜는함수 사용자 입력을 기다림

digitalWrite(rows[2], HIGH) ;

digitalWrite(rows[3], HIGH) ;

digitalWrite(rows[4], HIGH) ;

digitalWrite(rows[5], HIGH) ;

digitalWrite(rows[6], HIGH) ;

digitalWrite(rows[7], HIGH) ;

digitalWrite(cols[0], LOW) ;

digitalWrite(cols[1], LOW) ;

digitalWrite(cols[2], LOW) ;

digitalWrite(cols[3], LOW) ;

digitalWrite(cols[4], LOW) ;

digitalWrite(cols[5], LOW) ;

delay(500);

clear();

}

 

 

void LED( int NUM) { //NUM이라는 숫자 보턴값을 매개변수로전달받아

int garo[2]; //특정번호의 LED가 켜지도록 하는 함수

int sero[2];

if ( NUM <3){

garo[0] =2;

sero[0] = ( 2*NUM);

}

else if ( NUM <6 ) {

garo[0] =4;

sero[0]= (2*(NUM-3));

}

else {

garo[0]= 6;

sero[0]= (2*(NUM-6)) ;

}

sero[1]= sero[0]+1;

garo[1]= garo[[0]+1;

digitalWrite(rows[garo[0]], HIGH);

digitalWrite(rows[garo[1]], HIGH);

digitalWrite(cols[sero[0]], LOW);

digitalWrite(cols[sero[1]], LOW);

delay(500);

clear();

}

 

int Decoder( int button) {

switch(button) {

case 0x2FD807F:

return 0:

break;

 

case 0x2FD40BF:

return 1:

break;

 

case 0x2FDC03F:

return 2:

break;

 

case 0x2FD20DF:

return 3:

break;

 

case 0x2FDA05F:

return 4:

break;

 

case 0x2FD609F:

return 5:

break;

 

case 0x2FDE01F:

return 6:

break;

 

case 0x2FD10EF:

return 7:

break;

 

case 0x2FD906F:

return 8:

break;

 

default ;

return 9;

break;

}

 

}

 

void incorrect() { // 정답이 틀렸을 때 x를 출력하는 함수

digitalWrite(rows[2], HIGH );

digitalWrite(cols[0], LOW );

digitalWrite(cols[5], LOW );

delay(200);

clear();

digitalWrite(rows[3], HIGH );

digitalWrite(cols[1], LOW );

digitalWrite(cols[4], LOW );

delay(200);

clear();

digitalWrite(rows[4], HIGH );

digitalWrite(cols[2], LOW );

digitalWrite(cols[3], LOW );

delay(200);

clear();

digitalWrite(rows[5], HIGH );

digitalWrite(cols[2], LOW );

digitalWrite(cols[3], LOW );

delay(200);

clear();

digitalWrite(rows[6], HIGH );

digitalWrite(cols[1], LOW );

digitalWrite(cols[4], LOW );

delay(200);

clear();

digitalWrite(rows[7], HIGH );

digitalWrite(cols[0], LOW );

digitalWrite(cols[5], LOW );

delay(200);

clear();

}

 

void correct() { // 정답이 맞았을 때 o를 출력하는 함수

digitalWrite(rows[2], HIGH );

digitalWrite(cols[2], LOW );

digitalWrite(cols[3], LOW );

delay(200);

clear();

digitalWrite(rows[3], HIGH );

digitalWrite(cols[1], LOW );

digitalWrite(cols[4], LOW );

delay(200);

clear();

digitalWrite(rows[4], HIGH );

digitalWrite(cols[0], LOW );

digitalWrite(cols[5], LOW );

delay(200);

clear();

digitalWrite(rows[5], HIGH );

digitalWrite(cols[0], LOW );

digitalWrite(cols[5], LOW );

delay(200);

clear();

digitalWrite(rows[6], HIGH );

digitalWrite(cols[1], LOW );

digitalWrite(cols[4], LOW );

delay(200);

clear();

digitalWrite(rows[7], HIGH );

digitalWrite(cols[2], LOW );

digitalWrite(cols[3], LOW );

delay(200);

clear();

}

 

 

void loop() {

Serial.print( " current stage : ") ;

Serial.println( stage , Dec) ;

Serial.print( " Point : ") ;

Serial.println( point , Dec) ;

clear() ;

ready();

 

 

for ( int i=0; i < stage ; i++) { // 단계에따라 문제로 출제할 숫자생성

LEDran[i] = (rand()) %9 ;

}

for ( int i=0 ; i< stage ; i++) { // 문제출제

LED( LEDran[i] ) ;

Serial.print( LEDran[i], DEC);

delay(100);

}

 

ready();

Serial.println (" " );

 

for ( int i = 0 ; i < stage ; i++ ) {

all();

if (irrecv.decode(&results)) { //사용자 입력을 받아 LED Matrix에 표시

input[i] = Decoder( results.value);

LED( input[i]);

delay(100);

clear();

Serial.print( input[i],DEC);

irrecv.resume();

}

}

 

all();

Serial.println ( " " );

 

for ( int i = 0; i < stage ; i++ ) { //사용자의 입력이 정답인지 검사

if ( LEDran [i] ! =input[i] ) result =1;

}

 

if (result ==0){ //정답이면 o를 출력

correct(); // 포인트 추가, 다음단계로 넘어감

point++;

 

stage++;

}

 

else{ //틀렸으면 x를 출력

incorrect();

}

 

result = 0;

}

 

 




'아두이노' 카테고리의 다른 글

PID제어기에의한 모터 제어  (0) 2017.06.11
도어록  (0) 2017.03.09
KM-757메뉴얼  (0) 2017.02.01
500W 서보모터   (0) 2017.02.01
부루투스  (0) 2017.02.01