読者です 読者をやめる 読者になる 読者になる

迷いませんか?

プログラミング、電子工作、ゲーム・・・etc、色々やるけど中途半端なブログです。

LEDウェーブをちょっと応用してみた

プログラミング 電子工作

おはこんばんちわ!
今、風邪をひいております。迷路です

最近はHTMLが書きにくいと思い独自の書き方してHTMLに変換するプログラム書いてるんですが・・・
言語仕様とか考えているうちにHTMLって書きやすいなぁと実感している次第です。
・・・もう作らなくていいかとか思ったけど作ります。自分用に

今回はLEDウェーブを応用してタイミングゲーを作って見ました。
仕様としては全3面(裏ステージがひとつ)のクリアのたびにプップーと鳴らして
失敗したらブッブーと鳴らして最初からという仕様です。
クリア条件は黄色のLEDをが光った時にボタンを押すことです。

トラ技ジュニアの野球ゲームを参考にさせていただきました。


回路図
led_timing.png

スピーカーとLEDが増えただけです。

ソースコード

#define ONE 5
#define TWO 4
#define THR 3
#define FOU 2
#define FIV 6
#define SPK 12

#define BEAT 200

#define BUTTON 8

int type = 0;
int btn = 0;
int time = 1000;
int lightern = 0;

void all_blink(){
  for(int i = 0;i < 30;i++){
    digitalWrite(ONE,HIGH);
    digitalWrite(TWO,HIGH);
    digitalWrite(THR,HIGH);
    digitalWrite(FOU,HIGH);
    digitalWrite(FIV,HIGH);
    delay(100);
    digitalWrite(ONE,LOW);
    digitalWrite(TWO,LOW);
    digitalWrite(THR,LOW);
    digitalWrite(FOU,LOW);
    digitalWrite(FIV,LOW);
    delay(100);
  }
}

int tiset(){
  if(digitalRead(BUTTON) == LOW){
    delay(10);
    if(digitalRead(BUTTON) == HIGH){
      if(type == 3)
        type = 0;
      else
        type++;
        
      btn = 1;
    }
  }
  switch(type){
    case 0:
      time = 1000;
      break;
    case 1:
      time = 500;
      break;
    case 2:
      time = 100;
      break;
    case 3:
      time = 50;
      break;
    default:
      time = 1000;
      break;
  }
  
  return btn;
}

int light(int pin){
  int i;
  lightern = 0;
  digitalWrite(pin,HIGH);
  btn = 0;
  while(time > i){
    if(tiset() == 1)
      lightern = 1;
    i += 10;
  }
  digitalWrite(pin,LOW);
  return lightern;
}

void setup(){
  pinMode(ONE,OUTPUT);
  pinMode(TWO,OUTPUT);
  pinMode(THR,OUTPUT);
  pinMode(FOU,OUTPUT);
  pinMode(FIV,OUTPUT);
  pinMode(SPK,OUTPUT);
  
  pinMode(BUTTON,INPUT);
}

void loop(){
  
  if(light(ONE) != 0 || light(TWO) != 0 || light(THR) != 0 || light(FOU) != 0){
    tone(SPK,100,50);
    delay(50);
    delay(100);
    tone(SPK,100,BEAT);
    delay(BEAT);
    type = 0;
  }else{
    if(light(FIV) == 1){
      tone(SPK,500,100);
      delay(100);
      delay(100);
      tone(SPK,500,BEAT);
      delay(BEAT);
      if(type == 3){
        all_blink();
      }
    }
  }
}

三面クリアした後点滅するのはバグではありません。仕様です
どうすればいいかわかる方は教えてください
裏面をクリアしても特に何もありません。

それではさようなら〜