#include <Arduino.h>
// ПИНЫ
int volLeds[] = {PA5, PA6, PA7, PA8, PB10, PB11};
int freqLeds[] = {PB2, PB3, PB4, PB5, PB6, PB7};
int ledMode = PA12;
int btnVolUp = PA0;
int btnVolDown = PA1;
int btnFreq = PA2;
int btnType = PA3;
// СОСТОЯНИЯ
int volCount = 0;
int freqIndex = 0;
int typeState = 0; // 0 - горит, 1 - мигает
// ПЕРЕМЕННЫЕ ДЛЯ ЗАЖАТИЯ КНОПКИ
unsigned long pressTime = 0;
bool isPressed = false;
bool longPressDone = false;
void setup() {
Serial.begin(115200);
for (int i = 0; i < 6; i++) {
pinMode(volLeds[i], OUTPUT);
pinMode(freqLeds[i], OUTPUT);
digitalWrite(volLeds[i], LOW);
digitalWrite(freqLeds[i], LOW);
}
pinMode(ledMode, OUTPUT);
pinMode(btnVolUp, INPUT_PULLUP);
pinMode(btnVolDown, INPUT_PULLUP);
pinMode(btnFreq, INPUT_PULLUP);
pinMode(btnType, INPUT_PULLUP);
digitalWrite(freqLeds[0], HIGH); // начальное состояние частоты
Serial.println("Система готова.");
}
void loop() {
// 1. ГРОМКОСТЬ +
if (digitalRead(btnVolUp) == LOW) {
if (volCount < 6) volCount++;
for (int i = 0; i < 6; i++) digitalWrite(volLeds[i], i < volCount);
delay(200);
}
// 2. ГРОМКОСТЬ -
if (digitalRead(btnVolDown) == LOW) {
if (volCount > 0) volCount--;
for (int i = 0; i < 6; i++) digitalWrite(volLeds[i], i < volCount);
delay(200);
}
// 3. ЧАСТОТА
if (digitalRead(btnFreq) == LOW) {
freqIndex++;
if (freqIndex > 5) freqIndex = 0;
for (int i = 0; i < 6; i++) digitalWrite(freqLeds[i], i == freqIndex);
delay(200);
}
// 4. КНОПКА ПАЦИЕНТА (С ОПРЕДЕЛЕНИЕМ ЗАЖАТИЯ)
if (digitalRead(btnType) == LOW) {
if (!isPressed) {
pressTime = millis();
isPressed = true;
longPressDone = false;
}
if (!longPressDone && (millis() - pressTime >= 5000)) {
typeState = !typeState;
Serial.println("--- РЕЖИМ СИГНАЛА ИЗМЕНЕН ---");
longPressDone = true;
}
}
else {
if (isPressed) {
if (!longPressDone) {
Serial.println("Активирована кнопка пациента. Сохранение данных аудиограммы..");
}
isPressed = false;
}
}
// === ЛОГИКА РАБОТЫ MODE LED ===
if (typeState == 0) {
digitalWrite(ledMode, HIGH);
} else {
digitalWrite(ledMode, (millis() / 300) % 2 == 0 ? HIGH : LOW);
}
// === ЗАЩИТА ОТ ПОБОЧНОГО СРАБАТЫВАНИЯ ===
delay(10);
}