Muhammad Sulthon Nashir KTI PRA

Unduh sebagai pdf atau txt
Unduh sebagai pdf atau txt
Anda di halaman 1dari 220

PEMANTAUAN SUHU KELEMBABAN DAN TEKANAN

UDARA TERPUSAT PADA RUANG OPERASI


MENGGUNAKAN APLIKASI BLYNK

TUGAS AKHIR

Oleh

MUHAMMAD SULTHON NASHIR

20173010083

PROGRAM STUDI TEKNOLOGI ELEKTRO–MEDIS


PROGRAM VOKASI
UNIVERSITAS MUHAMMADIYAH YOGYAKARTA
2021
PEMANTAUAN SUHU KELEMBABAN DAN TEKANAN
UDARA TERPUSAT PADA RUANG OPERASI
MENGGUNAKAN APLIKASI BLYNK

TUGAS AKHIR

Diajukan Kepada Program Vokasi Universitas Muhammadiyah Yogyakarta


untuk Memenuhi Sebagai Persyaratan Guna Memperoleh Gelar Ahli Madya
(A.Md.) Program Studi D3 Teknik Elektromedik

Oleh
MUHAMMAD SULTHON NASHIR

20173010083

PROGRAM STUDI TEKNOLOGI ELEKTRO–MEDIS


PROGRAM VOKASI
UNIVERSITAS MUHAMMADIYAH YOGYAKARTA
2021
iii

PEMANTAUAN SUHU KELEMBABAN DAN TEKANAN

UDARA TERPUSAT PADA RUANG OPERASI

MENGGUNAKAN APLIKASI BLYNK

Dipersiapkan dan disusun oleh

Muhammad Sulthon Nashir


NIM 20173010083

Telah Dipertahankan di Depan Dewan Penguji

Pada tanggal : 7 April 2021

Menyetujui,Dosen Pembimbing I Dosen Pembimbing II

Wisnu Kartika, S.T., M.Eng.


Susilo Ari Wibowo, S.T.
NIK.19890512201705183023
NIP.100321

Mengetahui,
Ketua Program Studi Teknik Elektromedik

Meilia Safitri, S.T., M.Eng.


NIK. 19900512201604183015

iii
iv

Tugas Akhir ini Diterima Sebagai Salah Satu Persyaratan untuk Memperoleh

Gelar Ahli Madya (A.Md) Tanggal: 7 April 2021

Susunan Dewan Penguji

Nama Penguji Tanda Tangan

1. Ketua Penguji : Wisnu Kartika, S.T., M.Eng. ………………………

2. Penguji Utama : Susilo Ari Wibowo, S.T. ………………………

3. Sekertaris Penguji : Sigit Widadi, S.Kom., M.Kom. ………………………

Yogyakarta, 7 April 2021

PROGRAM VOKASI

UNIVERSITAS MUHAMMADIYAH YOGYKARTA

DIREKTUR

Dr. Bambang Jatmiko, S.E., M.Si.


NIK. 19650601201210143092

iv
v

PERNYATAAN

Penulis menyatakan bahwa dalam Tugas Akhir ini tidak terdapat karya yang

pernah diajukan untuk memperoleh derajat Profesi Ahli Madya atau gelar

kesarjanaan pada suatu perguruan tinggi dan sepanjang pengetahuan penulis juga

tidak terdapat pendapat yang pernah ditulis atau diterbitkan oleh orang lain,

kecuali yang secara tertulis diacu dalam naskah ini serta disebutkan dalam daftar

pustaka.

Yogyakarta, 7 April 2021

Yang menyatakan,

Muhammad Sulthon Nashir

v
vi

KATA PENGANTAR

Alhamdulillah, Puji syukur kehadirat Allah SWT yang telah

melimpahkan rahmat dan hidayah-Nya berupa akal pikiran sehingga penulis

dapat menyelesaikan Tugas Akhir dengan judul “pemantauan suhu,

kelembaban dan tekanan udara terpusat pada ruang operasi menggunakan

aplikasi blynk”. Laporan tugas akhir ini disusun untuk memenuhi salah satu

syarat dalam memperoleh gelar Ahli Madya pada Program Studi D3 Teknik

Elektromedik, Universitas Muhammadiyah Yogyakarta.

Shalawat serta salam semoga senantiasa tercurah kepada Rasulullah

Muhammad S.A.W. dan para sahabatnya yang telah menunjukan jalan

kebenaran berupa keislaman serta menjauhkan kita dari zaman kebodohan dan

menuntun kita menuju zaman yang terang dan penuh ilmu pengetahuan seperti

sekarang ini. Semoga beliau selalu menjadi suri tauladan dan sumber inspirasi

bagi kita semua.

Dalam melakukan penelitian dan penyusunan laporan tugas akhir ini

penulis mendapatkan banyak dukungan dan bantuan dari berbagai pihak.

Penulis mengucapkan terima kasih yang tak terhingga kepada:

1. Ibunda penulis (Erma Suryani) yang selalu berusaha memberikan yang

terbaik, berupa kasih sayang, doa tulus dan hal lain yang tidak mungkin

saya dapat membalasnya.

2. Bapak Dr. Bambang Jatmiko, S.E.,M.Si. selaku Direktur Universitas

Muhammadiyah Yogyakarta dan Ibu Meilia Safitri, S.T., M. Eng. selaku

Ketua Program Studi D3. Teknik Elektromedik Program Vokasi

vi
vii

Universitas Muhammadiyah Yogyakarta yang memberi izin kepada

penulis untuk belajar.

3. Bapak Wisnu Kartika, S.T., M.Eng, selaku dosen pembimbing satu, dan

Bapak Susilo Ari Wibowo, S.T. selaku dosen pembimbing dua, yang

telah dengan penuh kesabaran dan ketulusan memberikan ilmu dan

bimbingan terbaik kepada penulis.

4. Para Dosen Program Studi D3 Teknik Elektromedik Universitas

Muhammadiyah Yogyakarta yang telah memberikan bekal ilmu kepada

penulis.

5. Para Karyawan/wati Program Studi Teknik Elektromedik Universitas

Muhammadiyah Yogyakarta yang telah membantu penulis dalam proses

belajar.

6. Para Laboran Laboratorium Teknik Elektromedik Program Vokasi

Universitas Muhammadiyah Yogyakarta, yang tak lelah membantu,

memberikan ilmu, masukkan, dan pendapat serta memotivasi dalam

proses pembuatan tugas akhir.

7. Teman-teman angkatan 2017, yang sudah tiga tahun saling berbagi,

saling memberi motivasi, dan banyak pengalaman-pengalaman yang

tidak mungkin dapat penulis lupakan, terima kasih atas bantuan,

kenangan sehingga penulis dapat menyelesaikan penelitian ini dengan

baik.

Penulis menyadari sepenuhnya bahwa laporan Tugas Akhir ini masih

jauh dari sempurna, untuk itu semua jenis saran, kritik dan masukan yang

vii
viii

bersifat membangun sangat penulis harapkan. Akhir kata, semoga tulisan ini

dapat memberikan manfaat dan memberikan wawasan tambahan bagi para

pembaca dan khususnya bagi penulis sendiri. Aamiin.

Yogyakarta, 7 April 2021

Muhammad Sulthon Nashir

viii
DAFTAR ISI

PEMANTAUAN SUHU KELEMBABAN DAN TEKANAN UDARA

TERPUSAT PADA RUANG OPERASI MENGGUNAKAN APLIKASI

BLYNK .................................................................................................................. ii

PEMANTAUAN SUHU KELEMBABAN DAN TEKANAN UDARA

TERPUSAT PADA RUANG OPERASI MENGGUNAKAN APLIKASI

BLYNK ................................................................................................................. iii

PERNYATAAN ..................................................................................................... v

KATA PENGANTAR .......................................................................................... vi

DAFTAR ISI ........................................................................................................ ix

DAFTAR GAMBAR ............................................................................................ xi

DAFTAR TABEL .............................................................................................. xiii

ABSTRAK .......................................................................................................... xiv

BAB I PENDAHULUAN .................................................................................... 13

1.1 Latar Belakang ..................................................................................... 13

1.2 Rumusan Masalah ................................................................................ 15

1.3 Pembatasan Masalah ........................................................................... 15

1.4 Tujuan Penelitian ................................................................................. 15

1.5 Manfaat ................................................................................................. 16

BAB II TINJAUAN PUSTAKA......................................................................... 17

ix
2.1 Penelitian Terdahulu ............................................................................ 17

2.2 Landasan Teori ..................................................................................... 19

BAB III METODE PENELITIAN .................................................................... 30

3.1 Diagram Alir Proses ............................................................................. 30

3.2 Blok Diagram Sistem............................................................................ 32

3.3 Diagram Alir Sistem Kerja Alat ......................................................... 35

3.4 Diagram Mekanik Sistem .................................................................... 37

3.5 Alat dan Bahan ..................................................................................... 39

3.6 Implementasi Perangkat Keras ........................................................... 40

3.7 Implementasi Perangkat Lunak.......................................................... 46

3.7.1 Deklarasi Pin ..................................................................................... 46

3.7.2 Nilai Sensor DHT11 dan BMP280 ................................................... 50

3.7.3 Display LCD TFT ............................................................................. 52

3.7.4 Koneksi Wifi ...................................................................................... 73

3.8 Pengujian Alat ...................................................................................... 75

3.9 Teknik Analisis Data ............................................................................ 76

BAB IV HASIL DAN PEMBAHASAN ............................................................ 78

DAFTAR PUSTAKA .......................................................................................... 97

x
DAFTAR GAMBAR

GAMBAR 2. 1 MODUL ESP8266 NODEMCU. ................................................ 20

GAMBAR 2. 2 PIN-PIN NODEMCU ESP8266 .................................................. 21

GAMBAR 2. 3 BOARD ARDUINO MEGA2560 ............................................... 22

GAMBAR 2. 4 SENSOR DHT11 ......................................................................... 24

GAMBAR 2. 5 SENSOR BMP280 ...................................................................... 26

GAMBAR 2. 6 SENSOR MODUL BMP280 ....................................................... 26

GAMBAR 2. 7 LCD TFT TOUCHSCREEN ....................................................... 27

GAMBAR 3. 1 DIAGRAM ALIR PENELITIAN ............................................... 30

GAMBAR 3. 2 DIAGRAM SISTEM ALAT BAGIAN DALAM KAMAR

OPERASI .............................................................................................................. 33

GAMBAR 3. 3 DIAGRAM SISTEM ALAT BAGIAN LUAR KAMAR

OPERASI .............................................................................................................. 33

GAMBAR 3. 4 DIAGRAM ALIR KERJA ALAT BAGIAN DALAM KAMAR

OPERASI .............................................................................................................. 35

GAMBAR 3. 5 DIAGRAM ALIR KERJA ALAT BAGIAN LUAR KAMAR

OPERASI .............................................................................................................. 36

GAMBAR 3. 6 BENTUK PERKIRAAN ALAT PEMANTAUAN

SUHU,KELEMBABAN DAN TEKANAN UDARA .......................................... 38

GAMBAR 3. 7 SKEMATIK RANGKAIAN MINIMUM SISTEM .................... 42

GAMBAR 3. 8 SKEMATIK RANGKAIAN ESP8266 ....................................... 43

GAMBAR 3. 9 SKEMATIK RANGKAIAN SENSOR DHT11 .......................... 43

GAMBAR 3. 10 SKEMATIK RANGKAIAN SENSOR DHT11 ........................ 44

xi
GAMBAR 3. 11 SKEMATIK RANGKAIAN CATU DAYA SMPS .................. 45

GAMBAR 3. 12 SKEMATIK RANGKAIAN CATU DAYA TRAFO CT ......... 45

GAMBAR 4. 1 GRAFIK SUHU RUANG 1 ........................................................ 83

GAMBAR 4. 2 GRAFIK SUHU RUANG 2 ........................................................ 85

GAMBAR 4. 3 GRAFIK NILAI KELEMBABAN PADA ALAT 1 ................... 88

GAMBAR 4. 4 GRAFIK NILAI KELEMBABAN ALAT KEDUA ................... 91

GAMBAR 4. 5 GRAFIK TEKANAN UDARA PADA ALAT PERTAMA ....... 93

xii
DAFTAR TABEL

TABEL 1 SPESIFIKASI ESP8266 NODEMCU [6]. ........................................... 20

TABEL 2 SPESIFIKASI DHT11[9] ..................................................................... 24

TABEL 3 SIMBOL-SIMBOL FLOWCHART[10] .............................................. 28

TABEL 4 ALAT DAN BAHAN .......................................................................... 39

TABEL 5 BEBERAPA BAHAN YANG DIGUNAKAN .................................... 39

TABEL 6 DEKLARASI PIN ................................................................................ 46

TABEL 7 PENGKONDISIAN PIN DAN DEKLARASI VARIABEL ............... 47

TABEL 8 NILAI SENSOR DHT11 DAN BMP280 ............................................ 50

TABEL 9 KODE TAMPILAN LCD TFT ............................................................ 52

TABEL 10 PROGRAM KONEKSI WIFI ............................................................ 74

TABEL 11 NILAI SUHU PEMBACAAN ALAT DAN THERMOHYGRO

PADA RUANG PERTAMA ................................................................................ 81

TABEL 12 NILAI SUHU PEMBACAAN ALAT DAN THERMOHYGRO

PADA RUANG KEDUA...................................................................................... 84

TABEL 13 NILAI KELEMBABAN PEMBACAAN ALAT DAN PEMBACAAN

DARI ALAT FLUKE DPM4 PADA ALAT KE SATU. ..................................... 86

TABEL 14 NILAI KELEMBABAN PEMBACAAN ALAT DAN PEMBACAAN

DARI ALAT FLUKE DPM4 PADA ALAT KE DUA ........................................ 89

TABEL 15 NILAI TEKANAN UDARA ALAT PERTAMA DENGAN

PEMBANDING FLUKE DPM4 .......................................................................... 92

TABEL 16 NILAI TEKANAN UDARA ALAT KEDUA DENGAN

PEMBANDING FLUKE DPM4 .......................................................................... 94

xiii
PEMANTAUAN SUHU KELEMBABAN DAN TEKANAN
UDARA TERPUSAT PADA RUANG OPERASI MENGGUNAKAN
APLIKASI BLYNK
Muhammad Sulthon Nashir1, Wisnu Kartika1, Susilo Ari Wibowo2
1
Prodi D3 Teknik Elektromedik Program Vokasi
Universitas Muhammadiyah Yogyakarta
Jl. Brawijaya, Kasihan, Bantul-DIY, Indonesia 55183
Telp. (0274) 387656 Ext. 265, Fax. (0274) 387646
2
Rumah Sakit Islam, Klaten
[email protected], [email protected]

ABSTRAK

Saat ini dunia sedang mengalami sebuah perubahan besar terkait dengan
perkembangan dan kemajuan teknologi. Salah satu yang menjadi tolak ukur
kemajuan teknologi dalam bidang kesehatan adalah penemuan dan penciptaan
alat-alat medis yang berkembang sedemikian pesat baik yang berhubungan
dengan elektronik, mekanik maupun gabungan dari keduanya. Pada umumnya alat
untuk memantau baik suhu ruangan, kelembaban dan tekanan ruangan dilakukan
di ruangan yang akan dipantau. Oleh sebab itu untuk mempermudah dalam
melakukan pemantauan pada ruangan operasi dirancanglah sebuah alat
pemantauan suhu, kelembaban dan tekanan udara terpusat pada ruang operasi
menggunakan aplikasi blynk. Perancangan alat ini menggunakan beberapa
komponen inti yaitu sensor DHT11, sensor BMP280 dan NodeMCU ESP8266,
serta Arduino Mega yang nanti akan terhubung dengan wifi dengan hasil
pengukuran dari tiap-tiap sensor ditampilkan ke sebuah aplikasi smartphone yang
sudah diprogramkan dan dapat dibuka menggunakan aplikasi blynk yang tersedia
di Smartphone serta dapat ditampilkan pada layar LCD.

Kata kunci : Modul ArduinoMega, NodeMCU ESP8266, DHT11 dan BMP280

xiv
BAB I

PENDAHULUAN

1.1 Latar Belakang

Saat ini dunia sedang mengalami sebuah perubahan besar terkait dengan

perkembangan dan kemajuan teknologi. Manusia selalu berusaha untuk

menciptakan sesuatu yang lebih baik untuk membantu memudahkan mereka

dalam menjalankan aktivitas dan kepentingannya. Salah satu yang menjadi tolak

ukur kemajuan teknologi dalam bidang kesehatan adalah penemuan dan

penciptaan alat-alat medis yang berkembang demikian pesat baik yang

berhubungan dengan elektronik, mekanik maupun gabungan dari keduanya.

Banyaknya alat-alat kesehatan pada suatu ruangan dengan suhu serta

kelembaban yang terkontrol sehingga dapat menjaga alat-alat tersebut bekerja

dengan baik. Oleh sebab itu pemeridiperlukan ruangan yang sesuai dengan

standar dari Keputusan Menteri Kesehatan (KEPMENKES) No. 1204 / MENKES

/ SK / X / 2004. Diterangkan pada KEPMENKES diatas rata-rata suhu ruangan

sekitar 20°C sampai 25°C dengan tujuan menjaga alat-alat kesehatan yang berada

pada ruangan tersebut dapat bekerja secara optimal atau alat tidak dalam kondisi

panas serta dapat memberikan kenyamanan pada pengguna ruangan tersebut

sehingga dapat bekerja secara optimal[1].

Pemantauan suhu adalah suatu proses menganalisa atau pengambilan data

dari pengukuran suhu baik pada tubuh maupun pada suatu ruangan. Pemantauan

suhu pada ruangan tidak akan terlepas dengan pemantauan kelembaban ruangan.

Kelembaban ini dipantau dengan tujuan agar kelembaban ruangan dapat diketahui

13
14

setiap saat dan dapat mengurangi pengaruh yang disebabkan oleh kelembaban

yang terlalu basah ataupun yang terlalu kering akan merusak alat-alat kesehatan

serta dapat memberikan dampak yang berbahaya pada orang yang berada pada

ruangan tersebut. Maka dari itu Menteri Kesehatan memberikan peraturan standar

baik suhu, maupun kelembaban.

Ruangan operasi pada rumah sakit dibagi menjadi lima zona yaitu zona 1,

zona 2, zona 3, zona 4, zona 5. Zona 1 hingga zona 3 memiliki kesamaan yaitu

ruangan tidak memiliki tekanan udara positif karena pada zona ini masih masuk

pada tingkat resiko rendah, resiko sedang, dan resiko tinggi. Pada zona ini hanya

digunkan sebuah filter dalam penanggulangan terjadinya bahaya penularan

penyakit atau bakteri dari udara Sedangkan pada zona 4 memerlukan tekanan

udara positif untuk mecegah penyakit masuk karena memiliki tingkat resiko yang

sangat tinggi dan zona 5 merupakan area berlangsungnya operasi atau area meja

operasi dan merupakan area steril[2][3].

Blynk adalah aplikasi baru yang memungkinkan untuk dengan cepat

membangun interface pengendalian dan pemantau proyek hardware melalui

sebuah smartphone[4] yang dapat diunduh secara gratis dan dapat berfungsi

sebagai kontrol arduino dan sejenisnya. Blynk sangat cocok digunkanan untuk

interface pada projek-projek sederhana, seperti halnya alat untuk memantau suhu

kelembaban dan tekanan udara pada suatu ruangan. Pada umumnya alat untuk

memantau baik suhu ruangan, kelembaban dan tekanan udara suatu ruangan

dilakukan diruangan yang akan dipantau yang kemudian teknisi atau karyawan

dari IPSRS harus datang keruangan tersebut dan mengecek data ruangan untuk
15

mencatat hasil pengamatan dari ruangan tersebut dan melaporkan ke bagian

IPSRS. Oleh sebab itu, untuk mempermudah dalam melakukan pemantauan

ruangan operasi maka dirancanglah alat pemantauan suhu, kelembaban dan

tekanan udara terpusat pada ruang operasi menggunakan aplikasi blynk. Sehingga

dirancangnya alat ini, diharapkan dapat membantu meringankan teknisi atau

pegawai IPSRS dalam memantau ruangan secara aktual sehingga dapat

mengetahui jika terdapat keeroran baik pada pengatur suhu, atau pada tekanan

udaranya secara cepat dari pemantauan secara aktual.

1.2 Rumusan Masalah

Berdasarkan latar belakang yang sudah diuraikan diatas, dapat

dirrumuskan sebuah masalah sehingga penulis melakukan perancangan alat

pemantauan suhu, kelembaban dan tekanan udara terpusat menggunakan aplikasi

blynk pada ruangan operasi.

1.3 Pembatasan Masalah

Adapun batasan masalah dalam penyusunan tugas akhir ini adalah:

a. Pemantaunan hanya dilakukan pada ruang operasi,

b. Pemantauan dilakukan dengan menggunakan 2 ruangan operasi,

1.4 Tujuan Penelitian

a. Memberikan kemudahaan kepada teknisi atau pegawai IPSRS dalam

memantau suhu, kelembaban dan tekanan udara pada ruang operasi,

b. Pemantauan dapat dilakukan tanpa dibatasi oleh jarak minimum ataupun

maksimum.
16

c. Mengimplementasikan ilmu yang diperoleh baik dari dalam kampus

maupun luar kampus,

d. Mengetahui dan memahami prinsip dari kerja baik secara teori maupun

praktik.

1.5 Manfaat

1.5.1 Manfaat Teoritis

Mengenal prinsip kerja tentang peralatan medik dan menambah

pengetahuan bagi mahasiswa Prodi Teknologi Elektro-Medis Universitas

Muhammadiyah Yogyakarta.

1.5.2 Manfaat Praktis

Diharapkan dapat mempermudah tenaga medis atau teknisi IPSRS dalam

pengambilan data suhu, kelembaban dan tekanan udara pada ruang operasi secara

aktual.
BAB II

TINJAUAN PUSTAKA

2.1 Penelitian Terdahulu

Pada penelitian yang dilakukan oleh [5] yang melakukan perancangan alat

pemantau suhu dan kelembaban pada ruang ICU yang menggunakan sensor DHT-

11 berbasis mikrokontroler AVR ATMega8 dengan pemanfaatan rangkaian

modul DHT-11 sebagai modul sensor suhu dan kelembaban. Hasil dari pengujian

alat ini dengan cara membandingkan rancang bangun alat dengan alat

thermometer hygrometer dengan hasil penyimpangan paling tinggi adalah 4% dan

paling rendah adalah 0% pada kelembaban dan pada suhu penyimpangannya

adalah 0°C hingga 0,8°C. Secara umum komponen unit alat ini terdiri dari

Mikrokontroler, Modul sensor DHT-11, dan LCD. Cara kerja alat ini masih

portable sehingga untuk melihat hasil pengukuran harus mendekat ke alat terlebih

dahulu dan sesuai dengan peraturan HVAC maka parameter pengukurannya

masih kurang sehingga perlunya ada pengembangan pada alat ini.

Berdasarkan dari penelitian [6] dengan sistem telemetri nirkabel untuk

mengukur suhu, kelembaban, dan tekanan udara yang dilengkapi perekam data,

hasil pengukuran tersebut bisa ditampilkan melalui LCD. Sistem telemetri

nirkabel terbagi dua bagian yaitu unit pengirim dan unit penerima. Unit pengirim

terdiri dari sensor SHT11, sensor BMP280, mikrokontroler ATmega328P, RTC,

SD Card, dan modul transmiter RF. Unit alat pada bagian penerima terdiri dari

receiver RF serta modul pengolah dan penyimpan data. Perancangan perangkat

keras terdiri atas unit pengirim (Tx) dan unit penerima (Rx). Unit alat pada bagian

17
18

pengirim terdiri dari board Arduino Uno R3 dan mikrokontroller ATMega328P,

modul 3DR Telemetry 915MHz (Tx), sensor suhu dan kelembaban (SHT 11),

sensor tekanan udara (BMP280), LCD 16x2, RTC, z3DR Telemetry 915MHz

(Rx) dan PC yang sudah diakuisisi. Pada pengujian yang sudah dilakukan

memberikan hasil bahwa alat ukur dapat bekerja dengan baik pada jarak 200 m

dan waktu penerimaan data 2 detik, ini dilakukan pada kondisi full outdoor dan

tanpa halangan. Sedangkan pada pengujian semi outdoor dengan halangan dinding

jarak maksimalnya adalah 100 m dengan waktu penerimaan 2 detik. Nilai korelasi

pada sensor suhu diperoleh hasil sebesar R2= 0,973, kelembaban sebesar R2=

0,875, dan tekanan udara sebesar R2= 0,924, hasil ini menunjukkan hubungan

korelasi yang kuat antara alat standar dengan alat rancangan dengan garis lurus

yang linier. Dalam rancangan alat ini masih menggunakan sinyal berfrekuensi

yang dijadikan sebagai pengiriman data, oleh sebab itu menggunkan sinyal

berfrekuensi memiliki batasan jarak dalam penerimaan ataupun pengiriman data

hasil pengukuran tersebut.

Pembahasan pada penelitian yang dilakukan oleh [7] dengan judul sistem

pemantauan menggunakan blynk dan pengendalian penyiraman tanaman jamur

dengan metode logika fuzzi dengan sensor suhu dan kelembaban yang digunakan

adalah DHT1 dengan hasil pembacaan sensor memiliki rata-rata error sebesar

4.07%. Cara kerja alat ini masih tergantung dengan jaringan internet atau tidak

adanya sebuah sistem kendali ke dua tanpa adanya bantuan dari jaringan internet.

Mengambil hasil pembahasan dari beberapa penelitian terdahulu, penulis

dapat mendapatkan sebuah kesempatan untuk melakukan pengembangan dalam


19

merancang sebuah alat yang dapat melakukan pemantauan pada ruangan operasi

dengan parameter suhu, kelembaban dan tekanan udara yang menggunakan mode

pengiriman melalui aplikasi blynk dengan tujuan data dari alat yang sudah

diberikan dapat dipantau secara online dan tidak dipengaruhi oleh jarak antara

pengiriman data dan penerimanya. Proses pengiriman data dari sensor suhu,

kelembaban dan tekanan udara akan dikirim melalui jaringan internet yang

kemudian akan ditampilkan di aplikasi blynk yang digunakan untuk melihat hasil

pembacaan sensor dapat dilihat dengan membuka aplikasi blynk yang diakses

menggunakan handphone (HP) dengan syarat masih terhubung dengan internet.

2.2 Landasan Teori

2.2.1 ESP8266 NodeMCU v.3

ESP8266 merupakan solusi dari jaringan internet mandiri yang dapat

digunakan sebagai jembatan dari mikrokontroler ke internet dan mampu

menjalankan aplikasi sendiri. Modul ini dirancang oleh ESPressif System yaitu

perusahaan dari Shanghai, China[8]. Dengan adanya modul ini dapat memberikan

kemudahaan pada suatu sistem yang bisa menjalankan program secara mandiri

atau online dan dapat dikontrol dimanapun dan kapanpun selama terhubung

dengan jaringan internet. Pengetahuan untuk mengontrol perangkat elektronika

melalui internet dimanapun berada sering disebut dengan istilah Internet of Things

(IOT). IOT merupakan segala aktifitas saling interaksi dengan pelakunya melalui

pemanfaatan internet[9]. Salah satu interaksi berbasis kecerdasan buatan yang

menggunakan jaringan internet adalah aplikasi blynk. ESP8266 NodeMCU yang

digunakan dalam rancangan alat ini merupakan versi ke 3 yang memiliki


20

keunggulan dari pada versi sebelumnya berupa penggunaan tenaga tambahan dari

USB sehingga pada versi ke 3 ini lebih memiliki kecepatan antar muka USB yang

paling cepat dibandingkan dengan sebelumnya. Adapaun gambar dan spesifikasi

dari mudul ini dapat diperhatikan pada gambar 2.1 dan tabel 1

Gambar 2. 1 Modul ESP8266 NodeMCU [8].

Tabel 1 Spesifikasi ESP8266 NodeMCU [8].

NO SPESIFIKASI
1 Tegangan 3,3 V
2 Wi-Fi Direct (P2P), soft-AP
3 Arus yang digunakan 10uA~170mA
4 Flash memory 16MB max (512K normal)
5 Integrated TCP/IP protocol stack
6 Processor Tensilica L106 32-bit
7 Processor speed 80~160MHz.
8 RAM 32K + 80K.
9 GPIOs: 17
10 Analog to Digital 1 input with 1024 step resolution
11 802.11 support
12 Maximum concurrent TCP connections 5

Untuk mengetahui letak dari pin-pin yang tersedia pada mudul ESP8266

dapat dilihat pada Gambar 2.2. Beberapa pin yang tersedia tidak jauh berbeda

dengan pin-pin yang dimiliki oleh Arduino. ESP8266 ini memiliki 30 kaki/pin

dengan 16 pin input output, 5 pin ground, 1 pin Vin, 2 pin dengan tegangan 3,3V,
21

1 pin CLK, 1 pin reset, 2 pin tx dan 2 pin rx. Didalam modul ESP8266 terdapat 2

tombol yang sudah disediakan yaitu satu tombol digunakan sebagai tombol

mereset dan yang satunya digunakan untuk men-flash modul ESP8266. Fungsi

flash ini digunkan sebagai mengosongkan pemrograman yang sebelumnya sudah

tersimpan dalam modul ESP8266. Berikut gambar 2.2 pin-pin dalam NodeMCU

Gambar 2. 2 Pin-Pin NodeMCU ESP8266

2.2.2 Arduino Mega2560

Arduino Mega2560 merupakan sebuah board mikrokontroler yang

menggunakan IC ATmega2560. Arduino Mega2560 merupkan pengembangan

dari Arduino UNO yang menggunakan IC ATmega328. Arduino Mega2560


22

memiliki pin input/output sebanyak 54 pin, dimana 15 pin dapat digunakan

sebagai pin PWM, 16 pin sebagai pin analog, dan 4 pin sebagai port serial

hardware. Sama seperti Arduino UNO, board mikrokontroler ini memiliki kristal

osilator sebesar 16 Mhz, koneksi USB dan suppy, dan beberapa komponen

lainnya. Arduino Mega2560 ini berisi semua yang dibutuhkan dalam

mikrokontroler serta cara penggunaanya sangat mudah dengan cara hubungkan

port USB ke komputer atau laptop menggunakan kabel USB yang sesuai. IC

ATmega2560 memiliki memori flash 256 KB untuk menyimpan kode (dimana 8

KB digunakan untuk bootloader), 8 KB SRAM dan 4 KB dari EEPROM. Berikut

gambar board Arduino Mega2560 pada gambar 2.3

