Zamiast buzera dałem LED.
Zmodyfikowałem funkcję zakres(int a) aby sprawdzała jedynie jedną wartość, a mianowicie czy jest poniżej danej wartości. wywołuję ją z a=25. W oknie monitora portu szeregowego otrzymuję wartości zawsze grubo powyżej 25, a mimo to LED częściej się zapala niż gaśnie.
#define trigPin 13
#define echoPin 12
void setup() {
Serial.begin (9600);
pinMode(trigPin, OUTPUT); //Pin, do którego podłączymy trig jako wyjście
pinMode(echoPin, INPUT); //a echo, jako wejście
pinMode(8, OUTPUT);
digitalWrite(8, LOW);
}
void loop() {
Serial.println(zmierzOdleglosc());
zakres(25);
delay(500);
}
int zmierzOdleglosc() {
long czas, dystans;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
czas = pulseIn(echoPin, HIGH);
dystans = czas / 65;
return dystans;
}
void zakres(int a) {
int jakDaleko = zmierzOdleglosc();
if (jakDaleko < a) {
digitalWrite(8, HIGH); //Włączamy LED
} else {
digitalWrite(8, LOW); //Wyłączamy LED, gdy obiekt poza zakresem
}
}