Skocz do zawartości

Sposób pisania programów na rzeczy typu Arduino


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

(edytowany)

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
(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
(edytowany)
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
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

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

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