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

riba
Offline
Зарегистрирован: 05.08.2015

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

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

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

Скетч № 1 только для экрана (рабочий)

#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!"); // выводим на дисплей традиционную фразу
  lcd.setCursor(0, 1);
  lcd.print("1234jkjkjk!"); // выводим на дисплей традиционную фразу
}
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 (экран почему то перестает что либо показывать хотя код тот же!)

#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;                          // Значение влажности
int codeLCD = 0;                          // Код для LCDisplay()
char server[] = "lydreev.bget.ru";

 /*--------------------------------------------------------------
 Необходимые настройки
 --------------------------------------------------------------*/
void setup()
{
   lcd.begin(20, 4);// задаем размерность дисплея
  //Старт
 lcd.print("hello, world!");
  Serial.begin(9600);
  Ethernet.begin(mac);
  dht.begin();
 
}
/*--------------------------------------------------------------
 Основное тело программы
 --------------------------------------------------------------*/
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);
}



 

 

 

ratman
Offline
Зарегистрирован: 11.10.2015

riba пишет:

В чем может быть проблема? Как вообще так? в чем конфликт? Отдельно от Ethernet-кода экран работает, а вместе с Ethernet кодом - лагает!

А ничего, что шилд 11-12 ноги тоже использует?