Проблемы с LCD-экраном когда одновременно с кодом Ethernet-Shield

Тема в разделе "Arduino & Shields", создана пользователем riba, 21 дек 2015.

  1. riba

    riba Нуб

    Добрый вечер, форум! Подскажите пожалуйста! Когда я отдельно подключаю экран и датчик DHT22 к ардуино - все хорошо показывается на экране (скетч №1), когда отдельно отправляю данные на удаленный сервер - тоже все норм,
    как только пытаюсь совместить два данных скетча в один - экран перестает показывать! хотя код тот же! либо ничего не показывает вообще, либо, если вывести какой-то текст в void setup(), то он секунд за 10 потихоньку очищяется до чистого состояния!

    В чем может быть проблема? Как вообще так? в чем конфликт? Отдельно от Ethernet-кода экран работает, а вместе с Ethernet кодом - лагает!
    Подключил экран точно правильно, ведь скетч №1 работает сколь угодно долго и все нормально показывает, но стоит соеденить код с кодом ethernet - не показывается ничего!

    Привожу рабочий скетч № 1 и общий скетч (где экран почемуто перестает работать)

    Скетч № 1 только для экрана (рабочий)
    Код (C++):
    #include "DHT.h"
    #include <LiquidCrystal.h> //Подключаем библиотеку для работы с LCD
    LiquidCrystal lcd(12, 11, 6, 5, 4, 3); // инициализируем LCD, указывая управляющие контакты
    DHT dht(2, DHT22);
    float h;                                    // Значение температуры
    float t;


    void setup() {
      lcd.begin(20, 4);// задаем размерность дисплея
      lcd.print("hello, world!"); // выводим на дисплей традиционную фразу
    }
    void loop() {
      h = dht.readHumidity();
      t = dht.readTemperature();
      showData(t,h);
    }

    void showData(float t, float h) {
    lcd.setCursor(0, 0);
      lcd.print("Temperature: ");
      lcd.print(t);
      lcd.setCursor(0, 1);
      lcd.print("Humidity: ");
      lcd.print(h);
    }

    Общий скетч для экрана и ethernet shield (экран почему то перестает что либо показывать хотя код тот же!)
    Код (C++):
    #include <SPI.h>
    #include <Ethernet.h>
    #include "DHT.h"
    #include <LiquidCrystal.h>
    //Константы
    #define DHTPIN 2
    DHT dht(DHTPIN, DHT22);

    byte mac[] = {
      0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // Мак адрес
    EthernetClient client;
    LiquidCrystal lcd(12, 11, 6, 5, 4, 3);
    //Переменные
    unsigned long int timeConn = millis();      // Частота отправки данных о t/h на сервер
    float h;                                    // Значение температуры
    float t;                          // Значение влажности

    char server[] = "lidreev.bget.ru";

    /*--------------------------------------------------------------
    Необходимые настройки
    --------------------------------------------------------------*/

    void setup()
    {
       lcd.begin(20, 4);// задаем размерность дисплея
      //Старт
      Serial.begin(9600);
      Ethernet.begin(mac);
      dht.begin();
      lcd.print("hello, world!");
    }
    /*--------------------------------------------------------------
    Основное тело программы
    --------------------------------------------------------------*/

    void loop()
    {
        h = dht.readHumidity();
      t = dht.readTemperature();
      if (millis() - timeConn > 10000) {
        sendData(t,h);
        timeConn =millis();
        Serial.println("CONNECT SERVER: Send temp/hum");
      }
       showData(t,h);
    }
    /*--------------------------------------------------------------
    Функция отправляет данные о температуре и влажности на
    WEB сервер.
    --------------------------------------------------------------*/

    void sendData(float t, float h) {
    if (client.connect(server, 80)) {
      Serial.println("connecting...");
      Serial.println("Температура: "+floatToString(t,3));
      Serial.println("Влажность: "+floatToString(h,3));
      client.print( "GET /arduino/index.php?");
      client.print("t=");
      client.print(t);
      client.print("&");
      client.print("h=");
      client.print(h);
      client.println(" HTTP/1.1");
      client.print( "Host: " );
      client.println(server);
      client.println( "Connection: close" );
      client.println();
      client.println();
      client.stop();
      client.flush();
    }
    }

    void showData(float t, float h) {
    lcd.setCursor(0, 0);
      lcd.print("Temperature: ");
      lcd.print(t);
      lcd.setCursor(0, 1);
      lcd.print("Humidity: ");
      lcd.print(h);
    }

    String floatToString(float value, byte precision){
      int intVal = int(value);
      unsigned int frac;
      if(intVal >= 0){
        frac = (value - intVal) * precision;
      }
      else {
        frac = (intVal - value) * precision;
      }
      return String(intVal) + "." + String(frac);
    }



     
     
  2. AlexU

    AlexU Гуру

    Необходимо внимательней ознакомиться с документацией на Ethernet-Shield -- какие пины он
    использует? LCD дисплей не должен подключаться к этим пинам.