• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Schemat blokowy algorytmu regulatora trójpołożeniowego.

0 głosów
43 wizyt
pytanie zadane 16 lutego w C i C++ przez avabuy Nowicjusz (210 p.)

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. Jeżeli chodzi o opcję "nie" w schemacie blokowym w if'ie to nie wiem czy należy wtedy strzałkę zrobić powracającą do bloku "porównaj wartość z wilgotność" czy inaczej to trzeba zrobić? Dziękuje za rady.

 

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 439 wizyt
pytanie zadane 5 lutego 2017 w C i C++ przez Andruh Początkujący (390 p.)
0 głosów
1 odpowiedź 52 wizyt
0 głosów
0 odpowiedzi 30 wizyt
Porady nie od parady
Zadając pytanie postaraj się o odpowiedni tytuł, kategorię oraz tagi.Tagi

64,043 zapytań

110,434 odpowiedzi

231,279 komentarzy

47,815 pasjonatów

Przeglądających: 175
Pasjonatów: 2 Gości: 173

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...