Japanino (Arduino)の調べ  将棋の調べ  鉄道の調べ  旅先料理の調べ  ビールコレクション

Japanino (Arduino) のプログラム Clock

Clock.sk

/*
  3分砂時計 clock
  スイッチを入れると計測開始。スイッチを OFF の位置に戻して使用(ON の位置では連続計測)。
  1秒ごとに音と光で知らせ、1分毎に LED で途中状況を表示。
  途中で計測を止めるときはリセットボタンを押す。
  Copyright (C) GOMI Hiroshi 2010 All right reserved.
 */
int count = 180;        // 砂時計の時間設定(秒)
int tonePin = 14;
int inputPin = 6;
int ledPins[] = {7, 8, 9, 10, 11, 12, 13};
int ledp = 6;          // 1秒ごとに点滅する LED の相対位置
int minute;
int note = 131;        // 1秒ごとに鳴らす音の音程(周波数)

void setup() {
  for (int led = 0; led < 7; led++) {
    pinMode(ledPins[led], OUTPUT);
  }
  pinMode(inputPin, INPUT);
  initClock();
}

void initClock() {
  for (int led = 0; led < 7; led++) {
    digitalWrite(ledPins[led], LOW);  // set the LED off      
  }
  digitalWrite(inputPin, HIGH);
  minute = 0;
}

void loop() {
  // 入力スイッチ(inputPin)が ON になるまで待つ
  for (;;) {
    if (digitalRead(inputPin) == LOW) break;
    delay(10);
  }
  timeloop();
}

/*
   砂時計本体
   カウンタ(秒)が経過するまで、1秒ごとに LED を点滅させ、音を出す
*/
void timeloop() {
  unsigned long time = millis();
  for(int i = 1; i <= count; i++) {
    tone(tonePin, note, 100);
    digitalWrite(ledPins[ledp], HIGH);
    if (i % 60 == 0) {
      digitalWrite(ledPins[minute++], HIGH);      
      if (minute >= 6) minute = 0;
    }
    // 1秒経過するまで待つ
    for(;;) {
      if (time + 1000 <= millis()) break;
      delay(10);
      digitalWrite(ledPins[ledp], LOW);
    }
    time += 1000;
  }
  initClock();
}

更新記録


Japanino (Arduino)の調べ  将棋の調べ  鉄道の調べ  旅先料理の調べ  ビールコレクション

Copyright © 2010 GOMI Hiroshi All Rights Reserved