#include <Adafruit_SSD1306.h>
#include <BH1750.h>
#include <Wire.h>
#define SDA 21
#define SCL 22
#define BUTTON_PIN 15
Adafruit_SSD1306 display = Adafruit_SSD1306(128, 32, &Wire);
BH1750 lightMeter;
int unit = 0; // 0 = люкс, 1 = фут-свечи
float maxLux = 0; // максимальное значение
float minLux = 999999; // минимальное значение
bool buttonPressed = false;
unsigned long lastButtonTime = 0;
float displayLux;
float displayMax;
float displayMin;
String unitName;
float lux;
void setup() {
Serial.begin(9600);
pinMode(BUTTON_PIN, INPUT_PULLUP);
Wire.begin(SDA, SCL);
lightMeter.begin();
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.cp437(true);
display.display();
delay(2000);
}
void loop() {
lux = lightMeter.readLightLevel();
if (lux > maxLux) maxLux = lux;
if (lux < minLux) minLux = lux;
if (digitalRead(BUTTON_PIN) == LOW && !buttonPressed && millis() - lastButtonTime > 200) {
buttonPressed = true;
lastButtonTime = millis();
unit = !unit;
}
if (digitalRead(BUTTON_PIN) == HIGH) {
buttonPressed = false;
}
if (unit == 0) {
displayLux = lux;
displayMax = maxLux;
displayMin = minLux;
unitName = "lux";
} else {
displayLux = lux / 10.764;
displayMax = maxLux / 10.764;
displayMin = minLux / 10.764;
unitName = "fc";
}
display.clearDisplay();
display.setCursor(0, 0);
display.print("Light: "+String(displayLux)+" "+unitName);
display.setCursor(0, 10);
display.print("Max: "+String(displayMax)+" "+unitName);
display.setCursor(0, 20);
display.print("Min: "+String(displayMin)+" "+unitName);
display.display();
delay(100);
}