Объединение кода для нескольких датчиков в одной программе

Мне нужно управлять 3 разными датчиками (взято по 6 датчиков каждого типа) с помощью Arduino Mega2560 :-

  1. DHT11 (датчик температуры и влажности)
  2. MQ5 (датчик газа) и
  3. Датчик влажности почвы {взято по 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

, 👍1

Обсуждение

ваша готовая программа должна иметь блоки setup() и цикл()..... что, по вашему мнению, должно произойти с кодами в трех блоках setup()? ..... что, по вашему мнению, должно произойти с кодом в трех блоках цикла ()?, @jsotola


2 ответа


Лучший ответ:

0

Все, что находится перед 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


2

В целом:

Все #define и #include помещаются из всех отдельных эскизов вверху.

Глобальные определения и определения функций (за исключением setup() и loop()) смешиваются под #define и >#includes.

Весь код в отдельных setup() помещается в объединенный setup().

Весь код в отдельных loop() помещается в объединенный loop().

Вы должны знать, что любой loop() из отдельных программ, включающих delay(), скорее всего, придется переработать, чтобы использовать тот же тип запланированного метод выполнения, как в примере Blink Without Delay из Arduino. delay() останавливает всю программу, пока она крутит большие пальцы, что означает, что другие ваши датчики в это время не считываются и не управляются.

,

Огромное спасибо за вашу драгоценную помощь. Благодаря вашей помощи, ребята, я завершил свой код. (Извините, что ответил слишком поздно со дня завершения кода), @Deepanshu