工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

LCDによるArduinoゲーム

コンポーネントと消耗品

>
Arduino UNO
× 1
AdafruitRGBバックライトLCD-16x2
× 1
ブレッドボード(汎用)
× 1
抵抗220オーム
× 1
SparkFunプッシュボタンスイッチ12mm
× 1
ジャンパー線(汎用)
× 1
USB-AからBへのケーブル
× 1

アプリとオンラインサービス

>
Arduino IDE

このプロジェクトについて

<図>

必要な部品は上の写真に示されています。電源が入っていないArduinoから始めます。 USBケーブルを差し込まないでください。これは、後のステップでプログラムしてゲームを試すときに発生します。

接続

長いフックアップワイヤーを使用して、Arduinoの5V信号をブレッドボード上部の赤い列の左端に接続します。

長いフックアップワイヤを使用して、ブレッドボードの上部にある黒(または一部のブレッドボードでは青)の行の左端にGND信号を接続します。

LCD(Liquid Crystal Display)モジュールには、下側に16ピンのオスヘッダーがあります。写真のようにこれをブレッドボードに差し込みます。 LCDに電力を供給して制御するすべての電子信号は、このヘッダーを通過します。

これらのピンは(左から右へ):

  • GND-電源グランド信号
  • VCC-正の電力信号
  • V0-コントラスト調整
  • RS-レジスタ選択
  • R / W-読み取り/書き込み選択
  • E-操作イネーブル信号
  • DB0-データビット0(ここでは使用されません)
  • DB1-データビット1(ここでは使用されません)
  • DB2-データビット2(ここでは使用されません)
  • DB3-データビット3(ここでは使用されません)
  • DB4-データビット4
  • DB5-データビット5
  • DB6-データビット6
  • DB7-データビット7
  • LED +-バックライトLEDポジティブ
  • LED--バックライトLEDネガティブ

短いフックアップワイヤを使用して、GNDとLED-(ピン1と16)を上部の黒い列に接続します。

同様に、VCC(ピン2)を短いフックアップワイヤで上部の赤い列に接続します。

220Ω抵抗器のリード線(赤-赤-茶色の帯)を曲げて、LED +とブレッドボード上部の赤い列の間に接続します。

残りの接続を行うには、より長いフックアップワイヤを使用します。

  • DB7をArduinoピン3に接続します
  • DB6をArduinoピン4に接続します
  • DB5をArduinoピン5に接続します
  • DB4をArduinoピン6に接続します
  • EをArduinoピン9に接続します
  • R / WをArduinoピン10(またはブレッドボード上部の黒い列)に接続します
  • RSをArduinoピン11に接続します
  • V0をArduinoピン12(またはブレッドボード上部の黒い列)に接続します

ブレッドボードの中央に沿って走るチャネルにまたがって、LCD画面の左側のどこかにプッシュボタンを差し込みます(上の図を参照)。短いフックアップワイヤーを使用して、ボタンの上部の2つのピンの1つをブレッドボードの上部にある黒い列に接続します。ボタンの上部にあるもう一方のピンをArduinoのピン2に接続します。

<図>

<図>

コード

  • LCD_Game.ino
