Facebook
From Tggg, 1 Year ago, written in C.
This paste is a reply to Sterowanie przyciskami from Sławomir - go back
Embed
Viewing differences between Sterowanie przyciskami and Re: Sterowanie przyciskami
#include    // Import biblioteki LCD_I2C
LCD_I2C lcd(0x27, 16, 2);  // Inicjalizacja obiektu lcd z adresem I2C i rozmiarem 16x2
int relay1 = 6; // Definicja pinu przekaźnika 1
int relay2 = 7; // Definicja pinu przekaźnika 2
int analogPin1 = A0; // Definicja pinu wejścia analogowego 1
int analogPin2 = A1; // Definicja pinu wejścia analogowego 2
float threshold1 = 2.5; // Inicjalizacja progu napięcia dla wejścia 1
float threshold2 = 3.0; // Inicjalizacja progu napięcia dla wejścia 2
unsigned long previousMillis = 0; // Inicjalizacja zmiennej do przechowywania poprzedniego czasu
const long interval = 5000; // Inicjalizacja stałej interwału czasowego (5 sekund)

// Definicje pinów przycisków
const int button1Pin = 8; // Definicja pinu przycisku 1
const int button2Pin = 9; // Definicja pinu przycisku 2

void setup() {
  pinMode(relay1, OUTPUT); // Inicjalizacja pinu przekaźnika 1 jako wyjścia
  pinMode(relay2, OUTPUT); // Inicjalizacja pinu przekaźnika 2 jako wyjścia
  pinMode(button1Pin, INPUT_PULLUP); // Inicjalizacja pinu przycisku 1 jako wejścia z rezystorem podciągającym
  pinMode(button2Pin, INPUT_PULLUP); // Inicjalizacja pinu przycisku 2 jako wejścia z rezystorem podciągającym
  lcd.begin();  // Inicjalizacja wyświetlacza LCD
  lcd.setCursor(0, 0); // Ustawienie kursora na pierwszej linii LCD
  lcd.print("Nap"); // Wyświetlenie tekstu na LCD
  lcd.setCursor(0, 1); // Ustawienie kursora na drugiej linii LCD
  lcd.print("Th1: "); // Wyświetlenie etykiety dla progu 1
  lcd.setCursor(8, 1); // Ustawienie kursora na drugiej linii LCD
  lcd.print("Th2: "); // Wyświetlenie etykiety dla progu 2
  lcd.backlight(); // Włączenie podświetlenia LCD
  Serial.begin(9600); // Inicjalizacja komunikacji szeregowej
}

void loop() {
  unsigned long currentMillis = millis(); // Odczyt aktualnego czasu w milisekundach
  float voltage1 = analogRead(analogPin1) * (5.0 / 1023.0); // Odczyt napięcia z wejścia analogowego 1 i przeliczenie na wolt
  float voltage2 = analogRead(analogPin2) * (5.0 / 1023.0); // Odczyt napięcia z wejścia analogowego 2 i przeliczenie na wolt
  lcd.setCursor(0, 1); // Ustawienie kursora na drugiej linii LCD
  lcd.print("        "); // Wyczyśczenie poprzednich wartości progu
  lcd.setCursor(0, 1); // Ustawienie kursora na drugiej linii LCD
  lcd.print(threshold1, 2); // Wyświetlenie aktualnego progu 1 z dwoma miejscami po przecinku
  lcd.setCursor(12, 1); // Ustawienie kursora na drugiej linii LCD
  lcd.print(threshold2, 2); // Wyświetlenie aktualnego progu 2 z dwoma miejscami po przecinku

  // Obsługa przycisków do zmiany progów
  if (digitalRead(button1Pin) == LOW) {
    threshold1 += 0.1; // Zwiększenie progu 1 o 0.1
  }
  if (digitalRead(button2Pin) == LOW) {
    threshold2 += 0.1; // Zwiększenie progu 2 o 0.1
  }
  
  // Dodatkowa obsługa przycisków do zmniejszania progów
  if (digitalRead(button1Pin) == HIGH) {
    threshold1 -= 0.1; // Zmniejszenie progu 1 o 0.1
  }
  if (digitalRead(button2Pin) == HIGH) {
    threshold2 -= 0.1; // Zmniejszenie progu 2 o 0.1
  }

  // Sterowanie przekaźnikami na podstawie napięć i progów
  if (voltage1 < threshold1) {
    digitalWrite(relay1, HIGH); // Włączenie przekaźnika 1
  } else {
    digitalWrite(relay1, LOW); // Wyłączenie przekaźnika 1
  }
  if (voltage2 < threshold2) {
    digitalWrite(relay2, HIGH); // Włączenie przekaźnika 2
  } else {
    digitalWrite(relay2, LOW); // Wyłączenie przekaźnika 2
  }
  // Wysyłanie napięć przez port szeregowy (do celów debugowania)
  Serial.print("Napięcie 1: ");
  Serial.println(voltage1, 2); // Wyświetlenie napięcia z wejścia 1 z dwoma miejscami po przecinku
  Serial.print("Napięcie 2: ");
  Serial.println(voltage2, 2); // Wyświetlenie napięcia z wejścia 2 z dwoma miejscami po przecinku

  // Kontrola interwału czasowego
  if (currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis;
  }
}