Объединение кода для нескольких датчиков в одной программе (Arduino)
Мне нужно одновременно использовать 2 разных датчика (газ и DHT11). Мне удалось запустить каждый из них по отдельности, и я не знаю, как манипулировать кодом, чтобы они могли работать вместе.
Вот скетчи:
Код датчика газа MQ2:
int redLed = 12;
int greenLed = 11;
int buzzer = 10;
int smokeA0 = A5;
// пороговое значение
int sensorThres = 400;
void setup() {
pinMode(redLed, OUTPUT);
pinMode(greenLed, OUTPUT);
pinMode(buzzer, OUTPUT);
pinMode(smokeA0, INPUT);
Serial.begin(9600);
}
void loop() {
int analogSensor = analogRead(smokeA0);
Serial.print("Concentration: ppm ");
Serial.println(analogSensor);
// Проверяем, достиг ли он порогового значения
if (analogSensor > sensorThres)
{
digitalWrite(redLed, HIGH);
digitalWrite(greenLed, LOW);
tone(buzzer, 1000, 200);
}
else
{
digitalWrite(redLed, LOW);
digitalWrite(greenLed, HIGH);
noTone(buzzer);
}
delay(100);
Это код DHT11:
#include <SimpleDHT.h>
int pinDHT11 = 7;
SimpleDHT11 dht11(pinDHT11);
void setup() {
// начать работать...
Serial.begin(9600);
Serial.println("Temperature and Humidity Data");
}
void loop() {
delay (250);
// чтение без выборок.
byte temperature = 0;
byte humidity = 0;
int err = SimpleDHTErrSuccess;
if ((err = dht11.read(&temperature, &humidity, NULL)) != SimpleDHTErrSuccess) {
Serial.print("Read DHT11 failed, err="); Serial.println(err);delay(1000);
return;
}
Serial.print((int)temperature); Serial.print(" *C, ");
Serial.print((int)humidity); Serial.println(" H");
// Частота дискретизации DHT11 составляет 1 Гц.
delay(1500);
}
@Wael Jomni, 👍0
1 ответ
Лучший ответ:
Вам необходимо объединить 3 основные области кода: раздел включения/объявления, в который включаются файлы, и объявляются глобальные переменные. Затем объедините функции setup(), а затем объедините функции loop(). В итоге выглядит примерно так, как показано ниже. Однако вам, возможно, придется настроить время задержки
#include <SimpleDHT.h>
int redLed = 12;
int greenLed = 11;
int buzzer = 10;
int smokeA0 = A5;
// пороговое значение
int sensorThres = 400;
int pinDHT11 = 7;
SimpleDHT11 dht11(pinDHT11);
void setup() {
pinMode(redLed, OUTPUT);
pinMode(greenLed, OUTPUT);
pinMode(buzzer, OUTPUT);
pinMode(smokeA0, INPUT);
Serial.begin(9600);
Serial.println("Starting");
}
void loop() {
int analogSensor = analogRead(smokeA0);
Serial.print("Concentration: ppm ");
Serial.println(analogSensor);
// Проверяем, достиг ли он порогового значения
if (analogSensor > sensorThres)
{
digitalWrite(redLed, HIGH);
digitalWrite(greenLed, LOW);
tone(buzzer, 1000, 200);
}
else
{
digitalWrite(redLed, LOW);
digitalWrite(greenLed, HIGH);
noTone(buzzer);
}
delay(250);
// чтение без выборок.
byte temperature = 0;
byte humidity = 0;
int err = SimpleDHTErrSuccess;
if ((err = dht11.read(&temperature, &humidity, NULL)) != SimpleDHTErrSuccess) {
Serial.print("Read DHT11 failed, err="); Serial.println(err);delay(1000);
return;
}
Serial.print((int)temperature); Serial.print(" *C, ");
Serial.print((int)humidity); Serial.println(" H");
// Частота дискретизации DHT11 составляет 1 Гц.
delay(1500);
}
Другой способ сделать это, который упрощает чтение, — переместить содержимое каждого основного цикла в отдельную функцию, а затем вызвать две функции из цикла(). Это позволяет вам легко закомментировать одну из функций, чтобы устранить неполадки, или даже позволить вам вызывать одну чаще, чем другую, в зависимости от ваших потребностей (можно посмотреть на пример мигания без задержки, чтобы узнать, как управлять синхронизацией)
#include <SimpleDHT.h>
int redLed = 12;
int greenLed = 11;
int buzzer = 10;
int smokeA0 = A5;
// пороговое значение
int sensorThres = 400;
int pinDHT11 = 7;
SimpleDHT11 dht11(pinDHT11);
void setup() {
pinMode(redLed, OUTPUT);
pinMode(greenLed, OUTPUT);
pinMode(buzzer, OUTPUT);
pinMode(smokeA0, INPUT);
Serial.begin(9600);
Serial.println("Starting");
}
void loop1(){
int analogSensor = analogRead(smokeA0);
Serial.print("Concentration: ppm ");
Serial.println(analogSensor);
// Проверяем, достиг ли он порогового значения
if (analogSensor > sensorThres)
{
digitalWrite(redLed, HIGH);
digitalWrite(greenLed, LOW);
tone(buzzer, 1000, 200);
}
else
{
digitalWrite(redLed, LOW);
digitalWrite(greenLed, HIGH);
noTone(buzzer);
}
delay(100);
}
void loop2(){
delay (250);
// чтение без выборок.
byte temperature = 0;
byte humidity = 0;
int err = SimpleDHTErrSuccess;
if ((err = dht11.read(&temperature, &humidity, NULL)) != SimpleDHTErrSuccess) {
Serial.print("Read DHT11 failed, err="); Serial.println(err);delay(1000);
return;
}
Serial.print((int)temperature); Serial.print(" *C, ");
Serial.print((int)humidity); Serial.println(" H");
// Частота дискретизации DHT11 составляет 1 Гц.
delay(1500);
}
void loop() {
loop1();
loop2();
}
- Программа arduino выдаёт ошибку expected //primary-expression before ')' token error: //expected ';' before '}' token E
- (Код ультразвукового датчика: такого файла или каталога нет)
- Несколько неблокирующих таймеров обратного отсчета?
- Датчик HC-SR505 PIR выдает только HIGH уровень
- Отправка данных из ESP8266 в PHP
- Определение уровня заряда с помощью датчика тока (ACS758) с arduino uno
- Использование YS-IRTM с Arduino Uno
- Как объединить два разных скетча датчика в один полный скетч?