注釈

こんにちは、SunFounderのRaspberry Pi & Arduino & ESP32愛好家コミュニティへようこそ!Facebook上でRaspberry Pi、Arduino、ESP32についてもっと深く掘り下げ、他の愛好家と交流しましょう。

参加する理由は?

  • エキスパートサポート:コミュニティやチームの助けを借りて、販売後の問題や技術的な課題を解決します。

  • 学び&共有:ヒントやチュートリアルを交換してスキルを向上させましょう。

  • 独占的なプレビュー:新製品の発表や先行プレビューに早期アクセスしましょう。

  • 特別割引:最新製品の独占割引をお楽しみください。

  • 祭りのプロモーションとギフト:ギフトや祝日のプロモーションに参加しましょう。

👉 私たちと一緒に探索し、創造する準備はできていますか?[ここ]をクリックして今すぐ参加しましょう!

6.7 数当てゲーム

運試しをしたいですか?直感を試して、正しい番号を当てられるかどうか確かめたいですか?それなら、数当てゲームがぴったりです!

このプロジェクトでは、偶然性の高い楽しいゲームを楽しむことができます。

IRリモコンを使用して、プレイヤーは0から99の間の数字を入力し、ランダムに生成される幸運なポイントナンバーを当てます。 システムはLCDスクリーンにプレイヤーの入力した数字を表示し、上限と下限のヒントを提供して正解に導きます。 推測するたびに、プレイヤーは幸運なポイントナンバーに近づき、ついに誰かがジャックポットを当ててゲームに勝利します!

必要な部品

このプロジェクトには、以下のコンポーネントが必要です。

キットを一式揃えると確かに便利です。こちらがリンクです:

名前

このキットのアイテム

リンク

ESP32 Starter Kit

320+

ESP32 Starter Kit

以下のリンクから個別に購入することもできます。

コンポーネントの紹介

購入リンク

ESP32 WROOM 32E

BUY

ESP32カメラ拡張ボード

BUY

ブレッドボード

BUY

ジャンパーワイヤ

BUY

IR レシーバー

BUY

I2C LCD1602

BUY

回路図

../../_images/circuit_6.7_guess_number.png

配線図

../../_images/6.7_guess_receiver_bb.png

コード

注釈

  • 6.7_guess_number.ino ファイルを esp32-starter-kit-main\c\codes\6.7_guess_number のパスで直接開けます。

  • こちらでは LiquidCrystal_I2CIRremoteESP8266 ライブラリーを使用しています。インストール方法は 手動でのインストール を参照してください。

警告

ESP32開発ボードのバージョン3.0.0以上を使用している場合、コンパイルプロセス中にエラーが発生することがあります。 この問題は、ボードの新しいバージョンが IRremoteESP8266 ライブラリをサポートしなくなったためです。 この例を正しく実行するには、ESP32ボードのファームウェアバージョンを2.0.17にダウングレードすることをお勧めします。 この例を完了した後、最新バージョンに再度アップグレードしてください。

../../_images/version_2.0.17.png
  • コードが正常にアップロードされた後、リモコンの任意の数字ボタンを押してゲームを開始します。

  • リモコンの数字ボタンを使用して数字を入力します。1桁の数字を入力するには、 サイクル キーを押して確認する必要があります。

  • システムは、入力された数字と上下限のヒントをLCDスクリーンに表示します。

  • 幸運なポイントナンバーを正確に当てるまで推測を続けます。

  • 正しい数字を当てると、システムは成功メッセージを表示し、新しい幸運なポイントナンバーを生成します。

注釈

コードと配線が正しいにもかかわらず、LCDが何も表示されない場合は、背面のポテンショメーターを調整してコントラストを高めることができます。

どのように動作するのか?

  1. setup() 関数では、I2C LCD画面とIR受信機が初期化されます。次に initNewValue() 関数を呼び出して新しいランダムな幸運の番号を生成し、LCD画面に歓迎メッセージが表示されます。

    void setup() {
        // Initialize the LCD screen
        lcd.init();
        lcd.backlight();
    
        // Start the serial communication
        Serial.begin(9600);
    
        // Enable the IR receiver
        irrecv.enableIRIn();
    
        // Initialize a new lucky point value
        initNewValue();
    }
    
  2. loop 関数では、IR受信機からの信号を待ちます。信号が受信された場合には、 decodeKeyValue 関数が呼び出されて信号をデコードし、対応するボタンの値を取得します。

    void loop() {
    // If a signal is received from the IR receiver
    if (irrecv.decode(&results)) {
        bool result = 0;
        String num = decodeKeyValue(results.value);
    
        // If the POWER button is pressed
        if (num == "POWER") {
            initNewValue(); // Initialize a new lucky point value
        }
    
        // If the CYCLE button is pressed
        else if (num == "CYCLE") {
            result = detectPoint(); // Detect the input number
            lcdShowInput(result); // Show the result on the LCD screen
        }
    
        // If a number button (0-9) is pressed,
        //add the digit to the input number
        //and detect the number if it is greater than or equal to 10
        else if (num >= "0" && num <= "9") {
            count = count * 10;
            count += num.toInt();
            if (count >= 10) {
                result = detectPoint();
            }
            lcdShowInput(result);
        }
        irrecv.resume();
    }
    }
    
    • ボタンの値に応じて、適切な関数が呼び出されます。数字ボタンが押された場合は、 count 変数が更新され、 detectPoint 関数が呼び出されて入力された番号が正しいかどうかを検出します。 lcdShowInput 関数が呼び出され、LCD画面に入力された番号と上下限のヒントが表示されます。

    • POWER ボタンが押された場合は、 initNewValue 関数が呼び出されて新しい幸運のポイント番号を生成し、LCD画面に歓迎メッセージを表示します。

    • CYCLE ボタンが押された場合は、 detectPoint 関数が呼び出されて入力された番号が正しいかどうかを検出します。 lcdShowInput 関数が呼び出され、LCD画面に入力された番号と上下限のヒントが表示されます。