Schemat blokowy regulatora trójpołożeniowego

0

Witam. Czy byłby mi ktoś w stanie pomóc w jaki sposób rozrysować na schemacie blokowym te warunki z tego kodu? :)

Kod:

#include "DHT.h"
#include "U8glib.h"
 
#define LED_INFO_PROMIENNIK 4
#define LED_INFO_GENERATOR 13
#define LED_INFO_STREFA_NIECZULOSCI 1
#define DHTPIN 2
#define DHTTYPE DHT22
 
int wilgotnosc;
float temperatura;
 
unsigned long aktualnyCzas = 0;
unsigned long zapamietanyCzas = 0;
 
int przekaznikPin = 8;
int przekaznikPin2 = 12;
int przekaznikPin3 = 7;
int przekaznikPin4 = 9;
 
int potencjometr = A0;
int wartosc = 0;
int dane[5];
int i = 0;
int srednia;
 
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE | U8G_I2C_OPT_DEV_0); // I2C(TWI)
DHT dht(DHTPIN, DHTTYPE, 6);
char str[10];
 
void setup()
{
    
    dht.begin();
    pinMode(potencjometr, INPUT);
    pinMode(przekaznikPin, OUTPUT);
    pinMode(przekaznikPin2, OUTPUT);
    pinMode(przekaznikPin3, OUTPUT);
    pinMode(przekaznikPin4, OUTPUT);
    digitalWrite(przekaznikPin, HIGH);
    digitalWrite(przekaznikPin2, HIGH);
    digitalWrite(przekaznikPin3, HIGH);
    digitalWrite(przekaznikPin4, HIGH);
    pinMode(LED_INFO_PROMIENNIK, OUTPUT);
    pinMode(LED_INFO_GENERATOR, OUTPUT);
    pinMode(LED_INFO_STREFA_NIECZULOSCI, OUTPUT);
}
 
void zmniejszanieWilgotnosci(void)
{
 
    u8g.firstPage();
    do {
        u8g.setFont(u8g_font_helvB08);
        u8g.drawStr(2, 27, "Zmniejszanie wilgotnosci!");
 
        u8g.drawStr(2, 42, "Wilgotnosc :");
        u8g.drawStr(80, 42, dtostrf(wilgotnosc, 5, 2, str));
        u8g.drawStr(110, 42, "%");
 
        u8g.drawStr(2, 57, "Wilg. zad.:");
        u8g.drawStr(80, 57, dtostrf(wartosc, 5, 2, str));
        u8g.drawStr(110, 57, "%");
    } while (u8g.nextPage());
}
 
void zwiekszanieWilgotnosci(void)
{
    u8g.firstPage();
    do {
        u8g.setFont(u8g_font_helvB08);
        u8g.drawStr(2, 27, "Zwiekszanie wilgotnosci!");
 
        u8g.drawStr(2, 42, "Wilgotnosc :");
        u8g.drawStr(80, 42, dtostrf(wilgotnosc, 5, 2, str));
        u8g.drawStr(110, 42, "%");
 
        u8g.drawStr(2, 57, "Wilg. zad.:");
        u8g.drawStr(80, 57, dtostrf(wartosc, 5, 2, str));
        u8g.drawStr(110, 57, "%");
    } while (u8g.nextPage());
}
void strefaNieczulosci(void)
{
    u8g.firstPage();
    do {
        u8g.setFont(u8g_font_helvB08);
        u8g.drawStr(2, 27, "Strefa Nieczulosci");
 
        u8g.drawStr(2, 42, "Wilgotnosc :");
        u8g.drawStr(80, 42, dtostrf(wilgotnosc, 5, 2, str));
        u8g.drawStr(110, 42, "%");
 
        u8g.drawStr(2, 57, "Wilg. zad.:");
        u8g.drawStr(80, 57, dtostrf(wartosc, 5, 2, str));
        u8g.drawStr(110, 57, "%");
    } while (u8g.nextPage());
}
 
static void wlaczPromiennik()
{
    digitalWrite(przekaznikPin2, LOW);
    digitalWrite(LED_INFO_PROMIENNIK, HIGH);
}
static void wylaczPromiennik()
{
    digitalWrite(przekaznikPin2, HIGH);
    digitalWrite(LED_INFO_PROMIENNIK, LOW);
}
static void wlaczWentylatory()
{
    digitalWrite(przekaznikPin3, LOW);
    digitalWrite(przekaznikPin4, LOW);
}
static void wylaczWentylatory()
{
    digitalWrite(przekaznikPin3, HIGH);
    digitalWrite(przekaznikPin4, HIGH);
}
 
static void wlaczGeneratorPary()
{
    digitalWrite(przekaznikPin, LOW);
    digitalWrite(LED_INFO_GENERATOR, HIGH);
}
 
static void wylaczGeneratorPary()
{
    digitalWrite(przekaznikPin, HIGH);
    digitalWrite(LED_INFO_GENERATOR, LOW);
}
static void wylaczStrefaNieczulosci()
{
    digitalWrite(LED_INFO_STREFA_NIECZULOSCI, LOW);
}
static void wlaczStrefaNieczulosci()
{
    digitalWrite(LED_INFO_STREFA_NIECZULOSCI, HIGH);
}
 
void usrednianieSkalowaniePomiaruPotencjometru()
{
    dane[i] = analogRead(A0);
    wartosc = map(dane[i], 0, 1023, 0, 100);
 
    i = (i + 1) % 5;
    srednia = 0;
 
    for (int j = 0; j < 5; j++)
        srednia += dane[j];
 
    srednia /= 5.0;


}
 

 void warunekZwiekszanieWilgotnosci()
{
    wylaczWentylatory();
    wlaczPromiennik();
    wylaczGeneratorPary();
    wylaczStrefaNieczulosci();
}
void warunekZmniejszanieWilgotnosci()
{
    wlaczWentylatory();
    wylaczPromiennik();
    wlaczGeneratorPary();
    wylaczStrefaNieczulosci();
}
void warunekStrefaNieczulosci()
{
    wylaczGeneratorPary();
    wylaczPromiennik();
    wylaczWentylatory();
    wlaczStrefaNieczulosci();
}
 
void loop()
{
 
    wilgotnosc = dht.readHumidity();
    temperatura = dht.readTemperature();
 
    odmierzanieCzasu();
    usrednianieSkalowaniePomiaruPotencjometru();
 
    if (wartosc > (wilgotnosc + 2)) {
        u8g.firstPage();
        do {
            zwiekszanieWilgotnosci();
        } while (u8g.nextPage());
 
        warunekZwiekszanieWilgotnosci();
    }
 
    else if (wartosc < (wilgotnosc - 2)) {
        do {
            zmniejszanieWilgotnosci();
        } while (u8g.nextPage());
 
        warunekZmniejszanieWilgotnosci();
    }
 
    else {
        u8g.firstPage();
        do {
            strefaNieczulosci();
        } while (u8g.nextPage());
 
        warunekStrefaNieczulosci();
    }
}

Rozpocząłem już rysowanie ale nie wiem jak "ująć" te warunki :)

title

0

Recovery - tak ale nie wiem jak te warunki poprawnie rozrysować. Nigdy nie tworzyłem schematu blokowego. Jeżeli chodzi o "nie" to nie wiem czy należy wtedy strzałkę zrobić powracającą do bloku "porównaj wartosc z wilgotność" czy inaczej to trzeba zrobić.

1 użytkowników online, w tym zalogowanych: 0, gości: 1