• 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
35 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ź 396 wizyt
pytanie zadane 5 lutego 2017 w C i C++ przez Andruh Początkujący (390 p.)
0 głosów
1 odpowiedź 51 wizyt
0 głosów
0 odpowiedzi 21 wizyt
Porady nie od parady
Możesz ukryć, zamknąć lub zmodyfikować swoje pytanie, za pomocą przycisków znajdujących się pod nim. Nie krępuj się poprawić pochopnie opublikowanego pytania czy zamknąć go po uzyskaniu satysfakcjonującej odpowiedzi. Umożliwi to zachowanie porządku na forum.Przyciski pytania

61,204 zapytań

107,094 odpowiedzi

223,009 komentarzy

32,535 pasjonatów

Przeglądających: 189
Pasjonatów: 3 Gości: 186

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.

...