Объединение кода для нескольких датчиков в одной программе
Мне нужно управлять 3 разными датчиками (взято по 6 датчиков каждого типа) с помощью Arduino Mega2560 :-
- DHT11 (датчик температуры и влажности)
- MQ5 (датчик газа) и
- Датчик влажности почвы {взято по 6 штук каждого типа (всего=18).}
Мне удалось запустить каждый из них отдельно, и я не знаю, как манипулировать кодом, чтобы они могли работать все вместе. У меня базовый опыт программирования, поэтому было бы здорово, если бы кто-нибудь помог мне объединить эти коды.
Вот скетчи:
Код MQ5:
int sensor=7;
int gas_value;
void setup()
{
pinMode(sensor,INPUT);
Serial.begin(9600);
}
void loop()
{
gas_value=digitalRead(sensor);
Serial.println(gas_value);
}
{другие цифровые контакты, которые будут использоваться: D6,D5,D4,D3,D2
Код DHT11:
#include <dht.h>
#include <dht.h>
#include "dht.h"
#define dht_apin A0 // Датчик аналогового контакта подключен к
dht DHT;
void setup(){
Serial.begin(9600);
delay(500);//Задержка для загрузки системы
Serial.println("DHT11 Humidity & temperature Sensor\n\n");
delay(1000);//Подождите перед доступом к датчику
}//завершаем "setup()"
void loop(){
//Начало программы
DHT.read11(dht_apin);
Serial.print("Current humidity = ");
Serial.print(DHT.humidity);
Serial.print("% ");
Serial.print("temperature = ");
Serial.print(DHT.temperature);
Serial.println("C ");
delay(5000);//Подождите 5 секунд, прежде чем снова получить доступ к датчику.
//Самое быстрое должно быть раз в две секунды.
}// завершаем цикл()
{аналоговые контакты для других датчиков: A1,A2,A3,A4,A5
Код датчика влажности почвы:
int sensor_pin = A6;
int output_value ;
void setup() {
Serial.begin(9600);
Serial.println("Reading From the Sensor ...");
delay(2000);
}
void loop() {
output_value= analogRead(sensor_pin);
output_value = map(output_value,550,0,0,100);
Serial.print("Mositure : ");
Serial.print(output_value);
Serial.println("%");
delay(1000);
}
{Аналоговые контакты для других датчиков, которые будут использоваться: A6,A7,A8,A9,A10
@Deepanshu, 👍1
Обсуждение2 ответа
Лучший ответ:
Все, что находится перед void setup()
, помещается перед одной функцией setup()
. Все вещи в void setup()
помещаются в один void setup()
— не дублируйте такие вещи, как #include
или Serial. начать()
. И вещи из функции loop()
помещаются в функцию loop()
.
Хорошей практикой является не использовать delay()
в loop()
, когда вы обрабатываете больше одного объекта. Вместо delay()
используйте millis()
, чтобы получить текущее время безотказной работы и после этого сравнить это время безотказной работы с последним временем безотказной работы проверки.
Я изменил ваш код, так что прочтите его и попробуйте.
#include <dht.h>
#define dht_apin A0 // Датчик аналогового контакта подключен к
dht DHT;
int sensor=7;
int gas_value;
int sensor_pin = A6;
int output_value ;
unsigned long gas_last_time = 0;
unsigned long dht11_last_time = 0;
unsigned long analog_last_time = 0;
void setup(){
Serial.begin(9600);
pinMode(sensor,INPUT);
}
void loop(){
if(millis() - gas_last_time >= 10){
gas_last_time = millis();
gas_value=digitalRead(sensor);
Serial.println(gas_value);
}
if(millis() - dht11_last_time >= 5000){
dht11_last_time = millis();
DHT.read11(dht_apin);
Serial.print("Current humidity = ");
Serial.print(DHT.humidity);
Serial.print("% ");
Serial.print("temperature = ");
Serial.print(DHT.temperature);
Serial.println("C ");
}
if(millis() - analog_last_time >= 1000){
analog_last_time = millis();
output_value= analogRead(sensor_pin);
output_value = map(output_value,550,0,0,100);
Serial.print("Mositure : ");
Serial.print(output_value);
Serial.println("%");
}
}
Огромное вам спасибо за вашу драгоценную помощь, особенно за то, что вы сообщили мне основные вещи, которые вы мне сказали через свой код. Большое вам спасибо, благодаря вашей помощи, ребята, я завершил свой код. (извините, что ответил слишком поздно со дня завершения кода), @Deepanshu
@Deepanshu Нет проблем. :), @Matej
В целом:
Все #define
и #include
помещаются из всех отдельных скетчей вверху.
Глобальные определения и определения функций (за исключением setup()
и loop()
) смешиваются под #define
и >#include
s.
Весь код в отдельных setup()
помещается в объединенный setup()
.
Весь код в отдельных loop()
помещается в объединенный loop()
.
Вы должны знать, что любой loop()
из отдельных программ, включающих delay()
, скорее всего, придется переработать, чтобы использовать тот же тип запланированного метод выполнения, как в примере Blink Without Delay из Arduino. delay()
останавливает всю программу, пока она крутит большие пальцы, что означает, что другие ваши датчики в это время не считываются и не управляются.
Огромное спасибо за вашу драгоценную помощь. Благодаря вашей помощи, ребята, я завершил свой код. (Извините, что ответил слишком поздно со дня завершения кода), @Deepanshu
- Что выбрать между датчиками температуры и влажности: AM230x или DHT22?
- Проблемы с срабатыванием датчика PIR сами по себе
- Проблема с условием if
- Водонепроницаемый датчик температуры SPI.
- Проблема MAX31865 и PT100
- Возможно ли, чтобы температура тела, кровяное давление, оксиметр и датчик частоты пульса находились только в одном Arduino UNO?
- DS18B20 дает высокие показания. Как заставить его вернуть правильную температуру?
- Использование аналогового входа для чтения кнопки
ваша готовая программа должна иметь блоки setup() и цикл()..... что, по вашему мнению, должно произойти с кодами в трех блоках setup()? ..... что, по вашему мнению, должно произойти с кодом в трех блоках цикла ()?, @jsotola