• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Łączność bezprzewodowa 2x arduino Pro Mini + 2x RFM69CW
#11
Typedef, to pozostałość po C.
Ale może wytłumaczę od początku.

struct Nadawanie {
unsigned int PMZad ;
float WilgWew = 0;
float TempWew = 0 ;
};


Stworzyliśmy strukturę typu Nadawanie.
Teraz możemy definiować i/lub deklarować obiekty typu Nadawanie, na przykład tak:

Nadawanie DaneDoWyslania;

Możemy też zdefiniować ty strukturalny od razu definiując zmienną/zmienne tego typu:

struct Nadawanie {
unsigned int PMZad ;
float WilgWew = 0;
float TempWew = 0 ;
} DaneDoWyslania;


Można też stwożyć obiekt struktury anonimowej:

struct {
unsigned int PMZad ;
float WilgWew = 0;
float TempWew = 0 ;
} DaneDoWyslania;


Definicja obiektu dla dwóch pierwszych struktur będzie wyglądać jak wyżej napisałem:

Nadawanie DaneDoWyslania;

Ale w C będzie to wyglądać tak:

struct Nadawanie DaneDoWyslania;

I żeby się tego pozbyć, użyjemy słowa kluczowego typedef:

typedef struct Nadawanie {
unsigned int PMZad ;
float WilgWew = 0;
float TempWew = 0 ;
};


Wyłuskiwanie pól zależy, czy pracujemy na wskaźnikach, czy nie, ale to temat przy innym piwie.
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
Odpowiedź
#12
Pozwólcie, że dodam dwa słowa odnośnie typedef.
Zostawmy struktury na chwilę, samo typedef pozwala na utworzenie nowego typu, albo raczej nazwy dla nowego typu. Możemy np. poprawić czytelność programu pisząc:

Kod:
typedef int Kolorek;
Kolorek kolor_ramki;
void narysuj(Kolorek k);

W rzeczywistości nowy typ nadal będzie zwykłym int-em, ale czasem czytelniej mieć nazwany typ, a nie wszędzie tylko int.
Zupełnie inna sprawa to struktury, czy enumeracje w języku C. Chodzi o to, że nazwa struktury, albo enumeracji należy do "innej przestrzeni" nazw niż zmienne. Oznacza to że jesli utworzymy strukturę:

Kod:
struct Punkt {
  int x;
  int y;
};

To wszędzie tworząc zmienne zawsze musimy struct dodawać, czyli pisać:

Kod:
struct Punkt pt;
void narysuj_punkt(struct Punkt p);

Możemy nawet utworzyć zmienną o tej samej nazwie co struktura, czyli:

Kod:
struct Punkt Punkt;

Niektórzy takie podejście lubią, bo wyraźnie widać że typ jest strukturą, enumeracją itd, inni narzekają że trzeba dużo pisać. Tutaj z pomocą przychodzi typedef i tak samo jak dla int można przypisać nową nazwę, może też dla typu struktury:

Kod:
typedef struct Punkt PT;

Taki nowy typ będzie mógł już być używany bez powtarzania "struct", czyli:

Kod:
PT pt;
void narysuj_punkt(PT p);

Nie ma jednego zdania, która opcja jest lepsza. W wielu firmach i komercyjnych kodach widziałem używanie typedef do każdej struktury, a np. starndard kodowania dla Linuxa zabrania używania typedef - więc to chyba trochę kwestia ideologii i upodobań programistów.
 
Odpowiedź
#13
Hm to jak wykład doktora programisty. Najpierw jest wszystko proste i zrozumiałe, ale czym dalej tym niby też proste, ale już się zgubiłem. Wskaźniki dla mnie to na razie czarna magia.
Reasumując, dzięki za wytłumaczenie. Niby proste, ale pojemność, tego co pozostało między uszami, trochę mała albo strasznie leniuchuje.
Ja używam struktur do przesyłania danych pomiędzy "arduino" po UART. Gdzieś kiedyś znalazłem taki sposób i wykorzystałem go. Teraz nie zastanawiam się tylko stosuję szablon tajemnych "zaklęć" i działa. Czyli mam samochód, którym przewożę dane i nie zastanawiam się jak on działa. Nie wiem też czy czegoś nie podmienia po drodze, sprawdzam tylko czy waży tyle samo przed wysłaniem i po przyjeździe do celu.
No tak jak się wysilałem na pisaniu doszło coś nowego Smile. Odnosiłem się do wpisu Robson Kerman a tu jeszcze elvis dołożył Smile
 
