From 130782915892ac471e2209697d66e617e64735b0 Mon Sep 17 00:00:00 2001 From: thek4n Date: Tue, 26 May 2026 19:16:49 +0300 Subject: [PATCH] test --- co2_sensor.ino | 124 +++++++++++++++++++++++++++++++++++++++++++++++++ justfile | 12 +++++ 2 files changed, 136 insertions(+) create mode 100644 co2_sensor.ino create mode 100644 justfile diff --git a/co2_sensor.ino b/co2_sensor.ino new file mode 100644 index 0000000..3ec33f9 --- /dev/null +++ b/co2_sensor.ino @@ -0,0 +1,124 @@ +#include +#include +#include +#include + +#define SCREEN_WIDTH 128 +#define SCREEN_HEIGHT 64 + +Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); // -1 = no reset pin +SensirionI2cScd4x scd4x; + +void setup() { + Serial.begin(9600); + Wire.begin(); + + // Инициализация дисплея + if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3D)) { // 0x3C or 0x3D + Serial.println(F("SSD1306 allocation failed")); + for (;;); + } + + display.clearDisplay(); + display.setTextSize(1); + display.setTextColor(SSD1306_WHITE); + display.setCursor(0, 0); + display.println(F("Initializing...")); + display.display(); + delay(1000); + + // Инициализация SCD40 + display.clearDisplay(); + display.setCursor(0, 0); + display.println(F("Starting SCD40...")); + display.display(); + + scd4x.begin(Wire, SCD40_I2C_ADDR_62); + + // Проверка подключения + uint16_t error; + char errorMessage[256]; + + error = scd4x.stopPeriodicMeasurement(); + if (error) { + Serial.print("Error stopping periodic measurement: "); + Serial.println(error); + } + + delay(500); + + error = scd4x.startPeriodicMeasurement(); + if (error) { + Serial.print("Error starting periodic measurement: "); + Serial.println(error); + display.clearDisplay(); + display.setCursor(0, 0); + display.println(F("SCD40 ERROR!")); + display.println(F("Check wiring")); + display.display(); + delay(5000); + } else { + display.clearDisplay(); + display.setCursor(0, 0); + display.println(F("SCD40 Ready!")); + display.display(); + delay(1000); + } +} + +void loop() { + uint16_t error; + char errorMessage[256]; + uint16_t co2 = 0; + float temperature = 0.0; + float humidity = 0.0; + + // Чтение данных с SCD40 + error = scd4x.readMeasurement(co2, temperature, humidity); + + display.clearDisplay(); + display.setCursor(0, 0); + + if (error) { + // Если ошибка чтения + display.println(F("SCD40 READ ERROR!")); + display.print(F("Code: ")); + display.println(error); + display.println(); + display.println(F("Check connection")); + } else { + // Отображение CO2 + display.print(F("CO2: ")); + display.print(co2); + display.println(F(" ppm")); + + // Цветовая индикация уровня CO2 + if (co2 < 800) { + // Нормальный уровень - зеленый (отображаем как белый на монохромном дисплее) + display.println(F("Status: GOOD")); + } else if (co2 < 1200) { + display.println(F("Status: NORMAL")); + } else if (co2 < 2000) { + display.println(F("Status: POOR!")); + } else { + display.println(F("Status: DANGER!")); + } + + display.println(); + + // Отображение температуры + display.print(F("Temp: ")); + display.print(temperature, 1); + display.println(F(" C")); + + // Отображение влажности + display.print(F("RH: ")); + display.print(humidity, 1); + display.println(F(" %")); + } + + display.display(); + + // Задержка между измерениями (SCD40 обновляется каждые 5 секунд) + delay(5000); +} diff --git a/justfile b/justfile new file mode 100644 index 0000000..475f806 --- /dev/null +++ b/justfile @@ -0,0 +1,12 @@ + + +build: + arduino-cli compile --fqbn lgt8fx:avr:328 + +upload: + arduino-cli upload --port /dev/ttyACM1 --fqbn lgt8fx:avr:328 + +install-libs: + arduino-cli lib install "Adafruit SSD1306" + arduino-cli lib install "Adafruit GFX Library" + arduino-cli lib install "Sensirion I2C SCD4x"