LCD_Game.ino Arduino
 #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_UPPER '。' // 使用 '。'頭の文字#defineSPRITE_JUMP_LOWER4#define SPRITE_TERRAIN_EMPTY '' //ユーザー ''文字#defineSPRITE_TERRAIN_SOLID 5#define SPRITE_TERRAIN_SOLID_RIGHT 6#define SPRITE_TERRAIN_SOLID_LEFT 7#define SPRITE_TERRAIN_SOLID_LEFT 7#define HERO_HORIZ TERRAIN_EMPTY 0#define TERRAIN_LOWER_BLOCK 1#define TERRAIN_UPPER_BLOCK 2#define HERO_POSITION_OFF 0 //ヒーローは見えない#defineHERO_POSITION_RUN_LOWER_1 1 //ヒーローは下の行で実行されています(ポーズ1)#define HERO_POSITION_RUN_LOWER_2 2 //(ポーズ/ジャンプの開始#define HERO_POSITION_JUMP_2 4 //途中まで#defineHERO_POSITION_JUMP_3 5 //ジャンプは上段にあります#defineHERO_POSITION_JUMP_4 6 //ジャンプは上段にあります#defineHERO_POSITION_JUMP_5 7 //ジャンプは上段にあります#defineHERO_POSITION_JUMP_6 8 //ジャンプは上段にあります#defineHERO_POSITION_JUMP_7 9 // Half-wa y down#define HERO_POSITION_JUMP_8 10 //着陸しようとしています#defineHERO_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 [] ={//実行位置1B01100、B01100、B00000、 B01110、B11100、B01100、B11010、B10011、//実行位置2 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、B11111、//グラウンド右B00011、B00011、B00011 B00011、B00011、B00011、B00011、B00011、//左グラウンドB11000、B11000、B11000、B11000、B11000、B11000、B11000、B11000、}; int i; //文字0の使用をスキップします。これにより、lcd.print()を使用して//(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; //シーンを描画しますterrainUpper [TERRAIN_WIDTH] ='\ 0'; terrainLower [TERRAIN_WIDTH] ='\ 0'; char temp =terrainUpper [16桁]; terrainUpper [16桁] ='\ 0'; lcd.setCursor(0,0); lcd.print(terrainUpper); terrainUpper [16桁] =temp; lcd.setCursor(0,1); lcd.print(terrainLower); lcd.setCursor(16-数字、0); lcd.print(score); terrainUpper [HERO_HORIZONTAL_POSITION] =upperSave; terrainLower [HERO_HORIZONTAL_POSITION] =lowerSave; return collide;} //ボタンプッシュを割り込みとして処理しますvoidbuttonPush(){buttonPushed =true;} void setup(){pinMode(PIN_READWRITE、OUTPUT); digitalWrite(PIN_READWRITE、LOW); pinMode(PIN_CONTRAST、OUTPUT); digitalWrite(PIN_CONTRAST、LOW); pinMode(PIN_BUTTON、INPUT); digitalWrite(PIN_BUTTON、HIGH); pinMode(PIN_AUTOPLAY、OUTPUT); digitalWrite(PIN_AUTOPLAY、HIGH); //デジタルピン2は割り込み0にマップされますattachInterrupt(0 / * PIN_BUTTON * /、buttonPush、FALLING); initializeGraphics(); lcd.begin(16、2);} void loop(){static byte heroPos =HERO_POSITION_RUN_LOWER_1;静的バイトnewTerrainType =TERRAIN_EMPTY;静的バイトnewTerrainDuration =1; static bool playing =false;静的ブール点滅=false; static unsigned int distance =0; if(!playing){drawHero((blink)?HERO_POSITION_OFF:heroPos、terrainUpper、terrainLower、distance>> 3); if(blink){lcd.setCursor(0,0); lcd.print( "プレススタート"); } delay(250);点滅=!点滅; if(buttonPushed){initializeGraphics(); heroPos =HERO_POSITION_RUN_LOWER_1;再生=true; buttonPushed =false;距離=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 {newTerrainType =TERRAIN_EMPTY; newTerrainDuration =10 + random(10); }} if(buttonPushed){if(heroPos <=HERO_POSITION_RUN_LOWER_2)heroPos =HERO_POSITION_JUMP_1; buttonPushed =false; } if(drawHero(heroPos、terrainUpper、terrainLower、distance>> 3)){playing =false; //主人公が何かと衝突しました。残念な。 } 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、terrainLower [HERO_HORIZONTAL_POSITION + 2] ==SPRITE_TERRAIN_EMPTY?HIGH:LOW); } delay(100);} 

回路図

ドキュメントがありません。


製造プロセス

  1. TinyML-言語検出器-エッジインパルスとArduinoに基づく
  2. MPU-6050を搭載したArduinoジャイロスコープゲーム
  3. Arduino Digital Dice
  4. DIY 37LEDルーレットゲーム
  5. Arduinoゲームコントローラー
  6. ジョイスティックゲーム
  7. Find Me
  8. ピクセルチェイサーゲーム
  9. 128x64LCDディスプレイ上のDIY10Hz-50kHzオシロスコープ
  10. Arduinoオーディオリアクティブデスクライト
  11. NeoMatrix Arduino Pong