LCD ekraan

5.1 Katse

Kasutatud komponeendid

  • Adruino Uno R3 – 1
  • Breadboard Small – 1
  • Potentsiomeeter – 1
  • Takisti – 1
  • Juhe – 15

Ühendamise skeem (www.tinkercad.com)

Programm/kood kommentaridega

// 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.3. Töö kestus milles() abil

Kasutatud komponeendid

  • Adruino Uno R3 – 1
  • Breadboard Small – 1
  • Potentsiomeeter – 1
  • Takisti – 1
  • Juhe – 15

Ühendamise skeem (www.tinkercad.com)

Programm/kood kommentaridega

unsigned long algusAeg;
unsigned long kestus;
#include <LiquidCrystal.h>

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

void setup() {
  lcd.begin(16,2);
  Serial.begin(9600);
  algusAeg = millis(); 
  Serial.println("Too algas!");
}

void loop() {
  kestus = millis() - algusAeg;

  unsigned long sekundid = kestus / 1000;
  unsigned int tunnid = sekundid / 3600;
  unsigned int minutid = (sekundid % 3600) / 60;
  unsigned int sek = sekundid % 60;

  Serial.print("Too kestus: ");
  if (tunnid < 10) Serial.print('0');
  Serial.print(tunnid);
  Serial.print(':');
  if (minutid < 10) Serial.print('0');
  Serial.print(minutid);
  Serial.print(':');
  if (sek < 10) Serial.print('0');
  Serial.println(sek);

  lcd.setCursor(0, 0);  
  lcd.print("Too kestus: ");
  
  lcd.setCursor(0, 1); 
  if (tunnid < 10) lcd.print('0');
  lcd.print(tunnid);
  lcd.print(':');
  if (minutid < 10) lcd.print('0');
  lcd.print(minutid);
  lcd.print(':');
  if (sek < 10) lcd.print('0');
  lcd.print(sek);

  delay(1000);  
}

Interaktiivne infoekraan “Ilmajaam”

Töö kirjeldus

Koodi kirjutamine, virtuaalse skeemi loomine koodi testimiseks ja valmis tulemus päris skeemil.

Kasutatud komponeendid

  • Adruino Uno R3 – 1
  • Breadboard Small – 1
  • Photoresistor – 1
  • Potentsiomeeter – 1
  • Temperatuuti andur — 1
  • LCD ekraan – 1
  • Takisti – 3
  • Juhe – 25

Töö protsess

Kood laaditakse Arduinole, mis loeb fotorresistori ja temperatuurianduri andmeid.

  1. Kui on pime, kuvatakse “öö”, kui valge – “päev”.
  2. Temperatuur kuvatakse LCD-ekraanile.
  3. Ikoon ja sõnum vahetuvad iga 5 sekundi järel.
  4. Iga 30 sekundi järel ilmub ekraanile meeldetuletus “Joo vett!” koos südamega.

Ühendamise skeem (www.tinkercad.com)

https://www.tinkercad.com/things/9d3xtaM4NDj-ilmajaam?sharecode=G5sOAYDH6xHPTA8SX52rcSZFMpjubp9tXN1uQU_IxxU

Programm/kood kommentaridega

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
 
const int tempPin = A0; 
const int lightPin = A1; 
float voltage;
 
char* weatherMessages[] = {
  "Tana on selge paev!",
  "Valmistu vihmaks!",
  "Udu piirab nahtavust!",
  "Pane soojad riided selga!",
  "Naudi suve meeleolu!"
};
 
 
byte sun[] = {
  0b00100,
  0b10101,
  0b01110,
  0b11111,
  0b01110,
  0b10101,
  0b00100,
  0b00000
};
 
byte cloud[] = {
  0b00000,
  0b00110,
  0b01111,
  0b11111,
  0b11111,
  0b01110,
  0b00000,
  0b00000
};
 
byte rain[] = {
  0b00100,
  0b01110,
  0b11111,
  0b01010,
  0b10101,
  0b00000,
  0b10101,
  0b00000
};
 
byte snow[] = {
  0b01010,
  0b10101,
  0b01110,
  0b11111,
  0b01110,
  0b10101,
  0b01010,
  0b00000
};
 
byte heart[] = {
  0b00000,
  0b01010,
  0b11111,
  0b11111,
  0b01110,
  0b00100,
  0b00000,
  0b00000
};
 
unsigned long lastUpdate = 0;
const long updateInterval = 5000; 
int messageIndex = 0;
unsigned long lastAd = 0;
const long adInterval = 30000; 
 
void setup() {
  Serial.begin(9600); 
  lcd.begin(16, 2);
  lcd.createChar(0, sun);
  lcd.createChar(1, cloud);
  lcd.createChar(2, rain);
  lcd.createChar(3, snow);
  lcd.createChar(4, heart);
   
  lcd.setCursor(0, 0);
  lcd.print("Ilm: Paikseline");
  lcd.setCursor(0, 1);
  lcd.print("Laen andmeid...");
  delay(2000);
  lcd.clear();
}
 
float readTemperature() {
  const int numReadings = 10;
  long total = 0;
  for (int i = 0; i < numReadings; i++) {
    total += analogRead(tempPin);
    delay(10); 
  }
  int tempRaw = total / numReadings;
  voltage = tempRaw * (5.0 / 1024.0);
   
  Serial.print("tempRaw: ");
  Serial.println(tempRaw);
  Serial.print("Voltage: ");
  Serial.println(voltage);
   
  float degreesC = (voltage - 0.5) * 100.0;
  
  degreesC += 2.0; 
    degreesC = constrain(degreesC, -40.0, 60.0);
   
  Serial.print("Temperature: ");
  Serial.println(degreesC);
   
  return degreesC;
}
 
void loop() {
  unsigned long currentTime = millis();
   
  float degreesC = readTemperature();
   
  int lightLevel = analogRead(lightPin);
  lightLevel = map(lightLevel, 0, 1023, 0, 255); 
  lightLevel = constrain(lightLevel, 0, 255);
   
  Serial.print("Light Level (0-255): ");
  Serial.println(lightLevel);
 
 
  if (currentTime - lastAd >= adInterval) {
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Paikseline utleb:");
    lcd.setCursor(0, 1);
    lcd.print("Joo vett!");
    lcd.write(byte(4));
    delay(3000);
    lcd.clear();
    lastAd = currentTime;
  }
 
  if (currentTime - lastUpdate >= updateInterval) {
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print(weatherMessages[messageIndex]);
     
    byte icon;
    switch (messageIndex) {
      case 0: icon = 0; break; 
      case 1: icon = 2; break; 
      case 2: icon = 1; break; 
      case 3: icon = 3; break; 
      case 4: icon = 0; break; 
    }
    lcd.setCursor(15, 0);
    lcd.write(icon);
 
     
    lcd.setCursor(0, 1);
    lcd.print("T:");
    lcd.print((int)degreesC); 
    lcd.print("C ");
    if (lightLevel < 200) {
      lcd.print("Paev");
    } else {
      lcd.print("Oo");
    }
 
    messageIndex = (messageIndex + 1) % 5; 
    lastUpdate = currentTime;
  }
}

Video

https://drive.google.com/file/d/1Sp7AzrN7LF5sXGtCBo4egjr7mnm1Uv8A/view?usp=sharing