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) 블럭 피하기 게임에서 '점프' 기능을 구현.




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)만 켜진다.


#include <avr/io.h>

void my_delay(unsigned long x)		// 시간 딜레이 함수.
{
	while(--x);
}

// 포트 B 8개는 LED0~7까지,
// 포트 D 8개는 LED8~15까지 연결한 상태입니다.
int main(void){

	int i;
	unsigned char tmp;
	
	DDRB = 0xFF;
	DDRD = 0xFF;

	while(1){

		tmp=1;
		/* [포트 B] LED 윗 줄(LED0~LED7)에 대한 반복문 */
		for(i=0;i<8;i++)
		{	
			PORTB = tmp;
			tmp = tmp << 1;
			my_delay(500000);
		}
		PORTB = 0x00;		// LED7 끄기 위함.

		/* [포트 D] LED 아랫 줄(LED8~LED15)에 대한 반복문 */
		tmp=1;
		for(i=0;i<8;i++)
		{	
			PORTD = tmp;
			tmp = tmp << 1;
			my_delay(500000);
		}
		PORTD = 0x00;		// LED15 끄기 위함.
	}
	return 0;
}


위 소스 코드는 HBE-MCU-AllinOne 보드에 있는 LED 16개 (LED0~LED15) 를 순차적으로 켤 수 있도록 만든 코드입니다. 크게 어려운 부분이 없으므로 설명은 생략하겠습니다.



▲ LED 포트가 하나씩 불이 들어오는 모습


각 LED 포트 하나씩 불들어오는 거 다 찍었으면 더 예뻤을 텐데 시간이 없었네요 ㅎㅎㅎ;;;


p.s 궁금한 점 있으면 댓글이나 이메일 보내주시면 감사하겠습니다 ^^ :)




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