#include <Adafruit_GFX.h>
#include <Adafruit_ILI9341.h>
#include <SPI.h>
#define TFT_CS 10
#define TFT_RST 9
#define TFT_DC 8
#define BUTTON_UP 5
#define BUTTON_DOWN 7
#define BUTTON_CLICK 6
#define LED1 2
#define LED2 3
#define LED3 4
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST);
int selected = 0;
bool ledState[3] = {false, false, false};
unsigned long lastButtonTime = 0;
const int debounce = 150;
void drawRow(int i){
int y = i * 60;
tft.fillRect(0, y, tft.width(), 60, i==selected ? ILI9341_DARKGREY : ILI9341_BLACK);
tft.setCursor(10, y+20);
tft.setTextSize(3); // خط أكبر وواضح
tft.setTextColor(ILI9341_WHITE);
tft.print("LED ");
tft.setTextColor(ILI9341_BLUE);
tft.print(i+1);
tft.setTextColor(ledState[i] ? ILI9341_GREEN : ILI9341_RED);
tft.print(ledState[i] ? " ON" : " OFF");
}
void setup() {
tft.begin();
tft.setRotation(1); // لضبط اتجاه الشاشة
pinMode(BUTTON_UP, INPUT_PULLUP);
pinMode(BUTTON_DOWN, INPUT_PULLUP);
pinMode(BUTTON_CLICK, INPUT_PULLUP);
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
// ارسم جميع الصفوف مرة واحدة فقط
for(int i=0;i<3;i++){
drawRow(i);
}
}
void loop() {
unsigned long now = millis();
if(digitalRead(BUTTON_UP)==LOW && now - lastButtonTime > debounce){
int oldSelected = selected;
selected = (selected + 2) % 3; // UP
drawRow(oldSelected); // امسح التحديد القديم
drawRow(selected); // حدد الصف الجديد
lastButtonTime = now;
}
if(digitalRead(BUTTON_DOWN)==LOW && now - lastButtonTime > debounce){
int oldSelected = selected;
selected = (selected + 1) % 3; // DOWN
drawRow(oldSelected);
drawRow(selected);
lastButtonTime = now;
}
if(digitalRead(BUTTON_CLICK)==LOW && now - lastButtonTime > debounce){
ledState[selected] = !ledState[selected];
digitalWrite(LED1, ledState[0]);
digitalWrite(LED2, ledState[1]);
digitalWrite(LED3, ledState[2]);
drawRow(selected); // فقط تحديث الصف المحدد
lastButtonTime = now;
}
}
Loading
ili9341-cap-touch
ili9341-cap-touch