5 LCD экран

Uus funktsioonid:
#include <LiquidCrystal.h> — raamatukogu LCD-ekraani juhtimiseks
lcd.setCursor(2, 0) — seab kursori LCD-ekraanil positsioonile (2, 0), st esimese rea 3. veergu.
lcd.write(n) — Kuvab n-koodiga tähemärgi (antud juhul on tegemist kassi kujutisega, mis oli eelnevalt kohandatud tähemärgina defineeritud).
milles() — kirjeldatud allpool

Töö protses:

See kood juhib LCD-ekraani, mis näitab graafilisi sümboleid. See loob mitmeid kohandatud sümboleid (naeratavad näod, kass, tüdruk, tüdruk, tüdruk, poiss ja süda). Loop() kuvab kõigepealt kassi ja tüdrukut, seejärel poissi, kelle käed on ülespoole tõstetud, seejärel 10 naeratusnägu ja taas poissi, kelle käed on alla tõstetud. Seejärel kuvatakse loopiga südameid, mis liiguvad vasakult paremale. Kogu protsessiga kaasnevad viivitused, et sümbolid oleksid ekraanil nähtavad.

Kasutatud:

1x LCD ekraan
1x Potentsiomeeter
16x Juhtmed
1x 330 takisti

Kood:

// 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 LCD 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);
}

Foto:

Uus funktsioon :
milles() — mõõdab aega millisekundites alates Arduino sisselülitamisest.

Töö protses:
Funktsioon millis() saab millisekundite arvu, mis on möödunud Arduino sisselülitamisest alates. Muutuja previousMillis salvestab aja, mil LED viimati sisse või välja lülitati. string digitalWrite(ledPin, !digitalRead(ledPin)) kontrollib LED-i praegust olekut (sisse, kui see oli välja lülitatud ja vastupidi).

Kasutatud:
1x LED lamp
1x 220om takisti
3x Juhtmed

Kood:

'const int ledPin = 13;

unsigned long previousMillis = 0;  
const long interval = 1000; //(1000 миллисекунд)

void setup() {
  pinMode(ledPin, OUTPUT);
}

void loop() {
  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis;

    digitalWrite(ledPin, !digitalRead(ledPin));
  }
}

Foto:

Interaktiivne infoekraan «Ilmajaam»

Töö protsess:

Kood juhib LCD-ekraani, näitab temperatuuri ja valgustugevust. See loeb andurilt temperatuuri ja arvutab selle Celsiuse ja Fahrenheiti järgi, mis vahetuvad iga sekundiga. Valguse tase loetakse ja kuvatakse luksides. Iga 10 sekundi järel ilmub ekraanile naeratav nägu: naeratav, kui temperatuur on üle 25 °C, ja kurb, kui alla selle.

Kasutatud:

1x LCD Ekraan
1x Temperatuuri Sensor
1x Photoresistor
1x Potentsiometer
1x 220 Oom Takisti
1x 10K Oom Takisti
21x Juhtmed

Kood:

#include <LiquidCrystal.h>

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

const int tempPin = A1;
const int lightPin = A0;

float temperature;
float voltage;
float degreesF;
int lightLevel;

unsigned long previousMillis = 0;
const long interval = 1000;
unsigned long emojiMillis = 0;
const long emojiInterval = 10000;
unsigned long lastEmojiShowTime = 0;
unsigned long lastDegreeSwitch = 0;
bool fDegrees = false;

void setup() {
  lcd.begin(16, 2);
  pinMode(tempPin, INPUT);
  pinMode(lightPin, INPUT);
}

void loop() {
  unsigned long currentMillis = millis();

  if (currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis;

    lightLevel = analogRead(lightPin);
    voltage = getVoltage(tempPin);
    temperature = (voltage - 0.5) * 100.0;
    degreesF = temperature * (9.0/5.0) + 32.0;

    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Temp: ");
    if (currentMillis - lastDegreeSwitch > 500) {
      lastDegreeSwitch = currentMillis;
      fDegrees = !fDegrees;
    }
    if (fDegrees) {
      lcd.print(degreesF, 1);
      lcd.print(" F");
    }
    else {
      lcd.print(temperature, 1);
      lcd.print(" C");
    }

    lcd.setCursor(0, 1);
    lcd.print("Light: ");
    lcd.print(1023-lightLevel);
    lcd.print(" lx");
  }

  if (currentMillis - lastEmojiShowTime >= emojiInterval) {
    lastEmojiShowTime = currentMillis;

    lcd.clear();
    lcd.setCursor(6, 0);
    if (temperature > 25) {
      lcd.print(":)");
    } else {
      lcd.print(":(");
    }

    delay(1000);
  }
}

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

Foto:

Video: