Skip to content

Instantly share code, notes, and snippets.

@likersacademia
Created August 22, 2019 00:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save likersacademia/d26160eeda07c2e0ebae9c7998050ad4 to your computer and use it in GitHub Desktop.
Save likersacademia/d26160eeda07c2e0ebae9c7998050ad4 to your computer and use it in GitHub Desktop.
/*DAYs SCENE 07 ★★★★
できること)
1分、3分、5分をタイマーの置く位置を変えるだけで簡単に設定でき、知らせてくれるタイマー
最初に使うもの)
距離センサー スピーカー
仕組み)
タイマーについた距離センサーとの距離が10センチ以下、15センチ以下、20センチ以下で設定
*/
//ここから下は設定です。一番下まで行くとプログラムを変更しやすいところがあります。
#define echoPin 19 //INPUTA
#define trigPin 18 //INPUTA
#define SPEAKER 10 //OUTPUTA:5 OUTPUTB:10
#define ledPin 5 //OUTPUTA:5 OUTPUTB:10
float Duration = 0; //受信した間隔
float Distance = 0; //距離
float times = 0; //時間
float base_time = 0; //タイマー開始時間
int minutes = 0;
int count = 0;
int lap = 0;
boolean Stand_by = true ;
void setup() {
Serial.begin(9600);
pinMode(echoPin,INPUT);
pinMode(trigPin,OUTPUT);
pinMode(SPEAKER,OUTPUT);
pinMode(ledPin,OUTPUT);
}
void loop() {
const float base_distance = length();
if (base_distance < 10 ) { //距離の指定
timer(1); //タイマーの時間指定
} else if (base_distance < 15 ){
timer(3);
} else if (base_distance < 20 ){
timer(5);
} else {
digitalWrite(ledPin, LOW);
}
}
/////////////以下関数、基本いじる必要なし。音の高さや長さを変更するときは下記から変更可能///////////////
float length(){ //距離の計測に関する部分
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH); //超音波を出力
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
Duration = pulseIn(echoPin, HIGH); //センサからの入力
if (Duration > 0) {
Duration = Duration/2; //往復距離を半分
Distance = Duration*340*100/1000000; //音速を340m/sに設定
Serial.print("Distance:");
Serial.print(Distance);
Serial.println("cm");
}
return Distance;
}
void timer(int num){ //タイマー本体。numの値で何分設定なのかを設定
while(minutes < num){
if(Stand_by){
base_time = millis();
Stand_by = !Stand_by;
Serial.println("Setup finish");
}else{
times = millis() - base_time;
Serial.println(times);
minutes = times / 1000 / 60;
if(minutes >= 1 && count < 1){
whistle (minutes);
count ++;
}else if (minutes >= 2 && count < 2){
whistle (minutes);
count ++;
}else if (minutes >= 3 && count < 3){
whistle (minutes);
count ++;
}else if (minutes >= 4 && count < 4){
whistle (minutes);
count ++;
}else if (minutes >= 5 && count < 5){
whistle (minutes);
count ++;
}else{
noTone(SPEAKER);
digitalWrite(ledPin, HIGH);
}
}
}
while(minutes >= num){
times = millis() - base_time;
minutes = times / 1000 / 60;
digitalWrite(ledPin, LOW);
tone(SPEAKER,1000);
delay(50);
digitalWrite(ledPin, HIGH);
noTone(SPEAKER);
delay(50);
}
}
void whistle (int maxim){ //途中経過を知らせる関数。1分でピッ!2分でピピッ!となる
digitalWrite(ledPin, LOW); //LEDはつきっぱなし
while(lap < maxim){
tone(SPEAKER,1000);
delay(50);
noTone(SPEAKER);
delay(50);
lap ++;
}
digitalWrite(ledPin, HIGH);
lap = 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment