#include <LiquidCrystal_I2C.h>
#include <Wire.h>
const int buttonPin = 7; //Nuppu pin
const int PIN_ECHO = 12;
const int PIN_TRIG = 8;
const int miniCM = 0;
const int maxCM = 400;
bool sensorOn = false; // Muutuja, mis jälgib anduri tööolekut
bool lastButtonState = LOW; // Viimase nupuvajutuse seisund
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50;
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
lcd.begin(16, 2);
lcd.print("Kaugs:");
pinMode(buttonPin, INPUT_PULLUP);
pinMode(PIN_ECHO, INPUT);
pinMode(PIN_TRIG, OUTPUT);
Serial.begin(115200);
}
void loop() {
bool reading = digitalRead(buttonPin);
if (reading != lastButtonState) {
lastDebounceTime = millis();
}
lastButtonState = reading;
if ((millis() - lastDebounceTime) > debounceDelay) {
if (reading == HIGH) {
sensorOn = !sensorOn; // Vaheta anduri olekut
}
}
if (sensorOn) {
// Ultraheli signaali saatmine ja kauguse arvutamine
digitalWrite(PIN_TRIG, LOW);
delayMicroseconds(2);
digitalWrite(PIN_TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_TRIG, LOW);
long duration = pulseIn(PIN_ECHO, HIGH);
int distance = duration * 0.034 / 2;
// Näidu kuvamine LCD-le
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Distance:");
lcd.setCursor(0, 1);
lcd.print(distance);
lcd.print(" cm");
}
else {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Sensor Off"); }
delay(500); // Uuenda iga 0.5 sekundi tagant
// Nupu oleku lugemine koos debouncing-mehhanismiga
if (reading != lastButtonState) {
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
if (reading == HIGH) {
sensorOn = !sensorOn; // Vaheta anduri olekut
}
}
lastButtonState = reading;
if (sensorOn) {
// Ultraheli signaali saatmine ja kauguse arvutamine
digitalWrite(PIN_TRIG, LOW);
delayMicroseconds(2);
digitalWrite(PIN_TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_TRIG, LOW);
long duration = pulseIn(PIN_ECHO, HIGH);
int distance = duration * 0.034 / 2;
// Näidu kuvamine LCD-le
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Distance:");
lcd.setCursor(0, 1);
lcd.print(distance);
lcd.print(" cm");
} else {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Sensor Off");
}
}