Menu
CoddyTech

unsigned long ile Zaman Değerleri

Coddy'nin Arduino Journey'sinin delay() Kullanmadan Zamanlama bölümünün bir parçası. Ders 2 / 18.

Bir değişken, türünün belirlediği bir sınıra kadar sayı tutabilir. Uno'daki bir int, -32768 ile 32767 arasındaki değerleri tutar. 32.8 saniye sonra millis() bu sınırı aşar ve onu tutmaya çalışan bir int, negatif bir sayıya sarar.

unsigned türünün negatif sayıları yoktur, bu nedenle iki kat daha yüksek bir değere ulaşır: bir unsigned int, 0 ile 65535 arasındaki değerleri, yani yaklaşık 65 saniyelik milisaniyeyi tutar. Yine de yeterli değildir.

Bir unsigned long, 0 ile 4,294,967,295 arasındaki değerleri tutar. Milisaniye cinsinden bu, 49 günden fazladır ve millis() işlevinin döndürdüğü tür de budur. Her zamanı bununla sakla:

unsigned long now = millis();
unsigned long startTime = 0;

Yanlış türü kullanan bir sketch yarım dakika çalışır ve sonra bozulur; bu yüzden hatayı fark etmek kolay değildir.

challenge icon

Görev

Kolay

Bu taslak zamanı saniyede bir yazdırır, ancak 32 saniye sonra negatif sayılar yazdırır. Zamanın günler boyunca doğru kalması için now değişkeninin türünü değiştir.

Hatayı görmek için Run düğmesine bas ve 33 saniyeyi geçene kadar bekle, ardından hatayı düzelt ve Check düğmesine bas.

Kendin dene

void setup() {
  Serial.begin(9600);
}

void loop() {
  int now = millis();   // bu tür, zamanı tutmak için çok küçük: değiştirin
  Serial.println(now);
  delay(1000);
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

delay() Kullanmadan Zamanlama bölümündeki tüm dersler

Kendi başına pratik yap: Arduino playground