自作早押し機 山栗式初号機 材料などのメモ



費用

【秋月電子通商】

● Arduino Uno 互換マイコンボード  (M-15574) 2240円

● USBケーブル Aオス-Bオス 1.5m (C-07605) 130円

● 3.5mm小型ステレオミニジャック 基板取付用 (C-02460) x5 = 250円

● 3.5mm小型ステレオミニジャック パネル取付用 (C-06257) x6 = 450円

● Arduino用ピンソケット (C-17102 + C-17103) x各1 = 110円

● Arduino用ユニバーサル基板 ガラスコンポジット (P-06877) 180円

● 圧電スピーカー (圧電サウンダ)(17mm) (P-04119) 40円

● タクトスイッチ 各色 (P-03646 + P-03647 + P-03649) x各1 30円 

● 基板用スライドスイッチ (P-08790) 20円

● プラスチックケース SW-40B (P-17121) x5 = 425円

● スズメッキ線 (0.6mm 10m) (P-02220) x1/10 = 23円

● 5mm赤色LED (100個入) (I-13237) x5/100 = 10円


(小計 3,908円) 


【Amazon.co.jp】

● (略)プッシュボタンスイッチ x6/24  = 247円

● Amazonベーシック ステレオミニプラグ オーディオケーブル

   3.5mm 2.4m 10点セット x5/10 = 1857円

(小計 2,104円)


【第2大須アメ横ビルの某店】

● 51Ωカーボン抵抗(10個入) x5/10 = 50円


【ダイソー】

● USBミニスピーカー 3W×2 USBケーブル付    330円 


総計 6,392円



写真など












ソースコード


const int ButtonI = 3;
const int ButtonII = 2;
const int ButtonIII = A5;
const int ButtonIV = A4;
const int ButtonCor = 12;
const int ButtonWro = 11;
const int ButtonMode = 7;
//ボタンポート番号

const int LEDI = 5;
const int LEDII = 4;
const int LEDIII = A3;
const int LEDIV = A2;
const int LEDStats = 8;
//LEDポート番号

const int Buzzer = A0;
//ブザーポート番号

const int BPIw = 1525;
const int BPIIw = 1200;
//ボタン押し音周波数
const int BPtime = 100;
const int BPtimeII = 400;
//ボタン押し音長さ
const int BCIw = 1525;
const int BCIIw = 1200;
//正解音周波数
const int BCwhile = 5;
//正解音繰り返し数
const int BCtime = 50;
//正解音長さ
const int BWIw = 220;
//誤答音周波数


int stats = 1;
//stats = 1(ボタン1着待ち)
//stats = 2(ボタン押し音再生)
//stats = 3(正誤判定待ち)
//stats = 4(終了処理)

int LMode = 0;
//LMode = 0(1着点滅)
//LMode = 1(2着点灯)
//LMode = 3(全点灯2着記録)
//LMode = 4(エンドレスチャンス2着点灯)

int res = 0;
//res = 1(全関数リセット)

int BCs = 0;
//反復処理用

int pshPl = 0;
int pshPl2 = 0;
int pshPl3 = 0;
int pshPl4 = 0;
//着順毎記録

int pshed = 0;
//記録着数

int ledSec = 0;
int BuzSec = 0;
int CorSec = 0;
//各種ループ数処理

int JdgBtn = 0;
//正誤判定保持用

void setup() {
  pinMode(ButtonI, INPUT_PULLUP);
  pinMode(ButtonII, INPUT_PULLUP);
  pinMode(ButtonIII, INPUT_PULLUP);
  pinMode(ButtonIV, INPUT_PULLUP);
  pinMode(ButtonCor, INPUT_PULLUP);
  pinMode(ButtonWro, INPUT_PULLUP);
  pinMode(ButtonMode, INPUT_PULLUP);
  pinMode(LEDI, OUTPUT);
  pinMode(LEDII, OUTPUT);
  pinMode(LEDIII, OUTPUT);
  pinMode(LEDIV, OUTPUT);
  pinMode(LEDStats, OUTPUT);
  pinMode(Buzzer, OUTPUT);
  pinMode(LED_BUILTIN, OUTPUT);

  Serial.begin(9600);
  Serial.println("+---+");

  while (digitalRead(ButtonI) == 0 || digitalRead(ButtonII) == 0 || digitalRead(ButtonIII) == 0 || digitalRead(ButtonIV) == 0) {
    delay(1);
  } //長押し対策

  digitalWrite(LEDStats, HIGH);
}

