/*
Created 2016
by AlexGyver
AlexGyver Home Labs Inc.
*/
#include <Servo.h> //servo library
Servo servo;
int trigPin = 6;
int echoPin = 7;
long duration, dist, average;
int flag=0; //button flag
long aver[3]; //array for average
void setup() {
servo.attach(5);
pinMode(3,INPUT); //button on D3
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
servo.write(180); //open cap on power on
}
void measure() { //here is for range sensor
digitalWrite(trigPin, LOW);
delayMicroseconds(5);
digitalWrite(trigPin, HIGH);
delayMicroseconds(15);
digitalWrite(trigPin, LOW);
pinMode(echoPin, INPUT);
duration = pulseIn(echoPin, HIGH);
dist = (duration/2) / 29.1; //obtain distance
}
void loop() {
if (digitalRead(3)==1 && flag==0) { //if button pressed
servo.write(180); //open the cap
delay(1000); //wait for servo
flag=1; //button pressed
}
if (digitalRead(3)==0 && flag==1) { //if button unpressed
servo.write(3); //close the cap
delay(1000); //wait for servo
flag=0;
}
if (flag==0) {
for (int i=0;i<=2;i++) { //average distance
measure();
aver[i]=dist;
delay(50); //delay between measurements
}
dist=(aver[0]+aver[1]+aver[2])/3; //average distance by 3 measurements
}
if (dist>10 && dist<30 && flag==0) { //if hand on the distance 10...30 cm
servo.write(180);
delay(10000); //wait 10 seconds
servo.write(3);
delay(1000);
}
if (dist>30 && dist<60 && flag==0) { //if hand on the distance 30...60 cm
servo.write(180);
delay(2500); //wait 2.5 seconds
servo.write(3);
delay(1000);
}
}
Комментарии (0)
RSS свернуть / развернутьТолько зарегистрированные и авторизованные пользователи могут оставлять комментарии.