• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Funkcje asynchroniczne arduino (c)

Object Storage Arubacloud
+1 głos
262 wizyt
pytanie zadane 1 sierpnia 2022 w C i C++ przez mateusz45 Gaduła (3,240 p.)

Cześć. Mam problem, ponieważ mam domyślną funkcję loop i w niej mam wywołanie funkcji (meineFunktion) a po wywołaniu wyświetlanie napisu "hehe" jak zrobić aby funkcja (meineFunktion) nie opóźniała wyświetlania napisu.
Dam przykład:


void loop() {
  meineFunktion();
  Serial.println("hehe");
}

void meineFunktion()
{
   for (;;)
   {
    
   }
}

w tym przypadku hehe nigdy sie nie wyświetli ponieważ czeka na zakończenie funkcji która nigdy się nie skończy a ja chce aby hehe się wyświetliło nie zależnie od tego czy się zakończy czy nie tylko że async void nie działa w c chyba 
(problemem jest nie tylko nieskończona funkcja ale także delay)

komentarz 1 sierpnia 2022 przez VBService Ekspert (254,880 p.)
edycja 1 sierpnia 2022 przez VBService

W tym przypadku co podałeś, przy takim zapisie "hehe" się wyświetli niezależnie od pętli smiley

void loop() {
  Serial.println("hehe");
  meineFunktion();
}
 
void meineFunktion()
{
   for (;;)
   {
     
   }
}

lub

void loop() {
  meineFunktion();  
}
 
void meineFunktion()
{
   Serial.println("hehe");

   for (;;)
   {
     
   }
}

ale domyślam, że nie o to Tobie chodzi wink

 

Ja u siebie napisałem taki workaround na delay. Pomimo, że "wykonywane" jest opóźnienie (opóźnieniem jest pętla) to w trakcie w pętli cały czas jest sczytywany stan przycisku. wink

boolean delayLoop(unsigned int delayInterval) {
  unsigned long startMillis = millis();

  do {
    if (digitalRead(BUTTON_PIN) == LOW) return true;
  } while (millis() - startMillis < delayInterval);

  return false;
}

przykład zastosowania.

1 odpowiedź

0 głosów
odpowiedź 1 sierpnia 2022 przez VBService Ekspert (254,880 p.)
edycja 1 sierpnia 2022 przez VBService

Sprawdź:

 

to może tak?

void loop() {
  meineFunktion();  
}
  
void meineFunktion()
{ 
   for (;;)
   {
      if ( jakiś warunek ) {
         Serial.println("hehe");
      }
   }
}

 

P.S. Po co Tobie nieskończona pętla w funkcji meineFunktion (nawet jak to jest tylko przykład) jak pętla void loop() { ... } (arduino) jest taką pętlą, wykorzystaj ten fakt.

Podobne pytania

0 głosów
1 odpowiedź 429 wizyt
pytanie zadane 19 stycznia 2021 w C i C++ przez Marak123 Stary wyjadacz (11,190 p.)
0 głosów
1 odpowiedź 231 wizyt
pytanie zadane 11 lutego 2021 w C i C++ przez informatykod7bolesci Nowicjusz (200 p.)
0 głosów
2 odpowiedzi 313 wizyt
pytanie zadane 2 kwietnia 2020 w C i C++ przez Quba Użytkownik (870 p.)

92,759 zapytań

141,680 odpowiedzi

320,445 komentarzy

62,102 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...