Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 3 gru 2024, o 20:02


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 3 ] 
Autor Wiadomość
PostNapisane: 11 gru 2017, o 15:53 
Offline
Nowy

Dołączył(a): 11 gru 2017
Posty: 5
Lokalizacja: Szczecin
Pomógł: 0

Cześć Wam!

Jestem tutaj bardzo nowy i do tej pory dłubałem swoje projekty w zaciszu domowym jednak doszedłem do momentu gdzie muszę zaczerpnąć wiedzy bardziej doświadczonych osób - stąd liczę na pomoc ;)

Od jakiegoś czasu uczę się języka C++, a ponieważ najlepszą nauką jest praktyka, uczę się tego języka budująć własna stację meteo. Zamysł jest taki że baza posiada własne czujniki oraz zbiera odczyty z mniejszych stellit. Wszystko leci przez MQTT do openHAB oraz jest dostępne przez WWW.

-1x Baza to ESP8266 + czujniki BME 180 i DHT + ekran OLED + komunikacja czyli nRF24L01.
-3x Satelity wewnętrzne: ATtinny 85 + DHT + nRF24L01 + zasilanie bateryjne
-1x Satelita zewnętrzny to ATmega 168 + BME 180 nRFL01 + Czujnik pyłu + czujnik opadów deszczu. W przyszłości jeszcze odczyt kierunku i siły wiatru oraz poziomu opadów. zasilanie z sieci a docelowo bateria + panele słoneczne.

Pytanie mam do Was ws. przetwarzania zebranych danych. Na początku wymyśliłem sobie to tak, że stworzyłem strukturę danych w których miałem szablon odebranych informacji czyli zmienne na odczyty z czujników. z samej struktury zrobiłem sobie dynamiczną listę obiektów stworzonej struktury zwiększającą się w zależności od ilości urządzeń podpiętych. Dało mi to elastyczność w dodawaniu nowych satelitów. Jednak natrafiłem na pewien problem. Mianowicie chodzi o ilość zmiennych potrzebnych do przetworzenia danych w strukturze:

I tak:

Dla bazy - 4 zmienne - wilgotność, temperatura, ciśnienie, nazwa
dla wew satelity - wilgotność, temperatura, stan baterii, nazwa
dla zew. satelity - wilgotność, temperatura, ciśnienie, informacja o tym czy pada deszcz, odczyt pyłów, nazwa

komunikacja między satelitami a bazą idzie w paśmie 2,4Ghz a między bazą a openHAB po WiFi.

Pomyślałem że jest to świetny sposób aby wykorzystać polimorfizm czyli stworzyć klasę czujnik i dziedziczone od niej klasy satelita zewn. i satelita wew z odpowiednią ilością zmiennych w klasie zwiększającą funkcjonalność klasy zewnętrznej - ewentualnie chyba mogą też dziedziczyć struktury.

W takim przypadku pytanie mam do znawców C++:

1. Czy faktycznie tak można to wykorzystać i jest to optymalny sposób?
2. W jaki sposób zrealizować później dynamiczną listę obiektów? Do obiektu klasy głównej czy dziedziczącej?
3. Czy jak mam klasę z różnymi metodami to jak tworzę sobie nowe obiekty tej klasy to kopiowane są również metody czy tylko zmienne wewnątrz klasy? - Zastanawiam się pod względem zużycia pamięci ram przy alokowaniu przestrzeni dla nowych obiektów klas.
4. Czy da się w ogóle utworzone zmienne w nowych obiektach klas lub cały klasy zapisać do pamięci EPROM? Chciałbym aby dodane urządzenia były zapamiętane w przypadku utraty np. zasilania na bazie.

Pewnie są to pytania laika ale od kilku dni głowie się jak to rozwiązać projektowo. A może macie jakieś lepsze rozwiązanie?

Pozdrawiam!
G.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 gru 2017, o 20:00 
Offline
Użytkownik

Dołączył(a): 02 cze 2014
Posty: 68
Pomógł: 4

Ad1. Czemu nie, jeśli nie braknie pamięci, to jak najbardziej, po to są takie udogodnienia żeby z nich korzystać, a nie dążyć do tego by ram był wypełniony zerami( w avr będzie go niestety szybko zjadało ze względu na vptr który jest umieszczany w ram, a nie rom)
Ad2. Tutaj musisz niestety podjąć decyzje odnośnie interfejsu jaki będą implementowały klasy dziedziczące, bo żeby później mieć listę obiektów potrzebujesz wskaźnik na klasę główną, bo inaczej bez rzutowania w dół nie wywołasz metod, które zostały później dodane.
Ad3. Ram zajmują zmienne plus vptr jeśli jest polimorfizm. Każda metoda polimorficzna będzie wywoływana z tablicy vptr, czyli im więcej metod tym większy obiekt.
Ad4. Obiekty możesz serializować, jeśli nie są one zbyt skomplikowane wystarczy użyć memcpy czy coś podobnego.
Ogólnie to jednak na attiny i atmega za dużo nie poszalejesz obiektowo, z szablonami już prędzej, ale kto by je tam rozumiał.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 gru 2017, o 10:37 
Offline
Nowy

Dołączył(a): 11 gru 2017
Posty: 5
Lokalizacja: Szczecin
Pomógł: 0

Dzięki koledzy za odpowiedź.

Kurcze dwie odpowiedzi i dwa skrajnie różne podejścia ;) W weekend siądę do kodu i wrzuce tu na forum to może razem pokombinujemy ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 3 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO