Skocz do zawartości

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


SOYER

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
Link do komentarza
Share on other sites

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
Link do komentarza
Share on other sites

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ę.

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

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😉

Link do komentarza
Share on other sites

(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
Link do komentarza
Share on other sites

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
Link do komentarza
Share on other sites

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ć:-)

Link do komentarza
Share on other sites

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...

Link do komentarza
Share on other sites

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? 

 

 

 

 

 

Link do komentarza
Share on other sites

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
Link do komentarza
Share on other sites

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ę.

Link do komentarza
Share on other sites

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...

Link do komentarza
Share on other sites

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.