Menu
CoddyTech

サイモン:ボタンと音符

CoddyのArduinoジャーニー「プロジェクト」セクションの一部。レッスン 13/24。

Simonは記憶ゲームです。ボードが色とりどりのライトと音符のパターンを再生し、あなたはボタンでそれを繰り返します。各ラウンドでパターンが1つずつ増え、間違えるまで続きます。色は4種類あり、それぞれにボタン、LED、音符があります。

どれも4つずつあるので、配列を使うとスケッチを短くできます。各配列の要素0は赤、1は緑、2は青、3は黄色です。そのため、どこでも1つの数値 i で色を指定できます。

const int ledPins[4] = {9, 10, 11, 12};
const int buttonPins[4] = {2, 3, 4, 5};
const int notes[4] = {262, 330, 392, 523};

forループですべてのボタンを確認します。2つのタイミングで反応します。ボタンが押されたとき(現在はLOW、前回はHIGH)と、離されたとき(現在はHIGH、前回はLOW)です。配列lastStateには、各ボタンの前回の読み取り値が保持されます。後の手順では、ボタンが離されたときに押されたものとして数えます。これらのボタンはチャタリングしないため、エッジの確認だけで十分です。

challenge icon

チャレンジ

中級

4色を鳴らしましょう:

  • setup()では、forループを使ってLEDピンを出力に、ボタンのピンをINPUT_PULLUPに設定します
  • ボタンiが押されたら、ledPins[i]を点灯し、ピン8でnotes[i]を鳴らします
  • ボタンが離されたら、LEDを消灯し、noTone()を呼び出します

Runを押して、ボタンを鳴らしてから、Checkを押してください。

自分で試してみよう

// 色ごとに1つずつ:赤、緑、青、黄
const int ledPins[4] = {9, 10, 11, 12};
const int buttonPins[4] = {2, 3, 4, 5};
const int notes[4] = {262, 330, 392, 523};  // C、E、G、高いC
const int buzzerPin = 8;

int lastState[4] = {HIGH, HIGH, HIGH, HIGH};  // 各ボタンの直前の読み取り値

void setup() {
  // LEDは出力、ボタンはINPUT_PULLUP

}

void loop() {
  // 各ボタンについて:押されたら対応するLEDを点灯し、音を鳴らす。
  // 離されたら、LEDと音をオフにする

}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

プロジェクトのすべてのレッスン

自分で練習してみよう: Arduinoプレイグラウンド