Ülesanne 5

Interaktiivne infoekraan

Töökirjeldus

Fotorõhuanduri töö – saadud andmed jagatakse kaheks väärtuseks: öö ja päev. Termoanduri töö – saadud andmed muudetakse pingeks ja kraadideks Celsiuse järgi. Potentsiomeetri ja LCD ekraani töö – saadud andmed potentsiomeetrist jagatakse kolmeks väärtuseks, mille korral LCD ekraan muudab pilti:

  1. Ekraanil kuvatakse “Hello!”, tänane kuupäev (sisestatud käsitsi) ja termoanduri näidud – pinge.
  2. Ekraanil kuvatakse tänane nädalapäev (sisestatud käsitsi), termoanduri näidud – temperatuur kraadi ja tähega C, samuti fotorõhuanduri näidud “Day” või “Night” koos vastavate päikese ja kuu piltidega.
  3. Ekraanil kuvatakse kiri “Timer:” koos tagasiloendusega 8-st 0-ni. Allosas kuvatakse kell, mis muudab osuti asendit iga 2 sekundi järel päripäeva suunas. Kui taimer lõpetab loenduse, ilmub kiri Time out!

Komponendid

Fototakisti – 1
Takisti (220Ω) – 1, Takisti (10kΩ) – 1
Termoandur – 1
Potentsiomeeter – 1
LCD 16 x 2 – 1
Arduino Uno R3 – 1
Väike breadboard – 1

Kasutamine

Digitaalsed reklaamtahvlid toatemperatuuri ja valgustatuse kuvamise ekraanid ekraanid, mis vahetavad erinevaid töörežiime

Kood

#include <LiquidCrystal.h>
const int rs = 12, e = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, e, d4, d5, d6, d7);
          
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 timer = 8;

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

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

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

void setup()
{
  lcd.createChar(1, degree);
  lcd.createChar(3, sun);
  lcd.createChar(4, moon);
  lcd.createChar(6, C);
  
  lcd.createChar(7, up);
  lcd.createChar(8, right);
  lcd.createChar(10, down);
  lcd.createChar(13, left);
}

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)
  {
    lcd.clear();
	lcd.setCursor(5, 0);
	lcd.print("Hello!");
    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)
  {
    if (degreesC > 100 || degreesC < 0)
    {
      lcd.setCursor(5,0);
    }
    else
    {
      lcd.setCursor(6,0);
    }
    
    lcd.print(degreesC);
    lcd.setCursor(8,0);
    lcd.write(6);
    lcd.write(1);
    lcd.setCursor(0,0);
    lcd.print("Tue.");
    
    if (lightLevel == -1)
    {
      lcd.setCursor(6, 1);
      lcd.write(3);
      lcd.print("Day");
      delay(1000);      
    }
    
    else if (lightLevel == 2)
    {
      lcd.setCursor(5, 1);
      lcd.write(4);
      lcd.print("Night");
      
      delay(1000);
    
    }
    delay(1000);
  }
  else if(Value_new == 3)
  {
    timer1();
  }
}

//Термодатчик
float tmp_stat()
{
  voltage = getVoltage(temperaturePin);
  degreesC = (voltage - 0.5) * 100.0;
  return voltage, degreesC;
}

float getVoltage(int pin)
{
  return (analogRead(pin) * 0.004882814);
}

//Таймер
void timer1()
{
	lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Timer:");
    for (timer; timer != -1; timer--)
    { 
       
      lcd.setCursor(7,0);
      lcd.print(timer);
      
      lcd.setCursor(7,1);
      switch (timer) 
      {
        case 8:
        lcd.write(7);
        break; 
        case 6:
        lcd.write(8);
        break;
        case 4:
        lcd.write(10);
        break;
        case 2:
        lcd.write(13);
        break;
        case 0:
        lcd.write(7);
        break;
      }
      delay(1000);
    }
    lcd.clear();
    lcd.setCursor(3,0);
    lcd.print("Time out!!");
    delay(1000);

}

Link

Konstruktsioon Tinkercad