DFRobot Gravity - czujnik poziomu cieczy FS-IR02

Awatar użytkownika
klew
Posty: 8184
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

sliwkawsieci pisze: śr cze 22, 2022 9:48 pm tutaj kod do mojej klasy z nowym sensorem
Powinieneś dziedziczyć po klasie Supla::HygroMeter. Następnie powienieneś nadpisać metodę "double getHumi()", która ma zwaracać wartość pomiaru wilgotności/poziomu cieczy.
Nie używaj "guarda"/ifdefa od sensora DHT (SRC_SUPLA_SENSOR_DHT_H_) - jak dodasz swoją klasę i sensor DHT z biblioteki, to jedna nie będzie działać.
Powinieneś nadpisać też metodę "void onInit()" w której należy zainicjalizować stan GPIO (np. ustawić je na odczyt).
Nie wiem do czego służy metoda "setPinResetStatus". Jak ustawisz GPIO na odczyt i dasz im np. pullup, to powinno wystarczyć tylko czytanie stanu.
Widzimy się na Supla Offline Party vol. 2 :!:
sliwkawsieci
Posty: 18
Rejestracja: wt cze 16, 2020 8:55 pm

klew pisze: czw cze 23, 2022 7:05 am
sliwkawsieci pisze: śr cze 22, 2022 9:48 pm tutaj kod do mojej klasy z nowym sensorem
Powinieneś dziedziczyć po klasie Supla::HygroMeter. Następnie powienieneś nadpisać metodę "double getHumi()", która ma zwaracać wartość pomiaru wilgotności/poziomu cieczy.
Nie używaj "guarda"/ifdefa od sensora DHT (SRC_SUPLA_SENSOR_DHT_H_) - jak dodasz swoją klasę i sensor DHT z biblioteki, to jedna nie będzie działać.
Powinieneś nadpisać też metodę "void onInit()" w której należy zainicjalizować stan GPIO (np. ustawić je na odczyt).
Nie wiem do czego służy metoda "setPinResetStatus". Jak ustawisz GPIO na odczyt i dasz im np. pullup, to powinno wystarczyć tylko czytanie stanu.
Tyle, że ja już dziedzicze po HygroMeter :).
obraz_2022-06-24_214931033.png
obraz_2022-06-24_214931033.png (13.18 KiB) Przejrzano 172 razy
rozumiem, że chodziło Ci o to bym wykorzystał redefinicje gotowej metody getHumi() i nie musiał dodatkowo redefiniować iterateAlways(). W sumie racja, jedynie to się może przydać gdybym chciał zmienić częstotliwość odczytu.

oto mój poprawiony kod.

Kod: Zaznacz cały

#include "hygro_meter.h"
#include <supla/time.h>
#include "../io.h"

namespace Supla {
namespace Sensor {
class Poziom_wody : HygroMeter {

 public:

 Poziom_wody(int czujka100, int czujka75, int czujka50, int czujka25) {
    _czujka100 = czujka100;
    _czujka75 = czujka75;
    _czujka50 = czujka50;
    _czujka25 = czujka25;
 }

 void onInit() {
  Io::pinMode(_czujka100,INPUT_PULLUP);
  Io::pinMode(_czujka75,INPUT_PULLUP);
  Io::pinMode(_czujka50,INPUT_PULLUP);
  Io::pinMode(_czujka25,INPUT_PULLUP,);
}
 double getHumi(){
    double value = HUMIDITY_NOT_AVAILABLE;
    int stanOK = 0;
    
    int pinValue100 = Supla::Io::digitalRead(_czujka100) ;
    
    value = 0,00;
    
    if (Supla::Io::digitalRead(_czujka25) == stanOK){
        value = 25,00;
    }
    if (Supla::Io::digitalRead(_czujka50) == stanOK){
        value = 50,00;
    }
    if (Supla::Io::digitalRead(_czujka75) == stanOK){
        value = 75,00;
    }    
    if (pinValue100 == stanOK){
        value = 100,00;
    }

    return value;
 }

 protected:
  int _czujka100;
  int _czujka75;
  int _czujka50;
  int _czujka25;
  
  private:

};

};  // namespace Sensor
};  // namespace Supl
Nie używaj "guarda"/ifdefa od sensora DHT (SRC_SUPLA_SENSOR_DHT_H_) - jak dodasz swoją klasę i sensor DHT z biblioteki, to jedna nie będzie działa
dzięki za wyłapanie ifdeda z DHT. Robiłem najpierw testy dla DHT i zapomniałem wyczyścić .
Nie wiem do czego służy metoda "setPinResetStatus". Jak ustawisz GPIO na odczyt i dasz im np. pullup, to powinno wystarczyć tylko czytanie stanu.
tutaj ustawiałem sobie piny na stan wysoki bo gdy czujka zwierała obwód to stan ustawiał się na niski i był zapamiętywany więc przy kolejnej iteracji miałem zawieszony stan niski. Ale wystarczyło ustawić input_pullup (brak doświadczenia w C wychodzi).


jeszcze tylko pojawiły mi się 2 pytania.

1) czy powinienem czujnik pływakowy podłączać do płytki przez jakiś rezystor ?
2) czy przy założeniu, że pływaki większość czasu będą zanurzone w wodzie to nie lepiej(ekologiczniej) by było na starcie ustawić piny na 0 i dopiero brak wody powodowałby przepływ prądu? Domyślam się, że oszczędność na prądzie żadna, ale jak już można zaprojektować dobrze to czemu nie :)
Awatar użytkownika
klew
Posty: 8184
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

Input pull-up nie powoduje istotnego wzrostu poboru prądu. Tam jest duży rezystor i przez niego jest podciągnięty stan wysoki (napięcie 3,3 V).

Klasa wygląda ok. Tylko jeszcze zastąp przecinki kropkami przy liczbach ułamkowych, albo po prostu przypisz tam: 25, 50 itd.
Widzimy się na Supla Offline Party vol. 2 :!:
ODPOWIEDZ

Wróć do „GUI Generic”