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

Dodge The Defs!

コンポーネントと消耗品

>
抵抗10kオーム
1つはLCD画面のコントラスト用、もう1つはボタン用です。重要:プルで抵抗を使用してください-マニュアルに示されているプルアップ構成とは対照的に、ダウン構成。
× 2
抵抗1kオーム
LCD画面のコントラスト用。
× 1
SparkFunプッシュボタンスイッチ12mm
× 1
Adafruit標準LCD-16x2白地に青
× 1
Arduino UNO
× 1
ジャンパー線(汎用)
× 1

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

背景

私はより大きなプロジェクトの一部でしたが、遅れがありました。そこで、古いArduinoキットで何かをすることにしました。私はこれまでLCD画面を使用したことがありません。そこで、ピンを画面にはんだ付けしました(初めてはんだ付けを学びました)。

最初に、オンラインマニュアルからコードをコピーして、アップロードしました。テキストのみを表示し、左右に移動しました。これは私がLiquidCrystalライブラリに紹介されたときでした。数字の「0」が画面上で跳ね返るコードを書いたので、とても楽しかったです。それは私がもう少し複雑なもの、ゲームを作ることを考えたときでした。私はarduinoで液晶ゲームをグーグルで検索しましたが、3つのゲームしか見つかりませんでした。そのうちの2つは私のために機能しました。これらのゲームのコードは複雑すぎて理解できないため、簡単なゲームを作成することにしました。

設定

下の回路図に示すように、液晶ピンをワイヤーでarduinoに接続します。

10kのポテンショメータを使用してコントラストを調整し、必要なコントラストに調整しました。マルチメータでピン間の抵抗を測定し、LCDのVOピンに適切な抵抗(直列に1kおよび10kオーム)を使用しました。

ブレッドボードにプッシュボタンを配置し、入力ワイヤをarduinoのピン8に接続します。コードをarduinoにアップロードすると、準備が整います。

注:回路図に示すように、プルダウンモードでボタン抵抗を使用してください。

ゲームをプレイする

このゲームでは、あなたは足にボールを持ったサッカー選手です。ディフェンダーがあなたに近づいてきます、そしてあなたは単に彼らをかわす必要があります。

イントロの後、求められたらボタンを押します。ディフェンダーが十分に近づいたら、ボタンを押してジャンプします。次のディフェンダーはより高速で接近し、これは10人のディフェンダーに続きます。

PS:私は最初、コントロールとして「0」を使用し、障害物として「1」を使用しました。 2018 FIFAワールドカップが開催され、私自身メッシファンであるため、テーマを変更することにしました。

オンラインジェネレーターを使用して、プレーヤーとディフェンダーのグリフを作成しました。リンクは次のとおりです:https://omerk.github.io/lcdchargen/

コード

  • lcd_1.ino
