注釈

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

参加する理由は?

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

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

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

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

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

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

6.2 電子サイコロ

このプロジェクトでは、ボタン、7セグメント、および74hc595を使用して電子サイコロを作成します。 ボタンが押されるたびに、1から6までのランダムな数字が生成され、7セグメントディスプレイに表示されます。

必要な部品

このプロジェクトには以下の部品が必要です。

一式を購入するのは確かに便利です、リンクはこちら:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

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

コンポーネントの紹介

購入リンク

SunFounder R3ボード

購入

ブレッドボード

購入

ジャンパーワイヤー

購入

抵抗器

購入

ボタン

購入

74HC595

購入

7セグメント表示

購入

回路図

../_images/circuit_8.9_eeprom.png

配線図

../_images/wiring_electronic_dice.png

コード

注釈

  • 3in1-kit\basic_project\6.2.electronic_dice のパスの下にある 6.2.electronic_dice.ino ファイルを開きます。

  • または、このコードを Arduino IDE にコピーします。

  • または、 Arduino Web Editor を通じてコードをアップロードします。

コードが正常にアップロードされると、7セグメントディスプレイは0-7を高速でスクロールして表示し、ボタンを押すとランダムな数字が表示されてスクロールが停止します。ボタンを再度押すと、スクロール表示が再開されます。

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

このプロジェクトは 5.10 ShiftOut(7セグメント表示) を基にしており、7セグメントディスプレイ上のスクロール表示を開始/一時停止するボタンが付いています。

  1. 各ピンを初期化し、ボタンの値を読み取ります。

    void setup ()
    {
    
        ...
        attachInterrupt(digitalPinToInterrupt(buttonPin), rollDice, FALLING);
    }
    
    • ここで割り込みは、ボタンの状態を読むために使用されます。 buttonPin のデフォルト値は低く、ボタンが押されると低から高に変わります。

    • rollDice は割り込みがトリガされたときに呼び出される関数を表しており、変数 state の値をトグルするために使用されます。

    • FALLING は、 buttonPin が低から高に移行するときに割り込みがトリガされることを意味します。

  2. 変数 state が0の場合、関数 showNumber() が呼び出され、7セグメントディスプレイが1から7までのランダムな数字を表示します。

    void loop()
    {
        if (state == 0) {
            showNumber((int)random(1, 7));
            delay(50);
        }
    }
    
  3. rollDice() 関数について。

    void rollDice() {
        state = !state;
    }
    

    この関数が呼び出されると、stateの値をトグルします。例えば、前回が1で、今回が0です。

  4. showNumber() 関数について。

    void showNumber(int num) {
        digitalWrite(STcp, LOW); //ST_CPを接地し、送信している間だけLowを保持する
        shiftOut(DS, SHcp, MSBFIRST, datArray[num]);
        //ラッチ・ピンをハイ・レベルに戻し、チップにそれを知らせる
        //もはや情報をリッスンする必要はない
        digitalWrite(STcp, HIGH); //ST_CPST_CPをプルしてデータを保存する。
    }
    

    これはプロジェクト 5.10 ShiftOut(7セグメント表示)loop() 内のコードを関数 showNumber() に移したものです。