Odpowiedź
#14
Typedef enum daje ten luksus, że w debugerze nie widać wartości 1, 2..itd tylko nazwę/etykietę przypisaną danej wartości. O wiele czytelniejsze jest widzieć w debugerze:
stanTransmisji = TRANSFER_END;
niż
stanTransmisji = 5;
Zwiększa się więc nie tylko czytelność kodu ale także ułatwia debugowanie.

O czym ja właściwie piszę? Debugowanie i Arduino?
Kod z delay to nie kod, to DEMO!
Możliwości sprzętowe uC trzeba wykorzystywać a nie /machać/. GPIO!
Jestem a usilnie chcę być amatorem to dwie różne rzeczy.

http://er-mik.prv.pl/projekty edw.php 
http://er-mik.prv.pl/projekty_avt.php
 
Odpowiedź
#15
Arduino to piaskownica dla tych co chcą zacząć bawić się w programowanie.
Wracając do struktury.
Dla mnie struktura to taka kartka np z danymi samochodu. Nazwa takiej kartki to np. Samochód, ale tej nazwy nie ma na tej kartce napisanej, ona jest napisana na segregatorze, w którym te kartki leżą. Tu należy dodać, że na kartce są już nazwy poszczególnych danych i są one takie same na każdej kartce, brakuje tylko ich wartości np Prędkość_maksymalna ............ (kropeczki do uzupełnienia).
Teraz wyciągam sobie taką kartkę i nadaję jej nazwę np. Fiat126P a w rubryki wpisuję jego dane.
Czyli dla mnie, zaglądając do wcześniejszych moich wypocin, nie jest, dalej w programie, ważna nazwa "Nadawanie" ale nazwa DaneDoWyslania bo ona daje mi dostęp do konkretnych danych na tej kartce. Tylko na początku muszę kompilatorowi powiedzieć z jakiego segregatora wyciągnąłem tą kartkę a właściwie powiedzieć, że stworzyłem taki segregator i wyciągnąłem z niego ileś kartek i jak je opisałem. W tym przypadku wyciągnąłem jedną kartkę i opisałem ją DaneDoWyslania.
To tak dla autora wątku, jak ja to rozumiem.
Teraz na tym przykładzie można by opisać inne przypadki jak się obchodzić można ze strukturami, ale tu już moja wiedza wyszła w szczere pole i tyle.
 
Odpowiedź
#16
Strukturę można traktować jak tablicę ale taką, w której każdy element może mieć inny typ.

Co do piaskownicy, można bawić sie łyżeczką można i łopatką.
Kod z delay to nie kod, to DEMO!
Możliwości sprzętowe uC trzeba wykorzystywać a nie /machać/. GPIO!
Jestem a usilnie chcę być amatorem to dwie różne rzeczy.

http://er-mik.prv.pl/projekty edw.php 
http://er-mik.prv.pl/projekty_avt.php
 
Odpowiedź
#17
(10-03-2020, 15:15)MERASerwis napisał(a): Strukturę można traktować jak tablicę ale taką, w której każdy element może mieć inny typ.

Co do piaskownicy, można bawić sie łyżeczką można i łopatką.
No tak w piaskownicy można bawić się i gołymi ręcami i trafić w "G" no ale cóż takie życie. 
Hm co do tablicy to myślałem, że zmienne w tablicy wywołuje się indeksem czy jakoś tak a w strukturze nie da się po indeksie.
Struktura to dobry sposób na przechowywanie różnych zmiennych w kupie i do tego można je "przeinaczać" np. na stringi, które łatwo się wysyła i odbiera.
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości