#include <EEPROM.h>
const int redLedPin = 5; // Пін червоного світлодіода
const int greenLedPin = 9; // Пін зеленого світлодіода
const char writePassword = 'W'; // Пароль для запису
const char readPassword = 'R'; // Пароль для зчитування
void setup() {
Serial.begin(9600);
Serial.println("Start");
pinMode(redLedPin, OUTPUT);
pinMode(greenLedPin, OUTPUT);
digitalWrite(redLedPin, HIGH); // Увімкнення червоного світлодіода
}
void loop() {
if (Serial.available() > 0) {
String input = Serial.readStringUntil('?'); // Читаємо дані з послідовного порту до символу '?'
// Розбиваємо вхідний рядок на частини: пароль, команда, значення байта
int dividerPos = input.indexOf('/');
if (dividerPos == -1) {
dividerPos = input.indexOf('\\');
}
if (dividerPos != -1 && input.length() > dividerPos + 1) {
char password = input.charAt(0);
String commandAndData = input.substring(1, dividerPos);
int byteValue = input.substring(dividerPos + 1).toInt();
if (password == writePassword) {
// Перевірка пароля для запису
handleWrite(byteValue);
}
else if (password == readPassword) {
// Перевірка пароля для зчитування
handleRead();
}
else {
// Невірний пароль
handleInvalidPassword();
}
}
}
}
void handleWrite(int byteValue) {
digitalWrite(redLedPin, LOW); // Вимкнення червоного світлодіода
digitalWrite(greenLedPin, HIGH); // Увімкнення зеленого світлодіода
EEPROM.write(0, byteValue); // Запис значення байта в EEPROM
delay(1000); // Затримка для індикації роботи
digitalWrite(greenLedPin, LOW); // Вимкнення зеленого світлодіода
}
void handleRead() {
digitalWrite(redLedPin, LOW); // Вимкнення червоного світлодіода
digitalWrite(greenLedPin, HIGH); // Увімкнення зеленого світлодіода
int byteValue = EEPROM.read(0); // Зчитування значення байта з EEPROM
delay(1000); // Затримка для індикації роботи
digitalWrite(greenLedPin, LOW); // Вимкнення зеленого світлодіода
// Передача зчитаного значення назад до комп'ютера
Serial.println(byteValue);
}
void handleInvalidPassword() {
// Інформація про неправильний пароль
Serial.println("Invalid password.");
for (int i = 0; i < 5; i++) {
// Чергове блимання червоного світлодіода
digitalWrite(redLedPin, LOW);
delay(500);
digitalWrite(redLedPin, HIGH);
delay(500);
}
}