注意:すべてのOSOYOO ARDUINO用製品はサードパーティー製品であり、ARDUINOと完全に互換性があります

認可されたオンライン小売業者:

AMAZON
amzuk

内容

  1. 紹介
  2. 準備
  3. 接続
  4. スケッチのアップロード
  5. プログラムの実行結果

紹介

ダイスは、それぞれの面に異なる数字が6つ書かれた立方体型の箱です。ゲームをしている際に、サーフェスにダイスを投げることでランダムな数字を得ます。このレッスンでは、ボタンを押しながら振り、ボタンを離すことで投げるダイスを作成します。振る動作、投げる動作、投げられた数字は、7セグメントディスプレイにアニメーション化されて表示されます。74HC595 ICを使用して、3つのアルドゥインデジタルピンのみを使用して、7セグメントディスプレイをアルドゥインに接続します。

準備

ハードウェア

Software

74HC595 ICをArduinに接続する方法については、OsoyooのウェブサイトのLesson –74HC595の記事で詳細を確認できます。回路図は、この記事と同じArduinのピンを使用しています。スイッチボタンに関する詳細情報は、Button exampleを確認してください。1桁の7セグメントLEDディスプレイに関する詳細情報は、Lesson – one digit 7-segment LED displayを確認してください。

接続

回路図は以下の通りです。7セグメントディスプレイは直接Arduinに接続することもできますが、74HC595を使用することで、Arduinのピンを3つだけ使用します。

スケッチをアップロード

上記の操作が完了したら、USBケーブルを使用してボードをコンピュータに接続します。緑色の電源LED(ラベル付けされたPWR)が点灯するはずです。Arduin IDEを開き、プロジェクトに対応するボードタイプとポートタイプを選択して、次のスケッチ をボードにロードしてください。

const int latchPin = 12;//Pin connected to ST_CP of 74HC595
const int clockPin = 8;//Pin connected to SH_CP of 74HC595 
const int dataPin = 11; //Pin connected to DS of 74HC595
const int ledPin = 13; //ledPin attach to
const int keyIn = 2;  //keyIn attach to
int num = 0;

//display 0,1,2,3,4,5,6,7,8,9,A,b,C,d,E,F
int datArray[16] = {
  252, 96, 218, 242, 102, 182, 190, 224, 254, 246, 238, 62, 156, 122, 158, 142};
long randNumber;

void setup()
{
  pinMode(latchPin,OUTPUT);  //set the latchPin as an output
  pinMode(clockPin,OUTPUT);  //set the clockPin as an output
  pinMode(dataPin,OUTPUT);  //set the dataPin as an output
  pinMode(ledPin,OUTPUT);  //set the ledPin as an output
  pinMode(keyIn,INPUT);  //set the keyIn as an input
  Serial.begin(9600);  // start serial port at 9600 bps:
  //initialize the random number generator with a fairly random input A0
  randomSeed(analogRead(0)); 
}

void loop()
{
  int stat = digitalRead(keyIn);  //store value read from keyIn
  if(stat == HIGH)  // check if the pushbutton is pressed
  {
    num ++;
    if(num > 1)
    {
      num = 0;
    }
  }

  Serial.println(num);  // print the num on serial monitor 
  if(num == 1)  //when pushbutton is pressed
  {
    randNumber = random(1,7); //Generate a random number in 1-7 
    showNum(randNumber);  //show the randNumber on 7-segment
    delay(1000);  //wait for 1 second 
    while(!digitalRead(keyIn));  //When not press button,program stop here
    int stat = digitalRead(keyIn);
    if(stat == HIGH) // check if the pushbutton is pressed
    {
      num ++;
      digitalWrite(ledPin,HIGH); //turn on the led
      delay(100);
      digitalWrite(ledPin,LOW); //turn off the led
      delay(100);
      if(num >= 1)
      {
        num = 0;
      }
    }      
  }
  //show random numbers at 100 microseconds intervals
   // If the button has not been pressed
  randNumber = random(1,7);
  showNum(randNumber);
  delay(100);
}

//the function to drive 7-segment show numbers
void showNum(int num)
{
  digitalWrite(latchPin,LOW); //ground latchPin and hold low for transmitting
  shiftOut(dataPin,clockPin,MSBFIRST,datArray[num]);
  //return the latch pin high to signal chip that it 
  //no longer needs to listen for information
  digitalWrite(latchPin,HIGH); //pull the latchPin to save the data
}

実行結果

アップロードが完了して数秒後、1から6までの数字を表示する7セグメントディスプレイがジャンプするのが見えるはずです。ボタンを押すと、ジャンプが遅くなり、3秒後に停止します。ボタンをもう一度押すと、プロセスが繰り返されます。