Created
August 22, 2019 00:59
-
-
Save likersacademia/d26160eeda07c2e0ebae9c7998050ad4 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/*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