Gambar 2. 3 Board Arduino Mega2560 [10]

Pada gambar di atas konfigurasi pin dapat digunakan sebagai input maupun

output dengan menggunakan fungsi pinMode(), digitalWrite(), dan digitalRead().

Arduino Mega2560 beroperasi pada tegangan 5 Vdc. Setiap pin dapat

memberikan ataupun menerima arus maksimum sebesar 40 mA dan memiliki

resistor pull-up internal (yang dapat terputus secara default) sebesar 20-50 KΩ.

Selain itu, beberapa pin memiliki fungsi khusus, antara lain:


23

a. Port Serial : Pin 0 (RX) dan Pin 1 (TX); Port Serial 1 : Pin 19 (RX) dan

Pin 18 (TX); Port Serial 2 : Pin 17 (RX) dan Pin 16 (TX); Port Serial 3

: Pin 15 (RX) dan Pin 14 (TX). Pin RX di gunakan untuk menerima

data serial TTL dan Pin (TX) untuk mengirim data serial TTL.

b. External Interrupts: Pin 2 (Interrupt 0), Pin 3 (Interrupt 1), Pin 18

(Interrupt 5), Pin 19 (Interrupt 4), Pin 20 (Interrupt 3) dan Pin 21

(Interrupt 2).

c. Pin PWM: 2,3,4,5,6,7,8,9,10,11,12,13 dan 44,45,46 pin-pin tersebut

dapat di gunakan sebagai Output PWM 8 bit.

d. SPI : Pin 50 (MISO), Pin 51 (MOSI), Pin 52 (SCK), Pin 53 (SS),

digunakan untuk komunikasi SPI menggunakan SPI Library.

e. I2C : Pin 20 (SDA) dan Pin 21 (SCL), Komunikasi I2C menggunakan

wire library.

f. LED : 13. Builtin LED terhubung dengan Pin Digital 13.

2.2.3 Modul DHT11

DHT11 adalah sebuah sensor digital yang dapat melakukan pengukuran

suhu dan kelembaban udara yang berada di sekitarnya. Sensor ini memiliki

tingkat stabilitas yang baik dan mudah digunakan[5]. Dengan menggunakan

teknik akuisisi sinyal digital dan teknologi pengindraan suhu dan kelembaban

yang eksklusif. Sensor ini mencakup komponen pengukuran kelembaban resistif-

tipe dan komponen pengukuran suhu NTC, dan terhubung ke mikrokontroler 8-bit

berkinerja tinggi. Penggunaan modul ini memiliki kualitas yang sangat baik,
24

rESPons yang cepat, kemampuan anti-interferensi, dan efektivitas biaya. Modul

DHT11 ini memiliki range dalam pengukuran suhu sebesar 0-50°C dan range

pembacaan kelembaban sebesar 20-90% RH. Adapun toleransi pada modul ini

±5%RH dan ±2°C. Dengan range yang tidak terlalu besar dan toleransi alat yang

minim menjadikan pilihan yang tepat untuk digunakan sebagai sensor yang

nantinya digunakan dalam mengukur suhu dan kelembaban ruangan atau

lingkungan lainya. Dengan kelebihan diatas dan pertimbangan dengan penelitian

terdahulu yang menggunakan modul DHT11 sehingga pada pembuatan rancang

alat juga menggunakan modul DHT11. Adapun gambar dari modul DHT11

terlihat pada gambar 2.4

Gambar 2. 4 Sensor DHT11[11]

Terdapat 4 kaki pada modul DHT11 yang dapat dilihat dari gambar 2.3

dimulai dari kiri adalah kaki 1 sebagai inputan VCC dan kaki 2 sebagai outputnya

dari hasil pengolahan data analog dari sensor DHT11 yang dihubungkan ke

bagian analog input mikrokontroler kemudian kaki 3 adalah nul atau tidak

digunakan dan kaki 4 adalah ground. Tabel dari spesifikasi modul DHT11

tertampil pada tabel 2 dibawah

Tabel 2 Spesifikasi DHT11[11]


25

Parameters Conditions Minimum Typical Maximum


Humidity
1%RH 1%RH 1%RH
Resolution
8 Bit
Repeatability ±1%RH
25℃ ±4%RH
Accuracy
0-50℃ ±5%RH
Interchangeability Fully Interchangeable
0℃ 30%RH 90%RH
Measurement Range 25℃ 20%RH 90%RH
50℃ 20%RH 80%RH
Response Time 1/e(63%)25℃, 1m/s 6S 10 S 15 S
(Seconds) Air
Hysteresis ±1%RH
Long-Term Stability Typical ±1%RH/year
Temperature
Resolution 1℃ 1℃ 1℃
8 Bit 8 Bit 8 Bit
Repeatability ±1℃
Accuracy ±1℃ ±2℃
Measurement Range 0℃ 50℃
Response Time 1/e(63%) 6S 30 S
(Seconds)

2.2.4 Sensor BMP280

Sensor BMP280 adalah sensor tekanan yang sering digunakan untuk

membaca tekanan udara pada suatu tempat. Sensor ini dapat membaca ketinggian

diatas permukaan laut serta suhu disekitar sensor. Sensor ini merupakan

pengembangan dari sensor BMP180 dan sensor BMP085 dengan ke unggulan

dalam akurasi pembacaan pada BMP280 lebih tinggi dari pada sensor-sensor

sebelumnya. Sensor ini dapat membaca tekanan udara pada jarak 300 hPa hingga

1100 hPa atau sama dengan +9000 hingga -500 diatas atau dibawah permukaan

laut. Adapaun keakurasiaan sensor ini kurang lebih bersekitar 0,12 hPa hingga 1

hPa. Berikut gambar dari sensor BMP280 pada gambar 2.5 dan gambar 2.6
26

Gambar 2. 5 Sensor BMP280

Sumber: https://forum.arduino.cc/index.php?topic=654763.0

Gambar 2. 6 Sensor modul BMP280

2.2.5 LCD TFT

Thin Film Transistor (TFT) merupakan salah satu jenis dari Liquid crystal

display (LCD) yang menggunakan transistor film tipis untuk mengasilkan kualitas

gambar seperti kontras dan kecerahan menjadi lebih baik seperti pada Gambar 2.7.

TFT artinya transistor film tipis, yang berarti setiap pixel cair terdiri dari transistor

film tipis yang terintegrasi di belakangnya, dengan demikian kecepatan tinggi,

kecerahan tinggi, dan kontras yang tinggi tampilan informasi layar dapat dicapai.
27

Selain itu TFT juga dapat diartikan salah satu tipe layar LCD yang datar, di mana

tiap-tiap pixel dikontrol oleh satu hingga empat transistor.

TFT LCD dapat menampilkan character angka 0 sampai 9 yang dapat

digunakan sebagai sistem pengamanan, dari character angka tersebut dapat

dikonversikan menjadi bilangan decimal, oktadecimal dan hexadecimal.

Teknologi ini menyediakan resolusi terbaik dari teknik panel data. TFT LCD

sering disebut juga active-matrix LCD. Layar ini menampilkan gambar yang kaya

warna dan permukaannya sensitif terhadap sentuhan. Touchscreen jenis TFT LCD

dapat dilihat pada gambar 2.7 dibawah ini :

Gambar 2. 7 LCD TFT Touchscreen


2.2.6 ESP-01

ESP-01 adalah modul dengan ESP8266 yang tertanam didalamnya dan

sudah termasuk memori, prosesor dan juga akses GPIO. Modul ini memerlukan

tegangan kerja sebesar 3,3V. Modul ini di produksi oleh Espressif Chinese

manufacturer. Pada tahun 2014, AI-Thinker manufaktur pihak ketiga dari modul

ini mengeluarkan modul ESP-01 dengan dimensi 14,3 mm x 24,8 mm. Berikut

gambar 2.8 yaitu bentuk fisik dari modul ESP-01


28

Gambar 2. 8 Benrtuk Fisik Modul ESP-01


2.2.7 Flowchart

Flowchart atau diagram alir merupakan penggambaran secara grafik dari

langkah-langkah dan urutan prosedur dari suatu program atau sistem[12].

Flowchart digunakan untuk menjelaskan gambaran logis sebuah sistem yang akan

dibangun. notasi dan simbol yang digunakan seperti pada Tabel 3

Tabel 3 Simbol-simbol Flowchart[12]

Simbol Keterangan Contoh

Proses
Mendeskripsikan sebuah tabel
Hitung
atau proses operasi

Terminal point
Awal/ akhir flowchart
Mulai

Keputusan
Mendeskripsikan

hubungan/relasi antar tabel


29

Menghubungkan antara entitas Hitung


Garis
dan atribut ataupun dengan

relasi

Manual Operasi
Menunjukkan pengolahan yang
Pencet
tidak dilakukan oleh computer. tombol

Display Menyatakan keluaran melalui


Nilai
layar monitor sensor

On-line Storage Menyatakan masukan dan

keluaran yang berasal dari File


suhu
penyimpanan

Penghubung Menyatakan sambungan dari


1
satu proses ke proses berikutnya

di halaman yang sama 1

Input/Output
Mepresentasikan input data atau
Baca
output data yang diproses. Sensor
BAB III

METODE PENELITIAN

3.1 Diagram Alir Proses

Proses dari metode penelitian yang dilakukan dari awal peancangan hingga

ke hasil dari penelitian dapat dilihat pada gambar 3.1

Start

Studi literature dan


merancang skematik

Melakukan riset dan


Pembuatan alat

Tidak
Uji coba
alat

Ya

Pengambilan data

Analisis

Kesimpulan

Penulisan KTI

End

Gambar 3. 1 Diagram Alir Penelitian

30
31

1. Studi Literature dan merancang skematik

Studi literature merupakan salah satu cara untuk mendapatkan data

dengan membaca buku-buku dan jurnal-jurnal yang berkaitan dengan

permasalahan yang dibahas dalam tugas akhir. Sedangkan perancangan

skematik adalah mencari bentuk rangkaian model alat yang optimal dari sistem

yang akan dibuat dengan mempertimbangkan berbagai faktor permasalahan

dan kebutuhan yang telah ditentukan.

2. Melakukan riset dan pembuatan alat

Melakukan riset dan pembuatan alat ini adalah satu kesatuan yang tidak

dapat dipisahkan. Hal ini dilakukan dengan tujuan agar setelah melakukan

literatur review dan melakukan perancangan skematik yang sudah dilakukan

sebelumnya sehingga riset ini sebagai bentuk percobaan dari pada hasil

pembacaan literatur dan juga perancangan alat.

3. Uji Coba Alat

Uji coba alat ini bertujuan untuk melakukan pengukuran dan pengujian

alat untuk melihat performa dari alat yang telah dirancang apakah alat yang

dibuat dapat berfungsi dengan baik atau tidak.

4. Pengambilan Data

Proses ini dapat dilakukan jika alat yang telah dibuat dapat bekerja

dengan baik sesuai dengan yang ditentukan.

5. Analisi dan Kesimpulan


32

Setelah alat berfungsi dengan baik, langkah selanjutnya adalah

mengambil kesimpulan dari hasil analisis dari masalah yang terjadi dan juga

dari pengambilan data yang sebelumnya sudah dilakukan.

6. Penulisan Karya Tulis Ilmiah

Sehubungan dengan semua perancangan alat yang telah dibuat. Penulisan

tugas akhir berisi tentang latar belakang permasalahan alat, landasan teori

dalam perancangan alat, metode penelitian alat yang berisi diagram sistem, alat

dan bahan, blok diagram, diagram mekanik, diagram alir alat.

3.2 Blok Diagram Alat

Seriap dari perancangan alat tidak akan terlepas dengan diagram blok sistem

alat. Pada perancangan pemantauan suhu, kelembaban dan tekana udara terpusat

di ruangan operasi memiliki 2 bagian yang berfungsi berbeda-beda yaitu bagian

pembacaan di dalam ruang operasi dan pembacaan dibagian luar kamar operasi.

Hal ini bertujuan agar dapat membandingkan antara bagian dalam ruangan dan

luar ruangan. Berikut gambar 3.2 dan 3.3 yang merupakan diagram sistem alat

yang diletakkan didalam ruangan operasi dan diagram sistem alat yang diletakkan

di luar kamar operasi.


33

Gambar 3. 2 Blok Diagram Alat Bagian Dalam Kamar Operasi

Gambar 3. 3 Blok Diagram Alat Bagian Luar Kamar Operasi


Pada gambar 3.2 merupakan gambar dari diagram sistem alat yang nantinya

diletakkan didalam kamar operasi sebagai pembacaan kondisi suhu, kelembaban

dan tekanan yang berada pada ruang tesebut. Gambar 3.3 adalah gambar diagram

sistem alat bagian luar kamar operasi yang nantinya sebagai pembanding antara

tekanan udara yang ada pada ruang operasi dengan tekanan udara diluar kamar
34

operasi. Kedua gambar diatas pada dasarnya memiliki sistem yang sama,

perbedaannya terdapat pada sensor yang digunakan, yang satu menggunakan 2

sensor yaitu BMP280 dan DHT11, dan satunya lagi hanya menggunakan 1 sensor

yaitu BMP280. Proses pemantauan dimulai dari pemberian tegangan supply yang

berasal dari PLN dengan tegangan AC atau tegangan bolak balik yang kemudian

disearahkan dengan rangkaian power supply unit (PSU) dan menjadi tegangan DC

atau tegangan searah. Hasil dari rangkain PSU menjadi sumber tegangan dari

semua rangkaian pada alat ini baik sensor maupun mikrokontroler kecuali pada

bagian Blynk yang merupakan sebuah aplikasi di smartphone atau HP. PSU

memberikan sumber tegangan ke Mikrokontroler sehingga mikrokontroler dapat

berfungsi sebagai pengatur dan juga pembacaan sensor. Sensor BMP280 dan

sensor DHT11 memberikan data berupa sinyal digital yang nantinya diproses oleh

mikrokontroler kemudian hasil pebacaan di tampilkan pada layar LCD TFT.

Ketika pembacaan sensor dengan settingan yang diatur oleh mikrokontroler

melalu LCD TFT kurang atau pun lebih maka buzzer menyala sebagai alarm. Hal

ini bertujuan agar ketika terjadi perubahan pada sensor baik suhu, kelembaban dan

tekanan udara tidak sesuai dengan kebutuhan ruangan maka akan memberikan

alarm agar user menyesuaikan ketidak sesuaian tersebut.

ESP8266 berfungsi sebagai koneksi wifi begitupun nodemcu yang didalam

nya sudah terdapat ESP8266. Ketika wifi terhubung dengan ESP8266 dan juga

nodemcu data pembacaan sensor akan dikirm ke aplikasi BLYNK melalui

jaringan wifi. Hal ini bertujuan agar semua pembacaan seonsor dapat ditampilkan

pada satu hardware yakni berupa smartphone atau HP.


35

3.3 Diagram Alir Sistem Kerja Alat

Diagram alir sistem kerja pada alat ini terdapat 2 bagian diagram yaitu

diagram alir untuk alat yang diletakkan didalam kamar operasi dan diagram alir

untuk alat yang diletakkan diluar kamar operasi. Perhatikan gambar 3.4 sebagai

gambar diagram alir sistem kerja alat yang diletakkan di dalam kamar operasi dan

gambar 3.5 sebagai gambar diagram alir sistem kerja alat yang diletakkan di luar

kamar operasi.

Gambar 3. 4 Diagram Alir Kerja Alat Bagian Dalam Kamar Operasi


36

Gambar 3. 5 Diagram Alir Kerja Alat Bagian Luar Kamar Operasi


Pada gambar 3.4 proses kerja alat yang diletakkan di dalam kamar operasi

ketika alat menyala (start) sistem akan memulai inisialisasi, apabila berhasil maka

LCD TFT menampilkan proses kerja alat dan menampilkan menu atau settingan.

Setelah memilih menu, proses akan dijalankan dan data proses tersebut apabila

dapat diterima maka proses pemantauan dapat berjalan dengan membaca sensor.
37

Apabila tidak dapat diterima maka akan kembali ke pemilihan menu. Pada saat

menghubunngkan wifi dengan cara melakukan settingan terlebih dahulu maka

data akan diproses untuk menyesuaikan data wifi pada mikro dengan wifi yang

tersedia. Jika data mikro dengan wifi yang tersedia sesuai maka data akan dikirim

ke aplikasi Blynk dan apabila data wifi tidak sama dengan wifi yang tersedia

maka data pemantauan tidak dapat dikirimkan ke Blynk.

Diagram alir kerja alat yang nantinya diletakkan di luar kamar operasi

memiliki alur yang tidak jauh berbeda dengan sebelumnya, hanya saja memiliki

perbedaan pembacaan sensornya yang membutuhkan satu buah sensor yaitu

sensor BMP280 atau sensor tekanan. Adapun mengenai pemrogramannya sama

dengan sebelumnya, akan tetapi tujuan dari pembuatan ini sebagi pembanding

antara tekanan udara yang berada pada luar kamar operasi yang berada dibagian

dalam kamar operasi. Semua alat baik didalam maupun diluar kamar operasi

menggunakan sistem IOT yang menggunakan website sebagai server yang bisa

dipantau secara aktual.

3.4 Desain Alat

Sebelum membuat alat dilakukan perancangan. Perancangan alat berguna untuk

memperkirakan bentuk dan susunan dari alat yang akan dibuat nantinya. Terdapat dua

bentuk dalam perancangan yakni perancangan hardcase dengan perancangan

interface pada smartphone. Bentuk dari rancangan alat hardcase dapat dilihat pada

Gambar 3.6 dan perancangan pada bagian interface smartphone pada gambar 3.7
38

Gambar 3. 6 Bentuk Perkiraan Alat Pemantauan Suhu,Kelembaban Dan Tekanan


Udara

Gambar 3. 7 Bentuk Interface Blynk Pada Smartphone


39

3.5 Alat dan Bahan

3.5.1 Alat

Pembuatan alat pemantauan suhu, kelembaban dan tekanan udara terpusat

membutuhkan beberapa alat bantu yang dipergunakan dalam proses pembuatan

alat ini. Adapun beberapa alat yang digunakan dapat dilihat pada tabel 3 berikut:

Tabel 4 Alat dan Bahan

No. Nama Alat Jumlah

1. Laptop 1

2. Penyedot Timah 1

3. Solder 1

4. Tool Set 1

5. Bor PCB 1

6. Gergaji 1

7. Multimeter 1

8. Konektor 1

3.5.2 Bahan

Pembuatan alat terpusatpemantauan suhu, kelembaban dam tekanan udara

membutuhkan beberapa bahan-bahan yang dipergunakan dalam proses pembuatan

dan perancangan alat. bahan yang di gunakan sudah di sesuaikan dengan

karakteristik alat yang akan di buat. Bahan yang di gunakan dapat di lihat pada

tabel 3.2

Tabel 5 Beberapa Bahan Yang Digunakan


40

No. Nama Bahan Jumlah

1 PCB 1

2 Timah 1

3 ESP8266 1

4 Sensor DHT11 2

5 Sensor BMP280 3

6 Arduino Mega2560 2

7 Kabel Konektor -

8 Konsil -

3.6 Implementasi Perangkat Keras

Proses perancangan perangkat keras alat pemantauan ruang operasi dimulai

dengan membuat diagram skematik alat terdiri dari gabungan rangkaian

elektronika yang saling terintegrasi menjadi sebuah sistem. Keseluruhan skematik

dari rangkaian elektronika tersebut secara langsung dapat dilihat pada gambar

dibawah.
41

3.6.1 Rangkaian Minimum Sistem ATMega2560

Rangkaian minimum sistem berfungsi sebagai rangkaian yang menjadikan

mikrokontroler dapat bekerja atau melakukan proses pengolahan data yang sesuai

sehingga dapat memberikan perintah ataupun menerima data. Jenis IC yang

digunakan pada rangkaian minimum sistem alat ini adalah IC ATMega2560

dengan seting pemrograman Arduino IDE. Skematik rangkaian minimum sistem

dapat dilihat pada gambar 3.8 berikut


42

Gambar 3. 8 Skematik Rangkaian Minimum Sistem


3.6.2 Rangkaian ESP8266

Rangkain ESP8266 merupakan rangkaian yang berkerja untuk menjalankan

ESP8266 dengan gabungan dari beberapa komponen sehingga dapat memenuhi

minimum kerja pada komponen ESP8266. ESP8266 yang sudah dapat bekerja

akan penangkap sinyal wifi dan menghubungkan dengan wifi yang tersedia

dengan mensingkronkan data wifi yang sudah diatur melalu mikrokontroler.

Rangkaian ini terdiri dari komponen IC AMS11 3,3V yang berfungsi

sebagai regulator atau penurun tegangan menjadi 3,3V dan kapasitor polar yang
43

berfungsi sebagai penyetabil tegangan. Skematik rangkaian ESP8266 dapat dilihat

pada gambar 3.8 berikut

Gambar 3. 9 Skematik Rangkaian ESP8266


3.6.3 Rangkaian DHT11

Rangkaian DHT11 berfungsi untuk melakukan pembacaan suhu dan

kelembaban. Rangkaian ini merupakan rangkaian yang dapat menjadikan

pembacaan sensor DHT11 pada bagian suhu maupun kelembaban dapat lebih

stabil yaitu dengan menambahkan sebuah resistor yang dihunbungkan dari vcc

denngan kaki 2 pada sensor DHT11, serta kapasitor yang dihubungkan dari vcc ke

ground. Skematik rangkaian DHT11 dapat dilihat pada gambar 3.9 berikut.

Gambar 3. 10 Skematik Rangkaian Sensor DHT11


3.6.4 Sensor Tekanan BMP280
44

Sensor tekanan BMP berfungsi sebagai pengukur nilai tekanan udara pada

ruagan operasi. Pembacaan sensor BMP menghasilkan data berupa pembacaan

sinyal digital sehingga mikrokontroler dapat langsung membaca nilai tekanan

yang dihasilakan secara langsung tampa ada konversi nilai ADC. Dengan

menghubungkan kaki satu pada tegangan 5Vdc dan pada kaki 2 sensor ke ground

serta kaki-kaki yang lain di hubungkan kepada mikrokontroler.

Gambar 3. 11 Skematik Rangkaian Sensor DHT11

3.6.5 Rangkaian Catu Daya

Rangkaian catu daya memiliki fungsi sebagai pengubah sekaligus penurun

tegangan jala-jala PLN yang semula berupa tegangan AC sebesar 220 V diubah

menjadi tegangan DC 5V yang menjadi sumber daya penting pada rangkaian

elektronika pada alat. Pada perancangan catu daya dengan prinsip penurunan

tegangan menggunkan trafo menggunakan pinsip perbandingan lilitan primer

dengan sukunder serta beberapa komponen lain berupa dioda sebgaai penyearah

gelombang dan juga terdapatt komponen pembangkit frekuensi tinggi yang

memiliki fungsi dapat menjadikan perbandingan lilitan trafo menjadi lebih sedikit.

Setelah dilakukan pembangkitan freekuesi tinggi, tegangan akan di turunkan


45

dengan menggunakan trafo yang kemudian disearahkan lagi menggunakan dioda.

Sebelum dapat menjadi DC murni tegangan yang sudah melewati rangkaian diode

akan masuk ke rangkaian filter yang terdiri dari resistor dan kapasitor kemudian

terdapat IC regulator sebagai pembatas tegangan yang akan diberikan ke

photodiode atau IC PC617 yang nantinya photodiona ini akan meberikan sinyal

pada gate dikaki IC pembangkit frekuesi. dan beberpa kapasitor sebagai filter dan

pensetabil tegangan serta IC photodioda yang memiliki fungsi sebagai pemberi

gate pada pin IC pembangkit frekuensi. Skemtik rangkaian catu daya dengan

pembangkit frequensi tinggi yang digunakan pada alat pertama dapat dilihat pada

gambar 3.11 dan skematik rangkaian catu daya dengan trafo CT pada gambar 3.12

berikut.

Gambar 3. 12 Skematik Rangkaian Catu Daya SMPS

Gambar 3. 13 Skematik Rangkaian catu daya Trafo CT


46

3.7 Implementasi Perangkat Lunak

Pada proses perancangan alat, peneliti membuat kode program memalui

seting pemrograman Arduino IDE yang di masukkan pada minimum sistem agar

dapat melakukan perintah pada perangkat keras untuk bekerja. Detail dari pada

penjabaran program akan dijelaskan dibawah ini:

3.7.1 Deklarasi Pin

Kode program pada Tabel 6 dibawah digunakan sebagai deklarasi awal atau

pengaturan awal fungsi suatu pin pada mikrokontroler dengan tujuan pin yang

digunakan sesui dengan rangkaian yang akan bekerja. Deklarasi ini bertujuan

untuk mengatur pin pada mikrokontroler yang terhubung dengan rangkaian yang

lain untuk memberi perintah kerja.

Tabel 6 Deklarasi Pin


47

#define YP A3

#define XM A2
Deklarasi pin untuk lcd tft sebagai touchscreen
#define YM 23

#define XP 22

#define LCD_CS A3

#define LCD_CD A2
Deklarasi pin untuk lcd tft sebagai mode tampilan
#define LCD_WR A1

#define LCD_RD A0

#define LCD_RESET A4 // pin reset pada lcd tft

#define DHTPIN 2 // pin penerima data dari sensor DHT

#define BMP_SCK (52)

#define BMP_MISO (50)


Deklarasi pin untuk sensor BMP280 pada Arduino
#define BMP_MOSI (51) mega

#define BMP_CS (53)

Kode program pada Tabel 7 dibawah digunakan sebagai pengkondisian pin

yang akan di gunakan sebagai msaukan atau keluaran. awal atau pengaturan awal

fungsi suatu pin pada mikrokontroler dengan tujuan pin yang digunakan sesui

dengan rangkaian yang akan bekerja. Terdapat beberapa pin yang digunakan

sebagai penerima data dari sensor, ada yang digunakan sebagai tampilan pada lcd

tft maupun tombol touchscreen dan lain sebagainnya. Deklarasi ini bertujuan

untuk mengatur pin pada mikrokontroler yang terhubung dengan rangkaian yang

lain untuk memberi perintah kerja.

Tabel 7 Pengkondisian Pin dan Deklarasi Variabel


48

#define ESPSerial Serial1

#define ESP8266_BAUD 115200 Pengkondisian wifi mengatur speed


pengiriman data
ESP8266 wifi(&ESPSerial);

TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);//


pengkondisian pin pada lcd tft menjadi touchscreeen

Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);//


pengkondisian pin lcd tft menjadi display

#define TS_MINX 150

#define TS_MINY 120


Variable nilai untuk penenntuan nilai baca
touchscreenn
#define TS_MAXX 920

#define TS_MAXY 940

#include <Fonts/FreeSans9pt7b.h>

#include <Fonts/FreeSans12pt7b.h>

#include <Fonts/FreeSerif9pt7b.h>
Penambahan librabri pada
#include <Fonts/FreeSerif12pt7b.h> untuk font pada tampilan
lcd tft
#include <Fonts/FreeSerifBold12pt7b.h>

#include <Fonts/FreeSerifBold9pt7b.h>

#include <FreeDefaultFonts.h>

#define BLACK 0x0000

#define BLUE 0x001F

#define RED 0xF800

#define GREEN 0x07E0

#define CYAN 0x07FF

#define MAGENTA 0xF81F

#define YELLOW 0xFFE0


49

#define GREEN 0x07E0

#define YELLOW 0xFFE0


Penambahan variable untuk warna
#define WHITE 0xFFFF yang digunakan

#define MAROON 0x7800

#define LIGHTGREY 0xC618

#define MINPRESSURE 10 Penambahan varible nilai maximum


dan minimum pada pressure
#define MAXPRESSURE 1000

long waktu;// pendeklarasian varable waktu dengan type long

int mode, tmode = 0; // pendeklarasian varable mode dan tmode


dengan type int

int setSuhuMax = 40, setSuhuMin = 16, setKelembaban = 100,


setTekanan = 100000;// pendeklarasian varable set suhu, set
kelembaban dan set tekanan dengan type int

#define BLYNK_PRINT Serial // deklarasi pengiriman data ke server


blynk

DHT dht(DHTPIN, DHTTYPE);// penentuan pin yang masuk ke mikro dan


penentuan tipe sensor dht

char auth[] = "K27rk1a2VBh7NQV4g0_whYywytS8KV-e";// kode


sinkronisasi dengan sever blynk yang digunkan.

char ssid[] = "Xperia X";// set nama wifi

char pass[] = "sandineiki";// set password wifi

char SSid,PASS;// pendeklarasian varable ssid dan pass dengan


type data charakter

float hum, temp, pres ; // pendeklarasian varable hum,temp, dan


press dengan type data float

int detik;

int sampling = 1000;

int buzzer1, buzzer2, kembali;


50

int detik;// pendeklarasian varable detik dengan type data


integer

int sampling = 1000;// pendeklarasian varable sampling dengan


type data integer

int buzzer1, buzzer2, kembali;// pendeklarasian varable


buzzer1,buzzer2, dan kembali dengan type data integer

int BOXSIZE = 25;// pendeklarasian varable boxsize dengan type


data integer

String kecil, besar, num, Ssid, Pass; pendeklarasian varable


kecil, besar, num, Ssid, dan Pass dengan type data string

3.7.2 Nilai Sensor DHT11 dan BMP280

Nilai pembacaan sensor DHT11 dan BMP280 berupa sinyal digital sehingga

nilai pada pembacaan sensor ini dapat langsung terbaca tetapi memerlukan sebuah

librari yang sesuai dengan sensor dan dapat bekerja menggunakan Arduino,

berikut tabel 8 yang menampilkan nilai kedua sensor

Tabel 8 Nilai Sensor DHT11 dan BMP280

void bacaSensor()

if (isnan(hum) || isnan(temp)) {
Kode program Ketika
tft.setCursor (20, 80); pembacaan sensor dht11
terputus maka akan tertampil
tft.setFont(&FreeSerif9pt7b); pada display ke eroran
dengan font Free Serif pada
tft.setTextSize(1); titik poin di display 20,80
dengan besaran font 1 kali
tft.setTextColor(WHITE, LIGHTGREY); ukuran normal yang diberi
warna WHITE dengan
tft.print("T_Error"); background LIGHTREY

tft.setFont(&FreeSerif9pt7b);

tft.setCursor (160, 80);

tft.setTextSize(1);

tft.setTextColor(WHITE, LIGHTGREY);
51

tft.setFont(&FreeSerif9pt7b); Kode program Ketika


pembacaan sensor dht11
tft.setCursor (160, 80); terputus maka akan tertampil
pada display ke eroran dengan
tft.setTextSize(1); font Free Serif pada titik poin
di display 160,80 dengan
tft.setTextColor(WHITE, LIGHTGREY);
besara font 1 kali ukuran
normal yang diberi warna
tft.print("H_Error");
WHITE dengan background
LIGHTREY
Pengiriman sinyal ke server
Blynk.virtualWrite(V4, HIGH); BLYNK Ketika sensor dht tidak
terhubung dan menyalakan
Blynk.virtualWrite(V6, HIGH);} led pada aplikasi BLYNK di V4
dan V6

if (!bmp.begin(0x76))

{ tft.setFont(&FreeSerif9pt7b); Kode program Ketika


pembacaan sensor bmp280
tft.setFont(); terputus maka akan tertampil
pada display ke eroran dengan
tft.setCursor (83, 170); font Free Serif pada titik poin
di display 83,170 dengan
tft.setTextSize(2); besara font 2 kali ukuran
normal yang diberi warna
tft.setTextColor(WHITE, LIGHTGREY); WHITE dengan background
LIGHTREY
tft.print("P_Error");}

else

{ hum = dht.readHumidity();// memasukkan nilai data sensor


kelembaban dht ke variable hum

temp = dht.readTemperature();// memasukkan nilai data sensor


suhu dht ke variable temp

pres = bmp.readPressure();// memasukkan nilai data sensor


tekanan bmp2 ke variable press
52

Blynk.virtualWrite(V1, hum); //V1 is for Humidity

Blynk.virtualWrite(V0, temp); //V0 is for Temperature

Blynk.virtualWrite(V2, pres); //V2 is for pressure

}}

3.7.3 Display LCD TFT

Tampilan display LCD pada alat di fungsikan sebagai penampil tampilan

awal alat, pilihan menu, nilai pembacaan dan tampilan proses pemantauan.

Tampilan display menggunakan program pada Tabel 9.

Tabel 9 Kode Tampilan LCD TFT

void tampil(int x, int y, int sz, const GFXfont *f, const char
*msg)

int16_t x1, y1;

tft.setFont(f);// set font text

tft.setCursor(x, y); // set posisi text pada lcd

tft.setTextSize(sz);// set ukuran text

tft.print(msg); // set text yang akan di tampilkan berupa char

void awalan() {

tft.setRotation(1);// set rotasi lcd

tft.fillScreen(BLACK);// set warna screen

tft.fillRect(0, 0, 320, 30, RED); // set persegi dengan warna

tampil(125, 20, 0, &FreeSans9pt7b, "TUGAS");


53

tft.fillRect(0, 30, 320, 30, BLUE); // set persegi dengan warna

tampil(125, 50, 0, &FreeSans9pt7b, "AKHIR");// tampi text pada


titik x,y lcd dengan besar font 0 dan tipe font freeserif dan
text

tft.fillRect(0, 60, 320, 120, WHITE);// set persegi dengan


warna

tft.setTextColor(BLACK); set text warna

tampil(30, 110, 0, &FreeSans9pt7b, "MUHAMMAD SULTHON


NASHIR");"); // tampi text pada titik x,y lcd dengan besar font 0
dan tipe font freesans dan text

tampil(30, 130, 0, &FreeSans9pt7b, "20173010083");// tampi text


pada titik x,y lcd dengan besar font 0 dan tipe font freesans dan
text

tft.fillRect(0, 165, 320, 90, RED);//set persegi dengan warna

tampil(90, 185, 0, &FreeSans9pt7b, " UNIVERSITAS");// tampi


text pada titik x,y lcd dengan besar font 0 dan tipe font
freesans dan text

tampil(90, 205, 0, &FreeSans9pt7b, "MUHAMMADIYAH");// tampi


text pada titik x,y lcd dengan besar font 0 dan tipe font
freesans dan text

tampil(90, 225, 0, &FreeSans9pt7b, " YOGYAKARTA");}// tampi


text pada titik x,y lcd dengan besar font 0 dan tipe font
freesans dan text

void pilihan_awal(){

tft.fillScreen (WHITE);// set warna screen lcd

tft.setTextColor(BLACK);// set text warna

tampil(80, 40, 0, &FreeSerifBold12pt7b, "MENU UTAMA");// tampi


text pada titik x,y lcd dengan besar font 0 dan tipe font
freesans dan text

tft.fillRect(70, 77, 190, 40, BLUE);// set persegi dengan warna

tampil(80, 100, 0, &FreeSerif12pt7b, "MONITORING");


54

tampil(20, 20, 0, &FreeSans9pt7b, "MONITORING RUANG


OPERASI");// tampi text pada titik x,y lcd dengan besar font 0
dan tipe font freesans dan text

tft.fillRect(15, 40, 140, 30, BLUE);// set persegi dengan warna

tft.drawRect(15, 40, 140, 30, BLACK); // set garis persegi


dengan warna

tft.fillRect(15, 70, 140, 55, LIGHTGREY); // set persegi dengan


warna

tft.drawRect(15, 70, 140, 55, BLACK); // set garis persegi


dengan warna

tft.setTextColor(BLACK); set wara text

tampil(20, 60, 0, &FreeSans9pt7b, "TEMPERATURE");// tampi text


pada titik x,y lcd dengan besar font 0 dan tipe font freesans dan
text

tft.fillRect(155, 40, 140, 30, BLUE);// set persegi dengan


warna

tft.drawRect(155, 40, 140, 30, BLACK); // set garis persegi


dengan warna

tft.fillRect(155, 70, 140, 55, LIGHTGREY); // set persegi


dengan warna

tft.drawRect(155, 70, 140, 55, BLACK); // set garis persegi


dengan warna

tampil(180, 60, 0, &FreeSans9pt7b, "HUMIDITY");");// tampi text


pada titik x,y lcd dengan besar font 0 dan tipe font freesans dan
text

tft.fillTriangle (15, 200, 50, 180, 50, 220, RED); // set


segitiga dengan warna

tft.drawTriangle (15, 200, 50, 180, 50, 220, BLACK); // set


garis segitiga dengan warna

tft.fillRect(77.5, 125, 140, 30, BLUE);

tft.drawRect(77.5, 125, 140, 30, BLACK);


55

void pilihan_kedua()

{ tft.fillScreen (WHITE);// set warna screen

tft.setTextColor(BLACK);// set warna text

tampil(100, 20, 0, &FreeSerifBold9pt7b, "PENGATURAN");");");//


tampi text pada titik x,y lcd dengan besar font 0 dan tipe font
freesans dan text

tft.fillRect(80, 37, 175, 30, BLUE);// set persegi dengan warna

tampil(95, 57, 0, &FreeSans9pt7b, " SET SUHU");");");//


tampi text pada titik x,y lcd dengan besar font 0 dan tipe font
freesans dan text

tft.fillRect(80, 85, 175, 30, BLUE);//set persegi dengan warna

tampil(90, 105, 0, &FreeSans9pt7b, "SET KELEMBAPAN");");");//


tampi text pada titik x,y lcd dengan besar font 0 dan tipe font
freesans dan text

tft.fillRect(80, 135, 175, 30, BLUE);// set persegi dengan


warana

tampil(90, 155, 0, &FreeSans9pt7b, " SET TEKANAN");");");//


tampi text pada titik x,y lcd dengan besar font 0 dan tipe font
freesans dan text

tft.fillRect(80, 185, 175, 30, BLUE);// set persegi dengan


warna

tampil(95, 205, 0, &FreeSans9pt7b, " SET WIFI");");");//


tampi text pada titik x,y lcd dengan besar font 0 dan tipe font
freesans dan text

tft.fillTriangle (15, 35, 50, 20, 50, 50, RED);} // set


segitiga dengan warna

void set_kelembapan()

{ tft.fillScreen (WHITE);// set warna srceen

tft.setTextColor(BLACK);// set warna text

tft.fillRect(70, 30, 180, 50, BLUE);


56

tft.setCursor (130, 132);// set posisi text

tft.setTextSize (3);// set ukuran text

tft.print(setKelembaban);// set text dengan tipe int

tft.fillTriangle (15, 35, 50, 20, 50, 50, RED); // set segitiga
dengan waran

tft.fillCircle(285, 35, 20, MAROON);// set lingkaran dengan


warna

tampil(272.5, 40, 0, &FreeSerif9pt7b, "OK");");"); // tampi


text pada titik x,y lcd dengan besar font 0 dan tipe font
freesans dan text

tft.fillTriangle (120, 175, 100, 205, 140, 205, RED); // set


segitiga dengan warna

tft.fillTriangle (200, 205, 180, 175, 220, 175, RED);} // set


segitiga dengan warna

void set_tekanan()

{ tft.fillScreen (WHITE);// set warna screen

tft.setTextColor(BLACK);// set warna text

tft.fillRect(70, 30, 180, 50, BLUE); // set persegi dengan


warna

tft.drawRect(70, 30, 180, 50, BLACK); // set garis persegi


dengan warna

tampil(90, 52, 0, &FreeSerifBold9pt7b, "SET TEKANAN"); // tampi


text pada titik x,y lcd dengan besar font 0 dan tipe font
freesans dan text

tft.fillRect(70, 62, 180, 100, LIGHTGREY);// set persegi


denggan warna

tft.drawRect(70, 62, 180, 100, BLACK);// set garis persegi


dengan warna

tft.drawRect(70, 162, 180, 50, BLACK);

tft.drawRect(70, 162, 90, 50, BLACK);


57

tft.fillTriangle (15, 35, 50, 20, 50, 50, RED);// set segitiga
dengan warana

tft.fillCircle(285, 35, 20, MAROON);// set lingkaran dengan


warna

tampil(272.5, 40, 0, &FreeSerif9pt7b, "OK");// tampi text pada


titik x,y lcd dengan besar font 0 dan tipe font freesans dan text

tft.fillTriangle (120, 175, 100, 205, 140, 205, RED); set


segitiga dengan waran

tft.fillTriangle (200, 205, 180, 175, 220, 175, RED);} // set


segitiga dengan warna

void set_wifi()

{ tft.fillScreen (WHITE);// set waran screen

tft.setTextColor(BLACK);// set warna text

tampil(100, 40, 0, &FreeSerifBold12pt7b, "SET WIFI");// tampi


text pada titik x,y lcd dengan besar font 0 dan tipe font
freeserif dan text

tft.fillRect(70, 77, 190, 40, BLUE);// set persegi dengan warna

tampil(80, 100, 0, &FreeSerif12pt7b, "CHECK WIFI"); // tampi


text pada titik x,y lcd dengan besar font 0 dan tipe font
freeserif dan text

tft.fillRect(70, 150, 190, 40, BLUE);//set persegi dengan warna

tampil(80, 175, 0, &FreeSerif12pt7b, "RESET WIFI");// tampi


text pada titik x,y lcd dengan besar font 0 dan tipe font
freeserif dan text

tft.fillTriangle (15, 35, 50, 20, 50, 50, RED); // set segitiga
dengan warna }

void normal()

{ tft.fillRect(10, 90, BOXSIZE, BOXSIZE, LIGHTGREY);

tft.fillRect(40, 90, BOXSIZE, BOXSIZE, LIGHTGREY);

tft.fillRect(70, 90, BOXSIZE, BOXSIZE, LIGHTGREY);


58

tft.fillRect(130, 90, BOXSIZE, BOXSIZE, LIGHTGREY);

tft.fillRect(160, 90, BOXSIZE, BOXSIZE, LIGHTGREY);


Set
tft.fillRect(190, 90, BOXSIZE, BOXSIZE, LIGHTGREY); pembuatan
persegi
tft.fillRect(220, 90, BOXSIZE, BOXSIZE, LIGHTGREY); dengan
warna
tft.fillRect(250, 90, BOXSIZE, BOXSIZE, LIGHTGREY);

tft.fillRect(280, 90, BOXSIZE, BOXSIZE, LIGHTGREY);

////////.............BARIS KE DUA.............\\\\\\\\\\

tft.fillRect(25, 125, BOXSIZE, BOXSIZE, LIGHTGREY);

tft.fillRect(55, 125, BOXSIZE, BOXSIZE, LIGHTGREY);

tft.fillRect(85, 125, BOXSIZE, BOXSIZE, LIGHTGREY);

tft.fillRect(115, 125, BOXSIZE, BOXSIZE, LIGHTGREY); Set


pembuatan
tft.fillRect(145, 125, BOXSIZE, BOXSIZE, LIGHTGREY); persegi
dengan
tft.fillRect(175, 125, BOXSIZE, BOXSIZE, LIGHTGREY); warna

tft.fillRect(205, 125, BOXSIZE, BOXSIZE, LIGHTGREY);

tft.fillRect(235, 125, BOXSIZE, BOXSIZE, LIGHTGREY);

tft.fillRect(265, 125, BOXSIZE, BOXSIZE, LIGHTGREY);

////BARIS KE TIGA

tft.fillRect(10, 160, 40, BOXSIZE, LIGHTGREY);

tft.fillRect(60, 160, BOXSIZE, BOXSIZE, LIGHTGREY);


Set
tft.fillRect(90, 160, BOXSIZE, BOXSIZE, LIGHTGREY); pembuatan
persegi
tft.fillRect(120, 160, BOXSIZE, BOXSIZE, LIGHTGREY); dengan
warna
tft.fillRect(150, 160, BOXSIZE, BOXSIZE, LIGHTGREY);

tft.fillRect(180, 160, BOXSIZE, BOXSIZE, LIGHTGREY);

tft.fillRect(210, 160, BOXSIZE, BOXSIZE, LIGHTGREY);

tft.fillRect(240, 160, BOXSIZE, BOXSIZE, LIGHTGREY);

tft.fillRect(270, 160, 40, BOXSIZE, LIGHTGREY);

/////BARIS KE EMPAT
59

tft.fillRect(210, 160, BOXSIZE, BOXSIZE, LIGHTGREY); Set


pembuatan
tft.fillRect(240, 160, BOXSIZE, BOXSIZE, LIGHTGREY); persegi
dengan
tft.fillRect(270, 160, 40, BOXSIZE, LIGHTGREY); warna

/////BARIS KE EMPAT

tft.fillRect(10, 195, 40, 30, LIGHTGREY);

tft.fillRect(55, 195, 30, 30, LIGHTGREY);


Set pembuatan
tft.fillRect(90, 195, 120, 30, LIGHTGREY); persegi dengan
warna
tft.fillRect(215, 195, 30, 30, LIGHTGREY);

tft.fillRect(250, 195, 60, 30, LIGHTGREY);

tft.drawRect(10, 195, 40, 30, WHITE);

tft.drawRect(55, 195, 30, 30, WHITE);


Set pembuatan
tft.drawRect(90, 195, 120, 30, WHITE); garis persegi
dengan warna
tft.drawRect(215, 195, 30, 30, WHITE);

tft.drawRect(250, 195, 60, 30, WHITE);

tft.setTextColor (BLACK);// set warna text

tampil(15, 215, 0, &FreeSans9pt7b, "Num");


tampi text pada
titik x,y lcd
tampil(65, 210, 2, &FreeSans9pt7b, ",");
dengan besar
font 0 dan tipe
tampil(225, 210, 2, &FreeSans9pt7b, ".");
font freesans
dengan text
tampil(260, 215, 1, &FreeSans9pt7b, "Oke");

//// BARIS KE SATU

tft.drawRect(10, 90, BOXSIZE, BOXSIZE, WHITE);


Set pembuatan
tft.drawRect(40, 90, BOXSIZE, BOXSIZE, WHITE); garis persegi
dengan warna
tft.drawRect(70, 90, BOXSIZE, BOXSIZE, WHITE);

tft.drawRect(100, 90, BOXSIZE, BOXSIZE, WHITE);

tft.drawRect(130, 90, BOXSIZE, BOXSIZE, WHITE);

tft.drawRect(160, 90, BOXSIZE, BOXSIZE, WHITE);

tft.drawRect(190, 90, BOXSIZE, BOXSIZE, WHITE);


60

tft.drawRect(100, 90, BOXSIZE, BOXSIZE, WHITE);

tft.drawRect(130, 90, BOXSIZE, BOXSIZE, WHITE);

tft.drawRect(160, 90, BOXSIZE, BOXSIZE, WHITE);


Set pembuatan
tft.drawRect(190, 90, BOXSIZE, BOXSIZE, WHITE); garis persegi
dengan warna
tft.drawRect(220, 90, BOXSIZE, BOXSIZE, WHITE);

tft.drawRect(250, 90, BOXSIZE, BOXSIZE, WHITE);

tft.drawRect(280, 90, BOXSIZE, BOXSIZE, WHITE);

////////.............BARIS KE DUA.............\\\\\\\\\\

tft.drawRect(25, 125, BOXSIZE, BOXSIZE, WHITE);

tft.drawRect(55, 125, BOXSIZE, BOXSIZE, WHITE);

tft.drawRect(85, 125, BOXSIZE, BOXSIZE, WHITE);

tft.drawRect(115, 125, BOXSIZE, BOXSIZE, WHITE);


Set pembuatan
tft.drawRect(145, 125, BOXSIZE, BOXSIZE, WHITE); garis persegi
dengan warna
tft.drawRect(175, 125, BOXSIZE, BOXSIZE, WHITE);

tft.drawRect(205, 125, BOXSIZE, BOXSIZE, WHITE);

tft.drawRect(235, 125, BOXSIZE, BOXSIZE, WHITE);

tft.drawRect(265, 125, BOXSIZE, BOXSIZE, WHITE);

/// BARIS KE TIGA

tft.drawRect(10, 160, 40, BOXSIZE, WHITE);

tft.drawRect(60, 160, BOXSIZE, BOXSIZE, WHITE);


Set pembuatan
tft.drawRect(90, 160, BOXSIZE, BOXSIZE, WHITE); garis persegi
dengan warna
tft.drawRect(120, 160, BOXSIZE, BOXSIZE, WHITE);

tft.drawRect(150, 160, BOXSIZE, BOXSIZE, WHITE);

tft.drawRect(180, 160, BOXSIZE, BOXSIZE, WHITE);

tft.drawRect(210, 160, BOXSIZE, BOXSIZE, WHITE);

tft.drawRect(240, 160, BOXSIZE, BOXSIZE, WHITE);

tft.drawRect(270, 160, 40, BOXSIZE, WHITE);


61

tft.drawRect(180, 160, BOXSIZE, BOXSIZE, WHITE);

tft.drawRect(210, 160, BOXSIZE, BOXSIZE, WHITE); Set pembuatan


garis persegi
tft.drawRect(240, 160, BOXSIZE, BOXSIZE, WHITE); dengan warna

tft.drawRect(270, 160, 40, BOXSIZE, WHITE);

///// BARIS SATU

tft.setTextColor (BLACK);// set warna text

tampil(15, 110, 1, &FreeSans9pt7b, "q");

tampil(45, 110, 1, &FreeSans9pt7b, "w");

tampil(75, 110, 1, &FreeSans9pt7b, "e");

tampil(105, 110, 1, &FreeSans9pt7b, "r");

tampil(135, 110, 1, &FreeSans9pt7b, "t"); tampi text pada


titik x,y lcd
tampil(165, 110, 1, &FreeSans9pt7b, "y"); dengan besar font
0 dan tipe font
tampil(195, 110, 1, &FreeSans9pt7b, "u"); freesans dengan
text
tampil(229, 110, 1, &FreeSans9pt7b, "i");

tampil(255, 110, 1, &FreeSans9pt7b, "o");

tampil(285, 110, 1, &FreeSans9pt7b, "p");

/// BARUS KE DUA

tampil(30, 145, 1, &FreeSans9pt7b, "a");

tampil(60, 145, 1, &FreeSans9pt7b, "s");


tampi text pada
tampil(90, 145, 1, &FreeSans9pt7b, "d"); titik x,y lcd
dengan besar font
tampil(120, 145, 1, &FreeSans9pt7b, "f"); 0 dan tipe font
freesans dengan
tampil(150, 145, 1, &FreeSans9pt7b, "g"); text

tampil(180, 145, 1, &FreeSans9pt7b, "h");

tampil(210, 145, 1, &FreeSans9pt7b, "j");

tampil(240, 145, 1, &FreeSans9pt7b, "k");

tampil(270, 145, 1, &FreeSans9pt7b, "l");

//// BARIS KE TIGA


62

tampil(210, 145, 1, &FreeSans9pt7b, "j");

tampil(240, 145, 1, &FreeSans9pt7b, "k");

tampil(270, 145, 1, &FreeSans9pt7b, "l");

//// BARIS KE TIGA

tampil(65, 180, 1, &FreeSans9pt7b, "z");

tampil(95, 180, 1, &FreeSans9pt7b, "x");


tampi text pada
titik x,y lcd
tampil(125, 180, 1, &FreeSans9pt7b, "c");
dengan besar font
tampil(155, 180, 1, &FreeSans9pt7b, "v"); 0 dan tipe font
freesans dengan
tampil(185, 180, 1, &FreeSans9pt7b, "b"); text

tampil(215, 180, 1, &FreeSans9pt7b, "n");

tampil(245, 180, 1, &FreeSans9pt7b, "m");

tampil(20, 180, 1, &FreeSans9pt7b, "Up");

tampil(277, 180, 1, &FreeSans9pt7b, "Del");

//// BARIS KE EMPAT}

void uper_case()

{ tft.fillRect(10, 90, BOXSIZE, BOXSIZE, LIGHTGREY);

tft.fillRect(40, 90, BOXSIZE, BOXSIZE, LIGHTGREY);

tft.fillRect(70, 90, BOXSIZE, BOXSIZE, LIGHTGREY);


Set
tft.fillRect(100, 90, BOXSIZE, BOXSIZE, LIGHTGREY); pembuatan
persegi
tft.fillRect(130, 90, BOXSIZE, BOXSIZE, LIGHTGREY); dengan
warna
tft.fillRect(160, 90, BOXSIZE, BOXSIZE, LIGHTGREY);

tft.fillRect(190, 90, BOXSIZE, BOXSIZE, LIGHTGREY);

tft.fillRect(220, 90, BOXSIZE, BOXSIZE, LIGHTGREY);

tft.fillRect(250, 90, BOXSIZE, BOXSIZE, LIGHTGREY);

tft.fillRect(280, 90, BOXSIZE, BOXSIZE, LIGHTGREY);

////////.............BARIS KE DUA.............\\\\\\\\\\
63

tft.fillRect(250, 90, BOXSIZE, BOXSIZE, LIGHTGREY);

tft.fillRect(280, 90, BOXSIZE, BOXSIZE, LIGHTGREY);

//////.............BARIS KE DUA.............\\\\\\

tft.fillRect(25, 125, BOXSIZE, BOXSIZE, LIGHTGREY);

tft.fillRect(55, 125, BOXSIZE, BOXSIZE, LIGHTGREY);

tft.fillRect(85, 125, BOXSIZE, BOXSIZE, LIGHTGREY);

tft.fillRect(115, 125, BOXSIZE, BOXSIZE, LIGHTGREY);

tft.fillRect(145, 125, BOXSIZE, BOXSIZE, LIGHTGREY);

tft.fillRect(175, 125, BOXSIZE, BOXSIZE, LIGHTGREY);

tft.fillRect(205, 125, BOXSIZE, BOXSIZE, LIGHTGREY);


Set
tft.fillRect(235, 125, BOXSIZE, BOXSIZE, LIGHTGREY); pembuatan
persegi
tft.fillRect(265, 125, BOXSIZE, BOXSIZE, LIGHTGREY); dengan
warna
////BARIS KE TIGA

tft.fillRect(10, 160, 40, BOXSIZE, LIGHTGREY);

tft.fillRect(60, 160, BOXSIZE, BOXSIZE, LIGHTGREY);

tft.fillRect(90, 160, BOXSIZE, BOXSIZE, LIGHTGREY);

tft.fillRect(120, 160, BOXSIZE, BOXSIZE, LIGHTGREY);

tft.fillRect(150, 160, BOXSIZE, BOXSIZE, LIGHTGREY);

tft.fillRect(180, 160, BOXSIZE, BOXSIZE, LIGHTGREY);

tft.fillRect(210, 160, BOXSIZE, BOXSIZE, LIGHTGREY);

tft.fillRect(240, 160, BOXSIZE, BOXSIZE, LIGHTGREY);

tft.fillRect(270, 160, 40, BOXSIZE, LIGHTGREY);

/////BARIS KE EMPAT

tft.fillRect(10, 195, 40, 30, LIGHTGREY);

tft.fillRect(55, 195, 30, 30, LIGHTGREY);

tft.fillRect(90, 195, 120, 30, LIGHTGREY);

tft.fillRect(215, 195, 30, 30, LIGHTGREY);


64

tft.fillRect(10, 195, 40, 30, LIGHTGREY);

tft.fillRect(55, 195, 30, 30, LIGHTGREY);

tft.fillRect(90, 195, 120, 30, LIGHTGREY); Set pembuatan


persegi dengan warna
tft.fillRect(215, 195, 30, 30, LIGHTGREY);

tft.fillRect(250, 195, 60, 30, LIGHTGREY);

tft.drawRect(10, 195, 40, 30, WHITE);

tft.drawRect(55, 195, 30, 30, WHITE);

tft.drawRect(90, 195, 120, 30, WHITE); Set pembuatan garis


persegi dengan warna
tft.drawRect(215, 195, 30, 30, WHITE);

tft.drawRect(250, 195, 60, 30, WHITE);

tft.setTextColor (BLACK);// set warna text

tampil(15, 215, 0, &FreeSans9pt7b, "Num");


tampi text pada
tampil(65, 210, 2, &FreeSans9pt7b, ","); titik x,y lcd
dengan besar font
tampil(225, 210, 2, &FreeSans9pt7b, "."); 0 dan tipe font
freesans dengan
tampil(260, 215, 1, &FreeSans9pt7b, "Oke"); text

//// BARIS KE SATU

tft.drawRect(10, 90, BOXSIZE, BOXSIZE, WHITE);

tft.drawRect(40, 90, BOXSIZE, BOXSIZE, WHITE);

tft.drawRect(70, 90, BOXSIZE, BOXSIZE, WHITE);


Tampil garis
tft.drawRect(100, 90, BOXSIZE, BOXSIZE, WHITE); persegi degan
warna pada
tft.drawRect(130, 90, BOXSIZE, BOXSIZE, WHITE); titik x,y

tft.drawRect(160, 90, BOXSIZE, BOXSIZE, WHITE);

tft.drawRect(190, 90, BOXSIZE, BOXSIZE, WHITE);

tft.drawRect(220, 90, BOXSIZE, BOXSIZE, WHITE);

tft.drawRect(250, 90, BOXSIZE, BOXSIZE, WHITE);

tft.drawRect(280, 90, BOXSIZE, BOXSIZE, WHITE);

////////.............BARIS KE DUA.............\\\\\\\\\\
65

tft.drawRect(220, 90, BOXSIZE, BOXSIZE, WHITE);

tft.drawRect(250, 90, BOXSIZE, BOXSIZE, WHITE);

tft.drawRect(280, 90, BOXSIZE, BOXSIZE, WHITE);

/////.............BARIS KE DUA.............\\\\\

tft.drawRect(25, 125, BOXSIZE, BOXSIZE, WHITE);

tft.drawRect(55, 125, BOXSIZE, BOXSIZE, WHITE);

tft.drawRect(85, 125, BOXSIZE, BOXSIZE, WHITE);

tft.drawRect(115, 125, BOXSIZE, BOXSIZE, WHITE);

tft.drawRect(145, 125, BOXSIZE, BOXSIZE, WHITE);

tft.drawRect(175, 125, BOXSIZE, BOXSIZE, WHITE);

tft.drawRect(205, 125, BOXSIZE, BOXSIZE, WHITE);


Tampil garis
tft.drawRect(235, 125, BOXSIZE, BOXSIZE, WHITE); pada titik
x,y persegi
tft.drawRect(265, 125, BOXSIZE, BOXSIZE, WHITE); degan warna

/// BARIS KE TIGA

tft.drawRect(10, 160, 40, BOXSIZE, WHITE);

tft.drawRect(60, 160, BOXSIZE, BOXSIZE, WHITE);

tft.drawRect(90, 160, BOXSIZE, BOXSIZE, WHITE);

tft.drawRect(120, 160, BOXSIZE, BOXSIZE, WHITE);

tft.drawRect(150, 160, BOXSIZE, BOXSIZE, WHITE);

tft.drawRect(180, 160, BOXSIZE, BOXSIZE, WHITE);

tft.drawRect(210, 160, BOXSIZE, BOXSIZE, WHITE);

tft.drawRect(240, 160, BOXSIZE, BOXSIZE, WHITE);

tft.drawRect(270, 160, 40, BOXSIZE, WHITE);

///// BARIS SATU

tft.setTextColor (BLACK);

tampil(15, 110, 1, &FreeSans9pt7b, "Q");

tampil(45, 110, 1, &FreeSans9pt7b, "W");


66

///// BARIS SATU

tft.setTextColor (BLACK);// set warna text

tampil(15, 110, 1, &FreeSans9pt7b, "Q");

tampil(45, 110, 1, &FreeSans9pt7b, "W");

tampil(75, 110, 1, &FreeSans9pt7b, "E");

tampil(105, 110, 1, &FreeSans9pt7b, "R");

tampil(135, 110, 1, &FreeSans9pt7b, "T");

tampil(165, 110, 1, &FreeSans9pt7b, "Y");

tampil(195, 110, 1, &FreeSans9pt7b, "U");

tampil(229, 110, 1, &FreeSans9pt7b, "I");

tampil(255, 110, 1, &FreeSans9pt7b, "O");

tampil(285, 110, 1, &FreeSans9pt7b, "P"); tampi text pada


titik x,y lcd
/// BARUS KE DUA dengan besar font
0 dan tipe font
tampil(30, 145, 1, &FreeSans9pt7b, "A"); freesans dengan
text
tampil(60, 145, 1, &FreeSans9pt7b, "S");

tampil(90, 145, 1, &FreeSans9pt7b, "D");

tampil(120, 145, 1, &FreeSans9pt7b, "F");

tampil(150, 145, 1, &FreeSans9pt7b, "G");

tampil(180, 145, 1, &FreeSans9pt7b, "H");

tampil(210, 145, 1, &FreeSans9pt7b, "J");

tampil(240, 145, 1, &FreeSans9pt7b, "K");

tampil(270, 145, 1, &FreeSans9pt7b, "L");

//// BARIS KE TIGA

tampil(65, 180, 1, &FreeSans9pt7b, "Z");

tampil(95, 180, 1, &FreeSans9pt7b, "X");

tampil(125, 180, 1, &FreeSans9pt7b, "C");

tampil(155, 180, 1, &FreeSans9pt7b, "V");


67

tampil(65, 180, 1, &FreeSans9pt7b, "Z");

tampil(95, 180, 1, &FreeSans9pt7b, "X");

tampil(125, 180, 1, &FreeSans9pt7b, "C");

tampil(155, 180, 1, &FreeSans9pt7b, "V"); tampi text pada


titik x,y lcd
tampil(185, 180, 1, &FreeSans9pt7b, "B"); dengan besar font
0 dan tipe font
tampil(215, 180, 1, &FreeSans9pt7b, "N"); freesans dengan
text
tampil(245, 180, 1, &FreeSans9pt7b, "M");

tampil(20, 180, 1, &FreeSans9pt7b, "Up");

tampil(277, 180, 1, &FreeSans9pt7b, "Del");

//// BARIS KE EMPAT}

void number ()

{ tft.fillRect(10, 90, BOXSIZE, BOXSIZE, LIGHTGREY);

tft.fillRect(40, 90, BOXSIZE, BOXSIZE, LIGHTGREY);

tft.fillRect(70, 90, BOXSIZE, BOXSIZE, LIGHTGREY);

tft.fillRect(100, 90, BOXSIZE, BOXSIZE, LIGHTGREY);

tft.fillRect(130, 90, BOXSIZE, BOXSIZE, LIGHTGREY); Set


tampil
tft.fillRect(160, 90, BOXSIZE, BOXSIZE, LIGHTGREY); persegi
dengan
tft.fillRect(190, 90, BOXSIZE, BOXSIZE, LIGHTGREY); warna
pada
tft.fillRect(220, 90, BOXSIZE, BOXSIZE, LIGHTGREY); titik x,y

tft.fillRect(250, 90, BOXSIZE, BOXSIZE, LIGHTGREY);

tft.fillRect(280, 90, BOXSIZE, BOXSIZE, LIGHTGREY);

/////.............BARIS KE DUA.............\\\\\

tft.fillRect(25, 125, BOXSIZE, BOXSIZE, LIGHTGREY);

tft.fillRect(55, 125, BOXSIZE, BOXSIZE, LIGHTGREY);

tft.fillRect(85, 125, BOXSIZE, BOXSIZE, LIGHTGREY);

tft.fillRect(115, 125, BOXSIZE, BOXSIZE, LIGHTGREY);

tft.fillRect(145, 125, BOXSIZE, BOXSIZE, LIGHTGREY);


68

tft.fillRect(55, 125, BOXSIZE, BOXSIZE, LIGHTGREY);

tft.fillRect(85, 125, BOXSIZE, BOXSIZE, LIGHTGREY);

tft.fillRect(115, 125, BOXSIZE, BOXSIZE, LIGHTGREY);

tft.fillRect(145, 125, BOXSIZE, BOXSIZE, LIGHTGREY);

tft.fillRect(175, 125, BOXSIZE, BOXSIZE, LIGHTGREY);

tft.fillRect(205, 125, BOXSIZE, BOXSIZE, LIGHTGREY);

tft.fillRect(235, 125, BOXSIZE, BOXSIZE, LIGHTGREY);

tft.fillRect(265, 125, BOXSIZE, BOXSIZE, LIGHTGREY); Set


tampil
////BARIS KE TIGA persegi
dengan
tft.fillRect(10, 160, 40, BOXSIZE, LIGHTGREY); warna
pada
tft.fillRect(60, 160, BOXSIZE, BOXSIZE, LIGHTGREY); titik x,y

tft.fillRect(90, 160, BOXSIZE, BOXSIZE, LIGHTGREY);

tft.fillRect(120, 160, BOXSIZE, BOXSIZE, LIGHTGREY);

tft.fillRect(150, 160, BOXSIZE, BOXSIZE, LIGHTGREY);

tft.fillRect(180, 160, BOXSIZE, BOXSIZE, LIGHTGREY);

tft.fillRect(210, 160, BOXSIZE, BOXSIZE, LIGHTGREY);

tft.fillRect(240, 160, BOXSIZE, BOXSIZE, LIGHTGREY);

tft.fillRect(270, 160, 40, BOXSIZE, LIGHTGREY);

/////BARIS KE EMPAT

tft.fillRect(10, 195, 40, 30, LIGHTGREY); Set


tampil
tft.fillRect(55, 195, 30, 30, LIGHTGREY); persegi
dengan
tft.fillRect(90, 195, 120, 30, LIGHTGREY); warna
pada
tft.fillRect(215, 195, 30, 30, LIGHTGREY); titik x,y

tft.fillRect(250, 195, 60, 30, LIGHTGREY);

tft.drawRect(10, 195, 40, 30, WHITE);

tft.drawRect(55, 195, 30, 30, WHITE);

tft.drawRect(90, 195, 120, 30, WHITE);


69

tft.fillRect(250, 195, 60, 30, LIGHTGREY);// set tampil persegi


dengan warna pada titik x,y

tft.drawRect(10, 195, 40, 30, WHITE);

tft.drawRect(55, 195, 30, 30, WHITE);


Set tampil garis
tft.drawRect(90, 195, 120, 30, WHITE); persegi dengan warna
pada titik x,y
tft.drawRect(215, 195, 30, 30, WHITE);

tft.drawRect(250, 195, 60, 30, WHITE);

tft.setTextColor (BLACK);// set warna text

tampil(15, 215, 0, &FreeSans9pt7b, "Abc"); tampi text pada


titik x,y lcd
tampil(65, 210, 2, &FreeSans9pt7b, ","); dengan besar
font 0 dan tipe
tampil(225, 210, 2, &FreeSans9pt7b, "."); font freesans
dengan text
tampil(260, 215, 1, &FreeSans9pt7b, "Oke");

//// BARIS KE SATU

tft.drawRect(10, 90, BOXSIZE, BOXSIZE, WHITE);

tft.drawRect(40, 90, BOXSIZE, BOXSIZE, WHITE);

tft.drawRect(70, 90, BOXSIZE, BOXSIZE, WHITE);

tft.drawRect(100, 90, BOXSIZE, BOXSIZE, WHITE);


Set tampil
tft.drawRect(130, 90, BOXSIZE, BOXSIZE, WHITE);
garis persegi
dengan warna
tft.drawRect(160, 90, BOXSIZE, BOXSIZE, WHITE);
pada titik
x,y
tft.drawRect(190, 90, BOXSIZE, BOXSIZE, WHITE);

tft.drawRect(220, 90, BOXSIZE, BOXSIZE, WHITE);

tft.drawRect(250, 90, BOXSIZE, BOXSIZE, WHITE);

tft.drawRect(280, 90, BOXSIZE, BOXSIZE, WHITE);

////////.............BARIS KE DUA.............\\\\\\\\\\

tft.drawRect(25, 125, BOXSIZE, BOXSIZE, WHITE);

tft.drawRect(55, 125, BOXSIZE, BOXSIZE, WHITE);


70

tft.drawRect(25, 125, BOXSIZE, BOXSIZE, WHITE);

tft.drawRect(55, 125, BOXSIZE, BOXSIZE, WHITE);

tft.drawRect(85, 125, BOXSIZE, BOXSIZE, WHITE);

tft.drawRect(115, 125, BOXSIZE, BOXSIZE, WHITE);


Set tampil
tft.drawRect(145, 125, BOXSIZE, BOXSIZE, WHITE); garis persegi
dengan warna
tft.drawRect(175, 125, BOXSIZE, BOXSIZE, WHITE); pada titik
x,y
tft.drawRect(205, 125, BOXSIZE, BOXSIZE, WHITE);

tft.drawRect(235, 125, BOXSIZE, BOXSIZE, WHITE);

tft.drawRect(265, 125, BOXSIZE, BOXSIZE, WHITE);

/// BARIS KE TIGA

tft.drawRect(10, 160, 40, BOXSIZE, WHITE);

tft.drawRect(60, 160, BOXSIZE, BOXSIZE, WHITE);

tft.drawRect(90, 160, BOXSIZE, BOXSIZE, WHITE);

tft.drawRect(120, 160, BOXSIZE, BOXSIZE, WHITE);


Set tampil
tft.drawRect(150, 160, BOXSIZE, BOXSIZE, WHITE); garis persegi
dengan warna
tft.drawRect(180, 160, BOXSIZE, BOXSIZE, WHITE); pada titik
x,y
tft.drawRect(210, 160, BOXSIZE, BOXSIZE, WHITE);

tft.drawRect(240, 160, BOXSIZE, BOXSIZE, WHITE);

tft.drawRect(270, 160, 40, BOXSIZE, WHITE);

///// BARIS SATU

tft.setTextColor (BLACK);// set warna text


tampi text pada titik
tampil(15, 110, 1, &FreeSans9pt7b, "1");
x,y lcd dengan besar
font 0 dan tipe font
tampil(45, 110, 1, &FreeSans9pt7b, "2");
freesans dengan text
tampil(75, 110, 1, &FreeSans9pt7b, "3");

tampil(105, 110, 1, &FreeSans9pt7b, "4");

tampil(135, 110, 1, &FreeSans9pt7b, "5");

tampil(165, 110, 1, &FreeSans9pt7b, "6");


71

tampil(75, 110, 1, &FreeSans9pt7b, "3");

tampil(105, 110, 1, &FreeSans9pt7b, "4");

tampil(135, 110, 1, &FreeSans9pt7b, "5");

tampil(165, 110, 1, &FreeSans9pt7b, "6");

tampil(195, 110, 1, &FreeSans9pt7b, "7");

tampil(229, 110, 1, &FreeSans9pt7b, "8");

tampil(255, 110, 1, &FreeSans9pt7b, "9");

tampil(285, 110, 1, &FreeSans9pt7b, "0");

/// BARUS KE DUA

tampil(30, 145, 1, &FreeSans9pt7b, "@");

tampil(60, 145, 1, &FreeSans9pt7b, ":"); tampi text pada


titik x,y lcd
tampil(90, 145, 1, &FreeSans9pt7b, ";"); dengan besar font
0 dan tipe font
tampil(120, 145, 1, &FreeSans9pt7b, "_"); freesans dengan
text
tampil(150, 145, 1, &FreeSans9pt7b, "-");

tampil(180, 145, 1, &FreeSans9pt7b, "#");

tampil(210, 145, 1, &FreeSans9pt7b, "(");

tampil(240, 145, 1, &FreeSans9pt7b, ")");

tampil(270, 145, 1, &FreeSans9pt7b, "/");

//// BARIS KE TIGA

tampil(65, 180, 1, &FreeSans9pt7b, ".");

tampil(95, 180, 1, &FreeSans9pt7b, ",");

tampil(125, 180, 1, &FreeSans9pt7b, "?");

tampil(155, 180, 1, &FreeSans9pt7b, "!");

tampil(185, 180, 1, &FreeSans9pt7b, "'");

//tampil(215, 180, 1, &FreeSans9pt7b, """);

tft.setFont(&FreeSans9pt7b);

tft.setCursor(215, 180);
72

tampil(185, 180, 1, &FreeSans9pt7b, "'");// tampi text pada


titik x,y lcd dengan besar font 1 dan tipe font freesans dengan
text
tft.setFont(&FreeSans9pt7b);// set font text

tft.setCursor(215, 180);// set posisi text

tft.setTextSize(1);// set text ukuran

tft.print('"');// set kalimat text

tampil(245, 180, 1, &FreeSans9pt7b, "+"); tampi text pada


titik x,y lcd
tampil(20, 180, 1, &FreeSans9pt7b, " "); dengan besar
font 1 dan tipe
tampil(277, 180, 1, &FreeSans9pt7b, "Del");} font freesans
dengan text
void ketik()

{ tft.setRotation (1);// set rotasi screen

tft.fillRect (0, 0, tft.width(), 75, WHITE);// set tampil


persegi dengan warna

tft.drawRect (0, 0, tft.width(), 75, LIGHTGREY);} // set tampil


garis persegi dengan warna

void gantiwifi() {

tft.setTextColor(BLACK);// set warna text

tampil(10, 35, 1, &FreeSans9pt7b, "SSID= ");// tampi text pada


titik x,y lcd dengan besar font 1 dan tipe font freesans dengan
text
tft.fillRect (80, 20, 200, 30, LIGHTGREY);// set tampil persegi
dengan wanran

tft.drawRect (80, 20, 200, 30, BLACK);// set tampil garis


persegi dengan warna

tft.setCursor (90, 40);// set posisi text

tft.setTextSize (1);// set ukuran text

tft.print (Ssid);// perintah untuk menampilkan print

tampil(10, 85, 1, &FreeSans9pt7b, "PASS= ");

tft.fillRect (80, 70, 200, 30, LIGHTGREY);


73

tft.drawRect (80, 70, 200, 30, BLACK);// set garis persegi


dengan warna

tft.setCursor (90, 90);// set posisi text

tft.setTextSize (1);// set ukuran text

tft.print (Pass)// perintah untuk menampilkan print

tft.fillRect (10, 120, 80, 50, LIGHTGREY);// set ta,pil persegi


dengan warna

tft.drawRect (10, 120, 80, 50, BLACK);// set tampil garis


persegi dengan warna

tft.setTextColor(WHITE);// set warna text

tampil(30, 150, 1, &FreeSans9pt7b, "OKE");");// tampi text pada


titik x,y lcd dengan besar font 1 dan tipe font freesans dengan
text
tft.fillRect (120, 120, 80, 50, LIGHTGREY);// set tampil
persegi dengan warna

tft.drawRect (120, 120, 80, 50, BLACK);// set garis oersegi


dengan warna

tampil(140, 150, 1, &FreeSans9pt7b, "BACK");}");");// tampi


text pada titik x,y lcd dengan besar font 1 dan tipe font
freesans dengan text

3.7.4 Koneksi Wifi

Koneksi wifi dengan menggunakan rangkaian ESP8266 digunakan sebagai

penghubung hardware alat ke jaringan wifi sehingga dapat mengirimkan data pada

server blynk dan akan tampil pada layar smartphoe yang sudah tersedia dengan

aoikasi blynk. Program dalam menghubungkan degan wifi dan sekaligus dengan

blynk dapat dilihat pada tabel 10 dibawah.


74

Tabel 10 Program koneksi wifi

void resetwifi() {

tft.setRotation(1);// set rotasi layar

tft.fillScreen (BLACK);// set warna screen

for (int j = 1; j <= 3; j++) {// penggunaan fungsi for

tft.setCursor(20, 20);// set posisi text

tft.setFont(&FreeSerif9pt7b);// set font text

tft.setTextColor(WHITE);// set warna text

tft.print("Checking for Connection");// data text yang


ditampilakn

for (int i = 1; i <= 4; i++) {// penggunaan fungsi for

delay(500);// fungsi penghenti program selama waktu


tertentu

tft.print(".");// data text yang ditampil

tft.fillRect(203, 10, 50, 20, BLACK);// set persegi dengan


warna

Blynk.begin(auth, wifi, ssid, pass);// fungsi perintah


mengkoneksikan blynk dan wifi

tft.setCursor(20, 40);// set posisi text

tft.print ("Connected");// data text yang akan ditampilkan

delay (1000);// fungsi penghenti program selama waktu tertentu

mode = 7;// fungsi merubah mode menjadi 7

}
Adapun untuk program lebih lengkapnya dapat dilihat pada halaman lampiran.
75

3.8 Pengujian Alat

Pengujian alat dilakukan bertujuan untuk mengetahui mekanisme kerja dan

standar kelayakan penggunaan dari alat yang dirancang. Beberapa pengujian yang

dilakukan pada rancangan alat pemantauan ruang adalah sebagai berikut.

3.8.1 Pengujian Suhu

Pengujian suhu dilakukan untuk mengetahui stabilitas dan keakurasian nilai

suhu pada saat proses pemantauan. Stabilitas dan keakurasian sangat penting

dalam proses pemantauan. Pengujian suhu dilakukan dengan membandingkan

nilai pembacaan sensor dengan alat thermohigro ruangan.

3.8.2 Pengujian Kelembaban

Pengujian kelembaban dilakukan untuk mengetahui stabilitas dan

keakurasian nilai kelembaban pada saat proses pemantauan. Stabilitas dan

keakurasian sangat penting dalam proses pemantauan. Pengujian kelembaban

dilakukan dengan membandingkan nilai pembacaan sensor dengan alat

thermohigro ruangan.

3.8.3 Pengujian Tekanan Udara

Pengujian tekanan udara dilakukan untuk mengetahui stabilitas dan

keakurasian nilai tekanan udara pada saat proses pemantauan. Stabilitas dan

keakurasian sangat penting dalam proses pemantauan. Pengujian tekanan udara ini

dilakukan dengan membandingkan nilai pembacaan sensor dengan alat barometer

ruangan.

3.8.4 Pengujian Koneksi Blynk


76

Pengujian koneksi menuju ke blynk sangat penting guna mengetahui apakah

dapat dipantau menggunakan koneksi wifi yang tersedia sehingga beberapa

ruangan dapat dipantau secara langsung dalam satu tampilan di smartphone yang

sudah tersedia aplikasi blynk. Pengujian ini menggunakan sebuat tabel uji apakah

dapat terhubung dengan baik atau tidak dengan mencoba beberapa wifi yang

berbeda.

3.9 Teknik Analisis Data

Penulis melakukan analisis data dengan cara membandingkan alat yang

dibuat dengan alat layak pakai dan dilakukan perhitungan nilai rata-rata dan

simpangan error

3.6.1 Rata-Rata

Rata-rata adalah nilai atau hasil pembagian dari jumlah data yang diambil

atau diukur dengan banyaknya pengambilan data dilakukan atau jumlah

pengukuran dilakukan. Untuk mencari rata-rata dilakukan perhitungan dengan

rumus, sebagai berikut

Keterangan:

x = rata-rata

Σxi = jumlah nilai data yang telah diambil

n = berapa kali data diambil (1,2,3…,n)

3.6.2 Error (%)


77

Error adalah selisih atau perbedaan nilai antara rata-rata alat yang dibuat

dengan rata-rata alat pembanding, dirumuskan sebagai berikut:

Keterangan:

Y = rata-rata alat pembanding

X = rata-rata alat yang dibuat


BAB IV

HASIL DAN PEMBAHASAN

4.1. SPESIFIKASI ALAT

Spesifikasi alat merupakan penjelasan singkat mengenai alat dan bentuk

tampilan dari alat pemantauan ruang operasi seperti gambar 4.1 yang penulis

rancang ditunjukan dan dijelaskan sebagai berikut:

1. Nama Alat : Pemantauan Suhu Kelembaban dan

Tekanan Udara terpusat pada ruang

operasi menggunakan aplikasi blynk

2. Max Temperature : 50 oC

3. Max Humidity : 90 %

4. Max Absolut Pressure : 110000 Pa

5. Tegangan Masukkan : 220 VAC/ 50 Hz

6. Display : 2,4” TFT screen with touchscreen

7. Kontrol : Micoprosessor (ATMega 2560)

8. Dimensi Alat : 275mm x 135mm x 110mm (W x H x D)

9. Berat : 1000 gram.

4.2. STANDAR OPERASIONAL PROSEDUR

Standar Operasional Prosedur merupakan langkah pengoperasian alat

sesuai yang dilakukan untuk memastikan dan menjaga alat agar tetap dalam

kondisi terbaik. Adapun langkah-langkah yang perlu dilakukan dalam

mengoperasikan alat pemantauan ruang operasi adalah seperti berikut:

1. Persiapan

78
79

a. Siapkan tempat yang tidak menggangu kegiatan operasi ketika

sedang terlaksana sebuah operasi, serta yang dekat dengan

sumber listrik atau PLN.

b. Siapkan kabel power

2. Pelaksanaan

a. Hubungkan alat dengan menggunkan kabel power ke sumber

PLN 220V/ 50 Hz.

b. Nyalakan alat dengan menekan tombol power pada alat

c. Tunggu hingga LCD menyala dan menunjukan beberapa menu

yang tersedia.

d. Pilih menu Pertama untuk melihat hasil pemantauan

suhu,kelembaban dan tekanan ruangan tanpa terhubung dengan

wifi

e. Pilih menu ke dua untuk melakukan beberapa pengaturan seperti

pengaturan batas suhu, pengaturan batas kelembaban, pengatur

batas tekanan, serta pengaturan pada wifi

f. Pada pengaturan Batasan suhu kelembaban dan tekanan akan

memberikan efek alarm akan berbunyi ketika data sensor

dengan hasil pengaturan melewati batas

g. Pada pengaturan wifi akan tertampilkan 2 menu lagi yakni menu

reset wifi menjadi wifi default dan cek koneksi

h. Ketika melakukan cek koneksi maka akan dapat melakukan

penggantian wifi default menjadi wifi yang di inginkan.


80

3. Pengemasan

a. Setelah alat digunakan matikan tombol power

b. Lepaskan kabel power yang terhubung dengan stopkontak dan

rapikan kabel

c. Bersihkan alat menggunakan tisu dari debu atau noda yang

menempel.

4.3. KINERJA SISTEM

Kinerja sistem alat pemantauan suhu kelembaban dan tekanan udara

ketikadihubungkan dengan pada sumber tegangan PLN, tegangan masukkan akan

diturunkan dan diserahkan terlebih dahulu dengan rangkaian catu data menjadi 5

Vdc. Tegangan 5Vdc digunakan sebagai sumber daya blok rangkaian

mikrokontroler. Rangkaian mikrokontroler yang terhubung pada rangkaian sensor

DHT 11, rangkaian sensor BMP280, display, buzzer dan ESP8266. Rangkaian

mikrokontroler ini sebagai rangkaian pengolah dan menjadi pusat perintah kerja

sistem.

Mikrokontroler akan bekerja ketika tombol power ditekan menjadi ON

atau menyala, kemudian display lcd akan hidup. Sistem akan menganalisis alat,

ketika menjalankan program lcd tft dengan touchscreen sehingga lcd dapat

dijadikan sebagai display sekaligus sebagai inputan data. Setelah lcd menyala dan

bekerja dengan semestinya, mikrokontrler akan membaca kedua sensor dan dapat

langsung di tampilkan pada lcd. Setelah sensor dapat mengirimkan data ke

mikrokontroler, rangkaian ESP8266 sebagai penghubung sinyal wifi dapat

mengirimkan data sensor ke server blynk. Mikrokontroler memberikan data wifi


81

berupa ssid dan password yang tersedia sehingga ESP8266 dapat terhubung

dengan wifi yang memiliki ssid dan password yang sama. Untuk dapat

menampilkan data yang sudah terkirim ke server blynk menggunakan token yang

sudah diberikan oleh aplikasi blynk dengan akun tertentu , sehingga data data

pada sever tidak akan terbaca selain dari token yang diberikan.

4.4. HASIL PENGUKURAN

Hasil pengukuran berisikan data nilai hasil percobaan dan uji fungsi alat.

Pengambilan data yang dilakukan diambil sebanyak 10 kali pengulangan. Hasil

pengukuran alat pemantauan ruang operasi yakni sebagai berikut:

4.4.1. Pengujian Suhu

Penujian dilakukan pada 2 ruangan operasi RS PKU Muhammadiyah

Gamping yang ruangannya sudah sesuai dengan ketentuan berlaku. Pengujian ini

dilakukan dengan membandingkan sensor suhu DHT11 dengan thermohygro

digital. Pengambilan data dialkukan dengan membaca nilai suhu tiap satu menit.

Hasil pengambilan data suhu ruangan operasi pertama ditampilkan pada tabel 11

dan untuk ruangan operasi kedua pada tabel 12.

Tabel 11 Nilai suhu pembacaan alat dan thermohygro pada ruang pertama

Waktu DHT11 Thermohygro


(m) (oC) digital (oC)

1 24.4 23.9
2 24.3 24
3 24.3 23.8
4 24.3 23.8
5 24 23.5
6 23.9 23.4
82

7 24 23.2
8 24.1 23
9 24.1 22.9
10 24.2 23.1
11 24.2 23.2
12 24.3 23.5
13 24.3 23.7
14 24.3 23.9
15 24.3 23.9
16 24.3 24
17 24.4 24
18 24.4 24.1
19 24.4 24.1
20 24.5 24.1
Rata-Rata 24.3 23.7
Error 2.5%
Standart
0.1572
Deviasi
Dari hasil pengambilan data dan membandingkan dengan alat thermohygro

digital, bahwasanya alat yang menggunakan sensor DHT 11 sebagai sensor suhu

memilki tingkat ke akurasian yang cukup stabil dengan nilai suhu tertinggi pada

suhu 24.5 oC dengan pembadingnya pada suhu 24.1 oC pada menit ke 20 dan suhu

paling rendah yang terbaca adalah 23.9 oC dengan pembandingnya pada suhu 23.4
o
C pada menit ke 6. Sehingga dapat diperoleh nilai rata-rata dari suhu yang

terbaca pada ruang satu menggunakkan sensor DHT11 adalah 24.3 oC dan rata-

rata suhu yang terbaca menggunakan thermohygro digital adalah 23.7 oC dengan

nilai eror sebesar 2.5%. Terjadinya eror atau selisih dikarenakan letak dari pada

sensor yang didalam dan diatas dari pada rangkaian power supply yang diketahui

bahwa power supply memiliki hawa panas yang ditimbulkan dari IC ataupun dari
83

transformator. Dari data diatas dapat ditampilkan menjadi grafik yang ditampilkan

pada Gambar 4.1

Suhu Ruang 1
25

24.5

24
Suhu (oC)

23.5

23

22.5

22
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Menit

DHT 11 Thermohygro

Gambar 4. 1 Grafik Suhu Ruang 1


Hasil dari pembacaan grafik diatas, didapatkan nilai dari pembacaan

sensor lebih tinggi dari pada nilai pembacaan suhu pada alat Thermohygro. Pada

waktu menit pertama, selisih diantara pembacaan suhu pada alat dengan sensor

DHT11 kurang dari pada 1 oC dengan nilai suhu DHT lebih tinggi dari pada alat

Thermohygro. Begitu pun dengan menit ke 2 hingga ke 6. Adapun pada menit ke

7 hingga ke 10, perbandingan suhu kedua alat menjadi lebih jauh yang mana suhu

pada alat Thermohygro lebih rendah dari pada sensor DHT11. Hal ini di sebabkan

sensor pada alat Thermohygro menyentuh lantai sehingga suhu yang terbaca lebih

rendah dari pada suhu ruangan. Setelah itu, pada menit ke 11 hingga ke 20 suhu

ruangan mulai sedikit naik yang dikarenakan pada dalam ruangan operasi terdapat

beberapa orang yang keluar masuk ruangan guna mempersiapkan kegiatan operasi

yang sudah di jadwalkan. Adapun penyebab terjadinya simpangan yang cukup


84

signifikan pada sensor DHT11 dengan pembandingnya, disebabkan oleh sensor

yang ditaruh diatas dari rangkaian power supply dimana power supply ini

memiliki daya panas yang disebabkan oleh komponen rangkaian berupa IC

ataupun transformator.

Tabel 12 Nilai suhu pembacaan alat dan thermohygro pada ruang kedua

Waktu DHT11 Thermohygro


(m) (oC) digital (oC)

1 24.1 23.1
2 24.3 23.1
3 23.9 22.8
4 24.3 22.9
5 24.5 23.1
6 24.6 23.1
7 24.6 23.3
8 24.6 23.2
9 24.5 23.5
10 24.3 23.7
11 24.5 23.7
12 24.2 23.7
13 24.2 23.7
14 24.2 23.8
15 24.3 24
16 24.4 24.1
17 24.4 24.1
18 24.3 24.5
19 24.6 24.6
20 24.7 24.5
Rata-Rata 24,4 23.6
Error 3.2%
Standart
0.2023
Defiasi
85

Dari hasil pengambilan data dan membandingkan dengan alat thermohygro

digital, bahwasanya alat yang menggunakan sensor DHT 11 sebagai sensor suhu

memilki tingkat ke akurasian yang cukup stabil dengan nilai suhu tertinggi pada

suhu 24.7 oC dengan pembadingnya pada suhu 24.5 oC pada menit ke 20 dan suhu

paling rendah yang terbaca adalah 23.9 oC dengan pembandingnya pada suhu 22.8
o
C pada menit ke 3. Sehingga dapat diperoleh nilai rata-rata dari suhu yang

terbaca pada ruang ke dua menggunakkan sensor DHT11 adalah 24.4 oC dan rata-

rata suhu yang terbaca menggunakan thermohygro digital adalah 23.6 oC dengan

nilai eror sebesar 3.2%. Terjadinya eror atau selisih dikarenakan letak dari pada

sensor yang didalam dan diatas dari pada rangkaian power supply yang diketahui

bahwa power supply memiliki hawa panas yang ditimbulkan dari IC ataupun dari

transformator. Dari data diatas dapat ditampilkan menjadi grafik yang

ditampilkan pada Gambar 4.2

Suhu Ruang 2
25.5
25
24.5
Suhu (oC)

24
23.5
23
22.5
22
21.5
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Menit

DHT11 Thermohygro

Gambar 4. 2 Grafik Suhu Ruang 2


86

Hasil dari pembacaan grafik diatas, didapatkan nilai suhu dari pembacaan

sensor pada menit awal lebih tinggi dari pada nilai Thermohygro dan perlahan

menjadi stabil. Terjadinya lonjakan nilai pembacaan sensor yang tinggi pada

menit ke 3 dengan selisih dari keduanya lebih dari 1 oC. Penyebab terjadinya

lonjakan nilai suhu pada sensor DHT11 adalah kondisi dari IC TIP3055 yang

merupakan IC transistor pada rangkaian power supply terjadi kenaikan suhu yang

tinggi. Hal ini disebabkan karena transistor sebagai penguat arus akan semakin

panas ketika arus yang digunakan pada alat cukup tinggi. Akan tetapi pada menit

ke 4 hingga menit ke 20 suhu yang terbaca pada sensor DHT11 menjadi stabil

berkisar pada suhu 24 oC hingga 24.7 oC yang mana suhu yang terbaca pada alat

Thermohygro naik karena ruangan yang seringnya dibuka dan ditutup serta

dimasuki pasien dan para tenaga medis lain yang hendak melakukan tindakan

pembedahan.

4.4.2. Pengujian Kelembaban

Penujian dilakukan pada bengkel RSI Klaten yang ruangannya memiliki

pendingin dan tertutup sehingga kelembaban udara dapat disesuaikan dengan

menggunkan pendingin tersebut.. Pengujian ini dilakukan dengan

membandingkan sensor kelembaban DHT11 dengan Fluke DPM4, pengambilan

data dilakukan dengan membaca nilai kelembaban tiap lima menit sekali. Hasil

pengambilan data kelembaban pada alat pertama ditampilkan pada tabel 13 dan

untuk alat kedua pada tabel 14.

Tabel 13 Nilai kelembaban pembacaan alat dan pembacaan dari alat Fluke DPM4
pada alat ke satu.
87

Waktu DHT11 Fluke DPM4


(m) (%Rh) (%Rh)

5 47.2 50.1
10 46.1 50.4
15 46.1 49.9
20 45 49.9
25 45 49.9
30 45 50
35 45 49.9
40 45 49.2
45 45 48.6
50 49.4 48
55 52.7 47.7
60 51.8 47.6
65 51.3 47.4
70 52.8 47
75 51.8 47.3
80 52 47.4
85 51.3 47.9
90 51.6 47.7
95 47.2 47.4
100 47.2 47.5
Rata-Rata 48.4 48.5
Error 0.2%
Standart
3.1308
Defiasi

Dari hasil pengambilan data dan membandingkan dengan Fluke DPM4,

bahwasannya alat yang menggunakan sensor DHT11 sebagai sensor kelembaban

memiliki tingkat akurasi cukup baik dengan batasan dari pada sensor asli yakni

kurang lebih 5 %Rh. Pada pengjian dengan membandingkan DHT11 dengan

Fluke DPM4 nilai rata-rata diperoleh sebesar 48. 4%Rh dan 48.5 %Rh dengan
88

rata-rata selisihnya adalah 0.1 %Rh. Pengukuran tertinggi pada sensor DHT11

adalah 52.7 %Rh pada menit ke 55 dengan pembandingnya sebesar 47.7 %Rh.

Selisih dari pada simpangan yang terjadi kurang daripada nilai batas bawaan

sensor DHT11 yakni kurang atau lebih 5 %Rh sehingga sensor DHT11 dalam

mengukur kelembaban masih dapat berfungsi dengan baik. Adapun nilai terendah

pada pengukuran sensor DHT11 pada menit ke 20 hingga menit ke 45 dengan

besar nilai kelembaban DHT11 yakni 45 %Rh dan pada alat Fluke DPM4

bersekitar di 48.6 %Rh hingga 50 %Rh dengan selisih masih dalam toleransi

sensor yakni kurang atau lebih dari 5 %Rh. Dengan demikian sensor DHT11

masih baik digunakan. Hasil dari pembacaan kelembaban pada alat kesatu dapat

ditampilkan berupa grafik pada gambar 4.3 dibawah.

Kelembaban Alat 1
54
52
Kelembaban (%Rh)

50
48
46
44
42
40
5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100
Menit

Fluke DPM4 DHT 11

Gambar 4. 3 Grafik Nilai Kelembaban pada Alat 1


Hasil pembacaan grafik diatas, didapatkan nilai pembacaan kelembaban

pada sensor DHT11 memiliki akurasi yang cukup baik dengan selisih pembacaan

pada sensor DHT11 dengan alat Fluke DPM4 masih dalam toleransi yang dimiliki
89

oleh sensor yakni kurang atau lebih dari 5 %Rh. Adapun masalah ke stabilan

pengukuran dimana pada menit ke 50 hingga ke 90 pembacaan sensor mennjadi

lebih tinggi dari pada dengan alat pembandingnya yang mana masih di sekitar 50

%Rh hingga 46 %Rh. Dengan kenaikan kelembaban yang tidak stabil tersebut

disebab adanya pengaruh dari rangkaian power supply yang menghantarkan panas

sehingga menyebabkan pembacaan kelembaban sensor DHT11 menjadi sedikit

terpengaruhi seperti halnya pada saat pembacaan suhu sebelumnya. Adapun pada

menit ke 95 dan 100 nilai pembacaan sensor DHT11 akurasi dan ke stabilan yang

bagus dengan selisih di keduanya kurang dari 1 %Rh.

Tabel 14 Nilai kelembaban pembacaan alat dan pembacaan dari alat Fluke DPM4
pada alat ke dua

Waktu DHT11 Fluke DPM4


(m) (%Rh) (%Rh)

5 46.7 51
10 47.7 50.1
15 46.7 49.9
20 45.9 50
25 46.9 49.9
30 47 50.2
35 46 49.6
40 49.1 49
45 43.9 48.3
50 51.5 48
55 51.5 47.6
60 51.5 47.5
65 51.5 47.4
70 51.5 47.3
75 51.5 47.3
80 55.3 47.9
90

85 55.3 47.8
90 52.3 47.8
95 44.8 47.4
100 43.9 47.4
Rata-Rata 49.025 48.57
Error 0.9%
Standart
3.5297
Defiasi

Dari hasil pengambilan data serta menbandingkannya dengan alat Fluke

DPM4, bahwasannya alat yang menggunakan sensor DHT11 sebagai sensor

kelembaban pada alat kedua ini memiliki rata-rata pengukuran sebesar 49.025

%Rh dan dengan pembanding alat Fluke DPM4 dengan rata-rata 48.57 %Rh.

Dengan selisih rata-rata keduanya yakni 0.455 %Rh yang mana selisih ini

memiliki nilai yang cukup kecil dan masih memenuhi toleransi pada sensor yang

digunakan yakni kurang atau lebih dari 5 %Rh. Adapun nilai eror yang d

cantumkan pada data diatas sebesar 0.9% yang didapatkan dari menghitung selisih

dari rata-rata pembacaan alat menggunakan DHT11 dengan rata-rata

pembandingnya yaitu Fluke DPM4 yang setelah itu dibagi dengan rata-rata

pembanding Fluke DPM4. Standart deviasi yang didapatkan pada data

kelembaban yakni 3.5297. Hasil dari pembacaan kelembaban pada alat kedua

dapat ditampilkan berupa grafik pada gambar 4.4 dibawah.


91

Kelembaban Alat 2
60

50
Kelembaban (%Rh)

40

30

20

10

0
5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100
Menit
Fluke DPM4 DHT11

Gambar 4. 4 Grafik Nilai Kelembaban Alat Kedua


Hasil pembacaan grafik diatas, didapatkan nilai pembacaan kelembaban

sensor DHT11 dengan alat Fluke DPM4 sebagai pembandingnya memiliki

kestabilan nilai yang cukup tinggi dimana setiap 5 menit pada pengukuran awal

hingga ke menit 35 kestabilan antara naik dan turun pada kelembaban ini cukup

sedikit atau bisa dibilang konstan. Adapun pembacaan pada menit ke 40 hingga

menit 50 perubahan kelembaban sedikit tidak stabil akan tetapi masih dapat

masuk toleransi pembatasan keeroran sensor yang memiliki selisih kurang atau

lebih dari 5 %Rh, kemudian pada pembacaan menit ke 60 hingga selesai

pembacaan Kembali stabil dengan kenaikan dan penurunan yang tinggi.

4.4.3. Pengujian Tekana Udara

Pengujian dilakukan pada bengkel RSI Klaten yang ruangannya memiliki

pendingin dan tertutup. Pengujian ini dilakukan dengan membandingkan sensor

tekanan udara BMP280 dengan Fluke DPM4. Pengambilan data dilakukan dengan

membaca nilai tekanan udara raungan tiap lima menit sekali. Hasil pengambilan
92

data tekanan udara ini pada alat pertama ditampilkan pada tabel 15 dan untuk alat

kedua pada tabel 16.

Tabel 15 Nilai tekanan udara alat pertama dengan pembanding Fluke DPM4

Waktu BPM280 Fluke DPM4


(m) (Pa) (Pa)

5 98890 98870
10 98884 98860
15 98877 98850
20 98855 98830
25 98855 98840
30 98848 98820
35 98843 98810
40 98838 98820
45 98831 98810
50 98839 98810
55 98831 98800
60 98821 98800
65 98820 98800
70 98810 98790
75 98811 98790
80 98811 98790
85 98804 98790
90 98787 98770
95 98761 98750
100 98760 98740
Rata-Rata 98828.8 98807
Error 0.02%
Standart
35.5966
Defiasi
93

Dari hasil pengambilan data dari alat pertama diatas, serta membandingkan

dengan alat Fluke DPM4, bahwasannya alat yang menggunakan sensor tekanan

udara absolut atau yang terdapat pengaruh dari tekanan atsmorfir bumi memiliki

nilai kestabilan yang cukup tinggi dengan keeroran sebesar 0.02%, adapun rata-

rata pembacaan tekanan udara pada sensor BMP280 adalah 98828.8 Pa dan

pembandingnya sebesar 98807 Pa dengan selisih dari kedua rata-rata diatas adalah

21.8 Pa. Standart defiasi yang dihasilkan dari seluruh pembacaan tekanan udara

pada sensor BMP280 sebesar 35.5966. Hasil pengambilan data pada alat pertama

dapat ditampilkan dalam bentuk grafik yang ditampikan pada gambar 4.5 dibawah

ini.

Tekanan Udara Alat 1


98950
98900
Pressure (Pa)

98850
98800
98750
98700
98650
5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100
Menit

Fluke DPM4 BMP280

Gambar 4. 5 Grafik Tekanan Udara pada Alat Pertama

Hasil pembacaan grafik diatas dapat diketahui bahwa sensor BMP280

memiliki keaskurasian dan kestabilan yang sangat bagus dengan selisih antara

pembacaan sensor BMP280 dengan alat Fluke DPM4 tidak lebih dari 1 hPa serta,

perubahan nilai tekanan udaranya, sangat stabil tanpa adanya lonjakan yang
94

dipengaruhi dari rangkaian power supply atau pun rangkaian lainnya. Pada menit

5 hingga menit ke 20 terjadi penurunan tekanan udara pada ruangan dan dapat

dibaca dengan kedua alat yanag sama-sama tekanan udaranya menurun dengan

cukup stabil. Adapun pada menit ke 25 pada alat Fluke DPM4 terjadi kenaikan

tekanan udara dan diikuti dengan sensor BMP280 dengan sedikit kenaikannya

dari pada pembacaan sebelumnya. Setelah itu, pada menit 30 hingga menit 100

terjadi kenaikan dan penurunan tekanan udara dengan stabil dan dapat diikuti

dengan sensor BMP280 dengan baik.

Tabel 16 Nilai tekanan udara alat kedua dengan pembanding Fluke DPM4

Waktu BPM280 Fluke DPM4


(m) (Pa) (Pa)

5 98895 98870
10 98884 98860
15 98870 98850
20 98859 98840
25 98861 98840
30 98851 98830
35 98837 98810
40 98838 98820
45 98832 98810
50 98830 98810
55 98820 98800
60 98821 98800
65 98825 98800
70 98816 98790
75 98824 98790
80 98815 98790
85 98810 98780
90 98785 98760
95

95 98771 98740
100 98765 98740
Rata-Rata 98830.45 98806.5
Error 0.02%
Standart
33.9434
Defiasi

Dari hasil pengambilan data dari alat ke dua diatas, serta membandingkan

dengan alat Fluke DPM4, bahwasannya alat yang menggunakan sensor tekanan

udara absolut atau yang terdapat pengaruh dari tekanan atsmorfir bumi memiliki

nilai kestabilan yang cukup tinggi dengan keeroran sebesar 0.02%, adapun rata-

rata pembacaan tekanan udara pada sensor BMP280 adalah 98830.45 Pa dan rata-

rata pada alat pembandingnya sebesar 98806.5 dengan selisih diantara kedua rata-

rata tersebut sebesar 23,92 Pa, sehingga dapat dikatakan presisi karena masih

dibawah 1hPa dengan nilai pembacaan tekanan udara pada sensor BMP280

tertinggi yakni 98895 Pa pada menit ke 5 dengan alat Fuke DPM4 pada tekanan

udara sebesar 98870 Pa serta pembacaan nilai terrendah pada sensor BMP280

yakni 98765 Pa, pada menit ke 100 dengan nilai pembandingnya sebesar 98740

Pa. Standart defiasi yang dihasilkan dari pengukuran selama 100 menit dengan

pengambilan data tiap 5 menit sekali diatas adalah 33.9434. Hasil pengambilan

data pada alat kedua dapat ditampilkan dalam bentuk grafik yang ditampikan pada

gambar 4.6 dibawah ini.


96

Tekanan Udara Alat 2


98950
Pressure (Pa) 98900

98850

98800

98750

98700

98650
5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100
Menit

Fluke DPM4 BMP280

Hasil pembacaan grafik diatas dapat diketahui bahwa sensor BMP280

memiliki keaskurasian dan kestabilan yang sangat bagus dengan selisih antara

pembacaan sensor BMP280 dengan alat Fluke DPM4 tidak lebih dari 1 hPa serta,

perubahan nilai tekanan udaranya, sangat stabil tanpa adanya lonjakan yang

dipengaruhi dari rangkaian power supply atau pun rangkaian lainnya. Pada

pengambilan data pertama pada menit ke 5 hingga menit ke 20 terjadi penurunan

tekanan secara konstan. Adapun pada menit ke 25 terjadi sedikit kenaikan tekanan

udara yang tidak terlalu signifikan, kemudian pada menit ke 30 hingga menit 35

terjadi penurunan tekanan, pada menit ke 40 kembali terjadinya kenaikan tekanan

udara. Hingga pada menit 45 ke menit 100 tekanan udara masih mengalami

penurunan dan kenaikan sedikit. Semua kenaikan dan penurunan diikuti dengan

baik oleh sensot BMP280 dengan pembandingnya yakni dari alat Fluke DPM4
DAFTAR PUSTAKA

[1] Kemenkes RI, “KMK No.Kemenkes RI. (2004). KMK No.

1204/Menkes/SK/X/2004 ttg Persyaratan Kesehatan Lingkungan RS.

1204/Menkes/SK/X/2004 ttg Persyaratan Kesehatan Lingkungan RS.”

2004.

[2] R. MENTERI TENAGA KERJA DAN TRANSMIGRASI, “KEPUTUSAN

MENTERI TENAGA KERJA DAN TRANSMIGRASI REPUBLIK

INDONESIA NOMOR KEP.298/MEN/IX/2009 TENTANG

PENETAPAN STANDAR KOMPETENSI KERJA NASIONAL

INDONESIA SEKTOR KONSTRUKSI BIDANG INSTALASI GEDUNG

DAN BANGUNAN SIPIL SUB BIDANG INSTALASI AC UNTUK

JABATAN K,” 2009, no. November, pp. 1–58.

[3] Menkes RI, “Pedoman teknis bangunan rumah sakit ruang gawat darurat,”

Direktorat Bina Pelayanan Penunjang Med. dan Sarana Kesehat., 2012.

[4] A. Syaifuddin, D. Notosudjono, and D. B. Fiddiansyah, “RANCANG

BANGUN MINIATUR PENGAMAN PINTU OTOMATIS

MENGGUNAKAN SIDIK JARI BERBASIS INTERNET of THINGS

(IoT),” Tek. Elektro, pp. 1–13, 2018.

[5] K. Badri, “PERANCANGAN ALAT PEMANTAU SUHU DAN

KELEMBABAN RUANG ICU MENGGUNAKAN SENSOR DHT-11

BERBASIS MIKROKONTROLER AVR ATMega8,” Tugas Akhir. Univ.

Muhammadiyah Yogyakarta, vol. 53, no. 9, pp. 1689–1699, 2019.

97
98

[6] K. Dwicahyo, Hariyanto, and B. Prakoso, “Telemetri Nirkabel Data Suhu,

Kelembapan, Dan Tekanan Udara Secara Realtime Berbasis

Mikrokontroler Atmega328P,” J. Meteorol. Klimatologi dan Geofis., vol. 4,

no. 1, pp. 44–52, 2017.

[7] Handi, H. Fitriyah, and G. E. Setyawan, “Sistem Pemantauan

Menggunakan Blynk dan Pengendalian Penyiraman Tanaman Jamur

Dengan Metode Logika Fuzzy,” J. Pengemb. Teknol. Inf. dan Ilmu

Komput., vol. 3, no. 4, pp. 3258–3265, 2019.

[8] Handsontec, “Handson Technology User Manual V1.2,” Hanson Technol.,

pp. 1–22, 2017.

[9] O. K. Sulaiman and A. Widarma, “Sistem Internet Of Things ( IoT )

Berbasis Cloud Computing dalam Campus Area Network,” ReseachGate,

no. April, pp. 9–12, 2017.

[10] P. Program and S. Pendidikanteknikelektro, “Implementasi arduino mega

2560 untuk kontrol miniatur,” 2016.

[11] D-Robotics, “DHT 11 Humidity & Temperature Sensor,” DHT11

Datasheet, p. 9, 2010.

[12] A. dan perancangan Sistem, “Flowchart 1.,” Pedoman-pedoman Dalam

Membuat Flowchart, pp. 1–13.


Lampiran

1. Perhitungan Modul Tugas Akkir

1) Perhitungan Nilai Suhu

a. Nilai Rata-Rata Suhu

𝐽𝑢𝑚𝑙𝑎ℎ 𝑛𝑖𝑙𝑎𝑖 𝑑𝑎𝑡𝑎


Rata-Rata = 𝐵𝑎𝑛𝑦𝑎𝑘 𝑑𝑎𝑡𝑎

Rata-Rata Alat satu = 24.4 + 2 4.3 + 24.3 + 24.3 + 24 + 23.9

+ 24 + 24.1+ 24.1 + 24.2 + 24.2 + 24.3 +

24.3 + 24.3 + 24.3 + 24.3 + 2.4 + 24.4 +

24.4 + 24.5 / 20

= 485/20

= 24.25 oC

Rata-Rata alat dua = 24.1 + 24.6 + 24.9 + 24.3 + 24.5 +

24.6 + 24.6 24.6 + 24.5 + 24.3 + 24.5 +

24.2 + 24.2 + 24.2 + 24.3 + 24.4 + 24.4

+ 24.3 + 24.6 / 20

= 488.8 / 20

= 24.44 oC

Rata-Rata pembanding 1 = 23.9 + 24 + 23.8 + 23.8 + 23.5 + 23.4

+ 23.2 + 23 + 22.9 + 23.1 + 23.2 + 23.5

+ 23.7 + 23.9 + 23.9 + 24 + 24 + 24.1 +

24.1 + 24.1 / 20

= 473.1 / 20

= 23.66 oC

99
100

Rata-Rata pembanding 2 = 23.1 + 23.1 + 22.8 + 22.9 + 23.1 +

23.1 + 23.3 + 23.2 + 23.5 + 23.7 + 23.7

+ 23.7 + 23.7 + 23.8 + 24 + 24.1 + 24.1

+ 24.5 + 24.6 + 24.5 / 20

= 472.5 / 20

= 23.63 oC

b. Persentase Error

(𝑅𝑎𝑡𝑎−𝑅𝑎𝑡𝑎 𝑝𝑒𝑚𝑏𝑎𝑛𝑑𝑖𝑛𝑔 − 𝑁𝑖𝑙𝑎𝑖 𝑟𝑎𝑡𝑎−𝑟𝑎𝑡𝑎)


Error (%) = x
𝑅𝑎𝑡𝑎−𝑟𝑎𝑡𝑎 𝑝𝑒𝑚𝑏𝑎𝑛𝑑𝑖𝑛𝑔

100%

Error alat 1 = (23.66 – 24.25) / 23.66 x 100%

= -2.5 %

= 2.5 %

Error alat 2 = (23.63 – 24.44) / 23.63 x 100%

= -3.4%

= 3.4%

2) Perhitungan Nilai Kelembaban

a. Nilai Rata-Rata Kelembaban

𝐽𝑢𝑚𝑙𝑎ℎ 𝑛𝑖𝑙𝑎𝑖 𝑑𝑎𝑡𝑎


Rata-Rata = 𝐵𝑎𝑛𝑦𝑎𝑘 𝑑𝑎𝑡𝑎

Rata-Rata Alat satu = 47.2 + 46.1 + 46.1 + 45 + 45 + 45 +

45 + 45 + 45 + 49.4 + 52.7 + 51.8 + 51.3

+ 52.8 + 51.8 + 52 + 51.3 + 51.6 + 47.2

+ 47.2 / 20

= 48.425 %Rh
101

Rata-Rata pembanding 1 = 50.1 + 50.4 + 49.9 + 49.9 + 49.9 + 50

+ 49.9 + 49.2 + 48.6 + 48 + 47.7 + 47.6

+ 47.4 + 47 + 47.3 + 47.4 + 47.9 + 47.7

+ 47.4 + 47.5 / 20

= 48.54 %Rh

Rata-rata alat dua = 46.7 + 47.7 + 46.7 + 45.9 + 46.9 + 47

+ 46 + 49.1 + 43.9 + 51.5 + 51.5 + 51.5

+ 51.5 + 51.5 + 51.5 + 55.3 + 55.3 +

52.3 + 44.8 + 43.9 / 20

= 49.025 %Rh

Rata-rata pembanding 2 = 51 + 50.1 + 49.9 + 50 + 49.9 + 50.2 +

49.6 + 49 + 48.3 + 48 + 47.6 + 47.5 +

47.4 + 47.3 + 47.3 + 47.9 + 47.8 + 47.8

+ 47.4 + 47.4 / 20

= 48.57 %Rh

b. Persentase Error

(𝑅𝑎𝑡𝑎−𝑅𝑎𝑡𝑎 𝑝𝑒𝑚𝑏𝑎𝑛𝑑𝑖𝑛𝑔 − 𝑁𝑖𝑙𝑎𝑖 𝑟𝑎𝑡𝑎−𝑟𝑎𝑡𝑎)


Error (%) = x
𝑅𝑎𝑡𝑎−𝑟𝑎𝑡𝑎 𝑝𝑒𝑚𝑏𝑎𝑛𝑑𝑖𝑛𝑔

100%

Error alat 1 = (48.54 – 48.425) / 48.54 x 100%

= 0.2 %

Error alat 2 = (48.57-49.025) / 48.57 x 100%

= -0.9%

= 0.9 %
102

3) Perhitungan Nilai Tekanan Udara

