#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
Adafruit_MPU6050 mpu;
LiquidCrystal_I2C lcd(0x27, 16, 2); // set the LCD address to 0x27 for a 16 chars and 2 line display
float Scala_richter = 0;
void setup(void) {
Serial.begin(115200);
pinMode(19, OUTPUT);
pinMode(18, OUTPUT);
pinMode(5, OUTPUT);
while (!mpu.begin()) {
Serial.println("MPU6050 not connected!");
delay(1000);
}
Serial.println("MPU6050 ready!");
lcd.begin(16, 2); // initialize the lcd
lcd.backlight();
}
sensors_event_t event;
void loop() {
float magnitude = ScalaRichter();
beep();
// Menampilkan magnitudo gempa pada LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Magnitude: ");
lcd.setCursor(0, 1);
lcd.print(magnitude);
delay(1000); // Tampilkan magnitudo selama 2 detik
// Menampilkan dampak tsunami pada LCD
lcd.setCursor(0, 2);
//lcd.print("Tsunami: ");
lcd.setCursor(0, 3);
if (magnitude > 6.5) {
lcd.print("Berpotensi Tsunami");
} else {
lcd.print("Tidak Potensi Tsunami");
}
delay(1000);
}
float ScalaRichter(){
mpu.getAccelerometerSensor()->getEvent(&event);
float ykuadrat = event.acceleration.y * event.acceleration.y;
float xkuadrat = event.acceleration.x * event.acceleration.x;
Scala_richter = sqrt(ykuadrat + xkuadrat);
return Scala_richter;
}
void beep(){
float ValueSR = ScalaRichter();
Serial.print(ValueSR);
Serial.println("Maghnitudo");
if(event.acceleration.y >= 0 && event.acceleration.x >= 0){
if(ValueSR <= 0){
tone(26,0);
}else if(ValueSR > 0 && ValueSR <= 3){
tone(26,500);
digitalWrite(19, HIGH);
delay(1000);
noTone(26);
digitalWrite(19, LOW);
delay(1000);
}else if(ValueSR > 3 && ValueSR <= 4.5){
tone(26,500);
digitalWrite(18, HIGH);
delay(500);
noTone(26);
digitalWrite(18, LOW);
delay(500);
}else if(ValueSR > 4.5 && ValueSR <= 6){
tone(26,500);
digitalWrite(18, HIGH);
delay(250);
noTone(26);
digitalWrite(18, LOW);
delay(250);
}else if(ValueSR > 6){
tone(26,500);
digitalWrite(5, HIGH);
delay(100);
noTone(26);
digitalWrite(5, LOW);
delay(100);
}
}else{
tone(26,0);
}
}