한번의 광고 클릭이 저에게 도움을 줍니다. 감사합니다.
제일 먼저, 화면에 무언가 출력이 되어야하니, OLED에 출력하는 부분에 대해 간략히 설명한다.
OLED의 전체 사용법은 주변의 다양한 글들을 찾아서 보면되겠고, 여기서는 테트리스를 만들 때 사용된 코드를 위주로 설명을 한다.
OLED에 출력하기 위해서 간단하게 "Universal 8bit Graphics Library, http://code.google.com/p/u8glib/"를 사용하였다. u8glib를 사용하면 아주 간단하게 화면에 점, 선, 도형 등을 그려 넣을 수 있다. 아두이노 -> 스케치 -> 라이브러리 포함하기 ->라이브러리 관리 메뉴에서 u8glib 을 찾아서 설치를 하면 된다. u8glib 만 설치하면된다. 아래의 사진의 u8g2는 꼭 해야될 필요없다.
사용할 기본 코드는 다음과 같다.
#include <U8glib.h> // 헤더를 포함하고, // 적용한 LCD가 1306 이어서 이것으로 설정함. // 다른 LCD면 다른 값으로 변경 필요함. 변경될 사항은 glib의 예제 또는 설명 자료에서 쉽게 변경 가능함 // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11) // U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE); // 화면에 판을 전체 표시한다. // 속도 고려 없이 전체를 그림 그리는 상황을 만들었다. void draw_board() { char i, j; char temp; temp = u8g.getHeight()-BOARD_HEIGHT; u8g.drawLine(0, u8g.getHeight()-1, 0, temp); u8g.drawLine(0, u8g.getHeight()-1, BOARD_WIDTH, u8g.getHeight()-1); u8g.drawLine(BOARD_WIDTH, u8g.getHeight()-1, BOARD_WIDTH, temp); for (j = 0; j < BOARD_ROW_CNT-1; j++) { for (i = 0; i < BOARD_COLUMN_CNT; i++) { switch (board[j][i+1]) { case 1: u8g.drawBox((i)*6+2, j*6+temp-1, 5, 5); break; } } } } void setup(void) { u8g.setRot90(); u8g.setFont(u8g_font_6x10); u8g.setFontPosTop(); } void loop() { // 화면에 출력... 이 부분이 제일 쉽게 구현한 곳... ^^ // 기능 구현 측면이라서 기존 Default 기능을 그대로 적었다. // 화면에 출력하는 부분을 좀 개선하면 현재 속도 보다 훨씬 빠른 10여배 이상.... // 화면 출력 속도를 보이게 할 수 있을 듯..... 물론 감이지만... ^^ u8g.firstPage(); do { draw_board(); } while (u8g.nextPage()); }
위의 코드는 기존에 만들어둔 테트리스 코드에서 u8glib 부분만 뽑아서 온 것인다. 이것을 실행하면, OLED화면에서 테트리스의 맨 바깥쪽 박스를 그려주는 기능을 한다. 선이 그려지면 그 다음은 모두 알고리즘으로 처리를 할 부분인지라.... 아니, 버튼 처리하는 것이 있구나.... 아직 추가적인 설명이 더 필요한 부분이 있겠다.
다음은 조이스틱에서 키 입력을 받는 것에 대해 알아보자. 키보드 입력은 단순히 입력있다 없다고 구분하려면 좀 더 쉽게되지만, 짧게 누른 버튼, 길게누르는 버튼에 따라서 작동을 다르게 하도록 하려면 작은 코딩이 들어가야 한다. 마찬가지 왼쪽 오른쪽으로 조이스틱을 옮길 때도 타이밍에 따라 다르게 작동해야 한다.
'아두이노 > 테트리스[완료]' 카테고리의 다른 글
(최종) 아두이노에서 테트리스 게임을 만들어보자(5) (0) | 2020.02.09 |
---|---|
(4) 아두이노에서 초소형 테트리스를 만들어보자(4) (0) | 2020.02.09 |
(3) 아두이노에서 초소형 테트리스를 만들어보자(3) (0) | 2020.02.02 |
(1) 아두이노에서 초소형 테트리스를 만들어 보자 (0) | 2020.02.02 |