Отключить пин контрастности от текстового дисплея 20х4

prokofich
Offline
Зарегистрирован: 19.07.2019

Ребят сколько не пытался не мог найти ответ на свой вопрос. Написал программу, идея такая: переключение режимов дисплея с помощью ИК-пульта, но столкнулся с такими трудностями, что не понимаю, как отключить пин контрастности от текстового дисплея 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);

  }

 

kalapanga
Offline
Зарегистрирован: 23.10.2016

Проблема в том, что Вы все вопросы в кучу свалили и пытаетесь решать всё разом. Внятно по пунктам распишите, что у Вас работает, что не работает, что работает, но не так как нужно (а как?). Как минимум нужно ответить на вопросы:

- Сигналы с пульта принимаются? Правильные?

- Какой-нибудь текст на дисплей выводить получается?

- Датчики работают? Без всякого пульта Вы можете вывести на дисплей показания конкретного датчика?

- Ну и конечно чем провинился пин контрастности, что Вам его отключать нужно?

prokofich
Offline
Зарегистрирован: 19.07.2019

Сигналы с пульта принимаются отлично. Текст выводится. Датчики все работают и можно переключаться между ними, но показания с них не обновляются . Отключение пина необходимо для того, чтобы реализовать выключение экрана, но если есть другой вариант, с радостью прочту его.

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Запитать дисплей через транзисторный ключ и отключать его совсем.

b707
Offline
Зарегистрирован: 26.05.2017

prokofich - у вас в коде полный ужас, почитайте описания библиотек DHT и Sensorlight, в частности функций read() в обоих библиотеках - вы читаете значения датчиков "в пустоту"

Ну и функции vkl() и vikl() - это просто вынос мозга. Я уже не первый раз вижу эти задержки с восемью знаками после запятой - какой-то тупой дебил написал, а все остальные за ним копируют...

kalapanga
Offline
Зарегистрирован: 23.10.2016

Ох уж эти хирурги, всё бы им резать и резать! Нет чтобы примеры к библиотеке посмотреть. :)

lcd.noDisplay(); // Turn off the display

lcd.display(); // Turn on the display

И отдельно разбирайтесь с датчиками. Повторюсь, примеры к библиотекам смотрите!

prokofich
Offline
Зарегистрирован: 19.07.2019

Эта функция включает и отключает подсветку дисплея, а надписи на нем остаются.

kalapanga
Offline
Зарегистрирован: 23.10.2016

prokofich пишет:
Эта функция включает и отключает подсветку дисплея, а надписи на нем остаются.

Проверяли? По описанию эта команда именно включает и отключает отображение находящихся в памяти данных.

prokofich
Offline
Зарегистрирован: 19.07.2019

Да, проверял, тк сам думал, что это именно то, что мне нужно.

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

prokofich пишет:

Написал программу

За идиотов-то всех держать не надо. Не написал, а скомуниздил по частям ни хрена не понимая, что именно тыришь :)

prokofich
Offline
Зарегистрирован: 19.07.2019

Единственное, что "позаимствовал"-это мелодии

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

b707 пишет:
какой-то тупой дебил написал, а все остальные за ним копируют...
Похоже, отсюда.