Skocz do zawartości

Prośba o pomoc przy przeróbce kodu na taki z wykorzystaniem wskaźników


Pomocna odpowiedź

A od czego #define i enumy?

 

enum {
  SENSOR_GRZEJNIKI=0.
  SENSOR_CWU,
  SENSOR_PIEC,
  // tu jeszcze kilka
  SENSOR_MAX
};

struct sensory czujniki[MAX_SENSORS][2];

I teraz możesz się odwoływać np. przez:

x=czujniki[SENSOR_CWU][0].temp;

albo jeszcze uprościć sobie zadanie:

#define grzejniki czujniki[SENSOR_GRZEJNIKI]
#define cwu czujniki[SENSOR_CWU]
#define piec czujniki[SENSOR_PIEC]
// i tak dalej

i teraz masz dwie możliwości: albo odwołujesz się do tablicy czujniki (np. w celu zapisania wszystkich danych na jakimś nośniku):

file.write((void *)czujniki, sizeof(czujniki));

albo tak samo jak do zmiennych, czyli:

x=piec.tempMax;

Może być?

 

  • Pomogłeś! 1
(edytowany)

No chyba ze tak...generalnie chodzilo ki tylko o to ze funkcje trzeba wywolywac dla kazdej tablicy z osobna, ale jesli to nie problem to dla ulatwienia mozna sobie nazwac to wszystko jak sie chce😉

25 minut temu, SOYER napisał:

 zgoda, ale na raz obrabiam tylko przy uruchomieniu programu, potem zależnie od odczytów, pytanie czy to jeszcze upraszczać

Teraz zalapalem...to inaczej...w funkcji sprawdzaj czy pora zapisac nowa wartosc, te ify wywal do funkcji i funkcje wywoluj co sekunde czy tam co piec...(przynaniej Ja bym tak zrobil) dodatkowo wrzuc for zeby "przeleciec" caly indeks danej tablicy..

Edytowano przez farmaceuta
1 minutę temu, farmaceuta napisał:

w funkcji sprawdzaj czy pora zapisac nowa wartosc, te ify wywal do funkcji i funkcje wywoluj co sekunde czy tam co piec

to oczywiste, że w funkcji, wywoływanej co 10min wystarczy

 

2 minuty temu, farmaceuta napisał:

wrzuc for rzeby "przeleciec" caly indeks danej tablicy..

tego nie rozumiem, po co, co ta ma zrobić, "przelecieć"?

17 minut temu, ethanak napisał:

enum {
  SENSOR_GRZEJNIKI=0.
  SENSOR_CWU,
  SENSOR_PIEC,
  // tu jeszcze kilka
  SENSOR_MAX
};

struct sensory czujniki[MAX_SENSORS][2];

I teraz możesz się odwoływać np. przez:


x=czujniki[SENSOR_CWU][0].temp;

Sprytne, już piszę.

Tak zeby for przewinela cala tablice...i wtedy sprawdzasz kazda zmienna w strukturze czy juz pora zapisac nowa wartosc...poprostu masz tylko strukture/funkcje i wywolanie funkcji...bez zadnych if'ow sprawdzajacych w glownym kodzie...no ale co kto lubi, i o ile da sie tak u Ciebie zrobic😉

(edytowany)
enum{grzejniki, cwu, piec, slonce, grunt, zew, wilg, cisnienie, LICZBA_CZUJNIKOW=8};

struct sensors{
  int temp, dzien, miesiac, rok;
};

struct sensors czujniki[LICZBA_CZUJNIKÓW][2];

void saveTemp(struct sensors *wsk, int odczytTemp){
  
  wsk->temp = odczytTemp;
  wsk->dzien = now.day();
  wsk->miesiac = now.month();
  wsk->rok = now.year();
}

