Skocz do zawartości

Czujnik DHT 22 i millis() zamiast delay


Albert1972

Pomocna odpowiedź

Tu mam jakiś zgrzyt  bo teraz wprawdzie temperatura się wyświetla na SP ale pompa pozostaje włączona po napełnieniu i nie wyświetla się napis Zbiornik pełny.

 musiałby być jakiś potrójny if który dawałby warunek:

 Jeżeli RELAY1 = HIGH  i POMPA =  HIGH to SP wyświetla temperaturę i napis ZBIORNIK PEŁNY co 30s.

Jeżeli RELAY1 = LOW i POMPA = LOW to SP wyświetla temperaturę i napis NAPEŁNIANIE co 30s.

Jeżeli RELAY1 = LOW i POMPA = HIGH to SP wyświetla temperaturę i napis MIESZANIE co 30s.

Pytanie czy taki if jest możliwy i jaką składnie musiałby mieć.

 

Link do komentarza
Share on other sites

No chociaż z tym sobie poradziłem . 

Tak to wygląda teraz

17:27:11.829 -> Wilgotność: 96.80 %    Temperatura: 22.20 *C  - Zbiornik pełny
17:27:16.814 -> Wilgotność: 96.50 %    Temperatura: 22.20 *C  - Zbiornik pełny
17:27:21.837 -> Wilgotność: 96.30 %    Temperatura: 22.00 *C  - Zbiornik pełny
17:27:26.844 -> Wilgotność: 96.40 %    Temperatura: 22.10 *C  - Zbiornik pełny
17:27:31.859 -> Wilgotność: 96.50 %    Temperatura: 22.10 *C  - Zbiornik pełny
17:27:36.852 -> Wilgotność: 96.40 %    Temperatura: 22.10 *C  - Zbiornik pełny
17:27:41.872 -> Wilgotność: 96.20 %    Temperatura: 22.10 *C  - Napełnianie
17:27:46.867 -> Wilgotność: 96.00 %    Temperatura: 21.10 *C  - Napełnianie
17:27:51.882 -> Wilgotność: 96.10 %    Temperatura: 21.20 *C  - Napełnianie
17:27:56.896 -> Wilgotność: 96.10 %    Temperatura: 21.40 *C  - Napełnianie
17:28:01.879 -> Wilgotność: 96.00 %    Temperatura: 21.20 *C  - Napełnianie
17:28:11.903 -> Wilgotność: 95.90 %    Temperatura: 20.90 *C  - Mieszanie
17:28:16.916 -> Wilgotność: 95.90 %    Temperatura: 21.00 *C  - Mieszanie
17:28:21.922 -> Wilgotność: 95.80 %    Temperatura: 21.00 *C  - Mieszanie
17:28:26.937 -> Wilgotność: 95.80 %    Temperatura: 21.00 *C  - Mieszanie
17:28:31.949 -> Wilgotność: 95.80 %    Temperatura: 21.00 *C  - Mieszanie
 

Cytat
Cytat


#include <DHT.h>

class 
msDelay{
public: 
  inline void
  delay(unsigned long del){
    this->delay_cnt = del + millis();
  }
  inline bool 
  expire(void){
    if(this->delay_cnt > millis()) return false;
    else return true;   
  }
private:
  unsigned long delay_cnt;
};



#define DHTPIN 6                                     // przypisany pin
#define DHTTYPE DHT22                                // typ czujnika DHT
DHT dht(DHTPIN, DHTTYPE);
const int RELAY1 = 7;                                   // Pin miernika poziomu cieczy - wejście 3
const int POMPA = 8;                                    // Pin pompy napełniającej - wyjście 4
const int POMPA2 = 9;                                   // Pin pompy mieszającej - wyjście 5
const int POMPA3 = 10;                                   // Pin pompy mineralizującej - wyjście 6
int stanRELAY1 = LOW;
int stanPOMPY = LOW;
int stanPOMPY2 = LOW;
int stanPOMPY3 = LOW;

float h;
float t;


//unsigned long pracaPOMPY = 60000;
//unsigned long pracaPOMPY2 = 60000;
//unsigned long aktualnyCzas = 0;
//unsigned long zapamietanyCzasPOMPY = 0;
//unsigned long zapamietanyCzasPOMPY2 = 0; 
unsigned long opoznienie = 60000;


msDelay CzasPOMPY;
msDelay odczytDHT;  // utworzenie obiektów delay



void setup() {
 //otwarcie portu i ustawienie prędkości na 9600 bodów
  Serial.begin(9600);
//dopóki serial monitor nie jest otwarty NIE rób nic
 //while (!Serial) ;
// Testuj czujnik DHT 22 (Ciągnie z biblioteki)

  Serial.println("DHT22 test!");
  dht.begin();

  pinMode(RELAY1, INPUT_PULLUP);
  pinMode(POMPA, OUTPUT);
  pinMode(POMPA2, OUTPUT);
  pinMode(POMPA3, OUTPUT);

  CzasPOMPY.delay(opoznienie);  // wstępna inicjalizacja delay
  odczytDHT.delay(5000);
}



void loop() {
//    unsigned long aktualnyCzas = millis();            // Pobierz liczbe milisekund od startu



    
    stanRELAY1 = digitalRead(RELAY1);                   // Odczyt stanu przekaźnika miernika poziomu cieczy:
    if (stanRELAY1 == LOW) {                            // Sprawdź czy przekaźnik poziomu cieczy jest zwarty. 
                                                        // Jeśli tak  zbiornik nie jest pełny, więc ustaw stanRELAY1 na HIGH:
            digitalWrite(POMPA, stanPOMPY);
            digitalWrite(POMPA2, !stanPOMPY);           // <- (?)   
                                 
            
        if(CzasPOMPY.expire()) {
            // Przed upływem zadanego czasu

            //zapamietanyCzasPOMPY = aktualnyCzas;
            if (stanPOMPY  == LOW) stanPOMPY  = HIGH;
            else stanPOMPY  = LOW;

            Serial.print("Napełnianie");

            CzasPOMPY.delay(opoznienie); // odnowienie delaya na kolejny cykl
        }
    }else{

        digitalWrite(POMPA, HIGH);
        digitalWrite(POMPA2, HIGH);
        
    }

   // if(stanRELAY1) Serial.print("Zbiornik pełny");    
   // else Serial.print("Napełnianie");

    if(odczytDHT.expire()){  
        // Przed upływem zadanego czasu

       //  Serial.println("");
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)

        h = dht.readHumidity();    
        t = dht.readTemperature();
// check if returns are valid, if they are NaN (not a number) then something went wrong!

        if (isnan(t) || isnan(h)){ 
            Serial.println("Błędny odczyt czujnika DHT");
            odczytDHT.delay(500); // sprawdź za pół sekundy
}else{
            Serial.print("Wilgotność: "); 
            Serial.print(h);
            Serial.print(" %\t");
            Serial.print("Temperatura: "); 
            Serial.print(t);
            Serial.print(" *C ");
           }
             {
       if (stanRELAY1 == HIGH && stanPOMPY == LOW) 
         Serial.print(" - Zbiornik pełny");
           }
          {
       if (stanRELAY1 == LOW && stanPOMPY == LOW) 
          Serial.print(" - Napełnianie");
           }
        {
       if (stanRELAY1 == LOW && stanPOMPY == HIGH) 
          Serial.print(" - Mieszanie");
          Serial.println("");
            odczytDHT.delay(5000);  // odnowienie opóźnienia
        }

   }
    
 }

 

 

 

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.