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 (13.18 KiB) Przejrzano 176 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