Вопрос: как объединить два разных кода

Я увлекаюсь Arduino, и у меня возникли проблемы с одновременным запуском двух скетчей на Arduino UNO. В первом случае речь идет о программе, которая считывает температуру и относительную влажность, а во втором - о программе, которая считывает барометрическое давление. Обе программы работают независимо, но когда я пытаюсь объединить их, никакой помощи

это код для определения температуры и относительной влажности:


#include <Adafruit_Sensor.h>
#include <LiquidCrystal.h>
#include <DHT.h>
#include <DHT_U.h>

//ПЕРЕМЕННЫЕ
//Asignación de los pines digitales
int SENSOR = 2; //Este es el pin #2
int RS = 4;
int E = 5;
int D4 = 6;
int D5 = 7;
int D6 = 8;
int D7 = 9;
//Variables de lectura de tempratura y humedad
int temp;
int hume;
//Creación de variables para el sensor y el display
DHT dht(SENSOR,DHT11);                    // Общий формат: DHT <var_name>(PIN, МОДЕЛЬ ДАТЧИКА)
LiquidCrystal lcd(RS, E, D4, D5, D6, D7); // Общий формат: Жидкокристаллический <var_name> (RS, RW, ВКЛЮЧИТЬ, D0, D1, D2, D3, D4, D5, D6, D7)
//Variable para salida del abanico
int motor = 12;

void setup(){
  
  //Инициализация датчика температуры
  dht.begin();
  //Iniciar el LCD
  lcd.begin(16,2); //(tipo 16 columnas, 2 líneas)
  //Setea el Pin 12 como salida
  pinMode(motor,OUTPUT);
         
}

void loop(){ //Este es el buclé principal del programa

  //Lee valores físicos
  hume = dht.readHumidity();
  temp = dht.readTemperature();

  //Limpia el LCD
  lcd.clear(); //esta instrucción coloca el cursor en la pos 0,0 (columna, fila)
  lcd.setCursor(0,0); //(no necesaria porque la linea de arriba ya lo hace)
  //Escribe los valores leídos en el LCD
  lcd.print("TEMPERATURA: ");
  lcd.print(temp);
  lcd.print("C");
  lcd.setCursor(0,1); //esta instrucción coloca el cursor en la pos 0,1 (columna, fila)
  lcd.print("HUMEDAD: ");
  lcd.print(hume);
  lcd.print("%");

  //Activa el motor si la temperatura pasa el valor deseado
  if(temp>=30){ // Compara si la temp ya es 30 grados
    digitalWrite(motor,HIGH); //Si lo es manda un 1 lógico a teavés del pin digital #12
  }
  else{
    digitalWrite(motor,LOW);// sino, manda un 0, lo que apagaría el motor
  }

  delay(2000);//valor en milisengundos para que repita el ciclo
  
}

а это код барометрического давления:

#include <Wire.h>
#include <Adafruit_BMP085.h>

// Подключите VCC датчика BMP085 к напряжению 3,3 В (НЕ 5,0 В!)
// Подключите GND к заземлению
// Подключите SCL к i2c clock - on '168 / '328 Arduino Uno / Duemilanove / etc, Аналоговый 5
// Подключите SDA к данным i2c - на '168 / '328 Arduino Uno / Duemilanove / etc, которые являются аналоговыми 4
// EOC не используется, это означает окончание преобразования
// XCLR - это контакт сброса, также здесь не используемый

Adafruit_BMP085 bmp;
  
void setup() {
  Serial.begin(9600);
  if (!bmp.begin()) {
    Serial.println("Could not find a valid BMP085 sensor, check wiring!");
    while (1) {}
  }
}
  
void loop() {
    Serial.print("Temperature = ");
    Serial.print(bmp.readTemperature());
    Serial.println(" *C");
    
    Serial.print("Pressure = ");
    Serial.print(bmp.readPressure());
    Serial.println(" Pa");
    
    // Рассчитать высоту, предполагая "стандартную" барометрическую
    // давление 1013,25 миллибар = 101325 Паскаль
    Serial.print("Altitude = ");
    Serial.print(bmp.readAltitude());
    Serial.println(" meters");

    Serial.print("Pressure at sealevel (calculated) = ");
    Serial.print(bmp.readSealevelPressure());
    Serial.println(" Pa");

  // вы можете получить более точное измерение высоты
  // если вы знаете текущее давление на уровне моря, которое будет
  // меняется в зависимости от погоды и тому подобного. Если это 1015 миллибар
  // это равно 101500 паскалям.
    Serial.print("Real altitude = ");
    Serial.print(bmp.readAltitude(101500));
    Serial.println(" meters");
    
    Serial.println();
    delay(500);
}

, 👍0

Обсуждение

Если проблема связана с вашим совместным кодом, покажите этот код, а не отдельный скетч, который работает. Вам также нужно подробнее остановиться на значении слова "без помощи", что оно означает? Есть ошибка? не удается скомпилировать? и т.д.., @hcheung

напишите новый скетч , который делает все, что делают два скетча ... замените некоторые из serial.print на lcd.print ... например, в setup () выполните dht.begin, lcd.begin, очистить ЖК-дисплей, отобразить сообщение о запуске на ЖК-дисплее, если bmp.begin не удается, затем отобразите сообщение об ошибке ..... и т. д, @jsotola

вы можете обратиться к [как объединить два кода Arduino] (https://arduinogetstarted.com/faq/how-to-combine-two-arduino-sketches ), @Rozona Zoro


1 ответ


-1

Вам нужно написать одну программу, используя элементы из каждого блока кода. Arduino ни в коем случае не будет запускать обе программы одновременно, он будет запускать только одну или другую. Вы можете скопировать и вставить их вместе, но если все сделано правильно, это не будет работать. Вот почему так важно понимать код, который вы используете.

,