Ход работы

  1. Изучили материал
  2. Сделали схему и задали значения переменных, массивов и пинов
#include <LiquidCrystal.h> //библиотека lcd экрана

const int rs = 12, e = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2; //разъемы подключения lcd экрана 
LiquidCrystal lcd(rs, e, d4, d5, d6, d7); //определение разъемов
//массивы типа данных byte содержат картинку         
byte degree[8] = {0b01100, 0b10010, 0b10010, 0b01100, 0b00000, 0b00000, 0b00000, 0b00000};
byte sun[8] = {0b10000, 0b00110, 0b01111, 0b01111, 0b00110, 0b10000, 0b00101, 0b01001};
byte moon[8] = {0b00000, 0b00000, 0b01110, 0b11101, 0b11111, 0b01110, 0b00000, 0b00000};
byte C[8] = {0b01110, 0b10001, 0b10001, 0b10000, 0b10000, 0b10001, 0b10001, 0b01110};
byte up[8] = {0b00000,0b01110,0b10101,0b10101,0b10001,0b01110,0b00000,0b00000};
byte right[8] = {0b00000,0b01110,0b10001,0b10111,0b10001,0b01110,0b00000,0b00000};
byte down[8] = {0b00000,0b01110,0b10001,0b10101,0b10101,0b01110,0b00000,0b00000};
byte left[8] = {0b00000,0b01110,0b10001,0b11101,0b10001,0b01110,0b00000,0b00000};

//Потенциометр
int sensorValue = 2;
int Value_new;

//Свет
const int sensorPin = 1;
int lightLevel;

//Термодатчик
const int temperaturePin = 0;
float voltage;
int degreesC;

3. Задали значение каждого массива какому-то числу

void setup()
{
  lcd.createChar(1, degree);
  lcd.createChar(2, sun);
  lcd.createChar(3, moon);
  lcd.createChar(4, C);
  //картинки для часов
  lcd.createChar(5, up);
  lcd.createChar(6, right);
  lcd.createChar(7, down);
  lcd.createChar(8, left);
}

4. Написали вспомогательные функции

float tmp_stat() //считает данные с термодатчика
{
  voltage = getVoltage(temperaturePin); //получает вольтаж
  degreesC = (voltage - 0.5) * 100.0; //по формуле считает градусы Цельсия
  return voltage, degreesC; //возвращает градусы и вольтаж
}

float getVoltage(int pin) //получает вольтаж с термодатчика
{
  return (analogRead(pin) * 0.004882814);
}

5. Далее все применялось и писалось в основном цикле

void loop()
{
  
  lightLevel = analogRead(sensorPin); //считывает значение с фоторезистора
  lightLevel = map(lightLevel, 300, 800, 0, 2); //переносит значения из одного диапозана в другой
  lcd.begin(16, 2); //выставление размера экрана
  tmp_stat(); 
  
  //потенциометр
  Value_new = analogRead(sensorValue); //считывает значение с потенциометра
  Value_new = map(Value_new,0,1023,1,3); //переносит значения из одного диапозана в другой
  
  //Основной код
  if (Value_new == 1) //конструкция if. Если значение потенциометра равно 1, то
  {
    lcd.clear(); //lcd.clear() очищает экран
    lcd.setCursor(5, 0); //lcd.setCursor() ставит курсор на позицию 
    lcd.print("Hello!"); //lcd.print() выводит на lcd экран текст/переменную
    lcd.setCursor(11, 1);
    lcd.print(voltage);
    lcd.setCursor(15, 1);
    lcd.print("V");
    lcd.setCursor(0, 1);
    lcd.print("24.05.22");
    delay(1000);
  }
  else if(Value_new == 2)//иначе
  {
    lcd.clear();
    if (degreesC > 100 || degreesC < 0)//если градусов меньше 100 или больше 0, то
    {
      lcd.setCursor(5,0);
    }
    else //иначе
    {
      lcd.setCursor(6,0);
    }
    
    lcd.print(degreesC);
    lcd.setCursor(8,0);
    lcd.write(4); //выводит картинку Цельсия
    lcd.write(1); //выводит картинку градуса 
    lcd.setCursor(0,0);
    lcd.print("Tue.");
    
    if (lightLevel == 0) //если уровень света равен 0, то
    {
      lcd.setCursor(6, 1);
      lcd.write(2); //выводит картинку солнца
      lcd.print("Day");
      delay(1000);      
    }
    
    else if (lightLevel == 1) //иначе
    {
      lcd.setCursor(5, 1);
      lcd.write(3); //выводит картинку луны
      lcd.print("Night");
      delay(1000);
    
    }
    delay(1000);
  }
  else if(Value_new == 3)
  {
    int timer = 8; //переменная "таймер"
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Timer:");
    for (timer; timer != -1; timer--) //цикл обратного отсчета от 8 до 0
    { 
       
      lcd.setCursor(7,0);
      lcd.print(timer);
      
      lcd.setCursor(7,1);
      switch (timer) //конструкция switch case, которая берет значения из переменной timer и выполняет действия равное этому значению
      {
        case 8:
        lcd.write(5);
        break; 
        case 6:
        lcd.write(6);
        break;
        case 4:
        lcd.write(7);
        break;
        case 2:
        lcd.write(8);
        break;
        case 0:
        lcd.write(5);
        break;
      }
      delay(1000);
    }
    lcd.clear();
    lcd.setCursor(3,0);
    lcd.print("Time out!!");
    delay(1000);
    lcd.clear();
  }
}

Как работает информационный стенд

Собирается информация с датчиков
При значении потенциометра:

  1. Выводится “Hello!”, дата и вольтаж
  2. Выводится день недели, температура и в зависимости от уровня света “Day” + картинка солнца / “Night” + картинка луны
  3. Выводится надпись “Timer: ” и начинается обратный отсчет от 8 до 0. На 8 секунде стрелка часов вверх, на 6 вправо, на 4 вниз, на 2 влево, на 0 вверх

Ссылка на проект
https://www.tinkercad.com/things/01NX5n86A7l-edgarda-lcd-/editel?sharecode=zmy6fDQOFQizaFjcn5Jq_SsZTjg8BdG0DH4oyAfqUQI

Компоненты

  • Фоторезистор – 1
  • Резистор 220 Ом – 1
  • Резистор 10 кОм – 1
  • Термодатчик – 1
  • Потенциометр – 1
  • LCD 1602 – 1
Макетка
Arduino UNO R3

Cхема подключения компонентов к плате

Возможности применения в жизни

LCD экран можно применить для:

  • Вывода информации в игрушке, технике или на станке

Видео работы

На видео не получилось показать работу сервопривода