#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Adafruit_BMP085.h>
#define BUZZER_PIN PA1
#define GREEN_LED_PIN PA4
#define RED_LED_PIN PA5
// Changed to integers to save flash space!
// 100,000 Pa -> 100 kPa
const int32_t LOW_PRESSURE_KPA = 50;
const int32_t HIGH_PRESSURE_KPA = 100;
LiquidCrystal_I2C lcd(0x27, 16, 2);
Adafruit_BMP085 bmp;
void setup() {
// REMOVED Serial.begin(115200); -> Saves ~1KB to 2KB of flash!
pinMode(BUZZER_PIN, OUTPUT);
pinMode(GREEN_LED_PIN, OUTPUT);
pinMode(RED_LED_PIN, OUTPUT);
lcd.init();
lcd.backlight();
if (!bmp.begin()) {
lcd.print("Sensor Error!");
while (1);
}
lcd.clear();
}
void loop() {
// Read pressure and immediately convert to kPa using integer division
int32_t pressureKPa = bmp.readPressure() / 1000;
// Quick integer conversion to PSI (1 kPa is approx 0.145 PSI)
// Multiplying by 145 and dividing by 1000 avoids float math entirely
int32_t pressurePSI = (pressureKPa * 145) / 1000;
// Display Output
lcd.setCursor(0, 0);
lcd.print("Pres: ");
lcd.print(pressurePSI);
lcd.print(" PSI ");
lcd.setCursor(0, 1);
if (pressureKPa < LOW_PRESSURE_KPA) {
lcd.print("ALERT: LOW!! ");
digitalWrite(GREEN_LED_PIN, LOW);
digitalWrite(RED_LED_PIN, HIGH);
triggerBeep();
}
else if (pressureKPa > HIGH_PRESSURE_KPA) {
lcd.print("ALERT: HIGH!! ");
digitalWrite(GREEN_LED_PIN, LOW);
digitalWrite(RED_LED_PIN, HIGH);
triggerBeep();
}
else {
lcd.print("Status: Normal ");
digitalWrite(RED_LED_PIN, LOW);
digitalWrite(GREEN_LED_PIN, HIGH);
digitalWrite(BUZZER_PIN, LOW);
delay(500);
}
}
void triggerBeep() {
digitalWrite(BUZZER_PIN, HIGH);
delay(150);
digitalWrite(BUZZER_PIN, LOW);
delay(150);
}Loading
bmp180
bmp180