Aby jste neřekli, že jen tlachám, tak přiložím tento kus kódu.
Cílem kódu je vypisovat vteřiny při zaneprázdněném procesoru.
V kódu najdete na dvou místech
delay(257);
(pro všímavé 257 je prvočíslo).
To slouží jako simulace zanerázdnění procesoru. Je celkem jedno, jaké je tam číslo a je celkem jedno, jestli jsou stejné. Podstatné je, že nemá přesahovat 1sec (nebo může, ale ne pořád, musí se kompenzovat dlouhé a krátké, jinak se o prostě nedá stihnout).
Vzhledem k tomu, že kód nemá šanci stihnout začátky vtrřin, tak se alespoň pokouší stihnout nejbližší dostupné okno.
Ale o tom víc v sobotu.
V mezičase si někdo může vyzkoušet pustit kód na dlouhou dobu.
Kód: Vybrat vše
unsigned long NextTick;
void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
// initialize digital pin 13 as an output.
pinMode(13, OUTPUT);
// Dalsi krok hodin bude okamzite, poud bychom chteli, aby byl az za vterinu
// tak tady dame: NextTick=millis() + 1000;
NextTick=millis();
}
void loop() {
unsigned long MS;
MS = millis();
if ((NextTick <= MS) && ((NextTick>=1000) || ((NextTick<1000) && (MS<2000)))) {
NextTick += 1000; // další tik bude za vteřinu od předchozího
// tady se dělá co je potřeba
digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level)
delay(257); // wait for a moment (pro jistotu prvocislo)
digitalWrite(13, LOW); // turn the LED off by making the voltage LOW
Serial.print("Od startu: ");
Serial.print(MS);
Serial.print(" mili sekund, to je: ");
Serial.print(MS / 1000);
Serial.print(" sekund, nebo: ");
Serial.print(MS / 3600000); // hodiny
Serial.print(":");
Serial.print((MS % 3600000) / 60000); // minuty
Serial.print(":");
Serial.print(((MS % 3600000) % 60000) / 1000); // sekundy
Serial.println("");
} else {
delay(257); // wait for a moment (pro jistotu prvocislo)
}
}
Za pravopisné chyby v této zprávě může moje učitelka češtiny.