#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Настройка ЖК-дисплея
LiquidCrystal_I2C lcd(0x27, 16, 2); // Адрес I2C может быть 0x27 или 0x3F
// Пины для кнопки и GM-счетчика
const int buttonPin = 3; // Пин для кнопки
const int gmCounterPin = 2; // Пин для GM-счетчика
// Переменные для хранения значений
volatile int count = 0; // Счетчик импульсов
unsigned long lastReadTime = 0; // Время последнего обновления экрана
bool measuring = false; // Флаг измерения
void setup() {
// Настройка ЖК-дисплея
lcd.begin(16, 2); // Укажите количество столбцов и строк
lcd.backlight(); // Включаем подсветку
// Настройка пина кнопки
pinMode(buttonPin, INPUT); // Используем внешний резистор
// Настройка пина GM-счетчика
pinMode(gmCounterPin, INPUT);
// Настройка прерывания для GM-счетчика
attachInterrupt(digitalPinToInterrupt(gmCounterPin), countPulse, RISING);
// Начальная информация на дисплее
lcd.setCursor(0, 0);
lcd.print("hi");
delay(2000);
lcd.clear();
}
void loop() {
// Проверка состояния кнопки
if (digitalRead(buttonPin) == LOW) {
measuring = !measuring; // Переключение режима измерения
delay(300); // Антидребезг
if (measuring) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("sec");
} else {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("stop");
}
}
// Обновление дисплея каждые 1000 мс, если измерение активно
if (measuring && millis() - lastReadTime >= 1000) {
lastReadTime = millis();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("sec ");
lcd.print(count);
count = 0; // Сбрасываем счетчик после отображения
}
// Вывод состояния кнопки на дисплей
if (measuring) {
lcd.setCursor(0, 1);
lcd.print("Button:pressed");
} else {
lcd.setCursor(0, 1);
lcd.print("Button:not pressed");
}
}
// Функция обработки прерывания для GM-счетчика
void countPulse() {
count++;
}