HBE-MCU-All in One 에서 '블럭 피하기 게임'을 구현하였고, 그를 동영상 촬영하였습니다.






블럭 피하기 게임(부제: 미니언 러쉬)


사용한 모듈: 2x16 Text LCD, 2Color DotMatrix, Push Button, Piezo


1) 밑에 초록색 바가 움직이게 하여 내려오는 빨간색 블럭을 피하게 함. 

2) 초록색 바에는 '점프' 기능이 있음. 점프 기능을 이용해서 빨간색 블럭을 피하는 것도 가능함.

(점프하고 있는 중이면 주황색으로 바뀌게 됨. 실제로 초록색+빨간색 = 주황색이 되므로, 그냥 점프하는 모습도 주황색으로 보여지고, 빨간색 블럭들을 넘어서 점프하고 있는 모습도 주황색으로 보이게 됨.)

3) 시간이 지남에 따라 레벨이 오르고 점수도 오르게 됨. 레벨이 오를 수록 내려오는 빨간 블럭의 속도나 숫자도 더 많아짐.

4) 빨간 블럭과 부딪혀서 죽게 되는 경우, 2Color DotMatrix 모듈이 전체 빨간색으로 점멸하게 되며 실패 음악이 나옴.

5) 중간에 Pause를 누르게 되면 2Color DotMatrix 모듈이 전체 주황색으로 표시됨. 


※ 특이사항


1) 버튼들을 누르거나 특정 액션에 대해서 소리를 낼 수 있도록 Piezo 모듈을 사용함.

2) 블럭 피하기 게임에서 '점프' 기능을 구현.


이전에 동영상으로 소개를 드린 비밀번호 시스템 만들기 소스 코드를 공개합니다.

EEPROM을 사용하여 비밀번호를 저장하고,

비밀번호를 확인하는 간단한 MCU 시스템을 만들게 한 c 소스 코드입니다.


#include <avr/io.h> #include <avr/interrupt.h> #include <avr/eeprom.h> // for eeprom #include "EEPROM.h" int main(void) { unsigned char password[4]; unsigned char input[4]; unsigned char i=0; int check = 0; int step = 0; int count = 0; DDRB = 0xFF; DDRG = 0xFF; DDRF = 0x00; DDRE = 0xFF; PORTB = 0x00; PORTG = 0xFF; Init_Timer(); sei(); // 제일 처음에는 FND에 아무것도 표시되지 않는다. digit3=digit2=digit1=digit0=16; while(1) { if(KeyPressed) { KeyPressed = FALSE; switch(key) { case 0x0A: // * 키 // 비밀번호 입력 부분. step = 2; count = 0; digit3=digit2=digit1=digit0=3; // 3333 표시. break; case 0x0C: // # 키 // 비밀번호 설정 부분. step = 1; // 비밀번호 설정 시작! if(check == 0) { digit3=digit2=digit1=digit0=0; // 0000 표시 check = 1; // check가 1이어야 입력 받기 가능. } // 비밀번호 설정이 종료. else { digit3=digit2=digit1=digit0=2; // 2222 표시. /* Write password to eeprom */ write_eeprom(0, password[0]); write_eeprom(1, password[1]); write_eeprom(2, password[2]); write_eeprom(3, password[3]); check = 0; } break; default: // *,# 키 말고 일반 숫자키를 누르는 경우 if(step == 1 && check==1) // 비밀번호 설정시 입력 { password[3] = password[2]; password[2] = password[1]; password[1] = password[0]; password[0] = key; digit3 = digit2; digit2 = digit1; digit1 = digit0; digit0 = 1; } else if(step == 2) // 비밀번호 체크시 입력 { count ++; input[3] = input[2]; input[2] = input[1]; input[1] = input[0]; input[0] = key; if(count == 4) // 4번 눌렀을 때, 비밀번호 체크. { count = 0; // EEPROM에 저장된 비밀번호를 불러옴. for(i=0; i<4; i++) password[i] = read_eeprom(i); /* 이 strcmp는 제가 직접 만든 함수입니다. * 같으면 TRUE를 반환 합니다. */ if(strcmp(input, password)) // 문을 여는 데 성공. digit3=digit2=digit1=digit0=7; // 7777 표시. else // 문을 여는 데 실패. digit3=digit2=digit1=digit0=4; // 4444 표시. } } break; } // switch(key) end } // if(KeyPressed) end } // Infinite loop end. }




HBE-MCU-All in One 키트에는 'Push Button'과 'LED' 에 대한 포트가 있습니다.

이번 포스팅에서는 Push Button 을 누를 때마다 LED가 다양하게 제어되는 형태의 프로그램에 대한 코드를

설명하려고 합니다. 각각 Push Button 에 대해서 LED는 다음과 같은 반응을 보일 수 있습니다.


그리고 소스 코드는 다음과 같습니다.


