#include <Adafruit_GFX.h>
#include <Adafruit_ST7735.h>
#include <SPI.h>
// TFT pinlari (siz Wokwi diagrammada shular bilan ulandingiz)
#define TFT_CS 10
#define TFT_DC 9
#define TFT_RST 8 // agar yo'q bo'lsa -1 ishlatish mumkin
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
#define BUZZER 2
#define BTN_GREEN 3 // yashil tugma (tugma boshqa tomondan GND ga ulangan)
#define BTN_YELLOW 4 // sariq tugma
unsigned long counter = 0;
bool lastGreenState = HIGH;
void setup() {
Serial.begin(9600);
Serial.println("Start setup...");
pinMode(BUZZER, OUTPUT);
pinMode(BTN_GREEN, INPUT); // pullup bilan ishlatish tavsiya etiladi
pinMode(BTN_YELLOW, INPUT_PULLUP);
// SPI boshlash (ba'zi holatlarda kerak)
SPI.begin();
// ST7735 ekranini ishga tushirish
Serial.println("Init TFT...");
tft.initR(INITR_BLACKTAB); // INITR_BLACKTAB yoki INITR_GREENTAB loyihangizga qarab
tft.setRotation(1); // 0..3
tft.fillScreen(ST77XX_BLACK);
// matn va rangi
tft.setTextWrap(false);
tft.setTextSize(2);
tft.setTextColor(ST77XX_GREEN, ST77XX_BLACK);
displayCounter();
Serial.println("Setup done.");
}
void loop() {
bool greenState = digitalRead(BTN_GREEN);
// tugma bosilishi aniqlash (pullup dan LOW bo'lganda bosilgan)
if (lastGreenState == HIGH && greenState == LOW) {
counter++;
if (counter >= 25001) {
tone(BUZZER, 1000, 400);
delay(400);
counter = 0;
}
displayCounter();
delay(150); // debounce
}
lastGreenState = greenState;
if (digitalRead(BTN_YELLOW) == LOW) { // reset tugma (pullup bilan LOW bo'ladi)
counter = 0;
displayCounter();
delay(150);
}
}
void displayCounter() {
// Ekrandan oldingi qiymatni tozalash: to'liq soha
tft.fillRect(0, 40, 128, 80, ST77XX_BLACK);
tft.setCursor(6, 50);
tft.setTextSize(2);
tft.print("Cnt:");
tft.setCursor(6, 75);
tft.setTextSize(2);
tft.println(counter);
// Serial orqali ham chiqaramiz — Wokwi diagnostika uchun
Serial.print("Counter = ");
Serial.println(counter);
}