Skocz do zawartości

Przechowywanie wartości w Scope


Albert1972

Pomocna odpowiedź

Nie bardzo rozumiem całe pytanie, ale odnosząc się do ostatniego zdania: tracisz dane na temat części dziesiętnych, ponieważ korzystasz z typu danych int, który służy do trzymania liczb całkowitych. Jeśli musisz korzystać z wartości "po przecinku" to użyj typu float. Więcej na ten temat: Kurs Arduino – #3 – UART (komunikacja z PC), zmienne

  • Lubię! 1
Link do komentarza
Share on other sites

Jednak coś nie gra. Wszystko niby ok ale kiedy wpiszę w program by podał w monitorze temperaturę z tego wpisu

float Temperatura = (sensors.getTempCByIndex(0));

dostaję jakby ostatnio zapamiętaną. To znaczy nie aktualizuje się po nowym odczycie. Cały kod wygląda tak:

#include <OneWire.h>
#include <DallasTemperature.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;
};
OneWire oneWire(6); //Podłączenie do 6
DallasTemperature sensors(&oneWire);                     //Przekazania informacji do biblioteki
const int RELAY1 = 7;                                   // Pin miernika poziomu cieczy - wejście 7
const int POMPA = 8;                                    // Pin pompy napełniającej - wyjście 8
const int POMPA2 = 9;                                   // Pin pompy mieszającej - wyjście 9
const int POMPA3 = 10;                                   // Pin pompy mineralizującej - wyjście 10
const int CHLODZENIE = 12;
int stanRELAY1 = LOW;
int stanPOMPY = LOW;
int stanPOMPY2 = LOW;
int stanPOMPY3 = LOW;
int STANCHLODZENIE = LOW;
float Temperatura = (sensors.getTempCByIndex(0));




//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) ;



  sensors.begin(); //Inicjalizacja czujnikow
  pinMode(RELAY1, INPUT_PULLUP);
  pinMode(POMPA, OUTPUT);
  pinMode(POMPA2, OUTPUT);
  pinMode(POMPA3, OUTPUT);
  pinMode(CHLODZENIE, OUTPUT);
  CzasPOMPY.delay(opoznienie);  // wstępna inicjalizacja delay
  odczytDHT.delay(15000);
  
}



void loop() {
    sensors.requestTemperatures(); //Pobranie temperatury czujnika
    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(odczytDHT.expire()){  
        // Przed upływem zadanego czasu

     { 
            odczytDHT.delay(200); // sprawdź za pół sekundy

   Serial.print("Temperatura wody: ");
   Serial.print(sensors.getTempCByIndex(0));  //Wyswietlenie informacji
   Serial.println("*C");
           }
           if (Temperatura > 4.0 && Temperatura > 1.0){
    digitalWrite(12, LOW);
    Serial.println("Chłodzenie aktywne");
  }else {
    digitalWrite(12, HIGH);
  }
             {
       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(15000);  // odnowienie opóźnienia
        }

   }
    
 }

 Pozostałości z DHT 22 zostały jako nazewnictwo w kodzie i działają

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

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.