-
Notifications
You must be signed in to change notification settings - Fork 1
/
ultrasonic_sensor_lcd.ino
85 lines (72 loc) · 2.62 KB
/
ultrasonic_sensor_lcd.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // pin Arduino terhubung LCD
const int ping_Pin = A1; // pin Arduino terhubung Ultrasonic Sensor
long dur, cm; // simpan nilai durasi dan jarak (cm)
void setup() {
lcd.begin(16, 2); // atur jumlah kolom dan baris LCD
lcd.print("PING Sensor");
}
void loop() {
cm = read_sensor_ultrasonic();
/* Print to LCD */
lcd.setCursor(0,1); // atur kursor ke kolom 0 baris 1
lcd.print("Jarak ");
lcd.setCursor(6,1); // atur kursor ke kolom 6 baris 1
lcd.print(cm); // cetak nilai jarak
print_unit_cm(cm); // cetak satuan (cm)
}
int read_sensor_ultrasonic(){
/* baca dari Ultrasonic Sensor */
pinMode(ping_Pin, OUTPUT); // atur pin sebagai OUTPUT
digitalWrite(ping_Pin, LOW); // beri sinyal awal LOW
delayMicroseconds(2); // jeda 2 µs
digitalWrite(ping_Pin, HIGH); // trigger sensor dengan sinyal HIGH
delayMicroseconds(5); // trigger sensor selama 5 µs
digitalWrite(ping_Pin, LOW); // beri sinyal LOW
pinMode(ping_Pin, INPUT); // atur pin sebagai INPUT
dur = pulseIn(ping_Pin, HIGH); // sinyal HIGH untuk dapat durasi (dalam µs)
cm = ms_to_cm(dur); // konversi µs ke cm
if (cm >= 2 && cm <= 330){
return cm;
} else {
return 0;
}
}
long ms_to_cm(long ms) {
// kecepatan suara 340 m/s atau 29 µs/cm
// dibagi dua untuk mencari jarak sensor-objek
return ms / 29 / 2;
}
void print_unit_cm(long cm){
/* cetak satuan cm */
int ROW = 1; // nomor baris
int ERR_Digit = 6; // koordinat kolom
int oneDigit = 7; // koordinat kolom
int twoDigit = 8; // koordinat kolom
int threeDigit = 9; // koordinat kolom
int lenUnit = 2; // jumlah karakter satuan
if (cm >= 2 && cm < 10){ // jarak 2-9cm
lcd.setCursor(oneDigit,ROW); // atur posisi kursor
lcd.print("cm");
print_blank(oneDigit+lenUnit,ROW);
} else if (cm >= 10 && cm < 100){ // jarak 10-99cm
lcd.setCursor(twoDigit,ROW); // atur posisi kursor
lcd.print("cm");
print_blank(twoDigit+lenUnit,ROW);
} else if (cm >= 100 && cm <= 330){ // jarak >100cm
lcd.setCursor(threeDigit,ROW); // atur posisi kursor
lcd.print("cm");
print_blank(threeDigit+lenUnit,ROW);
} else { // di luar jarak ukur
lcd.setCursor(ERR_Digit,ROW); // atur posisi kursor
print_blank(ERR_Digit,ROW);
}
}
void print_blank(int col, int row){
/* cetak spasi/blank sampai kolom ke-16 */
int total_col = 16;
for (int i = col; i < total_col; i++){
lcd.setCursor(i,row);
lcd.print(" ");
}
}