Untitled
Guest 878 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