a. Nilai Rata-Rata Tekanan Udara

𝐽𝑢𝑚𝑙𝑎ℎ 𝑛𝑖𝑙𝑎𝑖 𝑑𝑎𝑡𝑎


Rata-Rata = 𝐵𝑎𝑛𝑦𝑎𝑘 𝑑𝑎𝑡𝑎

Rata-Rata Alat satu = 98890 + 98884 + 98877 + 98855 +

98855 + 98848 + 98843 + 98838 +

98831 + 98839 + 98831 + 98821 +

98820 + 98810 + 98811 + 98811 +

98804 + 98787 + 98761 + 98760 / 20

= 98829 Pa

Rata-rata pembanding 1 = 98870 + 98860 + 98850 + 98830 +

98840 + 98820 + 98810 + 98820 +

98810 + 98810 + 98800 + 98800 +

98800 + 98790 + 98790 + 98790 +

98790 + 98770 + 98750 + 98740 / 20

= 98807 Pa

Rata-rata alat dua = 98895 + 98884 + 98870 + 98859 +

98861 + 98851 + 98837 + 98838 +

98832 +98830 + 98820 + 98821 + 98825

+ 98816 + 98824 + 98815 + 98810 +

98785 + 98771 + 98765 / 20

= 98830 Pa

Rata-rata pembanding 2 = 98870 + 98860 + 98850 + + 98840 +

98840 + 98830 + 98810 + 98820 +


103

98810 + 98810 + 98800 + 98800 +

98800 + 98790 + 98790 + 98790 =

98780 + 98760 + 98740 + 98740 / 20

= 99907 Pa

b. Persentaase Error

(𝑅𝑎𝑡𝑎−𝑅𝑎𝑡𝑎 𝑝𝑒𝑚𝑏𝑎𝑛𝑑𝑖𝑛𝑔 − 𝑁𝑖𝑙𝑎𝑖 𝑟𝑎𝑡𝑎−𝑟𝑎𝑡𝑎)


Error (%) = x
𝑅𝑎𝑡𝑎−𝑟𝑎𝑡𝑎 𝑝𝑒𝑚𝑏𝑎𝑛𝑑𝑖𝑛𝑔

100%

Error alat 1 = (98807-98829) / 98807 x 100%

= -0.02%

= 0.021 %

Error alat 2 = (98807-98830) / 98807 x 100%

= -0.02%

= 0.02 %

2. Dokumentasi Proses Pengujian

1) Pengujian Suhu
104

2) Pengujian Kelembaban dan Tekanan Udara


105

3. Dokumentasi Bagian Rangkaian

1) Rangkaian Power Supply SMPS

2) Rangkaian Mikrokontroler

3) Rangkaian LCD dan Sensor


106

4) Rangkaian Power Supply Trafo CT

5) Rangkaian NodeMCU

6) Modul ESP8266
107

4. Program Keseluruhan

1) Program pada alat pertama

#include <Adafruit_GFX.h>
#include <Adafruit_TFTLCD.h>
#include <TouchScreen.h>
#include <DHT.h>
#include <ESP8266_Lib.h>
#include <BlynkSimpleShieldEsp8266.h>
//#include <BlynkSimpleEsp8266.h>
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>
#define EspSerial Serial1
#define ESP8266_BAUD 115200
ESP8266 wifi(&EspSerial);
#define YP A3
#define XM A2
#define YM 23
#define XP 22
#define TS_MINX 150
#define TS_MINY 120
#define TS_MAXX 920
#define TS_MAXY 940
#define LCD_CS A3
#define LCD_CD A2
#define LCD_WR A1
#define LCD_RD A0
#define LCD_RESET A4
TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);
tft.fillTriangle (15, 35, 50, 20, 50, 50, RED); //
(x1,y1,x2,y2,x3,y3)
tft.fillCircle(285, 35, 20, MAROON);
tampil(272.5, 40, 0, &FreeSerif9pt7b, "OK");
108

Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);


#include <Fonts/FreeSans9pt7b.h>
#include <Fonts/FreeSans12pt7b.h>
#include <Fonts/FreeSerif9pt7b.h>
#include <Fonts/FreeSerif12pt7b.h>
#include <Fonts/FreeSerifBold12pt7b.h>
#include <Fonts/FreeSerifBold9pt7b.h>
#include <FreeDefaultFonts.h>
#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
#define MAROON 0x7800
#define LIGHTGREY 0xC618
#define MINPRESSURE 10
#define MAXPRESSURE 1000
long waktu;
int mode, tmode = 0;
unsigned int setSuhuMax = 40, setSuhuMin = 16, setKelembaban =
100, setTekanan = 110000;
float suh,kel,tek;
#define BLYNK_PRINT Serial
#define DHTPIN 2
#define DHTTYPE DHT11
#define BMP_SCK (52)
#define BMP_MISO (50)
#define BMP_MOSI (51)
#define BMP_CS (53)
Adafruit_BMP280 bmp(BMP_CS);
DHT dht(DHTPIN, DHTTYPE);
tft.setTextColor(BLACK);
tft.fillRect(0, 0, 320, 30, RED);
tampil(20, 20, 0, &FreeSans9pt7b, "MONITORING RUANG OPERASI");
109

//SimpleTimer timer;
//char auth[] = "g3djX6HPkRyfjKLgNY-OEYJOqa8tuw8r";
char auth[] = "K27rk1a2VBh7NQV4g0_whYywytS8KV-e";
char ssid[] = "Xperia X";
char pass[] = "sandineiki";
char SSid,PASS;
float hum, temp, pres ;
int detik;
int sampling = 1000;
int buzzer1, buzzer2, kembali;
int BOXSIZE = 25;
String kecil, besar, num, Ssid, Pass;
void bacaSensor()
{
if (isnan(hum) || isnan(temp)) {
tft.setCursor (20, 80);
tft.setFont(&FreeSerif9pt7b);
tft.setTextSize(1);
tft.setTextColor(WHITE, LIGHTGREY);
tft.print("T_Error");
tft.setFont(&FreeSerif9pt7b);
tft.setCursor (160, 80);
tft.setTextSize(1);
tft.setTextColor(WHITE, LIGHTGREY);
tft.print("H_Error");
Blynk.virtualWrite(V4, HIGH);
Blynk.virtualWrite(V6, HIGH);
}
if (!bmp.begin(0x76))
{
tft.setFont(&FreeSerif9pt7b);
tft.setFont();

void normal()
{
110

tft.setCursor (83, 170);


tft.setTextSize(2);
tft.setTextColor(WHITE, LIGHTGREY);
tft.print("P_Error");
Blynk.virtualWrite(V5,HIGH);
}
else
{
hum = dht.readHumidity();
kel = hum - (hum/21.7);
temp = dht.readTemperature(); // or dht.readTemperature(true)
for Fahrenheit
suh = temp - (temp/22.5);
pres = bmp.readPressure();
tek = pres - (pres/1573);
Blynk.virtualWrite(V1, kel); //V1 is for Humidity
Blynk.virtualWrite(V0, suh); //V0 is for Temperature
Blynk.virtualWrite(V2, tek); //V2 is for pressure
}
}
void tampil(int x, int y, int sz, const GFXfont *f, const char
*msg)
{
int16_t x1, y1;
uint16_t wid, ht;
//tft.drawFastHLine(0, y, tft.width(), WHITE);
tft.setFont(f);
tft.setCursor(x, y);
tft.setTextSize(sz);
tft.print(msg);
}
void buzzer(int x) {

int freq = 255;


int tonedelay = 50;
111

int freq = 255;


int tonedelay = 50;
if (x == 1) {
tone(3, freq);
delay(tonedelay);
noTone(3);
}
if (x == 2) {
freq = 1000;

freq = freq - 100;


tone(3, freq);
delay(tonedelay);
noTone(3);
}
}
void awalan()
{
tft.setRotation(1);
tft.fillScreen(BLACK);
tft.fillRect(0, 0, 320, 30, RED); // (0,0, 10,10,RED)
tampil(125, 20, 0, &FreeSans9pt7b, "TUGAS");
tft.fillRect(0, 30, 320, 30, BLUE); // (0,0, 10,10,RED)
tampil(125, 50, 0, &FreeSans9pt7b, "AKHIR");
//currentcolor = RED;
//pinMode(13, OUTPUT);
tft.fillRect(0, 60, 320, 120, WHITE);
tft.setTextColor(BLACK);
tampil(30, 110, 0, &FreeSans9pt7b, "MUHAMMAD SULTHON NASHIR");
tampil(30, 130, 0, &FreeSans9pt7b, "20173010083");
tft.fillRect(0, 165, 320, 90, RED);
tampil(90, 185, 0, &FreeSans9pt7b, " UNIVERSITAS");
tampil(90, 205, 0, &FreeSans9pt7b, "MUHAMMADIYAH");
tampil(90, 225, 0, &FreeSans9pt7b, " YOGYAKARTA");
}
112

tampil(90, 205, 0, &FreeSans9pt7b, "MUHAMMADIYAH");


tampil(90, 225, 0, &FreeSans9pt7b, " YOGYAKARTA");
}
//***************************************************************
//
void pilihan_awal()
{
tft.fillScreen (WHITE);
tft.setTextColor(BLACK);
tampil(80, 40, 0, &FreeSerifBold12pt7b, "MENU UTAMA");
tft.fillRect(70, 77, 190, 40, BLUE);
tampil(80, 100, 0, &FreeSerif12pt7b, "MONITORING");
tft.fillRect(70, 150, 190, 40, BLUE);
tampil(80, 175, 0, &FreeSerif12pt7b, "PENGATURAN");
}
//***************************************************************
*//
void tampilan_monitoring()
{
tft.fillScreen (WHITE);
tft.setTextColor(BLACK);
tft.fillRect(0, 0, 320, 30, RED);
tampil(20, 20, 0, &FreeSans9pt7b, "MONITORING RUANG OPERASI");
tft.fillRect(15, 40, 140, 30, BLUE);
tft.drawRect(15, 40, 140, 30, BLACK);
tft.fillRect(15, 70, 140, 55, LIGHTGREY);
tft.drawRect(15, 70, 140, 55, BLACK);
tft.setTextColor(BLACK);
tampil(20, 60, 0, &FreeSans9pt7b, "TEMPERATURE");
tft.fillRect(155, 40, 140, 30, BLUE);
tft.drawRect(155, 40, 140, 30, BLACK);
tft.fillRect(155, 70, 140, 55, LIGHTGREY);
tft.drawRect(155, 70, 140, 55, BLACK);
tampil(180, 60, 0, &FreeSans9pt7b, "HUMIDITY");
tft.fillTriangle (15, 200, 50, 180, 50, 220, RED); //
(x1,y1,x2,y2,x3,y3)
113

tft.drawRect(155, 70, 140, 55, BLACK);


tampil(180, 60, 0, &FreeSans9pt7b, "HUMIDITY");
tft.fillTriangle (15, 200, 50, 180, 50, 220, RED); //
(x1,y1,x2,y2,x3,y3)
tft.drawTriangle (15, 200, 50, 180, 50, 220, BLACK);
tft.fillRect(77.5, 125, 140, 30, BLUE);
tft.drawRect(77.5, 125, 140, 30, BLACK);
tft.fillRect(77.5, 155, 140, 55, LIGHTGREY);
tft.drawRect(77.5, 155, 140, 55, BLACK);
tampil(100, 145, 0, &FreeSans9pt7b, "PRESSURE");
tft.fillRect(230, 140, 60, 60, RED);
tft.drawRect(230, 140, 60, 60, BLACK);
tampil(235, 155, 0, &FreeSans9pt7b, "MUTE");

}
//***************************************************************
//
void pilihan_kedua()
{
tft.fillScreen (WHITE);
tft.setTextColor(BLACK);
tampil(100, 20, 0, &FreeSerifBold9pt7b, "PENGATURAN");
tft.fillRect(80, 37, 175, 30, BLUE);
tampil(95, 57, 0, &FreeSans9pt7b, " SET SUHU");
tft.fillRect(80, 85, 175, 30, BLUE);
tampil(90, 105, 0, &FreeSans9pt7b, "SET KELEMBAPAN");
tft.fillRect(80, 135, 175, 30, BLUE);
tampil(90, 155, 0, &FreeSans9pt7b, " SET TEKANAN");
tft.fillRect(80, 185, 175, 30, BLUE);
tampil(95, 205, 0, &FreeSans9pt7b, " SET WIFI");
tft.fillTriangle (15, 35, 50, 20, 50, 50, RED); //
(x1,y1,x2,y2,x3,y3)
}
/////////////////////////////////////////////////////////////////
/////
void set_suhu_max()
114

