// Symulacja jednego Arduino dla dwóch ról
// Single Arduino simulation for both roles
#define BUTTON_PIN 2 // Pin przycisku / Button pin
#define LED_PIN 13 // Pin diody LED / LED pin
#define RELAY_PIN 3 // Pin przekaźnika / Relay pin
#define RELAY_FEEDBACK_PIN 4 // Pin sprzężenia zwrotnego przekaźnika / Relay feedback pin
bool ledState = false; // Stan diody LED / LED state
bool buttonPressed = false; // Czy przycisk został wciśnięty / Whether the button was pressed
bool relayState = false; // Stan przekaźnika / Relay state
bool feedbackReceived = false; // Czy sprzężenie zwrotne odebrane / Whether feedback was received
void setup() {
// Konfiguracja pinów / Configure pins
pinMode(BUTTON_PIN, INPUT); // Ustawienie przycisku jako wejścia bez podciągania / Set button as input without pull-up
pinMode(LED_PIN, OUTPUT); // Ustawienie diody LED jako wyjścia / Set LED as output
pinMode(RELAY_PIN, OUTPUT); // Ustawienie przekaźnika jako wyjścia / Set relay as output
pinMode(RELAY_FEEDBACK_PIN, INPUT); // Ustawienie sprzężenia zwrotnego jako wejścia bez podciąganiem / Set feedback as input without pull-up
// Wyłącz wszystko na start / Turn everything off at start
digitalWrite(LED_PIN, LOW); // Wyłącz diodę LED / Turn off LED
digitalWrite(RELAY_PIN, LOW); // Wyłącz przekaźnik / Turn off relay
// Inicjalizacja portu szeregowego do debugowania / Initialize serial port for debugging
Serial.begin(9600);
Serial.println("Start symulacji"); // Informacja o rozpoczęciu symulacji / Simulation start message
}
void loop() {
// Obsługa przycisku / Handle button
if (digitalRead(BUTTON_PIN) == HIGH) { // Wciśnięty przycisk (stan wysoki) / Button pressed (high state)
delay(50); // Debounce / Stabilizacja sygnału
if (digitalRead(BUTTON_PIN) == HIGH && !buttonPressed) { // Jeśli przycisk jest wciśnięty i nie był wcześniej / If button is pressed and wasn't before
buttonPressed = true; // Zaznacz, że przycisk został wciśnięty / Mark button as pressed
Serial.println("BUTTON PUSH"); // Informacja o wciśnięciu przycisku / Button press message
// Sterowanie przekaźnikiem / Relay control
relayState = !relayState; // Zmień stan przekaźnika / Toggle relay state
digitalWrite(RELAY_PIN, relayState); // Ustaw stan przekaźnika / Set relay state
Serial.println("RELAY: " + String(relayState)); // Debugowanie stanu przekaźnika / Debug relay state
// Krótka przerwa na aktywację przekaźnika / Short delay for relay activation
delay(500);
// Sprawdź sprzężenie zwrotne / Check feedback
feedbackReceived = (digitalRead(RELAY_FEEDBACK_PIN) == HIGH); // Odczytaj stan sprzężenia zwrotnego / Read feedback state
if (feedbackReceived) {
Serial.println("FEEDBACK ON"); // Informacja o sprzężeniu zwrotnym / Feedback received message
ledState = relayState; // Zmień stan diody LED zgodnie z przekaźnikiem / Set LED state according to relay
digitalWrite(LED_PIN, ledState); // Ustaw stan diody LED / Set LED state
} else {
Serial.println("FEEDBACK OFF"); // Informacja o braku sprzężenia zwrotnego / No feedback message
ledState = relayState; // Zmień stan diody LED zgodnie z przekaźnikiem / Set LED state according to relay
digitalWrite(LED_PIN, ledState); // Ustaw stan diody LED / Set LED state
}
}
}
// Obsługa zwolnienia przycisku / Handle button release
if (digitalRead(BUTTON_PIN) == LOW && buttonPressed) { // Jeśli przycisk został zwolniony / If button was released
delay(50); // Debounce / Stabilizacja sygnału
buttonPressed = false; // Zaznacz, że przycisk został zwolniony / Mark button as released
}
// Obsługa komunikacji przez konsolę / Handle communication via console
// Serial.println("Czekam na dane z konsoli..."); // Debug - oczekiwanie danych / Waiting for data
if (Serial.available() > 0) {
char command = Serial.read();
Serial.print("Otrzymano znak (ASCII): ");
Serial.println((int)command); // Wyświetla wartość ASCII odebranego znaku / Print ASCII value of received character
Serial.print("Otrzymano znak: ");
Serial.println(command);
if (command == '0') {
ledState = !ledState;
digitalWrite(LED_PIN, ledState);
Serial.println(ledState ? "LED ON" : "LED OFF");
} else if (command == '1') {
relayState = !relayState;
digitalWrite(RELAY_PIN, relayState);
Serial.println(relayState ? "Relay ON" : "Relay OFF");
} else {
Serial.println("Nieznana komenda");
}
}
}
VCC
PUSH
ON
OFF
FEEDBACK
BUTTON
H
L