Добрый вечер, форум! Подскажите пожалуйста! Когда я отдельно подключаю экран и датчик 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); }
Необходимо внимательней ознакомиться с документацией на Ethernet-Shield -- какие пины он использует? LCD дисплей не должен подключаться к этим пинам.