//2 Przekaźniki + 3 Diody - działa OK.
const int pinP1 = 2; // Pin dla przekaźnika P1 - obniżanie poziomu O2
const int pinP2 = 3; // Pin dla przekaźnika P2 - podnoszenie poziomu O2
const int pinD1 = 6; // Pin dla diody D1 (niebieska) - ADC<=513
const int pinD2 = 7; // Pin dla diody D2 (czerwona) - ADC>513
const int pinD3 = 8; // Pin dla diody D3 (zielona) - 513-(H/2)<=ADC>=513+(H/2)
const unsigned long czasT1 = 500; // Czas T1 w milisekundach (3 sekundy)
const unsigned long czasT2 = 5000; // Czas T2 w milisekundach (3 sekundy)
int O2 = 513; // Nastawy poziomu docelowego O2
const int pinCzujnik = A0; // Pin złącza analogowego A0
const int pinTlen = A1; // Pin złącza analogowego A1
const int H = 200; // Pole histerezy
unsigned long czasOstatniejZmiany = 0; // Czas ostatniej zmiany stanu
bool ostatniStanNiski = true; // Początkowy stan - Niski
void setup() {
pinMode(pinP1, OUTPUT);
pinMode(pinP2, OUTPUT);
pinMode(pinD1, OUTPUT);
pinMode(pinD2, OUTPUT);
pinMode(pinD3, OUTPUT);
Serial.begin(9600);
}
void loop() {
unsigned long teraz = millis(); // Aktualny czas
// Wartość odczytu z czujnika
int wartoscADC = analogRead(pinCzujnik);
int wartoscADCtlen = analogRead(pinTlen);
// Sprawdź, czy minął czas T1+T2 od ostatniej zmiany stanu
if (teraz - czasOstatniejZmiany >= czasT1 + czasT2) {
// Aktualizacja stanu na podstawie odczytu z czujnika
//Serial.print("ADC: ");
//Serial.println(wartoscADC);
// W zależności od aktualnego odczytu, aktywuj odpowiedni przekaźnik przez czas T1
if (wartoscADC > wartoscADCtlen + H/2) {
digitalWrite(pinP1, HIGH); // Aktywuj przekaźnik P1
Serial.println("Aktywowano P1 - Obniżanie O2");
} else if (wartoscADC < wartoscADCtlen - H/2) {
digitalWrite(pinP2, HIGH); // Aktywuj przekaźnik P2
Serial.println("Aktywowano P2 - Podnoszenie O2");
}
czasOstatniejZmiany = teraz; // Zapisz czas aktywacji przekaźnika
}
// Sprawdź, czy minął czas T1 od ostatniej zmiany stanu
else if (teraz - czasOstatniejZmiany >= czasT1) {
// Dezaktywacja przekaźnika P1 lub P2 po czasie T1
if (ostatniStanNiski) {
digitalWrite(pinP1, LOW); // Dezaktywuj przekaźnik P1
} else {
digitalWrite(pinP2, LOW); // Dezaktywuj przekaźnik P2
}
ostatniStanNiski = !ostatniStanNiski; // Zmiana stanu
}
// Sterowanie diodami w zależności od wartości odczytu z czujnika
if (wartoscADC <= wartoscADCtlen - H/2) {
digitalWrite(pinD1, HIGH); // Zapalanie diody D1
digitalWrite(pinD2, LOW); // Gaszenie diody D2
digitalWrite(pinD3, LOW); // Gaszenie diody D3
Serial.println("Załączono D6 - Niebieska");
} else if (wartoscADC >= wartoscADCtlen + H/2) {
digitalWrite(pinD1, LOW); // Gaszenie diody D1
digitalWrite(pinD2, HIGH); // Zapalanie diody D2
digitalWrite(pinD3, LOW); // Gaszenie diody D3
Serial.println("Załączono D - Czerwona");
} else {
digitalWrite(pinD1, LOW); // Gaszenie diody D1
digitalWrite(pinD2, LOW); // Gaszenie diody D2
digitalWrite(pinD3, HIGH); // Zapalanie diody D3
Serial.println("Załączono D - Zielona");
}
delay(1000); // Opóźnienie 1 sekundy
}