lcd_1.ino Arduino
 / * defをかわす!!作成者:Shreyas R P作成日:2018年6月21日電子メールID:[email protected]ボタン付きの16x2LCD用のシンプルなゲーム。ゲームに改善や変更を加えた場合は、次の行の下にクレジットを追加してください:お楽しみください:) Copyright(C)2018 Shreyas RPこのプログラムは無料のソフトウェアです:GNUの条件の下で再配布および/または変更できますFree Software Foundationによって公開されているGeneralPublic License、ライセンスのバージョン3、または(オプションで)それ以降のバージョン。このプログラムは、役立つことを期待して配布されていますが、いかなる保証もありません。商品性または特定目的への適合性の黙示の保証もありません。詳細については、GNU General PublicLicenseを参照してください。このプログラムと一緒にGNUGeneral PublicLicenseのコピーを受け取っているはずです。そうでない場合は、を参照してください。 -------------------------------------------------- ------------------------------------------- * /#include  const int btn =8; //ボタン入力ピン//表示するテキストchar * introText [] ={"Dodge the defs !!"、 "Created on:"、 "Hit the button ..."}; //変数declarationsintgame =0; int buttonPress =0; int buttonState =0; intobstructionPos; int obsDelay; intscore =0; unsigned long lastDebounceTime =0; //出力ピンが最後に切り替えられたときdunsignedlong debounceDelay =50; int lastButtonState =LOW; // GRAPHICSbyte runnin1 [8] ={0b01100、0b01100、0b00000、0b11100、0b01110、0b01100、0b11110、0b00011}; byte runnin2 [8] ={0b00110、0b00110、0b00000、0b00111、0b01110、0b 0b01110、0b00101};バイトジャンプ[8] ={0b00100、0b01100、0b11100、0b01110、0b01100、0b11111、0b00000、0b00001};バイトdef1 [8] ={0b00100、0b00110、0b00111、0b01110、0b00110、0b01111 0b00000}; byte def2 [8] ={0b00100、0b00110、0b00111、0b01110、0b00110、0b00110、0b00110、0b00010}; byte slide [8] ={0b00000、0b00000、0b00011、0b00011、0b00000、0b01111、0b11111、0b00000}; LiquidCrystal lcd(4,6,10,11,12,13); void setup(){Serial.begin(9600); pinMode(btn、INPUT); lcd.begin(16,2); lcd.createChar(0、runnin1); lcd.createChar(1、runnin2); lcd.createChar(2、jump); lcd.createChar(3、def1); lcd.createChar(4、def2); lcd.createChar(5、slide); buttonState =digitalRead(btn);} void loop(){intro(); while(game ==1)ballActive(); endGame(); } void intro(){スコア=0; lcd.clear(); lcd.print(introText [0]); // introTextを宣言する代わりに、 "..." lcd.setCursor(7,1);を使用してテキストを直接印刷できます。 lcd.print( "By SRP888"); delay(2000); lcd.clear(); lcd.print(introText [1]); lcd.setCursor(0,1); lcd.print( "21-06-2018"); delay(2000); lcd.clear(); while(button()!=1)//ユーザーがボタンを押すのを待ち、それまでテキストを表示します。 {lcd.setCursor(0,0); lcd.print(introText [2]); delay(100); } if(button()==1)game =1; } void reset(){if(obstaclePos%2 ==0)//障害物Posを使用して、プレーヤーの表示をあるポーズから別のポーズに変更して、走っていることをスマートに表示します。 {lcd.clear(); lcd.setCursor(0,1); lcd.write(byte(0)); } else {lcd.clear(); lcd.setCursor(0,1); lcd.write(1); }} void ballActive(){obsDelay =200; //防御側の障害物の初期遅延Pos =15; // 16x2 lcdであり、インデックスは0から始まるため。while(game ==1){reset(); if(button()==1)//ボタンが押された場合。 {lcd.clear(); lcd.setCursor(0,0); lcd.write(2); //プレーヤーのジャンプ障害物を印刷します(obstaclePos); //ディフェンダーdelay(400);を出力します//これは、表示がすぐに消えて見過ごされるのを防ぐためです。 lcd.clear(); lcd.setCursor(0,1); lcd.write(1); //プレーヤーを地面の障害物に印刷し直します(obstaclePos); //ディフェンダーを印刷します} else {if(obstaclePos!=0)//ディフェンダーがプレーヤーに近づいていない場合は、続行します。 {reset();障害物(obstaclePos); } else if(obstaclePos ==0)//ディフェンダーが0の位置にある場合、つまり彼は地上にいるときにプレーヤーに近づき、ゲームを終了しました。 {ゲーム=0;壊す; }}障害物Pos--; //ディフェンダーをプレーヤーに近づけますif(obstaclePos <0)//プレーヤーがうまく回避した場合、{obsDelay =obsDelay-20; //遅延を減らす(速度を上げる)、obstructionPos =15; //ディフェンダーを開始位置に移動します、score ++; //そしてスコアを1増やします。} if(obsDelay ==0)// 10人のプレイヤーがかわされた場合(200/20 =10のため)、ゲームを終了しますgame =0; delay(obsDelay); }} int button(){int reading =digitalRead(btn); //ノイズまたは押すことにより、スイッチが変更された場合:if(reading!=lastButtonState){//デバウンスタイマーをリセットしますlastDebounceTime =millis(); } if((millis()-lastDebounceTime)> debounceDelay){buttonState =読み取り; if(buttonState ==HIGH){lastButtonState =読み取り; 1を返します。 }} lastButtonState =reading;} void障害物(int i){if(obstaclePos%2 ==0 &&障害物Pos> 2)//ディフェンダーがプレーヤーから遠く離れている場合は、{lcd.setCursor(i、1); lcd.write(3); } else if(obstaclePos%2!=0 &&障害物Pos> 2){lcd.setCursor(i、1); lcd.write(4); } else //プレーヤーに2ステップ近い場合は、スライドするように見せます{lcd.setCursor(i、1); lcd.write(5); }} void endGame(){if(score ==10){lcd.clear(); lcd.print( "おめでとうございます!"); lcd.setCursor(0,1); lcd.print( "You beat'em all"); delay(3000); } else if(score <3){lcd.clear(); lcd.print( "あなたは吸う"); lcd.setCursor(0,1); lcd.print( "スコア:"); lcd.print(score); delay(3000); } else if(score <6){lcd.clear(); lcd.print( "悪くない!"); lcd.setCursor(0,1); lcd.print( "スコア:"); lcd.print(score); delay(3000); } else {lcd.clear(); lcd.print( "素晴らしい!"); lcd.setCursor(0,1); lcd.print( "スコア:"); lcd.print(score); delay(3000); }} 

回路図


製造プロセス

  1. プロトタイプへのオード
  2. 製品設計の課題
  3. 四極真空管
  4. 液晶ディスプレイ(LCD)
  5. ラズベリーパイの温度監視
  6. 展示:プライマルディスプレイ
  7. ドローンパイ
  8. アルキメデス:AIロボットフクロウ
  9. 戦略的データソーシングは、混乱を回避するための最新の方法です
  10. 産業用タッチスクリーン修理の秘訣
  11. 最高のリーフブロワー