#include <LiquidCrystal_I2C.h>
#define ECHO_PIN 3
#define TRIG_PIN 2
#define pinBuzzer 5
#include <Servo.h>
Servo myservo;
const float GAMMA = 0.7;
const float RL10 = 50;
int potpin = 0;
int val;
LiquidCrystal_I2C lcd(0x27, 20, 4);
float readDistanceCM() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
int duration = pulseIn(ECHO_PIN, HIGH);
return duration * 0.034 / 2;
}
void setup() {
// put your setup code here, to run once:
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
Serial.begin(115200);
pinMode(pinBuzzer, OUTPUT);
myservo.attach(9);
lcd.init();
lcd.backlight();
}
void loop() {
// put your main code here, to run repeatedly:
float distance = readDistanceCM();
Serial.print("Measured distance: " );
Serial.println(readDistanceCM());
int analogvalue = analogRead(A0);
float voltage = analogvalue / 1024. * 5;
float resistance = 2000 * voltage / (1 - voltage / 5);
float lux = pow(RL10 * 1e3 * pow(10, GAMMA) / resistance, (1 / GAMMA));
lcd.setCursor(0, 0);
lcd.print(" ");
if(distance <=200){
lcd.print("kereta ");
lcd.print("Lewat");
myservo.write(90);
delay(15);
tone(pinBuzzer, 1000);
delay(200);
tone(pinBuzzer, 500);
delay(200);
lcd.print(" ");
}
else{
lcd.print("silahkan ");
lcd.print("Lewat");
myservo.write(0);
noTone(pinBuzzer);
lcd.setCursor(0, 1);
lcd.print("hati");
lcd.print(lux);
lcd.print("hati");
delay(200);
}
}