/////////////////////////////////////////////////////////////////
/////
void set_suhu_max()
{
tft.fillScreen (WHITE);
tft.setTextColor(BLACK);
tft.fillRect(70, 30, 180, 50, BLUE);
tft.drawRect(70, 30, 180, 50, BLACK);
tampil(90, 52, 0, &FreeSerifBold9pt7b, "SET SUHU MAX");
tft.fillRect(70, 62, 180, 100, LIGHTGREY);
tft.drawRect(70, 62, 180, 100, BLACK);
tft.drawRect(70, 162, 180, 50, BLACK);
tft.drawRect(70, 162, 90, 50, BLACK);
tft.setCursor (130, 132);
tft.setTextSize (3);
tft.print(setSuhuMax);
tft.fillTriangle (15, 35, 50, 20, 50, 50, RED); //
(x1,y1,x2,y2,x3,y3)
tft.fillCircle(285, 35, 20, MAROON);
tampil(272.5, 40, 0, &FreeSerif9pt7b, "OK");
tft.fillTriangle (120, 175, 100, 205, 140, 205, RED); //
(x1,y1,x2,y2,x3,y3)
tft.fillTriangle (200, 205, 180, 175, 220, 175, RED); //
(x1,y1,x2,y2,x3,y3)
}
/////////////////////////////////////////////////////////////////
/////
void set_suhu_min()
{
tft.fillScreen (WHITE);
tft.setTextColor(BLACK);
tft.fillRect(70, 30, 180, 50, BLUE);
tft.drawRect(70, 30, 180, 50, BLACK);
tampil(90, 52, 0, &FreeSerifBold9pt7b, "SET SUHU MIN");
tft.fillRect(70, 62, 180, 100, LIGHTGREY);
tft.drawRect(70, 62, 180, 100, BLACK);
tft.drawRect(70, 162, 180, 50, BLACK);
115

tampil(90, 52, 0, &FreeSerifBold9pt7b, "SET SUHU MIN");


tft.fillRect(70, 62, 180, 100, LIGHTGREY);
tft.drawRect(70, 62, 180, 100, BLACK);
tft.drawRect(70, 162, 180, 50, BLACK);
tft.drawRect(70, 162, 90, 50, BLACK);
tft.setCursor (130, 132);
tft.setTextSize (3);
tft.print(setSuhuMin);// kurang data set suhu
tft.fillTriangle (15, 35, 50, 20, 50, 50, RED); //
(x1,y1,x2,y2,x3,y3)
tft.fillCircle(285, 35, 20, MAROON);
tampil(272.5, 40, 0, &FreeSerif9pt7b, "OK");
tft.fillTriangle (120, 175, 100, 205, 140, 205, RED); //
(x1,y1,x2,y2,x3,y3)
tft.fillTriangle (200, 205, 180, 175, 220, 175, RED); //
(x1,y1,x2,y2,x3,y3)
}

/////////////////////////////////////////////////////////////////
///////////////
void set_kelembapan()
{
tft.fillScreen (WHITE);
tft.setTextColor(BLACK);
tft.fillRect(70, 30, 180, 50, BLUE);
tft.drawRect(70, 30, 180, 50, BLACK);
tampil(80, 52, 0, &FreeSerifBold9pt7b, "SET KELEMBAPAN");
tft.fillRect(70, 62, 180, 100, LIGHTGREY);
tft.drawRect(70, 62, 180, 100, BLACK);
tft.drawRect(70, 162, 180, 50, BLACK);
tft.drawRect(70, 162, 90, 50, BLACK);
tft.setCursor (130, 132);
tft.setTextSize (3);
tft.print(setKelembaban);
tft.fillTriangle (15, 35, 50, 20, 50, 50, RED); //
(x1,y1,x2,y2,x3,y3)
tft.fillCircle(285, 35, 20, MAROON);
116

tft.print(setKelembaban);
tft.fillTriangle (15, 35, 50, 20, 50, 50, RED); //
(x1,y1,x2,y2,x3,y3)
tft.fillCircle(285, 35, 20, MAROON);
tampil(272.5, 40, 0, &FreeSerif9pt7b, "OK");
tft.fillTriangle (120, 175, 100, 205, 140, 205, RED); //
(x1,y1,x2,y2,x3,y3)
tft.fillTriangle (200, 205, 180, 175, 220, 175, RED); //
(x1,y1,x2,y2,x3,y3)
}
/////////////////////////////////////////////////////////////////
/////
void set_tekanan()
{
tft.fillScreen (WHITE);
tft.setTextColor(BLACK);
tft.fillRect(70, 30, 180, 50, BLUE);
tft.drawRect(70, 30, 180, 50, BLACK);
tampil(90, 52, 0, &FreeSerifBold9pt7b, "SET TEKANAN");
tft.fillRect(70, 62, 180, 100, LIGHTGREY);
tft.drawRect(70, 62, 180, 100, BLACK);
tft.drawRect(70, 162, 180, 50, BLACK);
tft.drawRect(70, 162, 90, 50, BLACK);
tft.setCursor (130, 132);
tft.setTextSize (1);
tft.print(setTekanan);
tft.fillTriangle (15, 35, 50, 20, 50, 50, RED); //
(x1,y1,x2,y2,x3,y3)
tft.fillCircle(285, 35, 20, MAROON);
tampil(272.5, 40, 0, &FreeSerif9pt7b, "OK");
tft.fillTriangle (120, 175, 100, 205, 140, 205, RED); //
(x1,y1,x2,y2,x3,y3)
tft.fillTriangle (200, 205, 180, 175, 220, 175, RED); //
(x1,y1,x2,y2,x3,y3)
}
/////////////////////////////////////////////////////////////////
//////
117

}
/////////////////////////////////////////////////////////////////
//////

