Hopp! Megjelent az első multitaszk igény? Vagy meg lehet oldani a felvetést a mi soványka tudásunkkal is?
Nekem is van egy felvetésem meg egy kérdésem a #20 lecke for ciklusos megközelítésével. A setup rész elhagyásával erről beszélek.
Kód: Egész kijelölése
void loop() {
//ennyi darab impulzust kell kiadni
temp1long=tartam/(var*2);
//0..temp1long-ig szamolj, egyesevel
for (long i = 0; i == temp1long; i++) {
//hangszoro alacsonyra
digitalWrite(Speaker,LOW);
//varakozas valtas kozt
delayMicroseconds(var);
//hangszoro magasra
digitalWrite(Speaker,HIGH);
//varakozas valtas kozt
delayMicroseconds(var);
temp1long = temp1long-1;
}
//10 sec szunet
delay(10000);
//utana kezdjuk ujra
Arra rájöttem, hogy a azért néma, mert a for feltétele soha nem tud igaz lenni. Vagyis a feltételnél "nem egyenlő" (!=) kell használni, hogy a ciklusba bele tudjunk kerülni.
Ha játszunk kicsit a hangmagassággal, akkor a "var" változót kell macerálni. El lehet érni olyan értéket, ahol az ismétlődő rövid hang helyett folyamatos hang az eredmény. Miért? Ez a kulcs?
temp1long=tartam/(var*2);
Amikor az eredmény nem fér el a deklarált változó típusban, akkor típust vált, és így mindig igaz a for feltétele, így soha nem jövünk ki belőle?
Valaki segítsen megérteni.