2017年10月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

« はんだづけ(japanino & arduino) | トップページ | liquid crystal Hello World! (japanino & arduino) »

2010年5月22日 (土)

ボタンを押すたびに・・・(japanino & arduino)

せっかくブレッドボード付きプロトシールドやスピーカユニットをつくったので、とりあえず、前回の3,3,7拍子のLEDbrinksをバージョンアップして、タクトボタンを押すたびに3,3,7拍子点滅とゆっくりした点滅が切り替わるスケッチをつくってみました。 =^・^=

ブレッドボード上のボタンスイッチ回路はこちらページの回路と同じものです。

LED点滅だけじゃ面白くないのでスピーカをつないで点滅にあわせて音を出し、ついでにスケッチの動きをモニターするためにシリアル通信のコマンドも付け加えてあります。

Img_4599

以下、スケッチです。しかしまあ、自分で見ても無様なコードですわなあ・・・なんとかもっとすっきり単純にエレガントにならんものかと思うのですが、ボケ頭の初心者としてはこんなものか、というところです。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー 

// No.4 toggle the blinks & claps, Created 20 May 2010

#define buttonPin 2            // pushbutton connected to digital pin 2
#define ledPin 13              // LED connected to digital pin 13
#define speakerPin 7           // Speaker connected to digital pin 13
const int duration = 180;      // set brink duration
int buttonState = 0;           // current state of the button
int lastButtonState = 0;       // previous state of the button
int buttonPushCounter = 1;     // counter for the number of button presses
int lastbuttonPushCounter = 1; // previous count for the number of button presses

void setup() {
   pinMode(buttonPin, INPUT);   // initialize the button pin as a input:
   pinMode(ledPin, OUTPUT);     // initialize the ledPin as an output:
   pinMode(speakerPin, OUTPUT); // initialize the speakerPin as an output:
   Serial.begin(9600);          // initialize serial communication:
}

void loop() {
   if (buttonPushCounter % 2 == 0) {  // claps LED every two button pushes
     Serial.println("clap");
     clap(3,1);                       // clap three times
     clap(1,0);                       // pause
     clap(3,1);                       // clap three times
     clap(1,0);                       // pause
     clap(7,1);                       // clap seven times
     clap(1,0);                       // pause
   }
   else {
     Serial.println("pause");
     clap(1,1);                        // clap one time
     clap(3,0);                        // pause
   }
}

void detect() {
  buttonState = digitalRead(buttonPin);  // read the pushbutton input pin:
  if (buttonState != lastButtonState) {  // compare the buttonState to its previous state
    if (buttonState == HIGH) {
      buttonPushCounter++;               //increment the counter
      Serial.println("on");
      Serial.print("number of button pushes:  ");
      Serial.println(buttonPushCounter, DEC);
    }
    else {
      Serial.println("off");
    }
    lastButtonState = buttonState;       // save the current state as the last state
  }
}

void clap(int n, int f) {
  Serial.println(f, DEC);
  for (int i=0;  i <= n-1;  i++){       // repeat clap & clap for n times
    detect();
    if (buttonPushCounter != lastbuttonPushCounter) {
      lastbuttonPushCounter = buttonPushCounter;  // save the current state as the last state
    }
    else {
      if (f == 1) {
        tone(speakerPin, 880, duration);// drive the speaker
        digitalWrite(ledPin, HIGH);     // set the LED on
        delay(duration);                // wait
        digitalWrite(ledPin, LOW);      // set the LED off
        delay(duration);                // wait
      }
      else {
        delay(duration * 2);            // pause
      }
    }
  }
}

« はんだづけ(japanino & arduino) | トップページ | liquid crystal Hello World! (japanino & arduino) »

コメント

コメントを書く

(ウェブ上には掲載しません)

« はんだづけ(japanino & arduino) | トップページ | liquid crystal Hello World! (japanino & arduino) »