Отключить пин контрастности от текстового дисплея 20х4
- Войдите на сайт для отправки комментариев
Пт, 19/07/2019 - 13:39
Ребят сколько не пытался не мог найти ответ на свой вопрос. Написал программу, идея такая: переключение режимов дисплея с помощью ИК-пульта, но столкнулся с такими трудностями, что не понимаю, как отключить пин контрастности от текстового дисплея 20х4 для выключения с пульта и тем, что данные со всех датчиков не определяются.
#include <IRremote.h> #include <LiquidCrystal.h> #include <TroykaLight.h> #include <TroykaDHT.h> LiquidCrystal lcd(12, 11, 5, 4, 3, 2); int RECV_PIN = 7; int led = 10; int brightness = 0; IRrecv irrecv(RECV_PIN); decode_results results; DHT dht(6, DHT11); TroykaLight sensorLight(A0); #define tonePin 9 void setup() { // запускаем работу ИК приемника irrecv.enableIRIn(); // устанавливаем размер (количество столбцов и строк) экрана lcd.begin(20, 4); delay(3000); lcd.clear(); pinMode(led, OUTPUT); Serial.begin(9600); dht.begin(); } void loop() { // принимаем данные с ИК пульта // в зависимости от нажатой кнопки пульта // даём разные команды роботу if (irrecv.decode(&results)) {if (results.value == 0xFF629D) { vkl(); } else if (results.value == 0xFFA25D) { vikl(); } else if (results.value == 0xFF30CF) { temp();} else if (results.value == 0xFF18E7) { vlazhnost();} else if (results.value == 0xFF7A85) { svet(); } // ждем следующее значение irrecv.resume(); } //делаем задержку delay(100); } void vkl(){ digitalWrite(led,HIGH); // очищаем дисплей lcd.clear(); // устанавливаем размер (количество столбцов и строк) экрана lcd.begin(20, 4); // устанавливаем курсор в колонку 7, строку 0 // на самом деле это первая строка, т.к. нумерация начинается с нуля lcd.setCursor(3, 1); // печатаем первую строку lcd.print("\xA4\xE3""pa""\xB3""c""\xBF\xB3\x79\xB9\xBF""e"","); lcd.setCursor(5, 2); lcd.print("To""\xB3""ap""\xB8\xE6\xB8""!" ); tone(9, 700, 300); delay(600); tone(9, 700, 300); delay(600); tone(9, 780, 150); delay(300); tone(9, 700, 150); delay(300); tone(9, 625, 450); delay(600); tone(9, 590, 150); delay(300); tone(9, 520, 150); delay(300); tone(9, 460, 450); delay(600); tone(9, 350, 450); delay(600); } void vikl(){ lcd.clear(); // устанавливаем размер (количество столбцов и строк) экрана lcd.begin(20, 4); // устанавливаем курсор в колонку 7, строку 0 // на самом деле это первая строка, т.к. нумерация начинается с нуля lcd.setCursor(5, 1); // печатаем первую строку lcd.print("\xE0""o c""\xB3\xB8\xE3""a""\xBD\xB8\xC7"","); lcd.setCursor(6, 2); lcd.print("To""\xB3""ap""\xB8\xE6\xB8""!" ); tone(tonePin, 1244, 156.2499375); delay(173.611041667); tone(tonePin, 1479, 624.99975); delay(694.444166667); delay(520.833125); tone(tonePin, 1479, 156.2499375); delay(173.611041667); tone(tonePin, 1244, 624.99975); delay(694.444166667); delay(520.833125); tone(tonePin, 1661, 156.2499375); delay(173.611041667); tone(tonePin, 1479, 156.2499375); delay(173.611041667); tone(tonePin, 1661, 156.2499375); delay(173.611041667); tone(tonePin, 1479, 156.2499375); delay(173.611041667); tone(tonePin, 1661, 156.2499375); delay(173.611041667); tone(tonePin, 1479, 156.2499375); delay(173.611041667); tone(tonePin, 1661, 156.2499375); delay(173.611041667); tone(tonePin, 1479, 156.2499375); delay(173.611041667); tone(tonePin, 1661, 156.2499375); delay(173.611041667); tone(tonePin, 1864, 624.99975); delay(694.444166667); lcd.clear(); digitalWrite(led,LOW); } void temp(){ digitalWrite(led,HIGH); // очищаем дисплей lcd.clear(); // устанавливаем курсор в колонку 4, строку 1 // на самом деле это вторая строка, т.к. нумерация начинается с нуля lcd.setCursor(4, 1); // считывание данных с датчика // считывание данных с датчика dht.read(); lcd.command(0b101010); tone(tonePin, 294, 100); lcd.print("Te""\xEC\xEF""epa""\xF2\xF3""pa"); lcd.setCursor(6, 2); lcd.print(dht.getTemperatureC()); lcd.print("\xB0""C"); delay(2000); } void svet() { digitalWrite(led,HIGH); lcd.clear(); // устанавливаем курсор в колонку 4, строку 1 // на самом деле это вторая строка, т.к. нумерация начинается с нуля lcd.setCursor(4, 1); // считывание данных с датчика // считывание данных с датчика // считывание данных с датчика освещённости sensorLight.read(); // вывод показателей сенсора освещённости в люксахи lcd.command(0b101000); lcd.print("Oc""\xB3""e""\xE6\xB5\xBD\xBD""oc""\xBF\xC4"); lcd.setCursor(6, 2); lcd.print(sensorLight.getLightLux()); lcd.print("\xA7\xBA"); tone(tonePin, 294, 100); } void vlazhnost(){ digitalWrite(led,HIGH); // очищаем дисплей lcd.clear(); // устанавливаем курсор в колонку 4, строку 1 // на самом деле это вторая строка, т.к. нумерация начинается с нуля lcd.setCursor(5, 1); // считывание данных с датчика // считывание данных с датчика dht.read(); lcd.command(0b101000); lcd.print("B""\xBB""a""\xB6\xBD""oc""\xBF\xC4"); lcd.setCursor(6, 2); lcd.print(dht.getHumidity()); lcd.print("\x25"); tone(tonePin, 294, 100); }
Проблема в том, что Вы все вопросы в кучу свалили и пытаетесь решать всё разом. Внятно по пунктам распишите, что у Вас работает, что не работает, что работает, но не так как нужно (а как?). Как минимум нужно ответить на вопросы:
- Сигналы с пульта принимаются? Правильные?
- Какой-нибудь текст на дисплей выводить получается?
- Датчики работают? Без всякого пульта Вы можете вывести на дисплей показания конкретного датчика?
- Ну и конечно чем провинился пин контрастности, что Вам его отключать нужно?
Сигналы с пульта принимаются отлично. Текст выводится. Датчики все работают и можно переключаться между ними, но показания с них не обновляются . Отключение пина необходимо для того, чтобы реализовать выключение экрана, но если есть другой вариант, с радостью прочту его.
Запитать дисплей через транзисторный ключ и отключать его совсем.
prokofich - у вас в коде полный ужас, почитайте описания библиотек DHT и Sensorlight, в частности функций read() в обоих библиотеках - вы читаете значения датчиков "в пустоту"
Ну и функции vkl() и vikl() - это просто вынос мозга. Я уже не первый раз вижу эти задержки с восемью знаками после запятой - какой-то тупой дебил написал, а все остальные за ним копируют...
Ох уж эти хирурги, всё бы им резать и резать! Нет чтобы примеры к библиотеке посмотреть. :)
lcd.noDisplay(); // Turn off the display
lcd.display(); // Turn on the display
И отдельно разбирайтесь с датчиками. Повторюсь, примеры к библиотекам смотрите!
Эта функция включает и отключает подсветку дисплея, а надписи на нем остаются.
Проверяли? По описанию эта команда именно включает и отключает отображение находящихся в памяти данных.
Да, проверял, тк сам думал, что это именно то, что мне нужно.
Написал программу
За идиотов-то всех держать не надо. Не написал, а скомуниздил по частям ни хрена не понимая, что именно тыришь :)
Единственное, что "позаимствовал"-это мелодии