/*
============================================================
0.96" OLED SPI versiyasi (SSD1306 SPI) PIN TA’RIFLARI
============================================================
FIZIK OLED PINOUT:
1) GND → Arduino GND
2) VCC → Arduino 5V yoki 3.3V
3) D0 → SCK (SPI clock) → Arduino pin 13
4) D1 → MOSI (SPI data) → Arduino pin 11
5) RES → Reset → Arduino pin 10
6) DC → Data/Command → Arduino pin 9
7) CS → Chip Select → Arduino pin 8
OLED modeli: SPI (I2C emas!)
*/
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
// OLED SPI pinlari (SSD1306 SPI)
#define OLED_MOSI 11
#define OLED_CLK 13
#define OLED_DC 9
#define OLED_CS 8
#define OLED_RST 10
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &SPI, OLED_DC, OLED_RST, OLED_CS);
// Tugmalar
#define BTN_GREEN 3 // Sanash tugmasi (GND ga ulangan, pulldown)
#define BTN_YELLOW 4 // Reset tugmasi (INPUT_PULLUP)
#define BUZZER_PIN 2
unsigned long counter = 0;
unsigned long MAX_COUNT = 100000;
unsigned long STEP_ALERT = 25000;
bool lastGreenState = HIGH;
void setup() {
Serial.begin(9600);
Serial.println("Tizim yuklanmoqda...");
pinMode(BTN_GREEN, INPUT); // pulldown
pinMode(BTN_YELLOW, INPUT_PULLUP);
pinMode(BUZZER_PIN, OUTPUT);
SPI.begin();
if (!display.begin(SSD1306_SWITCHCAPVCC)) {
Serial.println("OLED topilmadi!");
while (true);
}
display.clearDisplay();
display.setTextColor(WHITE);
display.setTextSize(2);
display.display();
showCounter();
Serial.println("Tizim tayyor.");
}
void loop() {
bool greenState = digitalRead(BTN_GREEN);
// ======== BOSILGAN ONI (faqat bir marta +1) =========
if (lastGreenState == HIGH && greenState == LOW) {
if (counter < MAX_COUNT) {
counter++;
// *** 25000, 50000, 75000, 100000 da ogohlantirish ***
if (counter % STEP_ALERT == 0) {
tone(BUZZER_PIN, 1200, 1000);
Serial.print("Ogohlantirish → ");
Serial.println(counter);
}
}
showCounter();
delay(120);
}
lastGreenState = greenState;
// ========= RESET TUGMA =========
if (digitalRead(BTN_YELLOW) == LOW) {
counter = 0;
Serial.println("RESET → Hisob 0 ga qaytdi.");
showCounter();
delay(150);
}
}
void showCounter() {
display.clearDisplay();
display.setCursor(25, 0);
display.setTextSize(2);
display.print("Hisob:");
display.setCursor(10, 25);
display.setTextSize(3);
display.println(counter);
display.display();
Serial.print("Hisob = ");
Serial.println(counter);
}