Как соеденить скетчи?

Тема в разделе "Arduino & Shields", создана пользователем sergoen, 26 янв 2016.

  1. sergoen

    sergoen Нуб

    Имею устройство ардуино уно+ датчик темп влаж + реле блок на 8 реле
    подключил , все работает
    скетч :
    Код (Text):

    #include <DHT.h>

    #include <DHT.h>

    #include "DHT.h"

    #define DHTPIN 2     // вывод, к которому подключается датчик
    #define DHTTYPE DHT22   // DHT 22  (AM2302)
    #define fan 4

    int maxHum = 101;
    int maxTemp = 26.3;

    DHT dht(DHTPIN, DHTTYPE);

    void setup() {
      pinMode(fan, OUTPUT);
      Serial.begin(9600);
      dht.begin();
    }

    void loop() {
      // ждем пару секунд перед началом измерений
      delay(2000);

      // считывание температуры или влажности занимает примерно 250 мс!
      // считанные показания могут отличаться от актуальных примерно на 2 секунды (это очень медленный датчик)
      float h = dht.readHumidity();
      // Считывание температуры в цельсиях
      float t = dht.readTemperature();
      // проверяем, были ли ошибки при считывании и, если были, начинаем заново
      if (isnan(h) || isnan(t)) {
        Serial.println("Failed to read from DHT sensor!");
        return;
      }
      if(h > maxHum || t > maxTemp) {
          digitalWrite(fan, HIGH);
      } else {
         digitalWrite(fan, LOW);
      }
      Serial.print("Humidity: ");
      Serial.print(h);
      Serial.print(" %\t");
      Serial.print("Temperature: ");
      Serial.print(t);
      Serial.println(" *C ");

    }
     
    Вопрос к знатакам - как теперь вывести информацию на жк дисплей ? и как разделить реле ( при температуры срабатывает первое реле , при изменение влажности второе реле) ?
     
  2. Krest

    Krest Нерд

    Нужно вместо куска
    Код (C++):
    Serial.print("Humidity: ");
      Serial.print(h);
      Serial.print(" %\t");
      Serial.print("Temperature: ");
      Serial.print(t);
      Serial.println(" *C ");
    написать код для вывода инфы на дисплей.

    Нужно разделить вот этот if
    Код (C++):
    if(h > maxHum || t > maxTemp) {
          digitalWrite(fan, HIGH);
      } else {
         digitalWrite(fan, LOW);
      }
    На две отдельные части. Одна из них будет включать реле, связанное с температурой, вторая -- реле связанное с влажностью.
     
  3. Vladis_a

    Vladis_a Гик

    Взять любой скетч с выводом информации на дисплейчик. Все, что выше setup перенести также выше setup. Все, что в setup, также вставить в setup. Ну и потом по аналогии все, что ниже.
    Проверять, чтобы пины не попали друг на друга. Пока так.
    А реле разъединять будем уже потом. Глядишь, крупнее меня специалисты подтянутся, помогут.
     
  4. sergoen

    sergoen Нуб

    не совсем понял
    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>
    LiquidCrystal_I2C lcd(0x3F, 16, 2);
    #include <dht11.h>
    dht11 sensor;
    #define DHT11PIN 2
    byte degree[8] = // кодируем символ градуса
    {
    B00111,
    B00101,
    B00111,
    B00000,
    B00000,
    B00000,
    B00000,
    };
    void setup()
    {
    lcd.init();
    lcd.backlight();
    lcd.createChar(1, degree); // Создаем символ под номером 1
    }
    void loop()
    {
    int chk = sensor.read(DHT11PIN);
    lcd.setCursor(0, 0);
    lcd.print("Hum: %");
    lcd.setCursor(11, 0);
    lcd.print(sensor.humidity);
    lcd.setCursor(0, 1);
    lcd.print("temp: C");
    lcd.setCursor(11, 1);
    lcd.print(sensor.temperature);
    delay(2000);
    }

    С этим работает дачик темп и дисплей, как их связать вместе ?
     
  5. Vladis_a

    Vladis_a Гик

    Перечитайте еще раз мой пост. И скетчи лучше так не выкладывайте, глазам больно. :)
     
  6. sergoen

    sergoen Нуб

    Хорошо . Спасибо ! Вот воссоеденил - ошибка
    Код (Text):

    #include <LiquidCrystal_I2C.h>

    #include <DHT.h>

    #include <DHT.h>

    #include "DHT.h"

    #define DHT11PIN 2
    byte degree[8] = // кодируем символ градуса
    {
      B00111,
      B00101,
      B00111,
      B00000,
      B00000,
      B00000,
      B00000,
    #define rele 4

    int maxHum = 100;
    int maxTemp = 26.3;

    DHT dht(DHTPIN, DHTTYPE);

    void setup() {
      pinMode(rele, OUTPUT);
      Serial.begin(9600);
      dht.begin();
    }

    void loop() {
      // ждем пару секунд перед началом измерений
      delay(2000);

      // считывание температуры или влажности занимает примерно 250 мс!
      // считанные показания могут отличаться от актуальных примерно на 2 секунды (это очень медленный датчик)
      float h = dht.readHumidity();
      // Считывание температуры в цельсиях
      float t = dht.readTemperature();
      // проверяем, были ли ошибки при считывании и, если были, начинаем заново
      if (isnan(h) || isnan(t)) {
        Serial.println("Failed to read from DHT sensor!");
        return;
      }
      if(h > maxHum || t > maxTemp) {
          digitalWrite(rele, HIGH);
      } else {
         digitalWrite(rele, LOW);
      }
      int chk = sensor.read(DHT11PIN);
      lcd.setCursor(0, 0);
      lcd.print("Hum:          %");
      lcd.setCursor(11, 0);
      lcd.print(sensor.humidity);
      lcd.setCursor(0, 1);
      lcd.print("temp:         C");
      lcd.setCursor(11, 1);
      lcd.print(sensor.temperature);
      delay(2000);

    }
     

    ошибка -
    exit status 1
    expected primary-expression before 'int'
     
  7. Vladis_a

    Vladis_a Гик

    В setup не вижу чтобы от дисплея что-то перенесли. Ну и ошибку сразу выкладывайте, проще ее искать будет.
     
    sergoen нравится это.
  8. sergoen

    sergoen Нуб

    Код (Text):

    #include <LiquidCrystal_I2C.h>

    #include <DHT.h>

    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>
    LiquidCrystal_I2C lcd(0x3F, 16, 2);
    #include <dht11.h>
    dht11 sensor;
    #define DHT11PIN 2
    byte degree[8] = // кодируем символ градуса
    {
      B00111,
      B00101,
      B00111,
      B00000,
      B00000,
      B00000,
      B00000,
    #define rele 4

    int maxHum = 100;
    int maxTemp = 26.3;

    DHT dht(DHTPIN, DHTTYPE);

    void setup() {
    lcd.init();
      lcd.backlight();
      lcd.createChar(1, degree); // Создаем символ под номером 1
      dht.begin();
    }

    void loop() {
      // ждем пару секунд перед началом измерений
      delay(2000);

      // считывание температуры или влажности занимает примерно 250 мс!
      // считанные показания могут отличаться от актуальных примерно на 2 секунды (это очень медленный датчик)
      float h = dht.readHumidity();
      // Считывание температуры в цельсиях
      float t = dht.readTemperature();
      // проверяем, были ли ошибки при считывании и, если были, начинаем заново
      if (isnan(h) || isnan(t)) {
        Serial.println("Failed to read from DHT sensor!");
        return;
      }
      if(h > maxHum || t > maxTemp) {
          digitalWrite(rele, HIGH);
      } else {
         digitalWrite(rele, LOW);
      }
      int chk = sensor.read(DHT11PIN);
      lcd.setCursor(0, 0);
      lcd.print("Hum:          %");
      lcd.setCursor(11, 0);
      lcd.print(sensor.humidity);
      lcd.setCursor(0, 1);
      lcd.print("temp:         C");
      lcd.setCursor(11, 1);
      lcd.print(sensor.temperature);
      delay(2000);

    }
     

    Вот как то так, но экран не работает ....
     
  9. Vladis_a

    Vladis_a Гик

    Смотрите, у Вас дважды определен DHT. Один раз как sensor, второй раз как dht.