#include "SPI.h"
#include "Adafruit_GFX.h"
#include "Adafruit_ILI9341.h"
#include <Arduino.h>
#include <Adafruit_FT6206.h>
// Inisialisasi objek touchscreen dan layar TFT
Adafruit_FT6206 touchscreen = Adafruit_FT6206();
Adafruit_ILI9341 tft = Adafruit_ILI9341(5, 15); // CS dan DC
// Ukuran dan posisi tombol
#define BUTTON_WIDTH 100
#define BUTTON_HEIGHT 30
#define BUTTON_SPACING 10 // Jarak vertikal antara tombol ON dan OFF (diminimalkan)
#define BUTTON_START_Y 180 // Koordinat Y untuk tombol ON (lebih dekat ke tulisan LED)
// Pin LED
const int led = 17;
bool ledState = false; // Status LED (false = OFF, true = ON)
// Fungsi untuk menggambar tombol ON dan OFF
void drawButtons() {
// Tombol ON (di bagian bawah, lebih ke tengah)
tft.fillRect((240 - BUTTON_WIDTH) / 2, BUTTON_START_Y, BUTTON_WIDTH, BUTTON_HEIGHT, ILI9341_GREEN);
tft.setCursor((240 - BUTTON_WIDTH) / 2 + 30, BUTTON_START_Y + 5);
tft.setTextColor(ILI9341_WHITE);
tft.setTextSize(2);
tft.println("ON");
// Tombol OFF (di bawah tombol ON)
tft.fillRect((240 - BUTTON_WIDTH) / 2, BUTTON_START_Y + BUTTON_HEIGHT + BUTTON_SPACING, BUTTON_WIDTH, BUTTON_HEIGHT, ILI9341_RED);
tft.setCursor((240 - BUTTON_WIDTH) / 2 + 30, BUTTON_START_Y + BUTTON_HEIGHT + BUTTON_SPACING + 5);
tft.setTextColor(ILI9341_WHITE);
tft.setTextSize(2);
tft.println("OFF");
}
// Fungsi untuk memperbarui status LED di layar
void updateLedStatus() {
// Gambar lingkaran status LED lebih dekat ke teks "Status"
tft.fillCircle(120, 100, 30, ledState ? ILI9341_GREEN : ILI9341_DARKGREY);
// Tampilkan teks "LED" di bawah lingkaran
tft.setCursor(105, 140);
tft.setTextColor(ILI9341_BLACK);
tft.setTextSize(2);
tft.println("LED");
}
void setup() {
// Inisialisasi komunikasi serial dan layar TFT
Serial.begin(115200);
pinMode(led, OUTPUT);
// Inisialisasi layar TFT dan touchscreen
tft.begin();
if (!touchscreen.begin(40)) {
Serial.println("Touchscreen tidak terdeteksi");
while (1);
}
// Membersihkan layar
tft.fillScreen(ILI9341_WHITE);
// Tampilkan teks "Status" di bagian atas
tft.setCursor(10, 20);
tft.setTextColor(ILI9341_BLUE);
tft.setTextSize(3);
tft.println("Status");
// Tampilkan status LED awal
updateLedStatus();
// Gambar tombol ON dan OFF
drawButtons();
}
void loop() {
// Periksa input touchscreen
checkTouch();
}
// Fungsi untuk mengecek sentuhan di layar
void checkTouch() {
delay(10); // Debouncing
// Cek apakah ada sentuhan
if (!touchscreen.touched()) {
return;
}
TS_Point p = touchscreen.getPoint();
// Konversi koordinat touchscreen ke posisi layar
p.x = map(p.x, 0, 240, 240, 0);
p.y = map(p.y, 0, 320, 320, 0);
Serial.print("Touch pada: ("); Serial.print(p.x); Serial.print(", "); Serial.println(p.y);
// Cek apakah sentuhan berada di tombol ON atau OFF
if (p.y > BUTTON_START_Y && p.y < BUTTON_START_Y + BUTTON_HEIGHT + BUTTON_SPACING + BUTTON_HEIGHT) {
if (p.y < BUTTON_START_Y + BUTTON_HEIGHT) {
// Tombol ON ditekan
digitalWrite(led, HIGH);
ledState = true;
updateLedStatus();
} else if (p.y < BUTTON_START_Y + BUTTON_HEIGHT + BUTTON_SPACING + BUTTON_HEIGHT) {
// Tombol OFF ditekan
digitalWrite(led, LOW);
ledState = false;
updateLedStatus();
}
}
}