제조공정
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
|
필요한 부품은 위의 그림과 같습니다. 전원이 공급되지 않은 Arduino로 시작하십시오. USB 케이블을 연결하지 마십시오. 나중에 프로그래밍하고 게임을 시도할 때 이 작업이 수행됩니다.
연결
긴 연결선을 사용하여 Arduino의 5V 신호를 브레드보드 상단의 빨간색 행의 맨 왼쪽에 연결합니다.
긴 연결선을 사용하여 GND 신호를 브레드보드 상단의 검은색(또는 일부 브레드보드의 경우 파란색) 행의 맨 왼쪽에 연결합니다.
LCD(Liquid Crystal Display) 모듈의 아래쪽에는 16핀 수 헤더가 있습니다. 이것을 그림과 같이 브레드보드에 꽂습니다. LCD에 전원을 공급하고 제어하는 모든 전자 신호는 이 헤더를 통과합니다.
이 핀은 (왼쪽에서 오른쪽으로):
<울>짧은 연결선을 사용하여 GND와 LED-(핀 1 및 16)를 상단의 검은색 줄에 연결합니다.
마찬가지로 짧은 연결선으로 VCC(핀 2)를 상단의 빨간색 줄에 연결합니다.
220Ω 저항기(적-적-갈색 띠)의 선 리드를 구부려 LED+와 브레드보드 상단의 빨간색 행 사이에 연결합니다.
더 긴 연결선을 사용하여 나머지 연결을 만드십시오.
<울>누름 버튼을 LCD 화면 왼쪽 어딘가에 연결하고 브레드보드 중앙을 따라 흐르는 채널을 가로지릅니다(위 그림 참조). 버튼의 상단 두 핀 중 하나를 짧은 연결 와이어를 사용하여 브레드보드 상단의 검은색 행에 연결합니다. 버튼 상단의 다른 핀을 Arduino의 2번 핀에 연결합니다.
섹션> <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">
#include섹션>#define PIN_BUTTON 2#define PIN_AUTOPLAY 1#define PIN_READWRITE 10#define PIN_CONTRAST 12#define SPRITE_RUN1 1#define SPRITE_RUN2 2#define SPRITE_JUMP 3#define SPRITE_JUMP 3#define SPRITE_UPPER // 사용 '.' # 머리에 대한 문자#define SPRITE_JUMP_LOWER 4#define SPRITE_TERRAIN_EMPTY ' ' // ' ' 문자를 사용합니다.#define SPRITE_TERRAIN_SOLID 5#define SPRITE_TERRAIN_SOLID_HORIZON_DEFINITE SPRITE_TERRAIN_SOLID_1화면의 위치 PODEfine HERRAIN_7#define_LEFT TERRAIN_EMPTY 0#define TERRAIN_LOWER_BLOCK 1#define TERRAIN_UPPER_BLOCK 2#define HERO_POSITION_OFF 0 // 영웅은 투명하지 않습니다.#define HERO_POSITION_RUN_LOWER_1 1 // 영웅은 아래쪽 행에서 실행 중입니다(포즈 1). / 점프 시작#define HERO_POSITION_JUMP_2 4 // 반올림#define HERO_POSITION_JUMP_3 5 // 상단 점프#define HERO_POSITION_JUMP_4 6 // 상단 점프#define HERO_POSITION_JUMP_5 7 // 점프 상단 HEROMP_6define 8 // 점프는 상단 행#define HERO_POSITION_JUMP_7 9 // 반쯤 내려감#define HERO_POSITION_JUMP_8 10 // 착지 예정#define HERO_POSITION_RUN_UPPER_1 11 // 영웅은 위쪽 행에서 실행 중입니다. (포즈 1)#define HERO_POSITION_RUN_UPPER_2 12 // (포즈 2)LiquidCrystal lcd(11, 9, 6, 5, 4, 3);static char TerrainUpper[TERRAIN_WIDTH + 1];static char TerrainLower [TERRAIN_WIDTH + 1];static bool buttonPushed =false;void initializeGraphics(){ static byte graphics[] ={ // 위치 1 실행 B01100, B01100, B00000, B01110, B11100, B01100, B10010, B1 위치 실행 B01100, B01100, B00000, B01100, B01100, B01100, B01100, B01110, // 점프 B01100, B01100, B00000, B11110, B01101, B11111, B10000, B00000, // 점프 낮은 B11110, B01101, B11111, B10000, B00000, B00000 , B00000, B00000, // 접지 B11111, B11111, B11111, B11111, B11111, B11111, B11111, B10, B10, B0 B0101, // 접지 오른쪽 B00011, B00011, B000010, B000010 B11000, B11000, B11000, B11000, B11000, B11000, B11000, }; 정수 나; // 문자 0을 사용하여 건너뛰면 lcd.print()를 사용하여 // 여러 문자를 빠르게 그릴 수 있습니다. for (i =0; i <7; ++i) { lcd.createChar(i + 1, &graphics[i * 8]); } for (i =0; i 9999) ? 5 :(점수> 999) ? 4 :(점수> 99) ? 3 :(점수> 9) ? 2:1; // 장면 지형 그리기Upper[TERRAIN_WIDTH] ='\0'; 지형낮음[TERRAIN_WIDTH] ='\0'; 문자 온도 =지형상단[16자리]; TerrainUpper[16자리] ='\0'; lcd.setCursor(0,0); lcd.print(지형상단); TerrainUpper[16자리] =온도; lcd.setCursor(0,1); lcd.print(지형 하강); lcd.setCursor(16 - 숫자, 0); lcd.print(점수); TerrainUpper[HERO_HORIZONTAL_POSITION] =upperSave; TerrainLower[HERO_HORIZONTAL_POSITION] =lowerSave; return collide;}// 버튼 푸시를 인터럽트로 처리합니다. buttonPush() { buttonPushed =true;}void setup(){ pinMode(PIN_READWRITE, OUTPUT); 디지털 쓰기(PIN_READWRITE, 낮음); 핀모드(PIN_CONTRAST, 출력); 디지털 쓰기(PIN_CONTRAST, LOW); 핀모드(PIN_BUTTON, 입력); 디지털 쓰기(PIN_BUTTON, HIGH); 핀모드(PIN_AUTOPLAY, 출력); 디지털 쓰기(PIN_AUTOPLAY, 높음); // 디지털 핀 2는 인터럽트 0에 매핑됩니다. attachInterrupt(0/*PIN_BUTTON*/, buttonPush, FALLING); 초기화 그래픽(); lcd.begin(16, 2);}무효 루프(){ 정적 바이트 heroPos =HERO_POSITION_RUN_LOWER_1; 정적 바이트 newTerrainType =TERRAIN_EMPTY; 정적 바이트 newTerrainDuration =1; 정적 부울 재생 =false; 정적 부울 깜박임 =거짓; 정적 unsigned int 거리 =0; if (!playing) { drawHero((blink) ? HERO_POSITION_OFF :heroPos, TerrainUpper, TerrainLower, 거리>> 3); if (깜박임) { lcd.setCursor(0,0); lcd.print("시작을 누르세요"); } 지연(250); 깜박임 =!깜박임; if (buttonPushed) { initializeGraphics(); 영웅 위치 =HERO_POSITION_RUN_LOWER_1; 재생 =사실; 버튼푸시 =거짓; 거리 =0; } 반품; } // 지형을 왼쪽으로 이동 AdvanceTerrain(terrainLower, newTerrainType ==TERRAIN_LOWER_BLOCK ? SPRITE_TERRAIN_SOLID :SPRITE_TERRAIN_EMPTY); AdvanceTerrain(terrainUpper, newTerrainType ==TERRAIN_UPPER_BLOCK ? SPRITE_TERRAIN_SOLID :SPRITE_TERRAIN_EMPTY); // 오른쪽에 들어갈 새 지형을 만듭니다. if (--newTerrainDuration ==0) { if (newTerrainType ==TERRAIN_EMPTY) { newTerrainType =(random(3) ==0) ? TERRAIN_UPPER_BLOCK :TERRAIN_LOWER_BLOCK; newTerrainDuration =2 + random(10); } else { 새로운 지형 유형 =TERRAIN_EMPTY; newTerrainDuration =10 + random(10); } } if (buttonPushed) { if (heroPos <=HERO_POSITION_RUN_LOWER_2) heroPos =HERO_POSITION_JUMP_1; 버튼푸시 =거짓; } if (drawHero(heroPos, TerrainUpper, TerrainLower, 거리>> 3)) { 재생 =거짓; // 영웅이 무언가와 충돌했습니다. 너무 나빠. } else { if (heroPos ==HERO_POSITION_RUN_LOWER_2 || heroPos ==HERO_POSITION_JUMP_8) { heroPos =HERO_POSITION_RUN_LOWER_1; } else if ((heroPos>=HERO_POSITION_JUMP_3 &&heroPos <=HERO_POSITION_JUMP_5) &&TerrainLower[HERO_HORIZONTAL_POSITION] !=SPRITE_TERRAIN_EMPTY) { heroPos =HERO_POSITION_RUN_UPPER_1 } else if (heroPos>=HERO_POSITION_RUN_UPPER_1 &&TerrainLower[HERO_HORIZONTAL_POSITION] ==SPRITE_TERRAIN_EMPTY) { heroPos =HERO_POSITION_JUMP_5; } else if (heroPos ==HERO_POSITION_RUN_UPPER_2) { heroPos =HERO_POSITION_RUN_UPPER_1; } else { ++heroPos; } ++거리; digitalWrite(PIN_AUTOPLAY, 지형낮음[HERO_HORIZONTAL_POSITION + 2] ==SPRITE_TERRAIN_EMPTY ? HIGH :LOW); } 지연(100);}
문서가 없습니다.
섹션>제조공정
구성품 및 소모품 Arduino UNO × 1 SG90 마이크로 서보 모터 × 2 브레드보드(일반) × 1 모듈로 조이스틱 × 1 점퍼 와이어(일반) × 1 필요한 도구 및 기계 뜨거운 글루건(일반) 날카로운 칼 앱 및 온라인 서비스 Arduino IDE 이 프로젝트 정보 정말 쉽고 재미있는 Arduino 제어 대리석 미로 미로 보드 게임을
구성품 및 소모품 Arduino Mega 2560 또는 아두이노 우노!! 코드에서 DUCK_PIN을 3으로 변경하고 uno를 사용하려면 그에 따라 다시 연결하세요. × 1 점퍼 와이어(일반) +- 20개 필요 × 20 SparkFun 푸시버튼 스위치 12mm × 2 저항 10k 옴 × 2 Adafruit Standard LCD - 파란색 바탕에 16x2 흰색 × 1 회전 전위차계, 10kohm 기존 전위차계 × 1