#include <LiquidCrystal_I2C.h>
#include <Button.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
Button btn(2);
long readUltrasonicDistance(int triggerPin, int echoPin);
long readTemperature(int pin);
int disp = 0;
void setup() {
lcd.init();
lcd.backlight();
btn.begin();
String name = "Eka Puspita Sari";
lcd.clear();
lcd.setCursor(0, 0);
for (int i = 0; i < name.length(); i++) {
lcd.print(name[i]);
delay(200);
}
String nim = "1122090015";
lcd.clear();
lcd.setCursor(0, 1);
for (int i = 0; i < nim.length(); i++) {
lcd.print(nim[i]);
delay(200);
}
delay(3000);
}
void loop() {
if (disp == 0) {
lcd.setCursor(0, 0);
lcd.print(" Dist Sensor ");
float dist = 0.0344 / 2 * readUltrasonicDistance(4, 3);
String distStr = String(dist, 2);
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.print(distStr);
for (int i = 2 + distStr.length(); i < 11; i++) {
lcd.print(" ");
}
lcd.print("cm ");
} else if (disp == 1) {
lcd.setCursor(0, 0);
lcd.print(" Temp Sensor ");
float temp = readTemperature(A0);
String tempStr = String(temp, 2);
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.print(tempStr);
for (int i = 2 + tempStr.length(); i < 11; i++) {
lcd.print(" ");
}
lcd.print((char)223);
lcd.print("C ");
} else {
float dist = 0.0344 / 2 * readUltrasonicDistance(4, 3);
String distStr = String(dist, 2);
lcd.setCursor(0, 0);
lcd.print("Dist:");
lcd.print(distStr);
lcd.print("cm");
for (int i = 7 + distStr.length(); i < 16; i++) {
lcd.print(" ");
}
float temp = readTemperature(A0);
String tempStr = String(temp, 2);
lcd.setCursor(0, 1);
lcd.print("Temp:");
lcd.print(tempStr);
lcd.print((char)223);
lcd.print("C");
for (int i = 7 + distStr.length(); i < 16; i++) {
lcd.print(" ");
}
}
if (btn.toggled() && btn.read() == Button::PRESSED) {
if (disp == 2) {
disp = 0;
} else {
disp++;
}
}
}
long readUltrasonicDistance(int triggerPin, int echoPin)
{
pinMode(triggerPin, OUTPUT);
digitalWrite(triggerPin, LOW);
delayMicroseconds(2);
digitalWrite(triggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPin, LOW);
pinMode(echoPin, INPUT);
return pulseIn(echoPin, HIGH);
}
const float BETA = 3950.0;
long readTemperature(int pin) {
pinMode(pin, INPUT);
float value = analogRead(pin);
return 1.0 / ((float)log(1.0 / (1023.0 / value - 1.0)) / BETA + 1.0 / 298.15) - 273.15;
}