Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Arduino - tutorijali, pitanja, primjeri i projekti
#16
Evo pa da ti pojasnim barem za moj program 


#include<LiquidCrystal.h>  <--- ova naredba poziva library za LCD zaslone, bez nje sve kasnije naredbe poput lcd.print() nebi funkcionirale, tj kompajler bi javljao grešku da naredba ne postoji
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);  <--- ova naredba definira pinove koje ćemo koristiti za kontrolu LCD-a. ona ti je oblika (rs, rw, enable, d0, d1, d2, d3, d4, d5, d6, d7), a najčešće će ti biti ovakvog oblika LiquidCrystal lcd(rs, enable, d4, d5, d6, d7); rw slobodno spojiš na masu jer stanje na tom pinu odlučuje oćemo li čitati sa LCD-a ili zapisivati na njega, a pošto u 90% slučajeva zapisujemo njega slobodno na GND spojiš. 

byte stupanj[8] = { <--- ovom varijablom byte stvaramo svoje posebne znakove, gdje doslovno palimo piksel po piksel :)
 B00100,
 B01010,
 B00100,
 B00000,
 B00000,
 B00000,
 B00000,
};

byte slovo[8] = {
 B00010,
 B00100,
 B01110,
 B10001,
 B10000,
 B10001,
 B01110,
 B00000,
};

byte slovo2[8] = {
 B01010,
 B00100,
 B01110,
 B10001,
 B10000,
 B10001,
 B01110,
 B00000,
};

const int lm35 = A0;  <--- ovime analogni ulaz A0 nazivamo lm35, a naredbom const ga definiramo kao konstantom i ona se tijekom programa ne mjenja.
float temp = 0;  <--- ovdje ćemo spremati podatke koje dobivamo sa senzora, float nam omogućuje pohranjivanje vrijednosti sa decimalnim zapisom. Tablice možeš nać na netu

void setup(){   <--- ova petlja nam služi da postavimo ulaze i izlaze, da uspostavimo serijsku komunikaciju i tako dalje i ona se pokreće samo pri paljenju MCU jednom i više ne.
 lcd.begin(16,2);  <--- definiramo dimenzije našeg LCD-a
 lcd.createChar(0, stupanj); <--- stvaramo naše simbole koje smo ranije ispisali
 lcd.createChar(2, slovo2);
 lcd.setCursor(3, 0); <--- postavljamo kursor na prvi red i 4. segment.
 lcd.print("Termometar"); <--- ispisujemo riječ termometar
 delay(3000); <--- čekamo 3 sekunde
 lcd.setCursor(2, 1); 
 lcd.print("Verzija  2.0  "); 
 delay(3000); 
 lcd.clear(); <--- čistimo sav tekst sa LCD-a
 delay(500);  
 lcd.display(); <-- uključujemo prikaz na displeju
 lcd.setCursor(0, 0);  <--- postavljamo kursor na početak
 lcd.print("Senzor: LM35DZ"); 
 lcd.setCursor(0, 1);

 lcd.print("Veli");
 lcd.setCursor(4, 1);
 lcd.write(2); <--- ovime zapisujemo naš simbol, on je drugi po redu pa stavljamo 2
 lcd.setCursor(5, 1);
 lcd.print("ina: 5.692b");
 delay(3500);
 lcd.clear();
 delay(500);
}

void loop(){
 temp = analogRead(lm35);  <--- čitamo vrijednost senzora i zapisujemo ju u varijablu temp
 temp = temp * 0.439453125;  <--- aritmetičkim operacijama prilagođavamo vrijednosti senzora da odgovaraju temperaturi u stupnjevima celzijusima
 lcd.setCursor(0, 0);
 lcd.print("Temperatura sobe ");
 lcd.setCursor(2, 1);
 lcd.print(temp,1);
 lcd.setCursor(6, 1);
 lcd.write(byte(0));
 lcd.setCursor(7, 1);
 lcd.print("C");
 lcd.setCursor(8, 1);
 lcd.print("  ");
 delay(200);
 lcd.display();<--- ova naredba je potrebna kako bi se prikaz temperature i osjeta uključio nakon blinkajućih poruka jer smo kod njih koristili lcd.display i lcd.noDisplay za blinkanje. Kad više ne ispunjavamo uvjet za blinkanje, program nastavi vrtiti ispis temperarture, a kako blinkanje završava sa lcd.noDisplay() ako ne uključimo display nećemo niti imati prikaz temperature. On je na kraju jer ako ga stavimo na početak onda će se za vrijeme blinkanja mješati poruka i prikaz temperature.
 if(temp > 21){  <---  ovime se ispitujemo dali je temperatura veća od 21 i ako je onda se izvršava program unutar vitičaste zagrade, ako nije, te se komande ne izvršavaju jer uvjeti nisu ispunjeni.. 
   lcd.setCursor(10, 1);
   lcd.print("Toplo");
   lcd.setCursor(15, 1);
   lcd.print(" ");
} else if(temp < 21 && temp > 19.5){
   lcd.setCursor(10, 1);
   lcd.print("Ugodno");
} else{
   lcd.setCursor(10, 1);
   lcd.print("Hladno");
}
 if(temp > 28){
   lcd.createChar(1, slovo);
   lcd.setCursor(10, 1);
   lcd.print("Vru");
   lcd.setCursor(13, 1);
   lcd.write(1);
   lcd.setCursor(14, 1);
   lcd.print("e");
   lcd.setCursor(15, 1);
   lcd.print(" ");
}
 if(temp > 30){
   lcd.display();
   lcd.clear();
   lcd.setCursor(3, 0);
   lcd.print("Temperatura");
   lcd.setCursor(3, 1);
   lcd.print("previsoka!");
   delay(2000);
   lcd.noDisplay();
   delay(2000);
 }
 if(temp < 3){
   lcd.display();
   lcd.clear();
   lcd.setCursor(3, 0);
   lcd.print("Temperatura");
   lcd.setCursor(3, 1);
   lcd.print("preniska!");
   delay(2000);
   lcd.noDisplay();
   delay(2000);
  }
}


Ako nekaj nije jasno pitaj, ja sam probao to bolje odgovoriti, ali nažalost imam obaveza pa sam možda štogod preskočio.

Zapamti da se program uvijek izvršava odozgora prema dolje i zato treba logički razmišljat, ovdje ti je dobar primjer blinkajuća poruka, upališ uređaj, on prođe void setup petlju i izvrši sve naredbe koje smo unjeli u tu petlju i program nastavlja dalje, upali display i prikazuje temperaturu i ona prijeđe 30 stupnjeva i poruke počnu, e sad da ti je lcd.display odmah na početku loop petlje on bi ti izmješao tekst potpuno jer bi blinknuo poruku i ti bi odmah upalio display i prikazao temperaturu i prije nego on dode opet do uvjeta te poruke, a ako ti njega staviš na kraj, on neće odmah prikazivati tekst nego će proć prikaz, upalit display ispitati uvjete i ako je temperatura i dalje od 30 opet zablinkat poruku, a ako je manja od 30 onda se vraća na početak i ispisuje temperaturu. :) 
Reply


Messages In This Thread
RE: Arduino - tutorijali, pitanja, primjeri i projekti - by gigabyte091 - 12-15-2014, 06:19 PM

Forum Jump:


Users browsing this thread: 25 Guest(s)