Skocz do zawartości

Zagnieżdżona pętla IF wykonująca się przez ściśle określony czas


mzmudek

Pomocna odpowiedź

Cześć, mam problem.

Chodzi o to, że nie potrafię zrobić takiego warunku, by pętla wykonywała się przez określony czas.

Schemat taki:

If (warunek)

program 1

else

if (warunek 2)

program 2 - wykonuje się przez 3 ms

else

program 3

Jest jakaś sprytna metoda na to?

Dokładniej ma to wyglądać tak:

Link do komentarza
Share on other sites

for(unsigned long x = millis(); millis() - x < 3;) {
zrup_cos():
}

Albo coś w tym stylu...

Mam coś podobnego i niestety nie działa :/

#include 
unsigned long koniec, roznica;
unsigned long start = millis();

void setup() {
 Serial.begin(115200);
 delay(500);

}

 void loop() {
    double napiecie;
    napiecie=analogRead(A0);

if (napiecie>618)
   {
     Serial.print(" U = ");
     Serial.println(napiecie);
   }
   else
   {

    if(roznica<1000)
     {

     Serial.print("t=");
     Serial.print("roznica ");
     Serial.print(roznica);
     Serial.print(" U = ");
     Serial.println(napiecie);
     koniec = millis();
     roznica = koniec-start;
     }
  }
}

Link do komentarza
Share on other sites

Podobne to nie to samo.

Zmienną start inicjalizujesz na początku, a potem sprawdzasz różnicę. Czyli pętla się będzie wykonywać ileśtam milisekund od startu programy, a nie startu pętli (zaistnienia warunku).

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

No właśnie już nie wiem. Pętla wykonuje się w nieskończoność, a nie tylko przez 3 ms. I to mnie zastanawia. Może mam jakiś błąd w myśleniu? Chodzi mi o wykonanie prostego programu działającego jak na tym schemacie.

Link do komentarza
Share on other sites

Skadnię znam.

void loop() {
    //unsigned long tp, tk, t;
    double napiecie;
   // double tz = millis();

   napiecie=analogRead(A0);
   if (napiecie>618)
   {
     //tp=micros();
     Serial.print("t=");
     //Serial.print(tp);
     Serial.print(" I = ");
     Serial.println(napiecie);
   }
   else
   for(unsigned long x = millis(); millis() - x <3;)
   {
    //start = millis();
   // if(roznica<3)
     //{

     //tp=micros();
     Serial.print("t=");
     //Serial.print(tp);
     Serial.print("roznica ");
     Serial.print(roznica);
     Serial.print(" I = ");
     Serial.println(napiecie);
     //unsigned long koniec = millis();
     //roznica = koniec-start;
     }

     }

Wybaczcie komentarze w kodzie, ale po prostu już na tyle sposobów kombinowałem, że ciężko jest usuwać wszystko na bieżąco

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.