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

[Arduino]Kilka zadań naraz

Object Storage Arubacloud
0 głosów
2,162 wizyt
pytanie zadane 30 sierpnia 2015 w Mikrokontrolery przez Patryk Krajewski Nałogowiec (26,170 p.)

Witam, mam taki sketch http://wklej.org/id/1786470/ w arduino i chciałbym aby czas odświeżał się co sekunde a jasność co 1/4 sekundy jak to zrobić? Pomocy!

3 odpowiedzi

+1 głos
odpowiedź 5 września 2015 przez WWOTEX Mądrala (6,200 p.)

Oto mój kod. Mam nadzieję, że pomogłem. Sam tego kodu niestety nie mam możliwości przetestować gdyż na arduino programuję tylko w gimnazjum, ale postarałem się aby był poprawny. Dodałem tam takźe jedną funkcję oraz zmienną x która jest indeksem, który u mnie oznacza ćwiartkę sekundy która w tej chwili przechodzi w pętli. Czyli moje rozwiązanie opiera się na podzieleniu sekundy na 4 części po 250 milisekund i w każdej z nich uaktualniam wartość z czujnika, a raz na 4 części po 250 milisekund uaktualniam czas gdyż wtedy następuje już przesunięcie o całą sekundę. 250*4 = 1000

Jeśli w moim kodzie znajdzie się jakiś błąd to zawsze możesz spróbować napisać to sam w oparciu o to co ci napisałem wyżej.

LiquidCrystal lcd(13,11,6,5,4,3);
int czas=0,godz,minu,sek,minu2;
int x = 1;

void setup()
{
	lcd.begin(16,2);
}

void loop()
{
	int sensorValue = analogRead(A0);
	float swiatlo = sensorValue * (100.0 / 1023.0);
	lcd.setCursor(1,2);
	
	if(x == 4){
		czas++;
		sek++;
		if(czas==60) minu++, minu2++,czas=0;
		if(minu==60) godz++,minu2=0;
	}
	
	displayData(swiatlo);
	
	x++; 
	if(x > 3){x = 1};
	delay(250);
}

void displayData(float swiatlo){
	lcd.clear();
	lcd.print("Godzina:");
	lcd.print(godz);
	lcd.print(":");
	lcd.print(minu2);
	lcd.print(":");
	lcd.print(czas);
	lcd.setCursor(0,1);
	lcd.print("Jasnosc:");
	lcd.print(swiatlo);
	lcd.print("lx");
}

 

+1 głos
odpowiedź 6 września 2015 przez WWOTEX Mądrala (6,200 p.)
przywrócone 6 września 2015 przez WWOTEX
Zapomniałem dodać, że nie da się na procesorach typu avr jakie są w arduino przeprowadzać kilku zadań jednocześnie.

To może dla być dla niektórych szokujące, ale jeśli masz np. peceta z 4 rdzeniowym cpu to może on wykonywać dokładnie 4 zadania jednocześnie. Nie więcej. A każdy avr ma tylko jeden rdzeń. W komputerze wydaje się że jest wiele różnych procesów jednocześnie, ale w rzeczywistości komputer działa tak szybko że nawet jak wykonuje wszystkie czynności po kolei to człowiek widzi to jako wszystko na raz.
komentarz 6 września 2015 przez Eryk Andrzejewski Mędrzec (164,260 p.)
Jeśli możesz to edytuj twoją pierwszą odpowiedź zamiast pisać kolejnej, niech jest tutaj jakiś porządek ;)
komentarz 6 września 2015 przez WWOTEX Mądrala (6,200 p.)
Nie wiedziałem że tak można. To się więcej nie powtórzy :D
komentarz 6 września 2015 przez Eryk Andrzejewski Mędrzec (164,260 p.)
Spoko, spoko, tylko trzeba to mówić i uczyć, żeby potem bałaganu nie było ;)
0 głosów
odpowiedź 10 listopada 2017 przez Michał Kozłowski Obywatel (1,440 p.)

Tak jak napisał shead loop pozostaw bez zmian - niech sobie ona działa :) (ta pętla)
Wielozadaniowość możesz uzyskać poprzez umiejętne wykorzystanie funkcji 
millis()

Funkcja ta zwraca stan wewnętrznego licznika (liczony w ms) zliczającego od początku włączenia platformy Arduino. 
Czyli możesz co jakiś czas pobierać tę wartość i zapisywać do zmiennej. 
Następnie porównywać tę zmienną z tym co zwróci millis() - jeżeli wartość przekroczy powiedzmy 1000ms (1s) - to co ten wskazany czas możesz coś wykonać - np. pobrać wartość z czujnika temp. i wyświetlić na wyświetlaczu.  

 

unsigned long przechwyconyCzas = millis(); 
void loop()
{

if (millis() - przechwyconyCzas >= 1000)
    {
     unsigned long przechwyconyCzas = millis(); // taki reset by znów zliczać cyklicznie czas
     //coś się dzieje fajowego :) 
    }

}


Polecam też przeczytać ten materiał (zdarzenia).
http://www.plociennik.info/index.php/informatyka/systemy-wbudowane/arduino/877-wielozadaniowosc-w-arduino

Podobne pytania

0 głosów
2 odpowiedzi 1,258 wizyt
pytanie zadane 29 września 2017 w Mikrokontrolery przez niezalogowany
0 głosów
0 odpowiedzi 385 wizyt
pytanie zadane 11 marca 2023 w Mikrokontrolery przez MichaelM Bywalec (2,520 p.)
+1 głos
1 odpowiedź 279 wizyt
pytanie zadane 9 marca 2023 w Mikrokontrolery przez MacieKap Bywalec (2,400 p.)

92,555 zapytań

141,404 odpowiedzi

319,557 komentarzy

61,940 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

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!

...