//gdzieś w kodzie
if(temp_grzejniki<czujniki[grzejniki][0].temp){
 saveTemp(&czujniki[grzejniki][0].temp, temp_grzejniki);

//itd.

na razie takie coś, napiszcie czy dobrze...

13 minut temu, farmaceuta napisał:

Tak zeby for przewinela cala tablice...i wtedy sprawdzasz kazda zmienna w strukturze czy juz pora zapisac nowa wartosc...poprostu masz tylko strukture/funkcje i wywolanie funkcji...bez zadnych if'ow sprawdzajacych w glownym kodzie...no ale co kto lubi, i o ile da sie tak u Ciebie zrobic😉

no fajne, ale nie rozumiem jak mam to zapisać bez if, przecież on tę tablicę(a właściwie tylko 1/4 tablicy---temperaturę) musi porównać z nowymi odczytami, jak to zrobić?

Edytowano przez SOYER
(edytowany)

Po to wlasnie ma byc ten for/ify w funkcji..zeby na raz sprawdzic wszystko co 10min...te enumy to swietny pomysl bo po nazwach sie odwolasz w kodzie do poszczegolnych struktur, ale w funkcji to indeks i jedna tablica dla wszystkich struktur...tez nie lapie po co tablica dwu wymiarowa...🤔 (Pytam,nie wiem) zaraz Ci przedstawie jak ja bym to zrobil

 

 

Edytowano przez farmaceuta
  • Lubię! 1
5 minut temu, farmaceuta napisał:

po co tablica dwu wymiarowa

jest prosto, w pierwszym wymiarze jadę po nazwie, żeby się nie pogubić, a w drugim wymiarze mam tylko 2 komórki min i max, nie da się pogubić, myślałem jeszcze nad zagnieżdżoną strukturą, też by się dało hmm?

8 minut temu, farmaceuta napisał:

Po to wlasnie ma byc ten for/ify w funkcji..zeby na raz sprawdzic wszystko co 10min...t

teraz łapię, ty chcesz w tej funkcji mojej co 10 min sprawdzać wszystkie czujniki, to tak jak ja, tylko jeszcze nie wiem jak to ładnie napisać:-)

2 minuty temu, SOYER napisał:

jest prosto, w pierwszym wymiarze jadę po nazwie, żeby się nie pogubić, a w drugim wymiarze mam tylko 2 komórki min i max, nie da się pogubić,

4 minuty temu, SOYER napisał:

zagnieżdżoną strukturą, też by się dało hmm?

Oj to ja Ci nie pomoge...za biedny na umysle jestem😉 a po co Ci takie cos?

 

5 minut temu, SOYER napisał:

Teraz łapię, ty chcesz w tej funkcji mojej co 10 min sprawdzać wszystkie czujniki, to tak jak ja, tylko jeszcze nie wiem jak to ładnie napisać:-)

 

A no tak teraz rozumiem...ale mozesz tez zrobic zwykla tablice i dla kazdej struktury dac inna nazwe...jest to prostrze w obsludze tej tablicy w funkcji.. Te ify ktore masz teraz wrzucasz do funkcji i tyle😉 oczywiscie if obejmuje te 4 zmienne...

6 minut temu, farmaceuta napisał:

oczywiscie if obejmuje te 4 zmienne...

?? jakie 4 zmienne?

mam teraz 8 czujników dajmy na to:

enum{grzejniki, cwu, piec, slonce, grunt, zew, wilg, cisnienie, LICZBA_CZUJNIKOW};

dla każdego czujnika muszę sprawdzić po 2 zmienne:

struct sensors czujniki[LICZBA_CZUJNIKÓW][2];

to nam daje już 16 if

a jakby zrobić tablicę z wynikami pomiarów i porównać ją w pętli for z elementami tablicy w strukturze?

jest prostszy sposób? 

 

 

 

 

 

1 minutę temu, SOYER napisał:

a jakby zrobić tablicę z wynikami pomiarów i porównać ją w pętli for z elementami tablicy w strukturze?

Właśnie po to są tablice 🙂

 

  • Lubię! 1

Choć idąc tropem przykładu który niedawno mi tu pokazał @ethanak, eliminacji wszystkiego co niemożliwe, to jeśli jest spełniony if dla min, dla danego czujnika, to nie ma opcji by był spełniony dla max, to ogranicza liczbę o połowę.

Przed chwilą, farmaceuta napisał:

@SOYER Ty chcesz sprawdzac czy temp mniejsza lub wieksza i jesli tak to zapisac do danej struktury tak? Bo sie pogubilem...hehe😜

tak,

 

6 minut temu, ethanak napisał:

Właśnie po to są tablice 🙂

 

ino jak to zapisać...:-|

pomyślim...

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...