Отключить пин контрастности от текстового дисплея 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
И отдельно разбирайтесь с датчиками. Повторюсь, примеры к библиотекам смотрите!
Эта функция включает и отключает подсветку дисплея, а надписи на нем остаются.
Проверяли? По описанию эта команда именно включает и отключает отображение находящихся в памяти данных.
Да, проверял, тк сам думал, что это именно то, что мне нужно.
Написал программу
За идиотов-то всех держать не надо. Не написал, а скомуниздил по частям ни хрена не понимая, что именно тыришь :)
Единственное, что "позаимствовал"-это мелодии