Часы+датчик влажности. Как объединить скетчи? Arduino Uno

Тема в разделе "Arduino & Shields", создана пользователем Vladimir75rus, 8 май 2018.

  1. Vladimir75rus

    Vladimir75rus Нерд

    Вообщем решил сделать часы+датчик влажности. Нашел 2 скетча в интернете:
    1) Скетч на часы
    2) Скетч на датчик влажности
    Так вот вопрос как объединить эти 2 скетча в 1, чтобы на LCD выводились часы и температура. В программирование я еще новичок, попробовал сам склеить, но получалось так что у меня на LCD температура идет нормально, а часы делают задержку(пропадали и появлялись) на 1 сек. Пробовал убрать delay() стало только хуже )
    Вообщем помогите соединить эти два скетча, чтобы не было задержки )

    Код (C++):



    #include <Wire.h>
    #include "RTClib.h"
    #include <LiquidCrystal_I2C.h>
    RTC_DS1307 rtc;
    LiquidCrystal_I2C lcd(0x3F,16,2);
    //-----------------------------------



    void setup () {

      Wire.begin();
      rtc.begin();
      lcd.init();
      lcd.backlight();
      delay(500);
      lcd.setCursor(0,0);
      lcd.print("Welcome to ZV");
      lcd.setCursor(0,1);
        delay(500);
      lcd.print("Pleasant use");
      delay(2000);
    lcd.home();
    lcd.clear();
    delay(500);




    //-----------------------------------

    while (!Serial);

      Serial.begin(57600);
      if (! rtc.begin()) {
        Serial.println("Couldn't find RTC");
        while (1);
      }

      if (! rtc.isrunning()) {
        Serial.println("RTC is NOT running!");
     
         rtc.adjust(DateTime(__DATE__, __TIME__));
     
      }
    }





    void loop () {


      digitalClockDisplay();
    //delay(1000);
    //-------------------------------------------

    DateTime now = rtc.now();
     
        Serial.print(now.year(), DEC);
        Serial.print('/');
        Serial.print(now.month(), DEC);
        Serial.print('/');
        Serial.print(now.day(), DEC);
        Serial.print(" (");
        Serial.print(") ");
        Serial.print(now.hour(), DEC);
        Serial.print(':');
        Serial.print(now.minute(), DEC);
        Serial.print(':');
        Serial.print(now.second(), DEC);
        Serial.println();
     
        Serial.print(" since midnight 1/1/1970 = ");
        Serial.print(now.unixtime());
        Serial.print("s = ");
        Serial.print(now.unixtime() / 86400L);
        Serial.println("d");
     
     
     
        Serial.print(" now + 7d + 30s: ");
    //    Serial.print(future.year(), DEC);
        Serial.print('/');
    //    Serial.print(future.month(), DEC);
        Serial.print('/');
    //    Serial.print(future.day(), DEC);
        Serial.print(' ');
    //    Serial.print(future.hour(), DEC);
        Serial.print(':');
    //    Serial.print(future.minute(), DEC);
        Serial.print(':');
    //    Serial.print(future.second(), DEC);
        Serial.println();
     
        Serial.println();
        delay(1000);





    }


    //--------section out to LCD 16x2--------------

    void digitalClockDisplay(){

      DateTime now = rtc.now();


      //-----------------------------------
      lcd.setCursor(0, 0);
      lcd.print(now.hour()/10);
      lcd.print(now.hour()%10);
      lcd.setCursor(2, 0);
      lcd.print(':');
      lcd.setCursor(3, 0);
      lcd.print(now.minute()/10);
      lcd.print(now.minute()%10);
      lcd.setCursor(5, 0);
      lcd.print(':');
      lcd.setCursor(6, 0);
      lcd.print(now.second()/10);
      lcd.print(now.second()%10);

      //---------------------------------------

      //--------------------------------------
      lcd.setCursor(0, 1);
      lcd.print(now.day()/10);
      lcd.print(now.day()%10);
      lcd.setCursor(2, 1);
      lcd.print('/');
      lcd.setCursor(3, 1);
      lcd.print(now.month()/10);
      lcd.print(now.month()%10);
      lcd.setCursor(5, 1);
      lcd.print('/');
      lcd.setCursor(6, 1);
      lcd.print(now.year()%100);


    }
     

    Код (C++):
    #include <Wire.h>        // Добавляем необходимые библиотеки
    #include <LiquidCrystal_I2C.h>
    #include <dht11.h>
    dht11 DHT;               // Объявление переменной класса dht11
    #define DHT11_PIN 2     // Датчик DHT11 подключен к цифровому пину номер 4

    byte degree[8] =         // Битовая маска символа градуса
    {
      B00111,
      B00101,
      B00111,
      B00000,
      B00000,
      B00000,
      B00000,
    };  
    LiquidCrystal_I2C lcd(0x3F,16,2);   // Задаем адрес и размерность дисплея

    void setup()
    {
      lcd.init();                       // Инициализация lcd          
      lcd.backlight();                  // Включаем подсветку
      lcd.createChar(1, degree);        // Создаем символ под номером 1
    }

    void loop()
    {
      // Выводим показания влажности и температуры
      lcd.setCursor(0, 0);              // Устанавливаем курсор в начало 1 строки
      lcd.print("          h:   % ");     // Выводим текст
      lcd.setCursor(12, 0);
      lcd.print(DHT.humidity, 1);
      lcd.setCursor(0, 1);              // Устанавливаем курсор в начало 2 строки
      lcd.print("          t:  \1C ");    // Выводим текст, \1 - значок градуса
      lcd.setCursor(12, 1);          
      lcd.print(DHT.temperature,1);

      int chk;  
      ; // Мониторинг ошибок
      chk = DHT.read(DHT11_PIN);    // Чтение данных
      switch (chk){
      case DHTLIB_OK:
        break;
      case DHTLIB_ERROR_CHECKSUM:
        lcd.clear();
        lcd.print("Checksum error");
        break;
      case DHTLIB_ERROR_TIMEOUT:
        lcd.clear();
        lcd.print("Time out error");
        break;
      default:
        lcd.clear();
        lcd.print("Unknown error");
        break;
      }
      delay(1000);                  
    }
     
    Последнее редактирование: 8 май 2018
  2. b707

    b707 Гуру

    давайте-ка сами.
     
  3. Airbus

    Airbus Радиохулиган Модератор

    Держи!
    Код (C++):
    #include <Wire.h>
    #include "RTClib.h"
    #include <LiquidCrystal_I2C.h>
    RTC_DS1307 rtc;
    LiquidCrystal_I2C lcd(0x3F,16,2);
    //-----------------------------------

    void setup () {

      Wire.begin();
      rtc.begin();
      lcd.init();
      lcd.backlight();
      delay(500);
      lcd.setCursor(0,0);
      lcd.print("Welcome to ZV");
      lcd.setCursor(0,1);
        delay(500);
      lcd.print("Pleasant use");
      delay(2000);
    lcd.home();
    lcd.clear();
    delay(500);




    //-----------------------------------

    while (!Serial);

      Serial.begin(57600);
      if (! rtc.begin()) {
        Serial.println("Couldn't find RTC");
        while (1);
      }

      if (! rtc.isrunning()) {
        Serial.println("RTC is NOT running!");
         rtc.adjust(DateTime(__DATE__, __TIME__));
      }
    }





    void loop () {


      digitalClockDisplay();
    //delay(1000);
    //-------------------------------------------

    DateTime now = rtc.now();
        Serial.print(now.year(), DEC);
        Serial.print('/');
        Serial.print(now.month(), DEC);
        Serial.print('/');
        Serial.print(now.day(), DEC);
        Serial.print(" (");
        Serial.print(") ");
        Serial.print(now.hour(), DEC);
        Serial.print(':');
        Serial.print(now.minute(), DEC);
        Serial.print(':');
        Serial.print(now.second(), DEC);
        Serial.println();
        Serial.print(" since midnight 1/1/1970 = ");
        Serial.print(now.unixtime());
        Serial.print("s = ");
        Serial.print(now.unixtime() / 86400L);
        Serial.println("d");
        Serial.print(" now + 7d + 30s: ");
    //    Serial.print(future.year(), DEC);
        Serial.print('/');
    //    Serial.print(future.month(), DEC);
        Serial.print('/');
    //    Serial.print(future.day(), DEC);
        Serial.print(' ');
    //    Serial.print(future.hour(), DEC);
        Serial.print(':');
    //    Serial.print(future.minute(), DEC);
        Serial.print(':');
    //    Serial.print(future.second(), DEC);
        Serial.println();
        Serial.println();
        delay(1000);

    }


    //--------section out to LCD 16x2--------------

    void digitalClockDisplay(){

      DateTime now = rtc.now();


      //-----------------------------------
      lcd.setCursor(0, 0);
      lcd.print(now.hour()/10);
      lcd.print(now.hour()%10);
      lcd.setCursor(2, 0);
      lcd.print(':');
      lcd.setCursor(3, 0);
      lcd.print(now.minute()/10);
      lcd.print(now.minute()%10);
      lcd.setCursor(5, 0);
      lcd.print(':');
      lcd.setCursor(6, 0);
      lcd.print(now.second()/10);
      lcd.print(now.second()%10);

      //---------------------------------------

      //--------------------------------------
      lcd.setCursor(0, 1);
      lcd.print(now.day()/10);
      lcd.print(now.day()%10);
      lcd.setCursor(2, 1);
      lcd.print('/');
      lcd.setCursor(3, 1);
      lcd.print(now.month()/10);
      lcd.print(now.month()%10);
      lcd.setCursor(5, 1);
      lcd.print('/');
      lcd.setCursor(6, 1);
      lcd.print(now.year()%100);


    }

    #include <Wire.h>        // Добавляем необходимые библиотеки
    #include <LiquidCrystal_I2C.h>
    #include <dht11.h>
    dht11 DHT;               // Объявление переменной класса dht11
    #define DHT11_PIN 2     // Датчик DHT11 подключен к цифровому пину номер 4

    byte degree[8] =         // Битовая маска символа градуса
    {
      B00111,
      B00101,
      B00111,
      B00000,
      B00000,
      B00000,
      B00000,
    };
    LiquidCrystal_I2C lcd(0x3F,16,2);   // Задаем адрес и размерность дисплея

    void setup()
    {
      lcd.init();                       // Инициализация lcd        
      lcd.backlight();                  // Включаем подсветку
      lcd.createChar(1, degree);        // Создаем символ под номером 1
    }

    void loop()
    {
      // Выводим показания влажности и температуры
      lcd.setCursor(0, 0);              // Устанавливаем курсор в начало 1 строки
      lcd.print("          h:   % ");     // Выводим текст
      lcd.setCursor(12, 0);
      lcd.print(DHT.humidity, 1);
      lcd.setCursor(0, 1);              // Устанавливаем курсор в начало 2 строки
      lcd.print("          t:  \1C ");    // Выводим текст, \1 - значок градуса
      lcd.setCursor(12, 1);        
      lcd.print(DHT.temperature,1);

      int chk;
      ; // Мониторинг ошибок
      chk = DHT.read(DHT11_PIN);    // Чтение данных
      switch (chk){
      case DHTLIB_OK:
        break;
      case DHTLIB_ERROR_CHECKSUM:
        lcd.clear();
        lcd.print("Checksum error");
        break;
      case DHTLIB_ERROR_TIMEOUT:
        lcd.clear();
        lcd.print("Time out error");
        break;
      default:
        lcd.clear();
        lcd.print("Unknown error");
        break;
      }
      delay(1000);                
    }
    Что ещё сюда впихнуть?WEBradio?
     
  4. Vladimir75rus

    Vladimir75rus Нерд



    Ошибку выводит
     
  5. b707

    b707 Гуру

    придется все-таки самому....