Skocz do zawartości

Sposób pisania programów na rzeczy typu Arduino


BananWszyscy

Pomocna odpowiedź

(edytowany)

A ta decyzja rozumiem ma być odczytana w obsłudze klawiszy tak? Bo tego akurat nie rozumiem. Znaczy no trochę mnie bolała ta nakładka, nie wiem po co te całe setupy, nie setupy jak wiedziałem, że w mainie implementuje się pętlę nieskończoną, a to co w setupie jest przed pętlą wprost wklejane. I tak wiem, jak działa program w C, już nie musicie aż tak tłumaczyć 😛

Wracając do pytania: no tak, czyli to powinno wyglądać chyba tak:
while(1)
{
    obsługa_przycisków();
    obsługa_prasy();
}

a w funkcji/procedurze obsługa prasy powinno być wtedy coś takiego

void obsługa_prasy()
{
    maszyna stanów - switch(stan)
i np. case (stempel_w_gore)
ruch_stempla_w_gore();
break;
....
}

EDIT. Czy to coś takiego ma być?  Czy w ogóle podział na stany jakie mam nie ma sensu do takiego układu, no bo skoro byłby cały czas w stanie np. czekaj, to ta funkcja po prostu przylatywała do czekaj, w czekaju ify nie byłyby spełnione więc skok na koniec i od nowa obieg pętli

Edytowano przez BananWszyscy
Link do komentarza
Share on other sites

5 minut temu, daniel89 napisał:

Arduino nie zostało zrobione po to by pisać w C, można ale nie po to się kupuje tą platformę i instaluje ich soft .

Jaki soft? Soft to paszczarski edytor i builder, który doskonale sobie radzi z wiringiem, c++ i c i pozwala bez problemu na mieszanie c++ z c. A że niektórzy nie odróżniają buildera od kompilatora to ich sprawa - zawsze mogą się kiedyś nauczyć odróżniać.

4 minuty temu, BananWszyscy napisał:

Wracając do pytania: no tak, czyli to powinno wyglądać chyba tak:

Jeśli piszesz w C to owszem, coś podobnego.

Tak przy okazji - szkielet Wiringa jest wybitnie prosty:
 

int main()
{
	setup();
	while(1) loop();
}

Jeśli w pliku ino umieścisz własną funkcję main - szkielet nie będzie brany pod uwagę.

Jeśli koniecznie chcesz pisać w czystym C i korzystać z dobrodziejstw Arduino IDE - plik ino powinien być pusty, a w folderze wrzuć plik .c.

Jak mieszać C i C++ to pewnie wiesz.

Link do komentarza
Share on other sites

Ale nie myl setupu z Arduino i pętli loop z obsługą pętli while(1) w mainie() w C . Maszyna stanów to też nie jest switch , case m bo to zwykłe warunki wyboru są.

Edytowano przez daniel89
Link do komentarza
Share on other sites

(edytowany)

do daniel89:

Tak, chodzi tu o to, że w pętli while(1) wywoływana jest funkcja loop() którą sobie tam piszemy w IDE i przez to mamy pętlę nieskończoną. A za pomocą switcha maszynę można zaimplementować

Do ethanak
Tak, tylko nadal to pytanie jedno. O co chodzi z tym, że procedura/funkcja obsługa_prasy ma zależeć od decyzji operatora i w ogóle nie zależeć od funkcji obsługa_przycisków. Bo obsługa przycisków rozumiem ma zwracać właśnie ten ich stan (wciśnięcie czy co tam inne się działo). Biorąc pod uwagę, że zwracałaby ona np. tablicę z 0 i 1 na temat przycisków, to przekazując ją do obsługi_prasy na jej podstawie można decydować o wyjściu ze stanu czekania. Bo niezbyt wiem o co chodzi z tym, że nie przyciski a decyzja 😛

Edytowano przez BananWszyscy
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

10 minut temu, daniel89 napisał:

Ale nie myl setupu z Arduino i pętli loop z obsługą pętli while(1) w mainie() w C

Po pierwsze w C++. Po drugie zerknij do pliku cores/arduino/main.cpp - tam naprawdę niewiele więcej znajdziesz 🙂

@BananWszyscy Przecież moment włączenia prasy nie zależu od bieżącej konfiguracji naciśniętych/puszczonych przycisków a od ich historii.

Procedura "decyzja operatora" ma zwrócić "włącz prasę", "zatrzymaj prasę" i tak dalej, a nie te nieszczęsne przyciski. Spróbuj napisać coś takiego:

typedef enum {
  START_PRASY  = 1,
  STOP_PRASY,
  /* i co tu jeszcze chcesz */
} decyzja;

decyzja decyzja_operatora(void) {
  /* tu masz pole do popisu */
}

 

Edytowano przez ethanak
Link do komentarza
Share on other sites

7 minut temu, ethanak napisał:

Po pierwsze w C++. Po drugie zerknij do pliku cores/arduino/main.cpp - tam naprawdę niewiele więcej znajdziesz 🙂

@BananWszyscy Przecież moment włączenia prasy nie zależu od bieżącej konfiguracji naciśniętych/puszczonych przycisków a od ich historii.

Procedura "decyzja operatora" ma zwrócić "włącz prasę", "zatrzymaj prasę" i tak dalej, a nie te nieszczęsne przyciski. Spróbuj napisać coś takiego:


typedef enum {
  START_PRASY  = 1,
  STOP_PRASY,
  /* i co tu jeszcze chcesz */
} decyzja;

decyzja decyzja_operatora(void) {
  /* tu masz pole do popisu */
}

 

Dobra, wieczorem usiądę i spróbuję to przepisać 😛 potem tu wrócę i znowu będę truł tyłki

Link do komentarza
Share on other sites

ja tak tylko wtrącę jeśli ktoś był by ciekawy jak wygląda main() w arduino

int main(void)
{
	init();
	initVariant();
 
	#ifdefine(USBCON)
	USBDevice.attach();
	#endif
 
	setup();
	for(;;) {
	loop();
	if (serialEventRun) serialEventRun();
	}
	return 0;
}

Źródło: arduino a technical reference (strona 170). Całość zaczyna się od strony 168 i można sobie to podejrzeć w bezpłatnej próbce na google play.

  • Lubię! 1
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.