void set_wifi()
{
tft.fillScreen (WHITE);
tft.fillScreen (WHITE);
tft.setTextColor(BLACK);
tampil(100, 40, 0, &FreeSerifBold12pt7b, "SET WIFI");
tft.fillRect(70, 77, 190, 40, BLUE);
tampil(80, 100, 0, &FreeSerif12pt7b, "CHECK WIFI");
tft.fillRect(70, 150, 190, 40, BLUE);
tampil(80, 175, 0, &FreeSerif12pt7b, "RESET WIFI");
tft.fillTriangle (15, 35, 50, 20, 50, 50, RED); //
(x1,y1,x2,y2,x3,y3)
}
void normal()
{
tft.fillRect(10, 90, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(40, 90, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(70, 90, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(100, 90, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(130, 90, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(160, 90, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(190, 90, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(220, 90, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(250, 90, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(280, 90, BOXSIZE, BOXSIZE, LIGHTGREY);
////////.............BARIS KE DUA.............\\\\\\\\\\

tft.fillRect(25, 125, BOXSIZE, BOXSIZE, LIGHTGREY);

tft.fillRect(55, 125, BOXSIZE, BOXSIZE, LIGHTGREY);


tft.fillRect(85, 125, BOXSIZE, BOXSIZE, LIGHTGREY);
118

tft.fillRect(55, 125, BOXSIZE, BOXSIZE, LIGHTGREY);


tft.fillRect(85, 125, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(115, 125, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(145, 125, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(175, 125, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(205, 125, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(235, 125, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(265, 125, BOXSIZE, BOXSIZE, LIGHTGREY);
////BARIS KE TIGA
tft.fillRect(10, 160, 40, BOXSIZE, LIGHTGREY);
tft.fillRect(60, 160, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(90, 160, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(120, 160, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(150, 160, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(180, 160, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(210, 160, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(240, 160, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(270, 160, 40, BOXSIZE, LIGHTGREY);
/////BARIS KE EMPAT
tft.fillRect(10, 195, 40, 30, LIGHTGREY);
tft.fillRect(55, 195, 30, 30, LIGHTGREY);
tft.fillRect(90, 195, 120, 30, LIGHTGREY);
tft.fillRect(215, 195, 30, 30, LIGHTGREY);
tft.fillRect(250, 195, 60, 30, LIGHTGREY);
tft.drawRect(10, 195, 40, 30, WHITE);
tft.drawRect(55, 195, 30, 30, WHITE);
tft.drawRect(90, 195, 120, 30, WHITE);
tft.drawRect(215, 195, 30, 30, WHITE);
tft.drawRect(250, 195, 60, 30, WHITE);
tft.setTextColor (BLACK);
tampil(15, 215, 0, &FreeSans9pt7b, "Num");
tampil(65, 210, 2, &FreeSans9pt7b, ",");
tampil(225, 210, 2, &FreeSans9pt7b, ".");
tampil(260, 215, 1, &FreeSans9pt7b, "Oke");
119

tampil(225, 210, 2, &FreeSans9pt7b, ".");


tampil(260, 215, 1, &FreeSans9pt7b, "Oke");
//// BARIS KE SATU
tft.drawRect(10, 90, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(40, 90, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(70, 90, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(100, 90, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(130, 90, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(160, 90, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(190, 90, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(220, 90, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(250, 90, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(280, 90, BOXSIZE, BOXSIZE, WHITE);
////////.............BARIS KE DUA.............\\\\\\\\\\
tft.drawRect(25, 125, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(55, 125, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(85, 125, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(115, 125, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(145, 125, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(175, 125, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(205, 125, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(235, 125, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(265, 125, BOXSIZE, BOXSIZE, WHITE);
/// BARIS KE TIGA
tft.drawRect(10, 160, 40, BOXSIZE, WHITE);
tft.drawRect(60, 160, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(90, 160, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(120, 160, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(150, 160, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(180, 160, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(210, 160, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(240, 160, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(270, 160, 40, BOXSIZE, WHITE);
///// BARIS SATU
tft.setTextColor (BLACK);
120

tft.drawRect(270, 160, 40, BOXSIZE, WHITE);


///// BARIS SATU
tft.setTextColor (BLACK);
tampil(15, 110, 1, &FreeSans9pt7b, "q");
tampil(45, 110, 1, &FreeSans9pt7b, "w");
tampil(75, 110, 1, &FreeSans9pt7b, "e");
tampil(105, 110, 1, &FreeSans9pt7b, "r");
tampil(135, 110, 1, &FreeSans9pt7b, "t");
tampil(165, 110, 1, &FreeSans9pt7b, "y");
tampil(195, 110, 1, &FreeSans9pt7b, "u");
tampil(229, 110, 1, &FreeSans9pt7b, "i");
tampil(255, 110, 1, &FreeSans9pt7b, "o");
tampil(285, 110, 1, &FreeSans9pt7b, "p");
/// BARUS KE DUA
tampil(30, 145, 1, &FreeSans9pt7b, "a");
tampil(60, 145, 1, &FreeSans9pt7b, "s");
tampil(90, 145, 1, &FreeSans9pt7b, "d");
tampil(120, 145, 1, &FreeSans9pt7b, "f");
tampil(150, 145, 1, &FreeSans9pt7b, "g");
tampil(180, 145, 1, &FreeSans9pt7b, "h");
tampil(210, 145, 1, &FreeSans9pt7b, "j");
tampil(240, 145, 1, &FreeSans9pt7b, "k");
tampil(270, 145, 1, &FreeSans9pt7b, "l");
//// BARIS KE TIGA
tampil(65, 180, 1, &FreeSans9pt7b, "z");
tampil(95, 180, 1, &FreeSans9pt7b, "x");
tampil(125, 180, 1, &FreeSans9pt7b, "c");
tampil(155, 180, 1, &FreeSans9pt7b, "v");
tampil(185, 180, 1, &FreeSans9pt7b, "b");
tampil(215, 180, 1, &FreeSans9pt7b, "n");
tampil(245, 180, 1, &FreeSans9pt7b, "m");
tampil(20, 180, 1, &FreeSans9pt7b, "Up");
tampil(277, 180, 1, &FreeSans9pt7b, "Del");
//// BARIS KE EMPAT
}
121

tampil(277, 180, 1, &FreeSans9pt7b, "Del");


//// BARIS KE EMPAT
}

void uper_case()
{
tft.fillRect(10, 90, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(40, 90, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(70, 90, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(100, 90, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(130, 90, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(160, 90, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(190, 90, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(220, 90, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(250, 90, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(280, 90, BOXSIZE, BOXSIZE, LIGHTGREY);
////////.............BARIS KE DUA.............\\\\\\\\\\

tft.fillRect(25, 125, BOXSIZE, BOXSIZE, LIGHTGREY);


tft.fillRect(55, 125, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(85, 125, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(115, 125, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(145, 125, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(175, 125, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(205, 125, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(235, 125, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(265, 125, BOXSIZE, BOXSIZE, LIGHTGREY);
////BARIS KE TIGA
tft.fillRect(10, 160, 40, BOXSIZE, LIGHTGREY);
tft.fillRect(60, 160, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(90, 160, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(120, 160, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(150, 160, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(180, 160, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(210, 160, BOXSIZE, BOXSIZE, LIGHTGREY);
122

tft.fillRect(150, 160, BOXSIZE, BOXSIZE, LIGHTGREY);


tft.fillRect(180, 160, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(210, 160, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(240, 160, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(270, 160, 40, BOXSIZE, LIGHTGREY);
/////BARIS KE EMPAT
tft.fillRect(10, 195, 40, 30, LIGHTGREY);
tft.fillRect(55, 195, 30, 30, LIGHTGREY);
tft.fillRect(90, 195, 120, 30, LIGHTGREY);
tft.fillRect(215, 195, 30, 30, LIGHTGREY);
tft.fillRect(250, 195, 60, 30, LIGHTGREY);
tft.drawRect(10, 195, 40, 30, WHITE);
tft.drawRect(55, 195, 30, 30, WHITE);
tft.drawRect(90, 195, 120, 30, WHITE);
tft.drawRect(215, 195, 30, 30, WHITE);
tft.drawRect(250, 195, 60, 30, WHITE);
tft.setTextColor (BLACK);
tampil(15, 215, 0, &FreeSans9pt7b, "Num");
tampil(65, 210, 2, &FreeSans9pt7b, ",");
tampil(225, 210, 2, &FreeSans9pt7b, ".");
tampil(260, 215, 1, &FreeSans9pt7b, "Oke");

//// BARIS KE SATU


tft.drawRect(10, 90, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(40, 90, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(70, 90, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(100, 90, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(130, 90, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(160, 90, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(190, 90, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(220, 90, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(250, 90, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(280, 90, BOXSIZE, BOXSIZE, WHITE);
////////.............BARIS KE DUA.............\\\\\\\\\\
123

tft.drawRect(280, 90, BOXSIZE, BOXSIZE, WHITE);


////////.............BARIS KE DUA.............\\\\\\\\\\
tft.drawRect(25, 125, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(55, 125, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(85, 125, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(115, 125, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(145, 125, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(175, 125, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(205, 125, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(235, 125, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(265, 125, BOXSIZE, BOXSIZE, WHITE);
/// BARIS KE TIGA
tft.drawRect(10, 160, 40, BOXSIZE, WHITE);
tft.drawRect(60, 160, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(90, 160, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(120, 160, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(150, 160, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(180, 160, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(210, 160, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(240, 160, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(270, 160, 40, BOXSIZE, WHITE);
///// BARIS SATU
tft.setTextColor (BLACK);
tampil(15, 110, 1, &FreeSans9pt7b, "Q");
tampil(45, 110, 1, &FreeSans9pt7b, "W");
tampil(75, 110, 1, &FreeSans9pt7b, "E");
tampil(105, 110, 1, &FreeSans9pt7b, "R");
tampil(135, 110, 1, &FreeSans9pt7b, "T");
tampil(165, 110, 1, &FreeSans9pt7b, "Y");
tampil(195, 110, 1, &FreeSans9pt7b, "U");
tampil(229, 110, 1, &FreeSans9pt7b, "I");
tampil(255, 110, 1, &FreeSans9pt7b, "O");
tampil(285, 110, 1, &FreeSans9pt7b, "P");
/// BARUS KE DUA
tampil(30, 145, 1, &FreeSans9pt7b, "A");
124

tampil(285, 110, 1, &FreeSans9pt7b, "P");


/// BARUS KE DUA
tampil(30, 145, 1, &FreeSans9pt7b, "A");
tampil(60, 145, 1, &FreeSans9pt7b, "S");
tampil(90, 145, 1, &FreeSans9pt7b, "D");
tampil(120, 145, 1, &FreeSans9pt7b, "F");
tampil(150, 145, 1, &FreeSans9pt7b, "G");
tampil(180, 145, 1, &FreeSans9pt7b, "H");
tampil(210, 145, 1, &FreeSans9pt7b, "J");
tampil(240, 145, 1, &FreeSans9pt7b, "K");
tampil(270, 145, 1, &FreeSans9pt7b, "L");
//// BARIS KE TIGA
tampil(65, 180, 1, &FreeSans9pt7b, "Z");
tampil(95, 180, 1, &FreeSans9pt7b, "X");
tampil(125, 180, 1, &FreeSans9pt7b, "C");
tampil(155, 180, 1, &FreeSans9pt7b, "V");
tampil(185, 180, 1, &FreeSans9pt7b, "B");
tampil(215, 180, 1, &FreeSans9pt7b, "N");
tampil(245, 180, 1, &FreeSans9pt7b, "M");
tampil(20, 180, 1, &FreeSans9pt7b, "Up");
tampil(277, 180, 1, &FreeSans9pt7b, "Del");
//// BARIS KE EMPAT
}
void number ()
{
tft.fillRect(10, 90, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(40, 90, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(70, 90, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(100, 90, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(130, 90, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(160, 90, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(190, 90, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(220, 90, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(250, 90, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(280, 90, BOXSIZE, BOXSIZE, LIGHTGREY);
125

tft.fillRect(220, 90, BOXSIZE, BOXSIZE, LIGHTGREY);


tft.fillRect(250, 90, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(280, 90, BOXSIZE, BOXSIZE, LIGHTGREY);
////////.............BARIS KE DUA.............\\\\\\\\\\

tft.fillRect(25, 125, BOXSIZE, BOXSIZE, LIGHTGREY);


tft.fillRect(55, 125, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(85, 125, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(115, 125, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(145, 125, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(175, 125, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(205, 125, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(235, 125, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(265, 125, BOXSIZE, BOXSIZE, LIGHTGREY);
////BARIS KE TIGA
tft.fillRect(10, 160, 40, BOXSIZE, LIGHTGREY);
tft.fillRect(60, 160, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(90, 160, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(120, 160, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(150, 160, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(180, 160, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(210, 160, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(240, 160, BOXSIZE, BOXSIZE, LIGHTGREY);
tft.fillRect(270, 160, 40, BOXSIZE, LIGHTGREY);
/////BARIS KE EMPAT
tft.fillRect(10, 195, 40, 30, LIGHTGREY);
tft.fillRect(55, 195, 30, 30, LIGHTGREY);
tft.fillRect(90, 195, 120, 30, LIGHTGREY);
tft.fillRect(215, 195, 30, 30, LIGHTGREY);
tft.fillRect(250, 195, 60, 30, LIGHTGREY);
tft.drawRect(10, 195, 40, 30, WHITE);
tft.drawRect(55, 195, 30, 30, WHITE);
tft.drawRect(90, 195, 120, 30, WHITE);
tft.drawRect(215, 195, 30, 30, WHITE);
tft.drawRect(250, 195, 60, 30, WHITE);
126

tft.drawRect(90, 195, 120, 30, WHITE);


tft.drawRect(215, 195, 30, 30, WHITE);
tft.drawRect(250, 195, 60, 30, WHITE);
tft.setTextColor (BLACK);
tampil(15, 215, 0, &FreeSans9pt7b, "Abc");
tampil(65, 210, 2, &FreeSans9pt7b, ",");
tampil(225, 210, 2, &FreeSans9pt7b, ".");
tampil(260, 215, 1, &FreeSans9pt7b, "Oke");

//// BARIS KE SATU


tft.drawRect(10, 90, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(40, 90, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(70, 90, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(100, 90, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(130, 90, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(160, 90, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(190, 90, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(220, 90, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(250, 90, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(280, 90, BOXSIZE, BOXSIZE, WHITE);
////////.............BARIS KE DUA.............\\\\\\\\\\

tft.drawRect(25, 125, BOXSIZE, BOXSIZE, WHITE);


tft.drawRect(55, 125, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(85, 125, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(115, 125, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(145, 125, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(175, 125, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(205, 125, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(235, 125, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(265, 125, BOXSIZE, BOXSIZE, WHITE);
/// BARIS KE TIGA
tft.drawRect(10, 160, 40, BOXSIZE, WHITE);
tft.drawRect(60, 160, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(90, 160, BOXSIZE, BOXSIZE, WHITE);
127

tft.drawRect(10, 160, 40, BOXSIZE, WHITE);


tft.drawRect(60, 160, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(90, 160, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(120, 160, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(150, 160, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(180, 160, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(210, 160, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(240, 160, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(270, 160, 40, BOXSIZE, WHITE);
///// BARIS SATU
tft.setTextColor (BLACK);
tampil(15, 110, 1, &FreeSans9pt7b, "1");
tampil(45, 110, 1, &FreeSans9pt7b, "2");
tampil(75, 110, 1, &FreeSans9pt7b, "3");
tampil(105, 110, 1, &FreeSans9pt7b, "4");
tampil(135, 110, 1, &FreeSans9pt7b, "5");
tampil(165, 110, 1, &FreeSans9pt7b, "6");
tampil(195, 110, 1, &FreeSans9pt7b, "7");
tampil(229, 110, 1, &FreeSans9pt7b, "8");
tampil(255, 110, 1, &FreeSans9pt7b, "9");
tampil(285, 110, 1, &FreeSans9pt7b, "0");
/// BARUS KE DUA
tampil(30, 145, 1, &FreeSans9pt7b, "@");
tampil(60, 145, 1, &FreeSans9pt7b, ":");
tampil(90, 145, 1, &FreeSans9pt7b, ";");
tampil(120, 145, 1, &FreeSans9pt7b, "_");
tampil(150, 145, 1, &FreeSans9pt7b, "-");
tampil(180, 145, 1, &FreeSans9pt7b, "#");
tampil(210, 145, 1, &FreeSans9pt7b, "(");
tampil(240, 145, 1, &FreeSans9pt7b, ")");
tampil(270, 145, 1, &FreeSans9pt7b, "/");
//// BARIS KE TIGA
tampil(65, 180, 1, &FreeSans9pt7b, ".");
tampil(95, 180, 1, &FreeSans9pt7b, ",");
tampil(125, 180, 1, &FreeSans9pt7b, "?");
128

tampil(65, 180, 1, &FreeSans9pt7b, ".");


tampil(95, 180, 1, &FreeSans9pt7b, ",");
tampil(125, 180, 1, &FreeSans9pt7b, "?");
tampil(155, 180, 1, &FreeSans9pt7b, "!");
tampil(185, 180, 1, &FreeSans9pt7b, "'");
//tampil(215, 180, 1, &FreeSans9pt7b, """);
tft.setFont(&FreeSans9pt7b);
tft.setCursor(215, 180);
tft.setTextSize(1);
tft.print('"');
tampil(245, 180, 1, &FreeSans9pt7b, "+");
tampil(20, 180, 1, &FreeSans9pt7b, " ");
tampil(277, 180, 1, &FreeSans9pt7b, "Del");
//// BARIS KE EMPAT
}

void ketik()
{
tft.setRotation (1);
tft.fillRect (0, 0, tft.width(), 75, WHITE);
tft.drawRect (0, 0, tft.width(), 75, LIGHTGREY);
}

void gantiwifi() {
tft.setTextColor(BLACK);
tampil(10, 35, 1, &FreeSans9pt7b, "SSID= ");
tft.fillRect (80, 20, 200, 30, LIGHTGREY);
tft.drawRect (80, 20, 200, 30, BLACK);
tft.setCursor (90, 40);
tft.setTextSize (1);
tft.print (Ssid);
tampil(10, 85, 1, &FreeSans9pt7b, "PASS= ");
tft.fillRect (80, 70, 200, 30, LIGHTGREY);
tft.drawRect (80, 70, 200, 30, BLACK);
tft.setCursor (90, 90);
129

tft.fillRect (80, 70, 200, 30, LIGHTGREY);


tft.drawRect (80, 70, 200, 30, BLACK);
tft.setCursor (90, 90);
tft.setTextSize (1);
tft.print (Pass);
tft.fillRect (10, 120, 80, 50, LIGHTGREY);
tft.drawRect (10, 120, 80, 50, BLACK);
tft.setTextColor(WHITE);
tampil(30, 150, 1, &FreeSans9pt7b, "OKE");
tft.fillRect (120, 120, 80, 50, LIGHTGREY);
tft.drawRect (120, 120, 80, 50, BLACK);
tampil(140, 150, 1, &FreeSans9pt7b, "BACK");
}
///////----------------------------------------------------------
-----------------------------------
void setup()
{
pinMode(3, OUTPUT);
Serial.begin(115200);
tft.begin(0x9341);
EspSerial.begin(ESP8266_BAUD);
awalan ();
delay (100);
bmp.begin(0x76);
// Blynk.begin(auth, wifi, ssid, pass);
dht.begin();
}
void loop () {
switch (mode)
{
case 0:
tmode = 0;
pilihan_awal();
mode = 19;
break;
130

pilihan_awal();
mode = 19;
break;
case 1:
tmode = 1;
tampilan_monitoring();
mode = 19;
break;
case 2:
tmode = 2;
pilihan_kedua();
mode = 19;
break;
case 3:
tmode = 3;
set_suhu_max();
mode = 19;
break;
case 4:
tmode = 4;
set_suhu_min();
mode = 19;
break;
case 5:
tmode = 5;
set_kelembapan();
mode = 19;
break;
case 6:
tmode = 6;
set_tekanan();
mode = 19;
break;
case 7:
tmode = 7;
131

break;
case 7:
tmode = 7;
set_wifi();
mode = 19;
break;
case 8:
tmode = 8;
cek_wifi();
mode = 19;
break;
case 9:
tmode = 9;
normal();
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.print(Ssid);
mode = 19;
break;
case 10:
tmode = 10;
uper_case();
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.print(Ssid);
mode = 19;
break;
case 11:
tmode = 11;
number();
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.print(Ssid);
mode = 19;
break;
132

tft.print(Ssid);
mode = 19;
break;
case 12:
tmode = 12;
normal();
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.print(Pass);
mode = 19;
break;
case 13:
tmode = 13;
uper_case();
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.print(Pass);
mode = 19;
break;
case 14:
tmode = 14;
number();
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.print(Pass);
mode = 19;
break;
case 15:
tmode = 15;
gantiwifi();
mode = 19;
break;
case 16:
tmode=16;
resetwifi();
133

case 16:
tmode=16;
resetwifi();
mode = 19;
break;
}
switch (tmode)
{
case 0:
baca();
break;
case 1:
baca1();
break;
case 2:
baca2();
break;
case 3:
baca3();
break;
case 4:
baca4();
case 5:
baca5();
break;
case 6:
baca6();
break;
case 7:
baca7();
break;
case 8:
C_wifi();
break;
case 9:
134

C_wifi();
break;
case 9:
keybord1();
break;
case 10:
keybord2();
break;
case 11:
keybord3();
break;
case 12:
keybord4();
break;
case 13:
keybord5();
break;
case 14:
keybord6();
break;
case 15:
T_wifi();
break;
case 16:
rstwifi();
break;
}
}
////////---------------------------------------------------------
---------------------------
void baca()
{
TSPoint p = ts.getPoint(); // get the screen touch
if ((p.z > MINPRESSURE && p.z < MAXPRESSURE)) { // if it's a
valid touch
135

TSPoint p = ts.getPoint(); // get the screen touch


if ((p.z > MINPRESSURE && p.z < MAXPRESSURE)) { // if it's a
valid touch
pinMode(YP, OUTPUT); //restore the TFT control pins
pinMode(XM, OUTPUT);// for display after detecting a touch
p.x = map(p.x, TS_MINX, TS_MAXX, tft.width(), 0);
p.y = map(p.y, TS_MINY, TS_MAXY, tft.height(), 0);
if (p.y <= 212 && p.y >= 76)
{
if (p.x <= 233 && p.x >= 185)
{
tft.drawRect (70, 77, 190, 40, YELLOW);
delay (200);
// tampilan_monitoring();
delay(200);
mode = 1;
}
if (p.x <= 120 && p.x >= 60)
{
tft.drawRect (70, 150, 190, 40, YELLOW);
delay (200);
mode = 2;
}
}
}
}

void baca1()
{ TSPoint p = ts.getPoint(); // get the screen touch
pinMode(YP, OUTPUT); //restore the TFT control pins
pinMode(XM, OUTPUT);// for display after detecting a touch
p.x = map(p.x, TS_MINX, TS_MAXX, tft.width(), 0);
p.y = map(p.y, TS_MINY, TS_MAXY, tft.height(), 0);
bacaSensor();
tft.setFont();
136

p.y = map(p.y, TS_MINY, TS_MAXY, tft.height(), 0);


bacaSensor();
tft.setFont();
tft.setCursor (20, 80);
tft.setTextSize(2);
tft.setTextColor(WHITE, LIGHTGREY);
tft.print(suh, 1);
tft.print(" C");
tft.setFont(&FreeSerif9pt7b);
tft.setFont();
tft.setCursor (160, 80);
tft.setTextSize(2);
tft.setTextColor(WHITE, LIGHTGREY);
tft.print(kel, 1);
tft.print(" % ");
tft.setFont(&FreeSerif9pt7b);
tft.setFont();
tft.setCursor (83, 170);
tft.setTextSize(2);
tft.setTextColor(WHITE, LIGHTGREY);
tft.print(tek, 1);
tft.print(" Pa");
tft.setFont(&FreeSerif9pt7b);
Serial.print (p.x);
Serial.print ("//");
Serial.println (p.y);
if (p.x >= 33 and p.x <= 82 and p.y >= 30 and p.y <= 44)
{
tft.fillTriangle (15, 200, 50, 180, 50, 220, YELLOW);
delay (200);
mode = 0 ;
}
if (setSuhuMax <= suh and setSuhuMin <= suh and setKelembaban
>= kel)
{
137

if (setSuhuMax <= suh and setSuhuMin <= suh and setKelembaban


>= kel)
{
if (millis() - waktu > 100)
{
TSPoint p = ts.getPoint(); // get the screen touch
pinMode(YP, OUTPUT); //restore the TFT control pins
pinMode(XM, OUTPUT);// for display after detecting a touch
p.x = map(p.x, TS_MINX, TS_MAXX, tft.width(), 0);
p.y = map(p.y, TS_MINY, TS_MAXY, tft.height(), 0);
bacaSensor();
tft.setFont();
tft.setCursor (20, 80);
tft.setTextSize(2);
tft.setTextColor(WHITE, LIGHTGREY);
tft.print(suh, 1);
tft.print(" C");
tft.setFont(&FreeSerif9pt7b);
tft.setFont();
tft.setCursor (160, 80);
tft.setTextSize(2);
tft.setTextColor(WHITE, LIGHTGREY);
tft.print(kel, 1);
tft.print(" % ");
tft.setFont(&FreeSerif9pt7b);
tft.setFont();
tft.setCursor (83, 170);
tft.setTextSize(2);
tft.setTextColor(WHITE, LIGHTGREY);
tft.print(tek, 1);
tft.print(" Pa");
tft.setFont(&FreeSerif9pt7b);
Serial.print (p.x);
Serial.print ("//");
Serial.println (p.y);
138

Serial.print (p.x);
Serial.print ("//");
Serial.println (p.y);
tft.fillRect(15, 40, 140, 30, RED);
tft.drawRect(15, 40, 140, 30, BLACK);
tampil(20, 60, 0, &FreeSans9pt7b, "TEMPERATURE");
delay(100);
tft.fillRect(15, 40, 140, 30, BLUE);
tft.drawRect(15, 40, 140, 30, BLACK);
tampil(20, 60, 0, &FreeSans9pt7b, "TEMPERATURE");
delay(100);
buzzer(1);
if (p.x >= 33 and p.x <= 82 and p.y >= 30 and p.y <= 56)
{
tft.fillTriangle (15, 200, 50, 180, 50, 220, YELLOW);
delay (200);
mode = 0 ;
setSuhuMax = 40;
}
if (p.x >= 60 and p.x <= 116 and p.y >= 200 and p.y <= 217)
{
tft.fillRect(230, 140, 60, 60, GREEN);
tft.drawRect(230, 140, 60, 60, BLACK);
tampil(235, 165, 0, &FreeSans9pt7b, "MUTE");
setSuhuMax = 40;
}
waktu = millis();
}
}
else if (setSuhuMax >= suh and setSuhuMin >= suh and
setKelembaban >= kel )
{
if (millis() - waktu > 100)
{
TSPoint p = ts.getPoint(); // get the screen touch
139

if (millis() - waktu > 100)


{
TSPoint p = ts.getPoint(); // get the screen touch
pinMode(YP, OUTPUT); //restore the TFT control pins
pinMode(XM, OUTPUT);// for display after detecting a touch
p.x = map(p.x, TS_MINX, TS_MAXX, tft.width(), 0);
p.y = map(p.y, TS_MINY, TS_MAXY, tft.height(), 0);
bacaSensor();
tft.setFont();
tft.setCursor (20, 80);
tft.setTextSize(2);
tft.setTextColor(WHITE, LIGHTGREY);
tft.print(suh, 1);
tft.print(" C");
tft.setFont(&FreeSerif9pt7b);
tft.setFont();
tft.setCursor (160, 80);
tft.setTextSize(2);
tft.setTextColor(WHITE, LIGHTGREY);
tft.print(kel, 1);
tft.print(" % ");
tft.setFont(&FreeSerif9pt7b);
tft.setFont();
tft.setCursor (83, 170);
tft.setTextSize(2);
tft.setTextColor(WHITE, LIGHTGREY);
tft.print(tek, 1);
tft.print(" Pa");
tft.setFont(&FreeSerif9pt7b);
Serial.print (p.x);
Serial.print ("//");
Serial.println (p.y);
tft.fillRect(15, 40, 140, 30, RED);
tft.drawRect(15, 40, 140, 30, BLACK);
tampil(20, 60, 0, &FreeSans9pt7b, "TEMPERATURE");
140

tft.fillRect(15, 40, 140, 30, RED);


tft.drawRect(15, 40, 140, 30, BLACK);
tampil(20, 60, 0, &FreeSans9pt7b, "TEMPERATURE");
delay(100);
tft.fillRect(15, 40, 140, 30, BLUE);
tft.drawRect(15, 40, 140, 30, BLACK);
tampil(20, 60, 0, &FreeSans9pt7b, "TEMPERATURE");
delay(100);
buzzer(1);
if (p.x >= 33 and p.x <= 82 and p.y >= 30 and p.y <= 56)
{
tft.fillTriangle (15, 200, 50, 180, 50, 220, YELLOW);
delay (200);
mode = 0 ;
setSuhuMin = 10;
}
if (p.x >= 60 and p.x <= 116 and p.y >= 200 and p.y <= 217)
{
tft.fillRect(230, 140, 60, 60, GREEN);
tft.drawRect(230, 140, 60, 60, BLACK);
tampil(235, 165, 0, &FreeSans9pt7b, "MUTE");
setSuhuMin = 10;
}
waktu = millis();
}
}
else if (setSuhuMax >= suh and setSuhuMin <= suh and
setKelembaban <= kel)
{
if (millis() - waktu > 100)
{
TSPoint p = ts.getPoint(); // get the screen touch
pinMode(YP, OUTPUT); //restore the TFT control pins
pinMode(XM, OUTPUT);// for display after detecting a touch
141

TSPoint p = ts.getPoint(); // get the screen touch


pinMode(YP, OUTPUT); //restore the TFT control pins
pinMode(XM, OUTPUT);// for display after detecting a touch
p.x = map(p.x, TS_MINX, TS_MAXX, tft.width(), 0);
p.y = map(p.y, TS_MINY, TS_MAXY, tft.height(), 0);
bacaSensor();
tft.setFont();
tft.setCursor (20, 80);
tft.setTextSize(2);
tft.setTextColor(WHITE, LIGHTGREY);
tft.print(suh, 1);
tft.print(" C");
tft.setFont(&FreeSerif9pt7b);
tft.setFont();
tft.setCursor (160, 80);
tft.setTextSize(2);
tft.setTextColor(WHITE, LIGHTGREY);
tft.print(kel, 1);
tft.print(" % ");
tft.setFont(&FreeSerif9pt7b);
tft.setFont();
tft.setCursor (83, 170);
tft.setTextSize(2);
tft.setTextColor(WHITE, LIGHTGREY);
tft.print(tek, 1);
tft.print(" Pa");
tft.setFont(&FreeSerif9pt7b);
tft.fillRect(155, 40, 140, 30, RED);
tft.drawRect(155, 40, 140, 30, BLACK);
tampil(180, 60, 0, &FreeSans9pt7b, "HUMIDITY");
tft.fillRect(155, 40, 140, 30, BLUE);
tft.drawRect(155, 40, 140, 30, BLACK);
tampil(180, 60, 0, &FreeSans9pt7b, "HUMIDITY");
delay(100);
142

tft.drawRect(155, 40, 140, 30, BLACK);


tampil(180, 60, 0, &FreeSans9pt7b, "HUMIDITY");
delay(100);
buzzer(1);
if (p.x >= 33 and p.x <= 82 and p.y >= 30 and p.y <= 56)
{
tft.fillTriangle (15, 200, 50, 180, 50, 220, YELLOW);
delay (200);
mode = 0 ;
setKelembaban = 100;
}
if (p.x >= 60 and p.x <= 116 and p.y >= 200 and p.y <= 217)
{
tft.fillRect(230, 140, 60, 60, GREEN);
tft.drawRect(230, 140, 60, 60, BLACK);
tampil(235, 165, 0, &FreeSans9pt7b, "MUTE");
setKelembaban = 100;
}
waktu = millis();
}
}

else if (setSuhuMax <= suh and setSuhuMin <= suh and


setKelembaban <= kel)
{
if (millis() - waktu > 100)
{
TSPoint p = ts.getPoint(); // get the screen touch
pinMode(YP, OUTPUT); //restore the TFT control pins
pinMode(XM, OUTPUT);// for display after detecting a touch
p.x = map(p.x, TS_MINX, TS_MAXX, tft.width(), 0);
p.y = map(p.y, TS_MINY, TS_MAXY, tft.height(), 0);
bacaSensor();
tft.setFont();
tft.setCursor (20, 80);
143

bacaSensor();
tft.setFont();
tft.setCursor (20, 80);
tft.setTextSize(2);
tft.setTextColor(WHITE, LIGHTGREY);
tft.print(suh, 1);
tft.print(" C");
tft.setFont(&FreeSerif9pt7b);
tft.setFont();
tft.setCursor (160, 80);
tft.setTextSize(2);
tft.setTextColor(WHITE, LIGHTGREY);
tft.print(kel, 1);
tft.print(" % ");
tft.setFont(&FreeSerif9pt7b);
tft.setFont();
tft.setCursor (83, 170);
tft.setTextSize(2);
tft.setTextColor(WHITE, LIGHTGREY);
tft.print(tek, 1);
tft.print(" Pa");
tft.setFont(&FreeSerif9pt7b);
tft.fillRect(155, 40, 140, 30, RED);
tft.drawRect(155, 40, 140, 30, BLACK);
tampil(180, 60, 0, &FreeSans9pt7b, "HUMIDITY");
tft.fillRect(155, 40, 140, 30, BLUE);
tft.drawRect(155, 40, 140, 30, BLACK);
tampil(180, 60, 0, &FreeSans9pt7b, "HUMIDITY");
delay(100);
tampil(20, 60, 0, &FreeSans9pt7b, "TEMPERATURE");
delay(100);
tft.fillRect(15, 40, 140, 30, BLUE);
tft.drawRect(15, 40, 140, 30, BLACK);
tampil(20, 60, 0, &FreeSans9pt7b, "TEMPERATURE");
delay(100);
144

tft.drawRect(15, 40, 140, 30, BLACK);


tampil(20, 60, 0, &FreeSans9pt7b, "TEMPERATURE");
delay(100);
buzzer(2);
if (p.x >= 33 and p.x <= 82 and p.y >= 30 and p.y <= 56)
{
tft.fillTriangle (15, 200, 50, 180, 50, 220, YELLOW);
delay (200);
mode = 0 ;
setKelembaban = 100;
setSuhuMax = 40;
}
if (p.x >= 60 and p.x <= 116 and p.y >= 200 and p.y <= 217)
{
tft.fillRect(230, 140, 60, 60, GREEN);
tft.drawRect(230, 140, 60, 60, BLACK);
tampil(235, 165, 0, &FreeSans9pt7b, "MUTE");
setKelembaban = 100;
setSuhuMax = 40;
}
waktu = millis();
}
}
else if (setSuhuMax >= suh and setSuhuMin >= suh and
setKelembaban <= kel)
{
if (millis() - waktu > 100)
{
TSPoint p = ts.getPoint(); // get the screen touch
pinMode(YP, OUTPUT); //restore the TFT control pins
pinMode(XM, OUTPUT);// for display after detecting a touch
p.x = map(p.x, TS_MINX, TS_MAXX, tft.width(), 0);
p.y = map(p.y, TS_MINY, TS_MAXY, tft.height(), 0);
bacaSensor();
tft.setFont();
145

p.y = map(p.y, TS_MINY, TS_MAXY, tft.height(), 0);


bacaSensor();
tft.setFont();
tft.setCursor (20, 80);
tft.setTextSize(2);
tft.setTextColor(WHITE, LIGHTGREY);
tft.print(suh, 1);
tft.print(" C");
tft.setFont(&FreeSerif9pt7b);
tft.setFont();
tft.setCursor (160, 80);
tft.setTextSize(2);
tft.setTextColor(WHITE, LIGHTGREY);
tft.print(kel, 1);
tft.print(" % ");
tft.setFont(&FreeSerif9pt7b);
tft.setFont();
tft.setCursor (83, 170);
tft.setTextSize(2);
tft.setTextColor(WHITE, LIGHTGREY);
tft.print(tek, 1);
tft.print(" Pa");
tft.setFont(&FreeSerif9pt7b);
tft.fillRect(155, 40, 140, 30, RED);
tft.drawRect(155, 40, 140, 30, BLACK);
tampil(180, 60, 0, &FreeSans9pt7b, "HUMIDITY");
tft.fillRect(155, 40, 140, 30, BLUE);
tft.drawRect(155, 40, 140, 30, BLACK);
tampil(180, 60, 0, &FreeSans9pt7b, "HUMIDITY");
delay(100);
tampil(20, 60, 0, &FreeSans9pt7b, "TEMPERATURE");
delay(100);
tft.fillRect(15, 40, 140, 30, BLUE);
tft.drawRect(15, 40, 140, 30, BLACK);
tampil(20, 60, 0, &FreeSans9pt7b, "TEMPERATURE");
146

tft.fillRect(15, 40, 140, 30, BLUE);


tft.drawRect(15, 40, 140, 30, BLACK);
tampil(20, 60, 0, &FreeSans9pt7b, "TEMPERATURE");
delay(100);
buzzer(1);
if (p.x >= 33 and p.x <= 82 and p.y >= 30 and p.y <= 56)
{
tft.fillTriangle (15, 200, 50, 180, 50, 220, YELLOW);
delay (200);
mode = 0 ;
setKelembaban = 100;
setSuhuMin = 10;
}
if (p.x >= 60 and p.x <= 116 and p.y >= 200 and p.y <= 217)
{
tft.fillRect(230, 140, 60, 60, GREEN);
tft.drawRect(230, 140, 60, 60, BLACK);
tampil(235, 165, 0, &FreeSans9pt7b, "MUTE");
setKelembaban = 100;
setSuhuMin = 10;
}
waktu = millis();
}
}
}

void baca2()
{
TSPoint p = ts.getPoint(); // get the screen touch
if ((p.z > MINPRESSURE && p.z < MAXPRESSURE)) { // if it's a
valid touch
pinMode(YP, OUTPUT); //restore the TFT control pins
pinMode(XM, OUTPUT);// for display after detecting a touch
p.x = map(p.x, TS_MINX, TS_MAXX, tft.width(), 0);
p.y = map(p.y, TS_MINY, TS_MAXY, tft.height(), 0);
147

pinMode(XM, OUTPUT);// for display after detecting a touch


p.x = map(p.x, TS_MINX, TS_MAXX, tft.width(), 0);
p.y = map(p.y, TS_MINY, TS_MAXY, tft.height(), 0);
if (p.y <= 201 && p.y >= 68)
{
if (p.x <= 280 && p.x >= 253)
{
tft.fillRect(80, 37, 175, 30, YELLOW);
tampil(95, 57, 0, &FreeSans9pt7b, " SET SUHU");
delay(200);
mode = 3;
}
if (p.x <= 214 && p.x >= 175)
{
tft.fillRect(80, 85, 175, 30, YELLOW);
tampil(90, 105, 0, &FreeSans9pt7b, "SET KELEMBAPAN");
delay(200);
mode = 5;
}
if (p.x <= 138 && p.x >= 96)
{
tft.fillRect(80, 135, 175, 30, YELLOW);
tampil(90, 155, 0, &FreeSans9pt7b, " SET TEKANAN");
delay(200);
mode = 6;
}
if (p.x <= 63 && p.x >= 25)
{
tft.fillRect(80, 185, 175, 30, YELLOW);
tampil(95, 205, 0, &FreeSans9pt7b, " SET WIFI");
delay(200);
mode = 7;
}
}
if (p.y <= 44 && p.y >= 33 && p.x <= 305 && p.x >= 284)
148

}
}
if (p.y <= 44 && p.y >= 33 && p.x <= 305 && p.x >= 284)
{
tft.fillTriangle (15, 35, 50, 20, 50, 50, YELLOW);
delay (500);
mode = 0;
}
}
}

void baca3()
{
TSPoint p = ts.getPoint(); // get the screen touch
if ((p.z > MINPRESSURE && p.z < MAXPRESSURE)) { // if it's a
valid touch
pinMode(YP, OUTPUT); //restore the TFT control pins
pinMode(XM, OUTPUT);// for display after detecting a touch
p.x = map(p.x, TS_MINX, TS_MAXX, tft.width(), 0);
p.y = map(p.y, TS_MINY, TS_MAXY, tft.height(), 0);
if (p.y <= 107 && p.y >= 95 && p.x >= 35 && p.x <= 55)
{
delay (100);
tft.setFont(&FreeSans12pt7b);
tft.setCursor (130, 132);
tft.setTextSize (3);
tft.setTextColor(BLACK);
tft.fillRect(70, 62, 180, 100, LIGHTGREY);
tft.drawRect(70, 62, 180, 100, BLACK);
tft.print(setSuhuMax);
setSuhuMax++;
if (setSuhuMax >= 40)
setSuhuMax = 40;
}
if (p.y >= 167 and p.y <= 171 and p.x >= 53 and p.x <= 77)
149

setSuhuMax = 40;
}
if (p.y >= 167 and p.y <= 171 and p.x >= 53 and p.x <= 77)
{
delay(100);
tft.setCursor (130, 132);
tft.setTextSize (3);
tft.setTextColor(BLACK);
tft.fillRect(70, 62, 180, 100, LIGHTGREY);
tft.drawRect(70, 62, 180, 100, BLACK);
tft.print(setSuhuMax);
setSuhuMax--;
if (setSuhuMax <= 10)
setSuhuMax = 10;
}
if (p.y <= 44 && p.y >= 33 && p.x <= 305 && p.x >= 284)
{
tft.fillTriangle (15, 35, 50, 20, 50, 50, YELLOW);
delay (500);
mode = 2;
}
if (p.x >= 296 and p.x <= 308 and p.y >= 223 and p.y <= 230)
{
tft.fillCircle(285, 35, 20, YELLOW);
delay (200);
mode = 4;
}
}
}
void baca4()
{
TSPoint p = ts.getPoint(); // get the screen touch
if ((p.z > MINPRESSURE && p.z < MAXPRESSURE)) { // if it's a
valid touch
pinMode(YP, OUTPUT); //restore the TFT control pins
150

if ((p.z > MINPRESSURE && p.z < MAXPRESSURE)) { // if it's a


valid touch
pinMode(YP, OUTPUT); //restore the TFT control pins
pinMode(XM, OUTPUT);// for display after detecting a touch
p.x = map(p.x, TS_MINX, TS_MAXX, tft.width(), 0);
p.y = map(p.y, TS_MINY, TS_MAXY, tft.height(), 0);
if (p.y <= 107 && p.y >= 95 && p.x >= 35 && p.x <= 55)
{
delay (100);
tft.setFont(&FreeSans12pt7b);
tft.setCursor (130, 132);
tft.setTextSize (3);
tft.setTextColor(BLACK);
tft.fillRect(70, 62, 180, 100, LIGHTGREY);
tft.drawRect(70, 62, 180, 100, BLACK);
tft.print(setSuhuMin);
setSuhuMin++;
if (setSuhuMin >= 40)
setSuhuMin = 40;
}
if (p.y >= 167 and p.y <= 171 and p.x >= 53 and p.x <= 77)
{
delay(100);
tft.setCursor (130, 132);
tft.setTextSize (3);
tft.setTextColor(BLACK);
tft.fillRect(70, 62, 180, 100, LIGHTGREY);
tft.drawRect(70, 62, 180, 100, BLACK);
tft.print(setSuhuMin);
setSuhuMin--;
if (setSuhuMin <= 10)
setSuhuMin = 10;
}
if (p.y <= 44 && p.y >= 33 && p.x <= 305 && p.x >= 284)
{
151

}
if (p.y <= 44 && p.y >= 33 && p.x <= 305 && p.x >= 284)
{
tft.fillTriangle (15, 35, 50, 20, 50, 50, YELLOW);
delay (500);
mode = 2;
}
if (p.x >= 296 and p.x <= 308 and p.y >= 225 and p.y <= 230)
{
tft.fillCircle(285, 35, 20, YELLOW);
delay (200);
mode = 2;
}
}
}

void baca5()
{
TSPoint p = ts.getPoint(); // get the screen touch
if ((p.z > MINPRESSURE && p.z < MAXPRESSURE)) { // if it's a
valid touch
pinMode(YP, OUTPUT); //restore the TFT control pins
pinMode(XM, OUTPUT);// for display after detecting a touch
p.x = map(p.x, TS_MINX, TS_MAXX, tft.width(), 0);
p.y = map(p.y, TS_MINY, TS_MAXY, tft.height(), 0);
if (p.y <= 107 && p.y >= 95 && p.x >= 35 && p.x <= 55)
{
delay (100);
tft.setFont(&FreeSans12pt7b);
tft.setCursor (130, 132);
tft.setTextSize (3);
tft.setTextColor(BLACK);
tft.fillRect(70, 62, 180, 100, LIGHTGREY);
tft.drawRect(70, 62, 180, 100, BLACK);
tft.print(setKelembaban);
152

tft.fillRect(70, 62, 180, 100, LIGHTGREY);


tft.drawRect(70, 62, 180, 100, BLACK);
tft.print(setKelembaban);
setKelembaban++;
if (setKelembaban >= 100)
setKelembaban = 100;
}
if (p.y >= 167 and p.y <= 171 and p.x >= 53 and p.x <= 77)
{
delay(100);
tft.setCursor (130, 132);
tft.setTextSize (3);
tft.setTextColor(BLACK);
tft.fillRect(70, 62, 180, 100, LIGHTGREY);
tft.drawRect(70, 62, 180, 100, BLACK);
tft.print(setKelembaban);
setKelembaban--;
if (setKelembaban <= 10)
setKelembaban = 10;
}
if (p.y <= 44 && p.y >= 33 && p.x <= 305 && p.x >= 284)
{
tft.fillTriangle (15, 35, 50, 20, 50, 50, YELLOW);
delay (500);
mode = 2;
}
if (p.x >= 296 and p.x <= 308 and p.y >= 225 and p.y <= 230)
{
tft.fillCircle(285, 35, 20, YELLOW);
delay (200);
mode = 2;
}
}
}
153

}
}

void baca6()
{
TSPoint p = ts.getPoint(); // get the screen touch
if ((p.z > MINPRESSURE && p.z < MAXPRESSURE)) { // if it's a
valid touch
pinMode(YP, OUTPUT); //restore the TFT control pins
pinMode(XM, OUTPUT);// for display after detecting a touch
p.x = map(p.x, TS_MINX, TS_MAXX, tft.width(), 0);
p.y = map(p.y, TS_MINY, TS_MAXY, tft.height(), 0);
if (p.y <= 107 && p.y >= 95 && p.x >= 35 && p.x <= 55)
{
delay (100);
tft.setFont(&FreeSans12pt7b);
tft.setCursor (130, 132);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.fillRect(70, 62, 180, 100, LIGHTGREY);
tft.drawRect(70, 62, 180, 100, BLACK);
tft.print(setTekanan);
setTekanan+10;
if (setTekanan >= 111000)
setTekanan = 111000;
}
if (p.y >= 167 and p.y <= 171 and p.x >= 53 and p.x <= 77)
{
delay(100);
tft.setCursor (130, 132);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.fillRect(70, 62, 180, 100, LIGHTGREY);
tft.drawRect(70, 62, 180, 100, BLACK);
tft.print(setTekanan);
154

tft.fillRect(70, 62, 180, 100, LIGHTGREY);


tft.drawRect(70, 62, 180, 100, BLACK);
tft.print(setTekanan);
setTekanan-10;
if (setTekanan <= 90000)
setTekanan = 90000;
}
if (p.y <= 44 && p.y >= 33 && p.x <= 305 && p.x >= 284)
{
tft.fillTriangle (15, 35, 50, 20, 50, 50, YELLOW);
delay (500);
mode = 2;
}
if (p.x >= 296 and p.x <= 308 and p.y >= 225 and p.y <= 230)
{
tft.fillCircle(285, 35, 20, YELLOW);
delay (200);
mode = 2;
}
}
}

void baca7()
{
TSPoint p = ts.getPoint(); // get the screen touch
if ((p.z > MINPRESSURE && p.z < MAXPRESSURE)) { // if it's a
valid touch
pinMode(YP, OUTPUT); //restore the TFT control pins
pinMode(XM, OUTPUT);// for display after detecting a touch
p.x = map(p.x, TS_MINX, TS_MAXX, tft.width(), 0);
p.y = map(p.y, TS_MINY, TS_MAXY, tft.height(), 0);
if (p.y <= 212 && p.y >= 76)
{
if (p.x <= 233 && p.x >= 185)
{
155

{
if (p.x <= 233 && p.x >= 185)
{
tft.drawRect (70, 77, 190, 40, YELLOW);
delay (200);
// tampilan_monitoring();
delay(200);
mode = 8;
}
if (p.x <= 120 && p.x >= 60)
{
tft.drawRect (70, 150, 190, 40, YELLOW);
delay (200);
mode = 16;
}
}
if (p.y <= 44 && p.y >= 33 && p.x <= 305 && p.x >= 284)
{
tft.fillTriangle (15, 35, 50, 20, 50, 50, YELLOW);
delay (500);
mode = 2;
}
}
}

void cek_wifi()
{
tft.setRotation(1);
tft.fillScreen (BLACK);
for (int j = 1; j <= 3; j++) {
tft.setTextColor(WHITE);
tampil(20, 20, 1, &FreeSerif9pt7b, "Checking for
Connection");
for (int i = 1; i <= 4; i++) {
delay(500);
156

for (int i = 1; i <= 4; i++) {


delay(500);
tft.print(".");
}
tft.fillRect(203, 10, 50, 20, BLACK);
}
tampil(20, 40, 1, &FreeSans9pt7b, "SSID: ");
tft.print (ssid);
tampil(20, 60, 1, &FreeSans9pt7b, "Password: ");
tft.print (pass);
tampil(20, 80, 1, &FreeSans9pt7b, "Connecting to ");
tft.print (ssid);
// Blynk.begin(auth, wifi, ssid, pass);
tft.setCursor(20, 100);
tft.print ("Connected");
tft.fillRect(10, 140, 70, 40, LIGHTGREY);
tft.drawRect(10, 140, 70, 40, WHITE);
tampil(30, 165, 1, &FreeSans9pt7b, "OKE");
tft.fillRect(110, 140, 170, 40, LIGHTGREY);
tft.drawRect(110, 140, 170, 40, WHITE);
tampil(130, 165, 1, &FreeSans9pt7b, "CHANGE WIFI");
}

void C_wifi() {
TSPoint p = ts.getPoint(); // get the screen touch
if ((p.z > MINPRESSURE && p.z < MAXPRESSURE)) { // if it's a
valid touch
pinMode(YP, OUTPUT); //restore the TFT control pins
pinMode(XM, OUTPUT);// for display after detecting a touch
p.x = map(p.x, TS_MINX, TS_MAXX, tft.width(), 0);//mapping
touchScreen by tft width for p.x
p.y = map(p.y, TS_MINY, TS_MAXY, tft.height(), 0);//mapping
touchScreen by tft height for p.y
if ((p.z > MINPRESSURE && p.z < MAXPRESSURE)) {
if (p.x <= 137 and p.x >= 83) {
if (p.y >= 23 and p.y <= 70) {
157

if ((p.z > MINPRESSURE && p.z < MAXPRESSURE)) {


if (p.x <= 137 and p.x >= 83) {
if (p.y >= 23 and p.y <= 70) {
// Ssid.toCharArray(SSid,55);
// Pass.toCharArray(PASS,55);
// Blynk.begin(auth, wifi, SSid, PASS);
mode = 7;
delay (100);
}
if (p.y >= 98 and p.y <= 226) {
tft.fillScreen (WHITE);
mode = 15;
delay (100);
}
}
}
}
}
void T_wifi() {
TSPoint p = ts.getPoint(); // get the screen touch

if ((p.z > MINPRESSURE && p.z < MAXPRESSURE)) { // if it's a


valid touch
pinMode(YP, OUTPUT); //restore the TFT control pins
pinMode(XM, OUTPUT);// for display after detecting a touch
if ((p.z > MINPRESSURE && p.z < MAXPRESSURE)) {
p.x = map(p.x, TS_MINX, TS_MAXX, tft.width(), 0);
p.y = map(p.y, TS_MINY, TS_MAXY, tft.height(), 0);
if (p.y >= 75 and p.y <= 192) {
if (p.x <= 314 and p.x >= 283) {
//Ssid=text;
tft.fillScreen (BLACK);
ketik();
mode = 9;
delay(100);
158

ketik();
mode = 9;
delay(100);
}
if (p.x >= 210 and p.x <= 249) {
//Pass=text;
tft.fillScreen (BLACK);
ketik();
mode = 12;
delay(100);
}
}
if (p.x <= 171 and p.x >= 111) {
if (p.y >= 22 and p.y <= 88) {
Ssid.toCharArray(SSid,55);
Pass.toCharArray(PASS,55);
Blynk.begin(auth, wifi, SSid, PASS);
mode = 7;
delay(100);
}
if (p.y >= 108 and p.y <= 162) {
mode = 7;
delay(100);
}
}
}
}
}
void keybord1()
{
TSPoint p = ts.getPoint(); // get the screen touch
if ((p.z > MINPRESSURE && p.z < MAXPRESSURE)) { // if it's a
valid touch
pinMode(YP, OUTPUT); //restore the TFT control pins
pinMode(XM, OUTPUT);// for display after detecting a touch
159

if ((p.z > MINPRESSURE && p.z < MAXPRESSURE)) { // if it's a


valid touch
pinMode(YP, OUTPUT); //restore the TFT control pins
pinMode(XM, OUTPUT);// for display after detecting a touch
p.x = map(p.x, TS_MINX, TS_MAXX, tft.width(), 0);
p.y = map(p.y, TS_MINY, TS_MAXY, tft.height(), 0);
if (p.x <= 250 and p.x >= 188)
{
if (p.y <= 35 and p.y >= 22) {
kecil = "q";
Ssid = Ssid + kecil;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y <= 60 and p.y >= 45) {
kecil = "w";
Ssid = Ssid + kecil;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y <= 82 and p.y >= 67) {
kecil = "e";
Ssid = Ssid + kecil;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
160

tft.print(Ssid);
delay(100);
}
if (p.y <= 108 and p.y >= 90) {
kecil = "r";
Ssid = Ssid + kecil;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y <= 128 and p.y >= 118) {
kecil = "t";
Ssid = Ssid + kecil;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 138 and p.y <= 148) {
kecil = "y";
Ssid = Ssid + kecil;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 158 and p.y <= 171) {
kecil = "u";
Ssid = Ssid + kecil;
tft.setCursor (10, 10);
tft.setTextSize (1);
161

Ssid = Ssid + kecil;


tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 183 and p.y <= 197) {
kecil = "i";
Ssid = Ssid + kecil;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 208 and p.y <= 219) {
kecil = "o";
Ssid = Ssid + kecil;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 228 and p.y <= 241) {
kecil = "p";
Ssid = Ssid + kecil;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
}
162

delay(100);
}
}
if (p.x <= 168 and p.x >= 138)
{
if (p.y >= 32 and p.y <= 47) {
kecil = "a";
Ssid = Ssid + kecil;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 53 and p.y <= 71) {
kecil = "s";
Ssid = Ssid + kecil;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 79 and p.y <= 94) {
kecil = "d";
Ssid = Ssid + kecil;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 100 and p.y <= 118) {
kecil = "f";
Ssid = Ssid + kecil;
163

}
if (p.y >= 100 and p.y <= 118) {
kecil = "f";
Ssid = Ssid + kecil;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 122 and p.y <= 142 ) {
kecil = "g";
Ssid = Ssid + kecil;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 150 and p.y <= 164) {
kecil = "h";
Ssid = Ssid + kecil;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 170 and p.y <= 187) {
kecil = "j";
Ssid = Ssid + kecil;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
164

tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 192 and p.y <= 208) {
kecil = "k";
Ssid = Ssid + kecil;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 216 and p.y <= 231) {
kecil = "l";
Ssid = Ssid + kecil;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
}
if (p.x <= 113 and p.x >= 61)
{
if (p.y >= 23 and p.y <= 53) {
tft.fillRect(10, 160, 40, BOXSIZE, YELLOW);
tft.drawRect(10, 160, 40, BOXSIZE, WHITE);
delay(100);
mode = 10;
}
if (p.y >= 61 and p.y <= 75) {
kecil = "z";
Ssid = Ssid + kecil;
165

if (p.y >= 61 and p.y <= 75) {


kecil = "z";
Ssid = Ssid + kecil;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 83 and p.y <= 98) {
kecil = "x";
Ssid = Ssid + kecil;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 104 and p.y <= 118) {
kecil = "c";
Ssid = Ssid + kecil;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 128 and p.y <= 144) {
kecil = "v";
Ssid = Ssid + kecil;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
166

tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 153 and p.y <= 168) {
kecil = "b";
Ssid = Ssid + kecil;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 177 and p.y <= 190) {
kecil = "n";
Ssid = Ssid + kecil;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 197 and p.y <= 207) {
kecil = "m";
Ssid = Ssid + kecil;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 222 and p.y <= 240) {
int T = Ssid.length() - 1;
String Ssid1 = Ssid.substring(0, T);
Ssid = Ssid1;
167

int T = Ssid.length() - 1;
String Ssid1 = Ssid.substring(0, T);
Ssid = Ssid1;
ketik();
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
}
if (p.x <= 55 and p.x >= 11)
{
if (p.y >= 24 and p.y <= 49) {
tft.fillRect(10, 195, 40, 30, YELLOW);
tft.drawRect(10, 195, 40, 30, WHITE);
delay(100);
mode = 11;
}
if (p.y >= 59 and p.y <= 76) {
kecil = ",";
Ssid = Ssid + kecil;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 82 and p.y <= 168) {
kecil = " ";
Ssid = Ssid + kecil;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
168

tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 181 and p.y <= 196) {
kecil = ".";
Ssid = Ssid + kecil;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 205 and p.y <= 242) {
tft.fillScreen (WHITE);
mode = 15;
delay (100);
}
}
}
}

void keybord2()
{
TSPoint p = ts.getPoint(); // get the screen touch

if ((p.z > MINPRESSURE && p.z < MAXPRESSURE)) { // if it's a


valid touch
pinMode(YP, OUTPUT); //restore the TFT control pins
pinMode(XM, OUTPUT);// for display after detecting a touch
p.x = map(p.x, TS_MINX, TS_MAXX, tft.width(), 0);
p.y = map(p.y, TS_MINY, TS_MAXY, tft.height(), 0);
if (p.x <= 250 and p.x >= 188)
{
169

p.y = map(p.y, TS_MINY, TS_MAXY, tft.height(), 0);


if (p.x <= 250 and p.x >= 188)
{
if (p.y <= 35 and p.y >= 22) {
besar = "Q";
Ssid = Ssid + besar;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y <= 60 and p.y >= 45) {
besar = "W";
Ssid = Ssid + besar;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y <= 82 and p.y >= 67) {
besar = "E";
Ssid = Ssid + besar;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y <= 108 and p.y >= 90) {
besar = "R";
Ssid = Ssid + besar;
tft.setCursor (10, 10);
tft.setTextSize (1);
170

Ssid = Ssid + besar;


tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y <= 128 and p.y >= 118) {
besar = "T";
Ssid = Ssid + besar;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 138 and p.y <= 148) {
besar = "Y";
Ssid = Ssid + besar;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 158 and p.y <= 171) {
besar = "U";
Ssid = Ssid + besar;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 183 and p.y <= 197) {
171

delay(100);
}
if (p.y >= 183 and p.y <= 197) {
besar = "I";
Ssid = Ssid + besar;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 208 and p.y <= 219) {
besar = "O";
Ssid = Ssid + besar;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 228 and p.y <= 241) {
besar = "P";
Ssid = Ssid + besar;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
}
if (p.x <= 168 and p.x >= 138)
{
if (p.y >= 32 and p.y <= 47) {
besar = "A";
Ssid = Ssid + besar;
172

{
if (p.y >= 32 and p.y <= 47) {
besar = "A";
Ssid = Ssid + besar;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 53 and p.y <= 71) {
besar = "S";
Ssid = Ssid + besar;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 79 and p.y <= 94) {
besar = "D";
Ssid = Ssid + besar;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 100 and p.y <= 118) {
besar = "F";
Ssid = Ssid + besar;;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
173

tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 122 and p.y <= 142 ) {
besar = "G";
Ssid = Ssid + besar;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 150 and p.y <= 164) {
besar = "H";
Ssid = Ssid + besar;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 170 and p.y <= 187) {
besar = "J";
Ssid = Ssid + besar;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 192 and p.y <= 208) {
besar = "K";
Ssid = Ssid + besar;
174

if (p.y >= 192 and p.y <= 208) {


besar = "K";
Ssid = Ssid + besar;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 216 and p.y <= 231) {
besar = "L";
Ssid = Ssid + besar;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
}
if (p.x <= 113 and p.x >= 61)
{
if (p.y >= 23 and p.y <= 53) {
tft.fillRect(10, 160, 40, BOXSIZE, YELLOW);
tft.drawRect(10, 160, 40, BOXSIZE, WHITE);
delay(100);
mode = 9;
}
if (p.y >= 61 and p.y <= 75) {
besar = "Z";
Ssid = Ssid + besar;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
175

tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 83 and p.y <= 98) {
besar = "X";
Ssid = Ssid + besar;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 104 and p.y <= 118) {
besar = "C";
Ssid = Ssid + besar;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 128 and p.y <= 144) {
besar = "V";
Ssid = Ssid + besar;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 153 and p.y <= 168) {
besar = "B";
Ssid = Ssid + besar;
tft.setCursor (10, 10);
176

besar = "B";
Ssid = Ssid + besar;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 177 and p.y <= 190) {
besar = "N";
Ssid = Ssid + besar;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 197 and p.y <= 207) {
besar = "M";
Ssid = Ssid + besar;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 222 and p.y <= 240) {
int T = Ssid.length() - 1;
String Ssid1 = Ssid.substring(0, T);
Ssid = Ssid1;
ketik();
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid1);
177

tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid1);
delay(100);
}
}
if (p.x <= 55 and p.x >= 11)
{
if (p.y >= 24 and p.y <= 49) {
tft.fillRect(10, 195, 40, 30, YELLOW);
tft.drawRect(10, 195, 40, 30, WHITE);
delay(100);
mode = 11;
}
if (p.y >= 59 and p.y <= 76) {
besar = ",";
Ssid = Ssid + besar;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 82 and p.y <= 168) {
besar = " ";
Ssid = Ssid + besar;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 181 and p.y <= 196) {
besar = ".";
Ssid = Ssid + besar;
178

if (p.y >= 181 and p.y <= 196) {


besar = ".";
Ssid = Ssid + besar;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 205 and p.y <= 242) {
tft.fillScreen(WHITE);
mode = 15;
delay (100);
}
}
}
}
void keybord3()
{
TSPoint p = ts.getPoint(); // get the screen touch

if ((p.z > MINPRESSURE && p.z < MAXPRESSURE)) { // if it's a


valid touch
pinMode(YP, OUTPUT); //restore the TFT control pins
pinMode(XM, OUTPUT);// for display after detecting a touch
p.x = map(p.x, TS_MINX, TS_MAXX, tft.width(), 0);
p.y = map(p.y, TS_MINY, TS_MAXY, tft.height(), 0);
if (p.x <= 250 and p.x >= 188)
{
if (p.y <= 35 and p.y >= 22) {
num = "1";
Ssid = Ssid + num;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
179

tft.setCursor (10, 10);


tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y <= 60 and p.y >= 45) {
num = "2";
Ssid = Ssid + num;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y <= 82 and p.y >= 67) {
num = "3";
Ssid = Ssid + num;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y <= 108 and p.y >= 90) {
num = "4";
Ssid = Ssid + num;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y <= 128 and p.y >= 118) {
num = "5";
180

}
if (p.y <= 128 and p.y >= 118) {
num = "5";
Ssid = Ssid + num;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 138 and p.y <= 148) {
num = "6";
Ssid = Ssid + num;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 158 and p.y <= 171) {
num = "7";
Ssid = Ssid + num;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 188 and p.y <= 197) {
num = "8";
Ssid = Ssid + num;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
181

tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 208 and p.y <= 219) {
num = "9";
Ssid = Ssid + num;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 228 and p.y <= 241) {
num = "0";
Ssid = Ssid + num;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
}
if (p.x <= 168 and p.x >= 138)
{
if (p.y >= 32 and p.y <= 47) {
num = "@";
Ssid = Ssid + num;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
182

tft.print(Ssid);
delay(100);
}
if (p.y >= 53 and p.y <= 71) {
num = ":";
Ssid = Ssid + num;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 79 and p.y <= 94) {
num = ";";
Ssid = Ssid + num;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 100 and p.y <= 118) {
num = "_";
Ssid = Ssid + num;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 122 and p.y <= 142 ) {
num = "-";
Ssid = Ssid + num;
tft.setCursor (10, 10);
tft.setTextSize (1);
183

Ssid = Ssid + num;


tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 150 and p.y <= 164) {
num = "#";
Ssid = Ssid + num;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 170 and p.y <= 187) {
num = "(";
Ssid = Ssid + num;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 192 and p.y <= 208) {
num = ")";
Ssid = Ssid + num;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 216 and p.y <= 231) {
184

delay(100);
}
if (p.y >= 216 and p.y <= 231) {
num = "/";
Ssid = Ssid + num;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
}
if (p.x <= 113 and p.x >= 61)
{
if (p.y >= 61 and p.y <= 75) {
num = ".";
Ssid = Ssid + num;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 83 and p.y <= 98) {
num = ",";
Ssid = Ssid + num;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 104 and p.y <= 118) {
num = "?";
Ssid = Ssid + num;
185

if (p.y >= 104 and p.y <= 118) {


num = "?";
Ssid = Ssid + num;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 128 and p.y <= 144) {
num = "!";
Ssid = Ssid + num;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 153 and p.y <= 168) {
num = "'";
Ssid = Ssid + num;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 177 and p.y <= 190) {
num = '"';
Ssid = Ssid + num;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
186

tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 197 and p.y <= 207) {
num = "+";
Ssid = Ssid + num;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 222 and p.y <= 240) {
int T = Ssid.length() - 1;
String Ssid1 = Ssid.substring(0, T);
Ssid = Ssid1;
ketik();
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid1);
delay(100);
}
}
if (p.x <= 55 and p.x >= 11)
{
if (p.y >= 24 and p.y <= 49) {
tft.fillRect(10, 195, 40, 30, YELLOW);
tft.drawRect(10, 195, 40, 30, WHITE);
delay(100);
mode = 9;
}
if (p.y >= 82 and p.y <= 168) {
num = " ";
187

}
if (p.y >= 82 and p.y <= 168) {
num = " ";
Ssid = Ssid + num;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Ssid);
delay(100);
}
if (p.y >= 205 and p.y <= 242) {
tft.fillScreen(WHITE);
mode = 15;
delay (100);
}
}
}
}
void keybord4()
{
TSPoint p = ts.getPoint(); // get the screen touch
if ((p.z > MINPRESSURE && p.z < MAXPRESSURE)) { // if it's a
valid touch
pinMode(YP, OUTPUT); //restore the TFT control pins
pinMode(XM, OUTPUT);// for display after detecting a touch
p.x = map(p.x, TS_MINX, TS_MAXX, tft.width(), 0);
p.y = map(p.y, TS_MINY, TS_MAXY, tft.height(), 0);
if (p.x <= 250 and p.x >= 188)
{
if (p.y <= 35 and p.y >= 22) {
kecil = "q";
Pass = Pass + kecil;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
188

tft.setCursor (10, 10);


tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y <= 60 and p.y >= 45) {
kecil = "w";
Pass = Pass + kecil;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y <= 82 and p.y >= 67) {
kecil = "e";
Pass = Pass + kecil;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y <= 108 and p.y >= 90) {
kecil = "r";
Pass = Pass + kecil;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y <= 128 and p.y >= 118) {
kecil = "t";
189

}
if (p.y <= 128 and p.y >= 118) {
kecil = "t";
Pass = Pass + kecil;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 138 and p.y <= 148) {
kecil = "y";
Pass = Pass + kecil;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 158 and p.y <= 171) {
kecil = "u";
Pass = Pass + kecil;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 183 and p.y <= 197) {
kecil = "i";
Pass = Pass + kecil;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
190

tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 208 and p.y <= 219) {
kecil = "o";
Pass = Pass + kecil;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 228 and p.y <= 241) {
kecil = "p";
Pass = Pass + kecil;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
}
if (p.x <= 168 and p.x >= 138)
{
if (p.y >= 32 and p.y <= 47) {
kecil = "a";
Pass = Pass + kecil;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
191

tft.print(Pass);
delay(100);
}
if (p.y >= 53 and p.y <= 71) {
kecil = "s";
Pass = Pass + kecil;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 79 and p.y <= 94) {
kecil = "d";
Pass = Pass + kecil;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 100 and p.y <= 118) {
kecil = "f";
Pass = Pass + kecil;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 122 and p.y <= 142 ) {
kecil = "g";
Pass = Pass + kecil;
tft.setCursor (10, 10);
tft.setTextSize (1);
192

Pass = Pass + kecil;


tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 150 and p.y <= 164) {
kecil = "h";
Pass = Pass + kecil;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 170 and p.y <= 187) {
kecil = "j";
Pass = Pass + kecil;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 192 and p.y <= 208) {
kecil = "k";
Pass = Pass + kecil;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 216 and p.y <= 231) {
193

delay(100);
}
if (p.y >= 216 and p.y <= 231) {
kecil = "l";
Pass = Pass + kecil;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
}
if (p.x <= 113 and p.x >= 61)
{
if (p.y >= 23 and p.y <= 53) {
tft.fillRect(10, 160, 40, BOXSIZE, YELLOW);
tft.drawRect(10, 160, 40, BOXSIZE, WHITE);
delay(100);
mode = 13;
}
if (p.y >= 61 and p.y <= 75) {
kecil = "z";
Pass = Pass + kecil;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 83 and p.y <= 98) {
kecil = "x";
Pass = Pass + kecil;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
194

tft.setCursor (10, 10);


tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 104 and p.y <= 118) {
kecil = "c";
Pass = Pass + kecil;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 128 and p.y <= 144) {
kecil = "v";
Pass = Pass + kecil;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 153 and p.y <= 168) {
kecil = "b";
Pass = Pass + kecil;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 177 and p.y <= 190) {
kecil = "n";
195

}
if (p.y >= 177 and p.y <= 190) {
kecil = "n";
Pass = Pass + kecil;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 197 and p.y <= 207) {
kecil = "m";
Pass = Pass + kecil;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 222 and p.y <= 240) {
int T = Pass.length() - 1;
String Pass1 = Pass.substring(0, T);
Pass = Pass1;
ketik();
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
}
if (p.x <= 55 and p.x >= 11)
{
if (p.y >= 24 and p.y <= 49) {
tft.fillRect(10, 195, 40, 30, YELLOW);
196

{
if (p.y >= 24 and p.y <= 49) {
tft.fillRect(10, 195, 40, 30, YELLOW);
tft.drawRect(10, 195, 40, 30, WHITE);
delay(100);
mode = 14;
}
if (p.y >= 59 and p.y <= 76) {
kecil = ",";
Pass = Pass + kecil;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 82 and p.y <= 168) {
kecil = " ";
Pass = Pass + kecil;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 181 and p.y <= 196) {
kecil = ".";
Pass = Pass + kecil;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 205 and p.y <= 242) {
197

delay(100);
}
if (p.y >= 205 and p.y <= 242) {
tft.fillScreen (WHITE);
mode = 15;
delay (100);
}
}
}
}
void keybord5()
{
TSPoint p = ts.getPoint(); // get the screen touch
if ((p.z > MINPRESSURE && p.z < MAXPRESSURE)) { // if it's a
valid touch
pinMode(YP, OUTPUT); //restore the TFT control pins
pinMode(XM, OUTPUT);// for display after detecting a touch
p.x = map(p.x, TS_MINX, TS_MAXX, tft.width(), 0);
p.y = map(p.y, TS_MINY, TS_MAXY, tft.height(), 0);
if (p.x <= 250 and p.x >= 188)
{
if (p.y <= 35 and p.y >= 22) {
besar = "Q";
Pass = Pass + besar;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y <= 60 and p.y >= 45) {
besar = "W";
Pass = Pass + besar;
tft.setCursor (10, 10);
tft.setTextSize (1);
198

Pass = Pass + besar;


tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y <= 82 and p.y >= 67) {
besar = "E";
Pass = Pass + besar;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y <= 108 and p.y >= 90) {
besar = "R";
Pass = Pass + besar;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y <= 128 and p.y >= 118) {
besar = "T";
Pass = Pass + besar;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 138 and p.y <= 148) {
199

delay(100);
}
if (p.y >= 138 and p.y <= 148) {
besar = "Y";
Pass = Pass + besar;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 158 and p.y <= 171) {
besar = "U";
Pass = Pass + besar;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 183 and p.y <= 197) {
besar = "I";
Pass = Pass + besar;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 208 and p.y <= 219) {
besar = "O";
Pass = Pass + besar;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
200

tft.setCursor (10, 10);


tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 228 and p.y <= 241) {
besar = "P";
Pass = Pass + besar;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
}
if (p.x <= 168 and p.x >= 138)
{
if (p.y >= 32 and p.y <= 47) {
besar = "A";
Pass = Pass + besar;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 53 and p.y <= 71) {
besar = "S";
Pass = Pass + besar;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
201

tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 79 and p.y <= 94) {
besar = "D";
Pass = Pass + besar;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 100 and p.y <= 118) {
besar = "F";
Pass = Pass + besar;;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 122 and p.y <= 142 ) {
besar = "G";
Pass = Pass + besar;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 150 and p.y <= 164) {
besar = "H";
Pass = Pass + besar;
tft.setCursor (10, 10);
202

besar = "H";
Pass = Pass + besar;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 170 and p.y <= 187) {
besar = "J";
Pass = Pass + besar;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 192 and p.y <= 208) {
besar = "K";
Pass = Pass + besar;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 216 and p.y <= 231) {
besar = "L";
Pass = Pass + besar;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
203

tft.print(Pass);
delay(100);
}
}
if (p.x <= 113 and p.x >= 61)
{
if (p.y >= 23 and p.y <= 53) {
tft.fillRect(10, 160, 40, BOXSIZE, YELLOW);
tft.drawRect(10, 160, 40, BOXSIZE, WHITE);
delay(100);
mode = 12;
}
if (p.y >= 61 and p.y <= 75) {
besar = "Z";
Pass = Pass + besar;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 83 and p.y <= 98) {
besar = "X";
Pass = Pass + besar;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 104 and p.y <= 118) {
besar = "C";
Pass = Pass + besar;
tft.setCursor (10, 10);
tft.setTextSize (1);
204

Pass = Pass + besar;


tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 128 and p.y <= 144) {
besar = "V";
Pass = Pass + besar;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 153 and p.y <= 168) {
besar = "B";
Pass = Pass + besar;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 177 and p.y <= 190) {
besar = "N";
Pass = Pass + besar;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 197 and p.y <= 207) {
205

delay(100);
}
if (p.y >= 197 and p.y <= 207) {
besar = "M";
Pass = Pass + besar;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 222 and p.y <= 240) {
int T = Pass.length() - 1;
String Pass1 = Pass.substring(0, T);
Pass = Pass1;
ketik();
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
}
if (p.x <= 55 and p.x >= 11)
{
if (p.y >= 24 and p.y <= 49) {
tft.fillRect(10, 195, 40, 30, YELLOW);
tft.drawRect(10, 195, 40, 30, WHITE);
delay(100);
mode = 14;
}
if (p.y >= 59 and p.y <= 76) {
besar = ",";
Pass = Pass + besar;
tft.setCursor (10, 10);
206

besar = ",";
Pass = Pass + besar;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 82 and p.y <= 168) {
besar = " ";
Pass = Pass + besar;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 181 and p.y <= 196) {
besar = ".";
Pass = Pass + besar;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 205 and p.y <= 242) {
tft.fillScreen(WHITE);
mode = 15;
delay (100);
}
}
}
}
207

}
}

void keybord6()
{
TSPoint p = ts.getPoint(); // get the screen touch

if ((p.z > MINPRESSURE && p.z < MAXPRESSURE)) { // if it's a


valid touch
pinMode(YP, OUTPUT); //restore the TFT control pins
pinMode(XM, OUTPUT);// for display after detecting a touch
p.x = map(p.x, TS_MINX, TS_MAXX, tft.width(), 0);
p.y = map(p.y, TS_MINY, TS_MAXY, tft.height(), 0);
if (p.x <= 250 and p.x >= 188)
{
if (p.y <= 35 and p.y >= 22) {
num = "1";
Pass = Pass + num;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y <= 60 and p.y >= 45) {
num = "2";
Pass = Pass + num;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y <= 82 and p.y >= 67) {
num = "3";
208

}
if (p.y <= 82 and p.y >= 67) {
num = "3";
Pass = Pass + num;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y <= 108 and p.y >= 90) {
num = "4";
Pass = Pass + num;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y <= 128 and p.y >= 118) {
num = "5";
Pass = Pass + num;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 138 and p.y <= 148) {
num = "6";
Pass = Pass + num;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
209

tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 158 and p.y <= 171) {
num = "7";
Pass = Pass + num;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 188 and p.y <= 197) {
num = "8";
Pass = Pass + num;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 208 and p.y <= 219) {
num = "9";
Pass = Pass + num;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 228 and p.y <= 241) {
num = "0";
Pass = Pass + num;
210

if (p.y >= 228 and p.y <= 241) {


num = "0";
Pass = Pass + num;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
}
if (p.x <= 168 and p.x >= 138)
{
if (p.y >= 32 and p.y <= 47) {
num = "@";
Pass = Pass + num;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 53 and p.y <= 71) {
num = ":";
Pass = Pass + num;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 79 and p.y <= 94) {
num = ";";
Pass = Pass + num;
tft.setCursor (10, 10);
tft.setTextSize (1);
211

Pass = Pass + num;


tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 100 and p.y <= 118) {
num = "_";
Pass = Pass + num;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 122 and p.y <= 142 ) {
num = "-";
Pass = Pass + num;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 150 and p.y <= 164) {
num = "#";
Pass = Pass + num;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 170 and p.y <= 187) {
212

delay(100);
}
if (p.y >= 170 and p.y <= 187) {
num = "(";
Pass = Pass + num;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 192 and p.y <= 208) {
num = ")";
Pass = Pass + num;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 216 and p.y <= 231) {
num = "/";
Pass = Pass + num;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
}
if (p.x <= 113 and p.x >= 61)
{
if (p.y >= 61 and p.y <= 75) {
num = ".";
Pass = Pass + num;
213

if (p.y >= 61 and p.y <= 75) {


num = ".";
Pass = Pass + num;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 83 and p.y <= 98) {
num = ",";
Pass = Pass + num;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 104 and p.y <= 118) {
num = "?";
Pass = Pass + num;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 128 and p.y <= 144) {
num = "!";
Pass = Pass + num;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
214

tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 153 and p.y <= 168) {
num = "'";
Pass = Pass + num;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 177 and p.y <= 190) {
num = '"';
Pass = Pass + num;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 197 and p.y <= 207) {
num = "+";
Pass = Pass + num;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 222 and p.y <= 240) {
int T = Pass.length() - 1;
String Pass1 = Pass.substring(0, T);
Pass = Pass1;
215

int T = Pass.length() - 1;
String Pass1 = Pass.substring(0, T);
Pass = Pass1;
ketik();
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
}
if (p.x <= 55 and p.x >= 11)
{
if (p.y >= 24 and p.y <= 49) {
tft.fillRect(10, 195, 40, 30, YELLOW);
tft.drawRect(10, 195, 40, 30, WHITE);
delay(100);
mode = 12;
}
if (p.y >= 82 and p.y <= 168) {
num = " ";
Pass = Pass + num;
tft.setCursor (10, 10);
tft.setTextSize (1);
tft.setTextColor(BLACK);
tft.print(Pass);
delay(100);
}
if (p.y >= 205 and p.y <= 242) {
tft.fillScreen(WHITE);
mode = 15;
delay (100);
}
}
}
216

}
}
}
}

void resetwifi() {
tft.setRotation(1);
tft.fillScreen (BLACK);
for (int j = 1; j <= 3; j++) {
tft.setTextColor(WHITE);
tampil(20,20,0,&FreeSans9pt7b,"Checking for Connection");
for (int i = 1; i <= 4; i++) {
delay(500);
tft.print(".");
}
tft.fillRect(218, 10, 50, 20, BLACK);
}
}
void rstwifi(){
Blynk.begin(auth, wifi, ssid, pass);
tft.setCursor(20, 40);
tft.print ("Connected");
tft.setTextColor(WHITE);
//delay (1000);
mode = 7;
}

void coba_ts()
{
TSPoint p = ts.getPoint(); // get the screen touch

if ((p.z > MINPRESSURE && p.z < MAXPRESSURE)) { // if it's a


valid touch
pinMode(YP, OUTPUT); //restore the TFT control pins
pinMode(XM, OUTPUT);// for display after detecting a touch
217

if ((p.z > MINPRESSURE && p.z < MAXPRESSURE)) { // if it's a


valid touch
pinMode(YP, OUTPUT); //restore the TFT control pins
pinMode(XM, OUTPUT);// for display after detecting a touch
if ((p.z > MINPRESSURE && p.z < MAXPRESSURE)) {
p.x = map(p.x, TS_MINX, TS_MAXX, tft.width(), 0);
p.y = map(p.y, TS_MINY, TS_MAXY, tft.height(), 0);
Serial.print (p.x);
Serial.print (" // ");
Serial.println (p.y);
}
}
}
218

2) Program pada alat ke luar Ruangan

#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>
#define BLYNK_PRINT Serial
#define BMP_SCK (5)
#define BMP_MISO (2)
#define BMP_MOSI (4)
#define BMP_CS (0)
Adafruit_BMP280 bmp(BMP_CS, BMP_MOSI, BMP_MISO, BMP_SCK);
char auth[] = "xxxxxxx”;
char ssid[] = "xxxxxxx";
char pass[] = "xxxxxxx";
float hum, temp, pres ;
void sendSensor(){
pres = bmp.readPressure();
Blynk.virtualWrite(V3, pres); //V2 is for pressure
}
void setup(){
Serial.begin(115200);
Blynk.begin(auth, ssid, pass);
bmp.begin(0x76);
}
void loop(){
Blynk.run();
sendSensor();
}

Anda mungkin juga menyukai