산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

Arduino LCD 비디오 게임

구성품 및 소모품

브레드보드(일반)
× 1
점퍼 와이어(일반)
× 1
Arduino UNO
× 1
USB-A-B 케이블
× 1
회전 전위차계(일반)
× 1
아날로그 조이스틱(일반)
× 1
부저
× 1
Adafruit Standard LCD - 파란색 바탕에 16x2 흰색
× 1

앱 및 온라인 서비스

Arduino IDE

이 프로젝트 정보

이것은 인터넷에서 찾은 비디오 게임을 기반으로 한 프로젝트입니다. 이 프로젝트에는 캐릭터가 장애물을 뛰어 넘거나 충돌할 때 신호음을 내는 부저와 같은 많은 기능이 있습니다. 또한 비디오 게임 느낌을 주기 위해 조이스틱(버튼이 있어야 함)이 있습니다. 조이스틱의 버튼을 눌러 점프하기만 하면 되기 때문입니다. 이 비디오 게임은 당신이 추측한 것입니다! (한 남자가 달리고 장애물을 뛰어 넘고 피합니다.) 이 게임의 목적은 최대한 많은 점수를 얻는 것입니다(코스에 있고 장애물을 피하는 1초마다 1점).

<섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">

코드

<울>
  • 코드
  • 코드Arduino
    #include #define PIN_BUTTON 2#define PIN_AUTOPLAY 1#define PIN_BUZZER 8#define PIN_READWRITE 10#define PIN_CONTRAST 12#define SPRITE_RUN1 1#define SPRITE_RUN2 2#define SPRITE_JU' // 사용 '.' # 머리에 대한 문자#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, 높음); pinMode(PIN_BUZZER,OUTPUT);//버저 핀을 출력으로 초기화 digitalWrite(PIN_BUZZER, LOW); // 디지털 핀 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; 버튼푸시 =거짓; 디지털 쓰기(PIN_BUZZER, 높음); } if (drawHero(heroPos, TerrainUpper, TerrainLower, 거리>> 3)) { 재생 =거짓; // 영웅이 무언가와 충돌했습니다. 너무 나빠. for (int i =0; i <=2; i++) { digitalWrite(PIN_BUZZER, HIGH); 지연(100); 디지털 쓰기(PIN_BUZZER, LOW); 지연(100); } } 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); 디지털 쓰기(PIN_BUZZER,LOW);}

    회로도

    표지 이미지에 모든 배선이 표시되지 않았으므로 모든 부품을 함께 연결하는 방법을 보여줍니다.

    제조공정

    1. TinyML-Language Detector 기반 Edge Impulse 및 Arduino
    2. MPU-6050을 사용한 Arduino 자이로스코프 게임
    3. Arduino 디지털 주사위
    4. DIY 37 LED 룰렛 게임
    5. Arduino 게임 컨트롤러
    6. 조이스틱 게임
    7. 나를 찾기
    8. 픽셀 체이서 게임
    9. 128x64 LCD 디스플레이의 DIY 10Hz-50kHz 오실로스코프
    10. Arduino Audio Reactive Desk Light