#include <avr/io.h> void my_delay(unsigned long x) { while(x--); } int main(void) { int i; unsigned char state, tmp; /* Push Button - 포트 D */ DDRD = 0x00; // 입력 /* LED - 포트 B */ DDRB = 0xFF; // 출력 while(1) { state = PIND; switch(state) { case 0x01: // 0번 버튼 PORTB = 0xFF; // 모든 LED가 켜진다. break; case 0x02: // 1번 버튼 PORTB = 0xAA; // 짝수번째 LED가 켜진다. break; case 0x04: // 2번 버튼 PORTB = 0x55; // 홀수번째 LED가 켜진다. break; case 0x08: // 3번 버튼 // 다른 스위치가 눌릴때까지 모든 LED를 깜빡인다. while(1) { PORTB = 0x00; // 모든 LED 꺼진다. my_delay(50000); if(PIND != 0x08 && PIND != 0x00) // 다른 스위치가 눌리는지 확인. break; PORTB = 0xFF; // 모든 LED 켜진다. my_delay(50000); if(PIND != 0x08 && PIND != 0x000) break; } break; case 0x10: // 4번 버튼 // 다른 스위치가 눌릴때까지 LED 1개 켜서 좌로 이동 while(1) { tmp = 128; for(i=0; i<8; i++) { PORTB = tmp; tmp = tmp >> 1; my_delay(50000); if(PIND != 0x10 && PIND != 0x00)// 다른 스위치가 눌리는지 확인. goto Finish1; } PORTB = 0x00; } Finish1: break; case 0x20: // 5번 버튼 // 다른 스위치가 눌릴때까지 LED 1개 켜서 좌로 이동 while(1) { tmp = 1; for(i=0; i<8; i++) { PORTB = tmp; tmp = tmp << 1; my_delay(50000); if(PIND != 0x20 && PIND != 0x00)// 다른 스위치가 눌리는지 확인. goto Finish2; } PORTB = 0x00; } Finish2: break; case 0x40: // 6번 버튼 PORTB = 0xF0; // 상위 4비트(LED4~LED7)만 켠다. break; case 0x80: // 7번 버튼 PORTB = 0x0F; // 하위 4비트(LED0~LED3)만 켠다. break; default: // 아무런 버튼도 누르지 않은 경우. PORTB = 0x00; // 모든 LED가 꺼진다. } } }


다음은 각각 결과에 대한 사진입니다.



▲ 0번 버튼을 누른 경우, LED가 전부 켜진다.


▲ 1번 버튼을 누른 경우, LED가 짝수 번째만 켜진다.


▲ 2번 버튼을 누른 경우, LED가 홀수 번째만 켜진다.


▲ 3번 버튼을 누른 경우, LED가 깜빡인다.


▲ 4번 버튼을 누른 경우, LED가 1개씩만 좌로 이동한다.


▲ 5번 버튼을 누른 경우, LED가 1개씩만 우로 이동한다.


▲ 6번 버튼을 누른 경우, LED가 상위 4비트(LED4~LED7)만 켜진다.


▲ 7번 버튼을 누른 경우, LED가 하위 4비트(LED0~LED3)만 켜진다.





1. 제품 개요

8-bit 마이크로컨트롤러(MCU)는 현 산업계에서 가장 많이 사용되는 프로세서 중 가운데 하나이며, 이를 통해 다양한 주변 장치들을 제어할 수 있는 많은 종류의 제품이 개발되고 있습니다. 8-bit 기반의 MCU에서 지원하는 다양한 기능을 여러 주변장치를 통해 습득하고 이를 응용하는 기술은 하드웨어 및 소프트웨어 개발자의 기본 지식입니다. HBE-MCU-AllinOne은 20종 이상의 주변장치를 하나의 시스템을 통해 실험실습할 수 있도록 구성하여 마이크로콘트롤러의 다양한 기능과 활용 방법을 습득할 수 있습니다. 또한 다양한 옵션 모듈을 지원하여 기본 구성 이외의 기능들을 쉽게 추가할 수 있으며, 이를 통하여 프로젝트 실습 및 캡스톤 설계 교과목도 운용할 수 있습니다. HBE-MCU-AllinOne은 최근 MCU 분야에서 적용이 확산되고 있는 32-bit 기반 Cortex-M3 마이크로콘트롤러를 제공하여 상위 레벨의 교육 환경을 구축할 수 있습니다.

2. 제품 트징

● 4종(ATmega128, 89C51ED2, PIC18F6722, STM32F103)의 MCU 구성

● 착탈 가능한 커넥터 구조의 MCU 모듈 설계에 따른 다양한 MCU의 실험실습이 가능

● MCU 모듈과 기능 모듈을 다양하게 연결할 수 있는 커넥터 구조 제공

● MCU 학습 및 설계의 효율성을 향상시킬 수 있는 신호 분석 모듈(주파수 분석) 제공

● 다양한 입력 스위치 및 출력 표시 장치 제공

● USN 및 센서의 교육을 위한 다양한 센서 장착

● 응용 실험실습 및 프로젝트 수업을 위한 옵션모듈 장착 가능(어댑터 보드)

● 응용 실험실습에 필요한 다양한 예제 및 프로그램 소스 제공

● 기초 수준의 프로세서 교육에서 응용 제품 설계 수준의 교육 환경 지원

● 마이크로컨트롤러 종류별 4종의 표준 교재 및 예제 제공


3. 구성 및 명칭

HBE-MCU-AllinOne은 4종류의 마이크로컨트롤러(MCU 모듈) 및 주변장치들을 실험실습할 수 있는 단일보드(One Board) 형태의 MCU 교육 플렛폼입니다. HBE-MCU-AllinOne은 MCU 교육에 필수적인 최신 주변장치들(예: OLED 등)로 구성 되어 있으며, 확장 포트를 통해 다양한 옵션 모듈을 실험할 수 있는 유연한 구조를 가지고 있습니다.


출처: http://www.hanback.co.kr/boards/view/newproduct/9922/page:2

+ Recent posts