avatar
Untitled

Guest 416 24th Aug, 2023

                                           
                         // Pseudokod mikrokontrolera - przykład

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>

// Definicje pinów
const int DS18B20_1_PIN = 2;
const int DS18B20_2_PIN = 3;
const int RT1_CS_PIN = 4;
const int ACS712_PIN = A0;
const int P1_PIN = 5;
const int P2_PIN = 6;
const int ENCODER_PIN_A = 7;
const int ENCODER_PIN_B = 8;
const int ENCODER_BUTTON_PIN = 9;

// Inicjalizacja modułów
OneWire ds18b20_1(DS18B20_1_PIN);
OneWire ds18b20_2(DS18B20_2_PIN);
Adafruit_PCD8544 display = Adafruit_PCD8544(10, 11, 12, 13, A1);
Encoder encoder(ENCODER_PIN_A, ENCODER_PIN_B);
ACS712 acs712(ACS712_PIN, ACS712_20A, 5.0);

// Zmienne globalne
float currentTemperature = 0.0;
float targetTemperature = 30.0;
int pumpStatus = 0; // 0 - wyłączona, 1 - 1. bieg, 2 - 2. bieg, 3 - 3. bieg
bool pump2Status = false;

void setup() {
  // Inicjalizacja pinów
  pinMode(P1_PIN, OUTPUT);
  pinMode(P2_PIN, OUTPUT);
  pinMode(ENCODER_BUTTON_PIN, INPUT_PULLUP);
  
  // Inicjalizacja wyświetlacza
  display.begin();
  display.setContrast(50);
  display.display();
  
  // Inne inicjalizacje
  // ...
}

void loop() {
  // Odczyt temperatury z DS18B20
  float waterTemperature = readTemperature(ds18b20_1);
  float ambientTemperature = readTemperature(ds18b20_2);
  
  // Przeskalowanie temperatury na RT1
  float scaledResistance = scaleTemperatureToResistance(waterTemperature);
  setResistanceOnRT1(scaledResistance);
  
  // Odczyt prądu z ACS712
  float current = acs712.getCurrentAC();
  
  // Sterowanie pompami i wyświetlanie informacji
  if (waterTemperature < targetTemperature) {
    digitalWrite(P1_PIN, HIGH);
    if (current > 0.19) {
      digitalWrite(P2_PIN, HIGH);
      pump2Status = true;
    } else {
      digitalWrite(P2_PIN, LOW);
      pump2Status = false;
    }
  } else {
    digitalWrite(P1_PIN, LOW);
    digitalWrite(P2_PIN, LOW);
    pump2Status = false;
  }
  
  display.clearDisplay();
  display.setCursor(0, 0);
  display.print("Temp: ");
  display.println(waterTemperature);
  display.print("Target: ");
  display.println(targetTemperature);
  display.print("Pump: ");
  display.println(pumpStatus);
  display.print("Pump2: ");
  display.println(pump2Status);
  display.display();
  
  // Obsługa enkodera i przycisku
  handleEncoderAndButton();
  
  // Inne działania
  // ...
}

float readTemperature(OneWire sensor) {
  // Odczyt temperatury z czujnika DS18B20
  // ...
}

float scaleTemperatureToResistance(float temperature) {
  // Przeliczenie temperatury na rezystancję dla RT1
  // ...
}

void setResistanceOnRT1(float resistance) {
  // Ustawienie rezystancji na potencjometrze RT1
  // ...
}

void handleEncoderAndButton() {
  // Obsługa enkodera i przycisku
  // ...
}
                      
                                       
To share this paste please copy this url and send to your friends
RAW Paste Data
Recent Pastes
Ta strona używa plików cookie w celu usprawnienia i ułatwienia dostępu do serwisu oraz prowadzenia danych statystycznych. Dalsze korzystanie z tej witryny oznacza akceptację tego stanu rzeczy.
Wykorzystywanie plików Cookie
Jak wyłączyć cookies?
ROZUMIEM