void loop() {
  while (1) {
    if (digitalRead(ButtonI) == 0) {
      //stats = 1(ボタン1着待ち)
      if (stats == 1) {
        pshPl = 1;
        pshed = 1;
        stats = 2;
        digitalWrite (LEDI, HIGH);
        Serial.print(" 1");
      }
    }
    if (digitalRead(ButtonII) == 0) {
      if (stats == 1) {
        pshPl = 2;
        pshed = 1;
        stats = 2;
        digitalWrite (LEDII, HIGH);
        Serial.print(" 2");
      }
    }
    if (digitalRead(ButtonIII) == 0) {
      if (stats == 1) {
        pshPl = 3;
        pshed = 1;
        stats = 2;
        digitalWrite (LEDIII, HIGH);
        Serial.print(" 3");
      }
    }
    if (digitalRead(ButtonIV) == 0) {
      if (stats == 1) {
        pshPl = 4;
        pshed = 1;
        stats = 2;
        digitalWrite (LEDIV, HIGH);
        Serial.print(" 4");
      }
    }




    if (stats == 1) {
      if ( digitalRead(ButtonCor) == 0) {
        BCs = 1;
        while ( digitalRead(ButtonCor) == 0 || BCs > 0) {
          BCs = BCs - 1;
          noTone(Buzzer);
          tone(Buzzer, BCIw);
          delay(BCtime);
          noTone(Buzzer);
          tone(Buzzer, BCIIw);
          delay(BCtime);
        }
        tone(Buzzer, BCIIw);
        delay(200);
        noTone(Buzzer);
        BCs = 0;
      }

      if ( digitalRead(ButtonWro) == 0) {
        tone(Buzzer, BWIw);
        BCs = 5;
        while ( digitalRead(ButtonWro) == 0 || BCs > 0) {
          BCs = BCs - 1;
          delay(10);
        }
        noTone(Buzzer);
        BCs = 0;
      }

      if (digitalRead(ButtonMode) == 0) {
        if (LMode == 0) {
          //LMode = 1(2着点灯)への移行表示
          LMode = 1;
          tone(Buzzer, 660);
          digitalWrite(LEDStats, LOW);
          delay(100);
          digitalWrite(LEDStats, HIGH);
          noTone(Buzzer);
          delay(100);
          tone(Buzzer, 660);
          digitalWrite(LEDStats, LOW);
          delay(100);
          digitalWrite(LEDStats, HIGH);
          noTone(Buzzer);

        } else if (LMode == 1) {
          //LMode = 3(全点灯2着記録)への移行表示
          LMode = 3;
          tone(Buzzer, 660);
          digitalWrite(LEDStats, LOW);
          delay(100);
          digitalWrite(LEDStats, HIGH);
          noTone(Buzzer);
          delay(50);
          tone(Buzzer, 660);
          digitalWrite(LEDStats, LOW);
          delay(100);
          digitalWrite(LEDStats, HIGH);
          noTone(Buzzer);
          delay(50);
          tone(Buzzer, 660);
          digitalWrite(LEDStats, LOW);
          delay(100);
          digitalWrite(LEDStats, HIGH);
          noTone(Buzzer);

        } else if (LMode == 3) {
          //LMode = 4(エンドレスチャンス2着点灯)への移行表示
          LMode = 4;
          tone(Buzzer, 660);
          digitalWrite(LEDStats, LOW);
          delay(100);
          digitalWrite(LEDStats, HIGH);
          noTone(Buzzer);
          delay(50);
          tone(Buzzer, 660);
          digitalWrite(LEDStats, LOW);
          delay(100);
          digitalWrite(LEDStats, HIGH);
          noTone(Buzzer);
          delay(50);
          tone(Buzzer, 660);
          digitalWrite(LEDStats, LOW);
          delay(100);
          digitalWrite(LEDStats, HIGH);
          noTone(Buzzer);
          delay(50);
          tone(Buzzer, 660);
          digitalWrite(LEDStats, LOW);
          delay(100);
          digitalWrite(LEDStats, HIGH);
          noTone(Buzzer);
        } else if (LMode == 4) {
          //LMode = 0(1着点滅)への移行表示
          LMode = 0;
          tone(Buzzer, 660);
          digitalWrite(LEDStats, LOW);
          delay(200);
          digitalWrite(LEDStats, HIGH);
          noTone(Buzzer);
        }
        while (digitalRead(ButtonMode) == 0) {
        }
        //長押し対策

      }

    }





    if (stats != 1) {

      if (stats == 2) {
        digitalWrite(LEDStats, LOW);
        BuzSec++;
        if (BuzSec == 1) {
          tone(Buzzer, BPIw);
        }
        if (BuzSec == BPtime*10) {
          noTone(Buzzer);
          tone(Buzzer, BPIIw);
        }
        if (BuzSec == BPtime*10 + BPtimeII*10) {
          noTone(Buzzer);
          stats = 3;
          BuzSec = 0;
        }

        if ( digitalRead(ButtonWro) == 0) {
          JdgBtn = 1;
        }

        if ( digitalRead(ButtonCor) == 0) {
          JdgBtn = 2;
        }

      }

      if ( stats == 2 || stats == 3 ) {
        delay(0.1);
        ledSec++;
        if (ledSec == 2000) {
          if (pshPl == 1) {
            digitalWrite (LEDI, HIGH);
          }
          if (pshPl == 2) {
            digitalWrite (LEDII, HIGH);
          }
          if (pshPl == 3) {
            digitalWrite (LEDIII, HIGH);
          }
          if (pshPl == 4) {
            digitalWrite (LEDIV, HIGH);
          }
        }
        if (ledSec == 8000) {
          if (pshPl == 1) {
            digitalWrite (LEDI, LOW);
          }
          if (pshPl == 2) {
            digitalWrite (LEDII, LOW);
          }
          if (pshPl == 3) {
            digitalWrite (LEDIII, LOW);
          }
          if (pshPl == 4) {
            digitalWrite (LEDIV, LOW);
          }
          ledSec = 0;
        }

        if (pshed == 1  && LMode != 0) {

          if (digitalRead(ButtonI) == 0 && pshPl != 1) {
            digitalWrite (LEDI, HIGH);
            pshPl2 = 1;
            pshed = 2;
          }
          if (digitalRead(ButtonII) == 0 && pshPl != 2) {
            digitalWrite (LEDII, HIGH);
            pshed = 2;
            pshPl2 = 2;
          }
          if (digitalRead(ButtonIII) == 0 && pshPl != 3) {
            digitalWrite (LEDIII, HIGH);
            pshed = 2;
            pshPl2 = 3;
          }
          if (digitalRead(ButtonIV) == 0 && pshPl != 4) {
            digitalWrite (LEDIV, HIGH);
            pshed = 2;
            pshPl2 = 4;
          }
        }
        if (pshed == 2 && LMode == 3) {

          if (digitalRead(ButtonI) == 0 && pshPl != 1) {
            digitalWrite (LEDI, HIGH);
          }
          if (digitalRead(ButtonII) == 0 && pshPl != 2) {
            digitalWrite (LEDII, HIGH);
          }
          if (digitalRead(ButtonIII) == 0 && pshPl != 3) {
            digitalWrite (LEDIII, HIGH);
          }
          if (digitalRead(ButtonIV) == 0 && pshPl != 4) {
            digitalWrite (LEDIV, HIGH);
          }
        }
        if (pshed == 2 && LMode == 4) {
          if (digitalRead(ButtonI) == 0 && pshPl != 1 && pshPl2 != 1) {
            pshPl3 = 1;
            pshed = 3;
          }
          if (digitalRead(ButtonII) == 0 && pshPl != 2 && pshPl2 != 2) {
            pshPl3 = 2;
            pshed = 3;
          }
          if (digitalRead(ButtonIII) == 0 && pshPl != 3 && pshPl2 != 3) {
            pshPl3 = 3;
            pshed = 3;
          }
          if (digitalRead(ButtonIV) == 0 && pshPl != 4 && pshPl2 != 4) {
            pshPl3 = 4;
            pshed = 3;
          }
        }
        if (pshed == 3 && LMode == 4) {
          if (digitalRead(ButtonI) == 0 && pshPl != 1 && pshPl2 != 1 && pshPl3 != 1) {
            pshPl4 = 1;
            pshed = 4;
          }
          if (digitalRead(ButtonII) == 0 && pshPl != 2 && pshPl2 != 2 && pshPl3 != 2) {
            pshPl4 = 2;
            pshed = 4;
          }
          if (digitalRead(ButtonIII) == 0 && pshPl != 3 && pshPl2 != 3 && pshPl3 != 3) {
            pshPl4 = 3;
            pshed = 4;
          }
          if (digitalRead(ButtonIV) == 0 && pshPl != 4 && pshPl2 != 4 && pshPl3 != 4) {
            pshPl4 = 4;
            pshed = 4;
          }
        }
      }


      if (stats == 3) {

        if (LMode == 0) {

          if ( digitalRead(ButtonWro) == 0 || JdgBtn == 1 ) {
            JdgBtn = 0;
            digitalWrite (LEDI, LOW);
            digitalWrite (LEDII, LOW);
            digitalWrite (LEDIII, LOW);
            digitalWrite (LEDIV, LOW);

            Serial.println(" X ");

            stats = 4;
            tone(Buzzer, BWIw);
            delay(100);
            noTone(Buzzer);
            delay(75);
            tone(Buzzer, BWIw);
            delay(600);
            noTone(Buzzer);
          }
        } else if (LMode != 0 ) {

          if ( digitalRead(ButtonWro) == 0 || JdgBtn == 1 ) {
            JdgBtn = 0;
            digitalWrite (LEDI, LOW);
            digitalWrite (LEDII, LOW);
            digitalWrite (LEDIII, LOW);
            digitalWrite (LEDIV, LOW);

            Serial.println(" X ");

            tone(Buzzer, BWIw);
            delay(100);
            noTone(Buzzer);
            delay(75);
            tone(Buzzer, BWIw);
            delay(600);
            noTone(Buzzer);

            if (pshPl2 != 0) {
              pshPl = pshPl2;
              pshPl2 = 0;
              if (pshPl == 1) {
                digitalWrite (LEDI, HIGH);
                Serial.print(" 1");
              }
              if (pshPl == 2) {
                digitalWrite (LEDII, HIGH);
                Serial.print(" 2");
              }
              if (pshPl == 3) {
                digitalWrite (LEDIII, HIGH);
                Serial.print(" 3");
              }
              if (pshPl == 4) {
                digitalWrite (LEDIV, HIGH);
                Serial.print(" 4");
              }
              pshed = 1;
              if (pshPl3 != 0) {
                pshPl2 = pshPl3;
                pshPl3 = 0;
                if (pshPl2 == 1) {
                  digitalWrite (LEDI, HIGH);
                }
                if (pshPl2 == 2) {
                  digitalWrite (LEDII, HIGH);
                }
                if (pshPl2 == 3) {
                  digitalWrite (LEDIII, HIGH);
                }
                if (pshPl2 == 4) {
                  digitalWrite (LEDIV, HIGH);
                }
                pshed = 2;
                if (pshPl4 != 0) {
                  pshPl3 = pshPl4;
                  pshPl4 = 0;
                  pshed = 3;
                }
              }
              stats = 2;
            } else if (pshPl2 == 0) {
              stats = 4;
            }
          }
        }

        if ( digitalRead(ButtonCor) == 0  || JdgBtn == 2 ) {
          JdgBtn = 0;
          digitalWrite (LEDI, LOW);
          digitalWrite (LEDII, LOW);
          digitalWrite (LEDIII, LOW);
          digitalWrite (LEDIV, LOW);

          if (pshPl == 1) {
            digitalWrite (LEDI, HIGH);
          }
          if (pshPl == 2) {
            digitalWrite (LEDII, HIGH);
          }
          if (pshPl == 3) {
            digitalWrite (LEDIII, HIGH);
          }
          if (pshPl == 4) {
            digitalWrite (LEDIV, HIGH);
          }

          Serial.println(" O ");
          stats = 4;
          BCs = BCwhile;
          while ( digitalRead(ButtonCor) == 0 || BCs > 0) {
            BCs = BCs - 1;
            noTone(Buzzer);

            tone(Buzzer, BCIw);
            delay(BCtime);
            noTone(Buzzer);

            tone(Buzzer, BCIIw);
            delay(BCtime);

コメント

このブログの人気の投稿

【Windows】PC起動時にChrome等を自動で起動させる方法

当サイトの名称を変更します。