// --- Определение пинов ---
const int buttonPlusPin = 2; // Кнопка увеличения
const int buttonMinusPin = 3; // Кнопка уменьшения
const int ledPlusPin = 8; // Светодиод 1
const int ledMinusPin = 9; // Светодиод 2
// --- Переменные ---
int counter = 0;
int pressCount1 = 0; // Счетчик нажатий 1-й кнопки
int pressCount2 = 0; // Счетчик нажатий 2-й кнопки
// --- Переменные для антидребезга ---
int buttonPlusState = HIGH;
int lastButtonPlusState = HIGH;
unsigned long lastDebounceTimePlus = 0;
const unsigned long debounceDelay = 50;
int buttonMinusState = HIGH;
int lastButtonMinusState = HIGH;
unsigned long lastDebounceTimeMinus = 0;
void setup() {
pinMode(buttonPlusPin, INPUT_PULLUP);
pinMode(buttonMinusPin, INPUT_PULLUP);
pinMode(ledPlusPin, OUTPUT);
pinMode(ledMinusPin, OUTPUT);
Serial.begin(9600);
// Выводим шапку таблицы
Serial.println("--------------------------------------------------");
Serial.println("Кнопка 1 (+) | Кнопка 2 (-) | Результат");
Serial.println("--------------------------------------------------");
}
void loop() {
// --- Обработка 1 кнопки (Плюс) ---
int readingPlus = digitalRead(buttonPlusPin);
if (readingPlus != lastButtonPlusState) {
lastDebounceTimePlus = millis();
}
if ((millis() - lastDebounceTimePlus) > debounceDelay) {
if (readingPlus != buttonPlusState) {
buttonPlusState = readingPlus;
if (buttonPlusState == LOW) {
counter++;
pressCount1++;
digitalWrite(ledPlusPin, HIGH);
printTable(); // Вывод строки в таблицу
} else {
digitalWrite(ledPlusPin, LOW);
}
}
}
lastButtonPlusState = readingPlus;
// --- Обработка 2 кнопки (Минус) ---
int readingMinus = digitalRead(buttonMinusPin);
if (readingMinus != lastButtonMinusState) {
lastDebounceTimeMinus = millis();
}
if ((millis() - lastDebounceTimeMinus) > debounceDelay) {
if (readingMinus != buttonMinusState) {
buttonMinusState = readingMinus;
if (buttonMinusState == LOW) {
counter--;
pressCount2++;
digitalWrite(ledMinusPin, HIGH);
printTable(); // Вывод строки в таблицу
} else {
digitalWrite(ledMinusPin, LOW);
}
}
}
lastButtonMinusState = readingMinus;
}
// =========================================================
// ФУНКЦИЯ ДЛЯ КРАСИВОГО ВЫВОДА В МОНИТОР ПОРТА
// =========================================================
void printTable() {
// Выводим 1-ю колонку и добавляем пробелы для ровности
Serial.print(pressCount1);
printSpaces(pressCount1);
Serial.print("| ");
// Выводим 2-ю колонку и добавляем пробелы для ровности
Serial.print(pressCount2);
printSpaces(pressCount2);
Serial.print("| ");
// Выводим итоговый результат и переходим на новую строку
Serial.println(counter);
}
// Вспомогательная функция для добавления нужного количества пробелов
void printSpaces(int number) {
// Если число однозначное - печатаем 13 пробелов, если двузначное - 12 и т.д.
int spacesNeeded = 14 - String(number).length();
for (int i = 0; i < spacesNeeded; i++) {
Serial.print(" ");
}
}