Оформи код соответствующим тэгом, см. Правила
я написал этот код
#include <Wire.h>
#include <Adafruit_HTU21DF.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ST7735.h>
#include <SPI.h>
boolean f_flag = false;
boolean butt_flag = false;
boolean butt;
unsigned long last_press;
#define TFT_CS 10
#define TFT_RST 9
#define TFT_DC 8
#define MQ2_PIN A0
#define BUZZER_PIN 3
#define LED_PIN_R 2 //красный светодиод
#define LED_PIN_B 4 //синий светодиод
#define LED_PIN_G 5 //зелёный светодиод
Adafruit_HTU21DF htu = Adafruit_HTU21DF();
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
void setup() {
Serial.begin(9600);
htu.begin();
tft.initR(INITR_BLACKTAB);
tft.fillScreen(ST7735_BLACK);
tft.setTextColor(ST7735_WHITE);
pinMode(MQ2_PIN, INPUT);
pinMode(6, INPUT_PULLUP);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(LED_PIN_R, OUTPUT); //красный светодиод
pinMode(LED_PIN_B, OUTPUT); //синий светодиод
pinMode(LED_PIN_G, OUTPUT); //зелёный светодиод
}
void loop() {
butt = !digitalRead(6);
float humidity = htu.readHumidity();
float temp = htu.readTemperature();
int gas = analogRead(MQ2_PIN);
tft.setCursor(0, 0);
tft.print("Humidity: ");
tft.print(humidity);
tft.print(" %\n");
tft.print("Temperature: ");
tft.print(temp);
tft.print(" C\n");
tft.print("Gas: ");
tft.print(gas);
tft.print("\n");
if (butt == true && butt_flag == false && millis() - last_press > 95) {
butt_flag = true;
Serial.println("Button pressed");
f_flag = !f_flag;
last_press = millis();
}
if (butt == false && butt_flag == true) {
butt_flag = false;
Serial.println("Button released");
}
if (f_flag == false) {
gas1();
digitalWrite(LED_PIN_B, LOW);
}
else if (f_flag == true) {
digitalWrite(LED_PIN_B, HIGH); // синий светодиод
}
delay(5);
}
void gas1() {
int gas = analogRead(MQ2_PIN);
if (gas > 400) { // Здесь устанавливается ваше допустимое значение для датчика дыма
mq();
} else {
tone(BUZZER_PIN, 0, 0);
digitalWrite(LED_PIN_R, LOW);
digitalWrite(LED_PIN_G, HIGH);
}
}
void mq() {
static uint32_t tmr;
if (millis() - tmr >= 0 && millis() - tmr <= 15000) {
digitalWrite(LED_PIN_R, HIGH);
tone(BUZZER_PIN, 500, 15000);
}
if (millis() - tmr >= 15000) {
tmr = millis();
tone(BUZZER_PIN, 0, 0);
digitalWrite(LED_PIN_R, LOW);
}
}
он должен выводить информацию состояния метеодатчика и датчика дыма на монитор, а при превышении порогового значения для датчика дыма в 400 единиц - включать зуммер и светодиод
#include <Wire.h>
#include <Adafruit_HTU21DF.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ST7735.h>
#include <SPI.h>
boolean f_flag = false;
boolean butt_flag = false;
boolean butt;
unsigned long last_press;
#define TFT_CS 10
#define TFT_RST 9
#define TFT_DC 8
#define MQ2_PIN A0
#define BUZZER_PIN 3
#define LED_PIN_R 2 //красный светодиод
#define LED_PIN_B 4 //синий светодиод
#define LED_PIN_G 5 //зелёный светодиод
Adafruit_HTU21DF htu = Adafruit_HTU21DF();
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
void setup() {
Serial.begin(9600);
htu.begin();
tft.initR(INITR_BLACKTAB);
tft.fillScreen(ST7735_BLACK);
tft.setTextColor(ST7735_WHITE);
pinMode(MQ2_PIN, INPUT);
pinMode(6, INPUT_PULLUP);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(LED_PIN_R, OUTPUT); //красный светодиод
pinMode(LED_PIN_B, OUTPUT); //синий светодиод
pinMode(LED_PIN_G, OUTPUT); //зелёный светодиод
}
void loop() {
butt = !digitalRead(6);
float humidity = htu.readHumidity();
float temp = htu.readTemperature();
int gas = analogRead(MQ2_PIN);
tft.setCursor(0, 0);
tft.print("Humidity: ");
tft.print(humidity);
tft.print(" %\n");
tft.print("Temperature: ");
tft.print(temp);
tft.print(" C\n");
tft.print("Gas: ");
tft.print(gas);
tft.print("\n");
if (butt == true && butt_flag == false && millis() - last_press > 95) {
butt_flag = true;
Serial.println("Button pressed");
f_flag = !f_flag;
last_press = millis();
}
if (butt == false && butt_flag == true) {
butt_flag = false;
Serial.println("Button released");
}
if (f_flag == false) {
gas1();
digitalWrite(LED_PIN_B, LOW);
}
else if (f_flag == true) {
digitalWrite(LED_PIN_B, HIGH); // синий светодиод
}
delay(5);
}
void gas1() {
int gas = analogRead(MQ2_PIN);
if (gas > 400) { // Здесь устанавливается ваше допустимое значение для датчика дыма
mq();
} else {
tone(BUZZER_PIN, 0, 0);
digitalWrite(LED_PIN_R, LOW);
digitalWrite(LED_PIN_G, HIGH);
}
}
void mq() {
static uint32_t tmr;
if (millis() - tmr >= 0 && millis() - tmr <= 15000) {
digitalWrite(LED_PIN_R, HIGH);
tone(BUZZER_PIN, 500, 15000);
}
if (millis() - tmr >= 15000) {
tmr = millis();
tone(BUZZER_PIN, 0, 0);
digitalWrite(LED_PIN_R, LOW);
}
}
он должен выводить информацию состояния метеодатчика и датчика дыма на монитор, а при превышении порогового значения для датчика дыма в 400 единиц - включать зуммер и светодиод