Komponen
- 16x2 Backlit LCD
- Current-Limiting Resistor (Backlight)
- Contrast-Setting Resistor
- Pull-Down Resistor
- Pushbutton
- Analog Temp Sensor
Skema
Code
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // create an lcd object and assign the pins
int maxC=0, minC=100, maxF=0, minF=212;
int scale = 1;
int buttonPin=8;
void setup() {
lcd.begin(16, 2); // Set the display to 16 columns and 2 rows
analogReference(INTERNAL);
// analogReference(INTERNAL1V1); If you have an Arduino Mega
pinMode(buttonPin, INPUT);
lcd.clear();
}
void loop() {
lcd.setCursor(0,0); // set cursor to home position
int sensor = analogRead(0); // read the temp from sensor
int buttonState = digitalRead(buttonPin); // check for button press
switch (buttonState) { // change scale state if pressed
case HIGH:
scale=-scale; // invert scale
lcd.clear();
}
switch (scale) { // decide if C or F scale
case 1:
celsius(sensor);
break;
case -1:
fahrenheit(sensor);
}
delay(250);
}
void celsius(int sensor) {
lcd.setCursor(0,0);
int temp = sensor * 0.1074188; // convert to C
lcd.print(temp);
lcd.write(B11011111); // degree symbol
lcd.print("C ");
if (temp>maxC) {maxC=temp;}
if (temp<minC) {minC=temp;}
lcd.setCursor(0,1);
lcd.print("H=");
lcd.print(maxC);
lcd.write(B11011111);
lcd.print("C L=");
lcd.print(minC);
lcd.write(B11011111);
lcd.print("C ");
}
void fahrenheit(int sensor) {
lcd.setCursor(0,0);
float temp = ((sensor * 0.1074188) * 1.8)+32; // convert to F
lcd.print(int(temp));
lcd.write(B11011111); // print degree symbol
lcd.print("F ");
if (temp>maxF) {maxF=temp;}
if (temp<minF) {minF=temp;}
lcd.setCursor(0,1);
lcd.print("H=");
lcd.print(maxF);
lcd.write(B11011111);
lcd.print("F L=");
lcd.print(minF);
lcd.write(B11011111);
lcd.print("F ");
}
Pembahasan code
Seperti pada proyek sebelumnya, library LiquidCrystal kita load kedalam sketch. Kemudian inisialisasi object lcd dengan mengatur pin yang digunakan
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // create an lcd object and assign the pins
Inisialisasi beberapa variable integer untuk menyimpan data suhu maximum and minimum pada deraja celcius dan farenheit. Nilai ini akan langsung diupdate saat program berjalan pertama kali.
int maxC=0, minC=100, maxF=0, minF=212;
Inisialisasi variable scale dengan tipe int dengan nilai 1. variable ini akan digunakan untuk menentukan skala apa yang akan digunakan. Default diset 1, yaitu Celsius. Dapat diganti menjadi -1 jika ingin defaultnya Fahrenheit.
int scale = 1;
Inisialisai variable integer untuk menyimpan pin yang digunakan untuk tombol .
int buttonPin=8;
Pada fungsi setup() kita atur display dalam format 16 kolom and 2 baris.
lcd.begin(16, 2); // Set the display to 16 columns and 2 rows
Atur referensi analog pin ke INTERNAL.
analogReference(INTERNAL);
Jika menggunakan Arduino Mega gunakan perintah berikut analogReference(INTERNAL1v1);
Dengan menggunakan pin analog seperti ini memberikan kita jangkauan yang lebih baik pada Arduino ADC (analog to digital convertor) hingga meningkatkan akurasi dan sensitifitas rangkaian.
Set button pin sebagai input dan bersihkan layar
pinMode(buttonPin, INPUT);
lcd.clear();
lcd.setCursor(0,0); // set cursor to home position
Baca nilai dari sensor suhu pada analog pin 0.
int sensor = analogRead(0); // read the temp from sensor
Baca status dari tombol dan simpan pada variable buttonState.
int buttonState = digitalRead(buttonPin); // check for button press
Kemudian kita hitung berdasarkan status button apakah perhitungan menggunakan skala celcius atau farenheit. Bila celcius maka kita akan menmanggil fungsi perhitungan celcius, atau bila farenheit program akan memanggil fungsi perhitungan farenheit. Kemudian beri perintah delay sebentar.
switch (buttonState) { // change scale state if pressed
case HIGH:
scale=-scale; // invert scale
lcd.clear();
}
switch (scale) { // decide if C or F scale
case 1:
celsius(sensor);
break;
case -1:
fahrenheit(sensor);
}
delay(250);
lcd.setCursor(0,0);
int temp = sensor * 0.1074188; // convert to C
lcd.print(temp);
lcd.write(B11011111); // degree symbol
lcd.print("C ");
if (temp>maxC) {maxC=temp;}
if (temp<minC) {minC=temp;}
lcd.setCursor(0,1);
lcd.print("H=");
lcd.print(maxC);
lcd.write(B11011111);
lcd.print("C L=");
lcd.print(minC);
lcd.write(B11011111);
lcd.print("C ");
}
void fahrenheit(int sensor) {
lcd.setCursor(0,0);
float temp = ((sensor * 0.1074188) * 1.8)+32; // convert to F
lcd.print(int(temp));
lcd.write(B11011111); // print degree symbol
lcd.print("F ");
if (temp>maxF) {maxF=temp;}
if (temp<minF) {minF=temp;}
lcd.setCursor(0,1);
lcd.print("H=");
lcd.print(maxF);
lcd.write(B11011111);
lcd.print("F L=");
lcd.print(minF);
lcd.write(B11011111);
lcd.print("F ");
}
Nah, semoga artikel ini bermanfaat dalam menambah pengetahuan menggunakan LCD dan komponen sensor suhu.
Sumber Disini
Tidak ada komentar:
Posting Komentar