Teema 5: LCD ekraan

5. Katse LCD ekraani kasutamine

Projekti koostamiseks läheb vaja:

1 x 1602 LCD ekraan 

1 x potentsiomeeter 

16 x tavalised üksikud isane-isane juhtmed 

1 x 330 Ω takisti

1 x arduino uno plaat

/*
// lisame LiquidCrystal library

#include <LiquidCrystal.h>

// määrame, milliste digitaalpesadega ekraan ühendatud on

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

// loome erisümbolid

byte smiley[8] ={0b00000,0b00000,0b01010,0b00000,0b00000,0b10001,0b01110,0b00000};

byte armsDown[8] ={0b00100,0b01010,0b00100,0b00100,0b01110,0b10101,0b00100,0b01010};

byte armsUp[8] ={0b00100,0b01010,0b00100,0b10101,0b01110,0b00100,0b00100,0b01010};

byte kass[8] ={0b00000,0b00000,0b00000,0b10000,0b10011,0b11111,0b01110,0b01010};

byte tydruk[8] ={0b00100,0b01010,0b00100,0b11111,0b00100,0b00100,0b01110,0b11111};

byte v2ikesyda[8] ={0b00000,0b00000,0b00000,0b11011,0b11111,0b11111,0b01110,0b00100};

void setup() {

// algväärtustatakse LDC ekraani read ja veerud

lcd.begin(16, 2);

// defineerime erisümbolid

lcd.createChar(1, smiley);

lcd.createChar(3, armsDown);

lcd.createChar(4, armsUp);

lcd.createChar(5, kass);

lcd.createChar(6, tydruk);

lcd.createChar(7, v2ikesyda);

}

void loop() {

// koht kuhu hakkame joonistama - 3. veerg, esimene rida

lcd.setCursor(2, 0);

// joonistame kassi

lcd.write(5);

// ja tüdruku

lcd.write(6);

//muudame kursori asukohta: 2. rida 14. veerg

lcd.setCursor(13, 1);

// joonistame poisi

lcd.write(3);

delay(400);

//muudame kursori asukohta: 1. rida 5. veerg

lcd.setCursor(4, 0);

//joonistame for tsükli abil väikese pausiga 10 smaili

for (int koht = 0; koht < 10; koht++) {

lcd.write(1);

delay(400);

}

lcd.setCursor(13, 1);

lcd.write(4);

//loobime südameid

for (int koht = 13; koht >= 4; koht--) {

lcd.setCursor(koht, 0);

lcd.write(7);

delay(400);

  }

delay(400);

}
*/ 

5.2. DateTime (RTClib.h teeke kasutamine)

Projekti koostamiseks läheb vaja:

1 x arduino uno plaat

#include <Wire.h>
#include <RTClib.h>

RTC_DS1307 rtc;

void setup() {
  Serial.begin(9600);
  Wire.begin();
  rtc.begin();

  // Проверка, работает ли RTC
  if (!rtc.isrunning()) {
    Serial.println("RTC is NOT running!");
    // Если RTC не работает, установим текущее время
    rtc.adjust(DateTime(__DATE__, __TIME__));
  }
}

void loop() {
  // Получение текущего времени из RTC
  DateTime now = rtc.now();
  
  // Вывод текущей даты и времени в монитор последовательного порта
 
  Serial.print(now.year(), DEC);
  Serial.print('/');
  Serial.print(now.month(), DEC);
  Serial.print('/');
  Serial.print(now.day(), DEC);
  Serial.print(" ");
  Serial.print(now.hour(), DEC);
  Serial.print(':');
  Serial.print(now.minute(), DEC);
  Serial.print(':');
  Serial.print(now.second(), DEC);
  Serial.println();

  // Задержка перед следующим обновлением времени
  delay(1000);
}

Ülesanne 5 Interaktiivne infoekraan “Ilmajaam”

23 ühtmed

2 takisti 220 ом

temperaturi mõtmise andur TMP36

1 servo

1 pote

1 LCD экран.

Töö protsess:

Kui temperatuur on alla 22 kraadi, on servo “suletud” olekus. Kui temperatuur tõuseb, “avaneb” servo järk-järgult. Temperatuur kuvatakse ekraanil, et soovida head päeva ja nädalapäeva.

Programm:

#include <LiquidCrystal.h>
#include <Servo.h>

Servo servo1;

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

int sensorPin = 0;

const char *daysOfWeek[] = {"esm", "teis", "kol", "nel", "reede", "lau", "Puh"};

void setup() {
  lcd.begin(16, 2);
  servo1.attach(9);
}

void loop() {
  lcd.clear();
  int reading = analogRead(sensorPin);
  float voltage = reading * 5.0;
  voltage /= 1024.0;
  float temperatureC = (voltage - 0.5) * 100;
  
  unsigned long currentTime = millis();
  unsigned long seconds = currentTime / 1000;
  unsigned long minutes = seconds / 60;
  unsigned long hours = minutes / 60;
  unsigned long days = hours / 24;
  unsigned long currentDay = days % 7; // Определение текущего дня недели
  
  lcd.setCursor(0, 0);
  lcd.print("Head paeva, ");
  lcd.print(daysOfWeek[currentDay]); // Выводим текущий день недели
  lcd.setCursor(0, 1);
  lcd.print(temperatureC);
  lcd.println(" kraadid. C ");
  delay(1000);
  
  if (temperatureC > 22) {
    servo1.write(map(temperatureC, 22, 100, 0, 180));
    delay(1250);
  } else {
    servo1.write(0);
    delay(1000);
  }
}

Video:

Uued funktsioonid:

  1. lcd.begin(): LCD-ekraani algseadistusfunktsioon, mis määrab ekraani suuruse.
  2. lcd.createChar(): Funktsioon, mis loob kohandatud tähemärgid (emotikonid) LCD-ekraanile.
  3. lcd.clear(): Funktsioon, mis puhastab LCD-ekraani sisu.
  4. lcd.setCursor(): Funktsioon, mis seab kursori LCD-ekraanil konkreetsele positsioonile.
  5. lcd.write(): Funktsioon, mis kirjutab määratud tähemärgi (emotikoni) LCD-ekraanile.
  6. lcd.print(): Funktsioon, mis kuvab teksti LCD-ekraanile.

Kus saab neid komponente veel kasutada?

Näiteks ventilaator, mis näitab pöörlemiskiirust ja lülitub sisse ainult siis, kui ruumis läheb kuumaks.