#include <LiquidCrystal_I2C.h>
#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
#include <Wire.h>
#define emer_pin 2
#define count_pin 4
#define buzzer_pin 7
LiquidCrystal_I2C lcd(0x27, 16, 2);
Adafruit_MPU6050 mpu;
sensors_event_t event;
volatile byte state = LOW;
unsigned int counts = 0;
int last_x, last_z;
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
pinMode(emer_pin, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(emer_pin), alert, FALLING);
pinMode(count_pin, INPUT_PULLUP);
pinMode(buzzer_pin, OUTPUT);
digitalWrite(buzzer_pin, LOW);
while (!mpu.begin()) {
Serial.println("MPU6050 not connected!");
delay(1000);
}
Serial.println("MPU6050 ready!");
lcd.init();
lcd.backlight(); // เปิด backlight
lcd.setCursor(0, 0);
lcd.print(" CHONVC.AC.TH ");
lcd.setCursor(0, 1);
lcd.print("Ready to start !");
delay(3000);
}
void loop() {
// put your main code here, to run repeatedly:
//Serial.println(digitalRead(emer_pin));
if(digitalRead(count_pin) == LOW){
lcd.setCursor(0, 0);
lcd.print(" Walking... ");
lcd.setCursor(0, 1);
lcd.print("Steps count ");
lcd.setCursor(12, 1);
lcd.print(counts);
mpu.getAccelerometerSensor()->getEvent(&event);
last_x = event.acceleration.x;
last_z = event.acceleration.z;
mpu.getAccelerometerSensor()->getEvent(&event);
if((last_x - event.acceleration.x >= 3) && (last_z - event.acceleration.z >= 1)){
counts++;
Serial.println("1 Step");
}
}
else{
lcd.setCursor(0, 0);
lcd.print("Start button is ");
lcd.setCursor(0, 1);
lcd.print("steps count. ");
}
delay(1000);
}
void alert() {
state = !state;
Serial.println("Emergency button is press");
if(state == HIGH){
digitalWrite(buzzer_pin, HIGH);
}
else digitalWrite(buzzer_pin, LOW);
}