일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- c++
- ansible install
- 백준
- C언어
- 스트림셋
- 코딩
- mysql on docker
- 도커 mysql
- 앤서블 설치
- c
- 파이썬
- 도커 elk
- 스트림셋이란?
- 알고리즘
- 데이터베이스
- 푸시푸시
- mysql docker
- 클라우드
- 도커 시작하기
- streamsets 강의
- 자바
- elk stack
- 데이트
- docker
- nvidia docker
- java
- python
- MySQL
- 도커
- 정보처리기사
- Today
- Total
리그캣의 개발놀이터
아두이노로 만드는 리듬게임. 본문
아두이노로 만드는 리듬게임.
선택이유
식상한 아이디어의 아두이노 활용보다. 좀 더 재밌고, 인터넷에도 구현방법이나 소스가 없는
아두이노 활용 머신을 만들고 싶었다. 그러던 중 카멜레온 LED를 이용한 리듬게임을 한번
도전해 보기로 하였다.(검색을 해서 소스나, 하드웨어 구현방법이 나와있지 않아 마음에 들었음.)
꾀나 노가다 성 작업이 예상되지만 즐겁게 프로젝트를 임할 수 있을 것 같다.
구현방법
아두이노를 이용하여 오락기기를 만든다. OLED를 통해 메뉴선택 및 난이도를 제어하고 해당
게임을 선택하게 될시 .MP3 파일이 play, 스피커로 음향이 out put. 그에 따라 박자에 맞추어
LED가 아래로 한칸 씩 빠른 속도로 내려오게 된다. 그 LED가 해당 위치 +- 1 안에 들어왔을 때
플레이어가 해당하는 버튼을 클릭하게 되면 임펙트와 함께 점수가 +되며 사라진다.
재료
총 구입 가격.
스피커 모듈 8천원
카멜레온 led 6만원
0.96인치 led 1만원
미니 mp3 플레이어 모듈 6500원
= 84500원.
구현이미지
실제 리듬게임 화면
노드의 역할은 jled 즉 카멜레온 led가 수행할 것. jled는 각 led를 제어할수있으며 빨주노촉파남보의 색을 나타낼 수 있고, 그것을 이용하여 빈공간은 불빛을 없애거나 특정 색을 나타내며 노드는 초록색으로 구현할 예정 . 일반 게임에서 데이터 값이 이동하면서 화면에 해당 이미지를 뿌려주는 것과 같이. 초록색 led는 한칸씩 아래로 딜레이를 주어 이동할 것이며 발판은 파란색이나 특정색상으로 고정을 시킬 예정이다. 많은 led를 제어하여야 함으로 힘든작업이 예상되어짐.
노래의 선택과 화면 진행을 알려줄 0.96인치 led. 게임이 끝나고 스코어 표시 기능을 넣을 예정이다.
마이크로 sd카드에있는 mp3파일을 dfplayer모듈을 사용하고 이것을 스피커 모듈로 출력할 예정이다. 현재 음악이 나오는 것은 성공했으나. 코딩 문제인지 모듈문제인지 자꾸 음악 출력 쪽에서 오류가나오고 있는 상황이다. 그것 때문에 시간소요가 많이 될 것으로 예상된다.
키보드 역할을 할 push버튼 5개. 음악 시작과 노드가 패드 위치에왔을 때 클릭으로 게임 컨트롤에 중요한 역할을 한다. 처음엔 아두이노 나노나 미니를 사용할 예정이였으나 다루어야 할 데이터(신호를 꽂을 공간)가 많아 아두이노 우노를 사용하기로 하였다.
소스코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 | //OLED 사용위한 헤더함수 #include <SPI.h> #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> //NEOPIXEL 사용위한 헤더함수 #include <Adafruit_NeoPixel.h> //네오픽셀 라이브러리(카멜레온led 사용) #include "U8glib.h" //Oled사용 라이브러리. //mp3재생하귀위한 헤더함수. #include <SoftwareSerial.h> #include <DFPlayer_Mini_Mp3.h> //OLED 정의. #define OLED_MOSI 9 #define OLED_CLK 10 #define OLED_DC 11 #define OLED_CS 12 #define OLED_RESET 13 Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS); //카멜레온 LED 정의. #define ALED 2 //카멜레온 led1 #define BLED 3 //카멜레온 led2 #define BLED 4 //카멜레온 led3 #define BLED 5 //카멜레온 led4 #define ELED 6 //카멜레온 led5 #define ARROWNUM 13 //화살표 LED 숫자. Adafruit_NeoPixel aled = Adafruit_NeoPixel(ARROWNUM, ALED, NEO_GRB + NEO_KHZ800);// 네오픽셀 Adafruit_NeoPixel eled = Adafruit_NeoPixel(ARROWNUM, ELED, NEO_GRB + NEO_KHZ800);// 네오픽셀 //변수 설정 //색상 변수 설정 #define RED 0x00ff0000 // 빨강 #define GREEN 0x0000ff00 // 녹색 #define BLUE 0x000000ff // 파랑 #define YELLOW 0x00ffff00 // 노랑 #define SKYBLUE 0x0073d1f7 // 하늘색 #define PINK 0x00f69fa8 // 분홍 #define BLACK 0x00000000 // 검정(OFF) #define BROWN 0x0088563f // 갈색 #define ORANGE 0x00f3753a // 오렌지색 #define DEEPBLUE 0x002a365c // 남색 U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE); //OLED 사용하기 위해서 void setup() { //mp3 제어 Serial.begin (9600); mp3_set_serial (Serial); // DFPlayer-mini mp3 module 시리얼 세팅 delay(1); // 볼륨값 적용을 위한 delay mp3_set_volume (20); // 볼륨조절 값 0~30 //led 화면 제어 aled.begin();//aled 시작 eled.begin();//eled 시작 aled.show(); eled.show(); //첫 화면 제어 display.begin(SSD1306_SWITCHCAPVCC); } void loop() { startWindow(); //첫실행 화면 및 배경음악 설정. acolorWipeFT(0,ARROWNUM,GREEN,0); ecolorWipeFT(0,ARROWNUM,GREEN,0); while(1){ mp3_next (); //노래출력 } } void startWindow(void){ mp3_next (); //노래출력 display.clearDisplay();//화면 초기화 display.setTextSize(1);//글자 사이즈 설정 display.setTextColor(WHITE);//글자 색상 설정 display.setCursor(0,0);//글자가 표시될 위치 설정 display.println("Rhythm Power");//출력할 문자 설정 display.display();//화면에 출력 delay(1000); //글자사이즈나, 색상 등을 설정하지않으면 이전 상태를 유지합니다. display.setCursor(0,10);//커서 위치 변경 display.println("Kwak's Game");//글자 출력 display.display();//화면에 출력 delay(1000); display.setCursor(0,20); display.println("Makers");//글자 출력 display.display();//화면에 출력 delay(1000); display.startscrollright(0x0, 0xFF);//화면을 오른쪽으로 밀어냅니다. delay(3000); display.stopscroll();//스크롤 멈춤. display.clearDisplay(); display.invertDisplay(true);//배경 색칠 delay(1000); display.invertDisplay(false);//배경 색칠 없앰 delay(1000); display.clearDisplay(); testscrolltext();//MAKERS SCROLL delay(1000); display.clearDisplay(); display.setCursor(0,0);//글자가 표시될 위치 설정 display.println("MUSIC1 <-");//출력할 문자 설정 display.setCursor(0,12);//글자가 표시될 위치 설정 display.println("MUSIC2");//출력할 문자 설정 display.display();//화면에 출력 } void testscrolltext(void) { //MAKERS SCROLL 출력 display.setTextSize(2); display.setTextColor(WHITE); display.setCursor(10,0); display.clearDisplay(); display.println("MAKERS"); display.display(); display.startscrollright(0x00, 0x0F); delay(2000); display.stopscroll(); delay(1000); display.startscrollleft(0x00, 0x0F); delay(2000); display.stopscroll(); delay(1000); display.startscrolldiagright(0x00, 0x07); delay(2000); display.startscrolldiagleft(0x00, 0x07); delay(2000); display.stopscroll(); } void acolorWipeFT(uint16_t from, uint16_t to, uint32_t color, uint16_t wait) //aled 색상 전체 표시 { uint16_t i; for (i=from; i<=to; i++) // 원래 범위가 (0~끝)인 것을 (from~to)로 수정 { aled.setPixelColor(i, color); aled.show(); delay(wait); } } void ecolorWipeFT(uint16_t from, uint16_t to, uint32_t color, uint16_t wait) //eled 색상 전체 표시 { uint16_t i; for (i=from; i<=to; i++) // 원래 범위가 (0~끝)인 것을 (from~to)로 수정 { eled.setPixelColor(i, color); eled.show(); delay(wait); } } | cs |
'팀 활동 > 프로젝트' 카테고리의 다른 글
축구 매칭 웹 페이지 만들기 - NEEDS 조사 (0) | 2018.01.25 |
---|---|
롯데 스펙태클 프로그래밍 직무 시험. (0) | 2018.01.25 |
XML을 이용한 개인 시간표 게시판 (0) | 2018.01.22 |
c언어 러쉬아워(RushHour) 텀 프로젝트 최종보고서 2 (0) | 2018.01.21 |
c언어 러쉬아워(RushHour) 텀 프로젝트 최종보고서 1 (0) | 2018.01.21 |