Загрузка данных


// --- Определение пинов ---
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(" ");
  }
}