test
This commit is contained in:
parent
837adf64f4
commit
1307829158
124
co2_sensor.ino
Normal file
124
co2_sensor.ino
Normal file
@ -0,0 +1,124 @@
|
||||
#include <Wire.h>
|
||||
#include <Adafruit_GFX.h>
|
||||
#include <Adafruit_SSD1306.h>
|
||||
#include <SensirionI2cScd4x.h>
|
||||
|
||||
#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);
|
||||
}
|
||||
12
justfile
Normal file
12
justfile
Normal file
@ -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"
|
||||
Loading…
x
Reference in New Issue
Block a user