App Inventor’da Clock bileşeniyle zamanlayıcı yapmak için bileşeni tasarıma ekleyip belirli bir zaman aralığı tanımlaman ve Clock.Timer olayında çalışacak blokları kurman gerekir. Örneğin Clock, her 1 saniyede bir Timer olayını tetikleyerek ekrandaki kalan süreyi azaltabilir.
Bu yapıda Clock zamanı doğrudan ekranda göstermez. Zaman ilerledikçe hangi işlemlerin yapılacağını bloklarla sen belirlersin.
Clock bileşeni nereden eklenir ve ne işe yarar?
Clock bileşeni, Tasarım (Designer) bölümünde Palet (Palette) alanının Sensörler (Sensors) kategorisinden eklenir. Clock, telefonun saatini kullanabilir ve belirlediğin aralıklarla Timer adlı olayı çalıştırabilir.
Clock, Kullanıcı Arayüzü (User Interface) kategorisindeki Button veya Label gibi ekranda görünen bileşenlerden farklıdır. Bu nedenle Viewer üzerinde telefon ekranına yerleşmiş bir nesne olarak görünmez. Bileşeni Viewer alanına sürüklediğinde, tasarım ekranının altındaki görünmeyen bileşenler bölümünde listelenir. İngilizce arayüzde bu alan genellikle Non-visible components adıyla gösterilir.
Clock bileşenini ekledikten sonra bloklar bölümünde Clock1.Timer olayını görürsün. Bu olay, ayarlanan zaman aralığı dolduğunda çalışır. Örneğin TimerInterval değeri 1000 yapılırsa yaklaşık olarak her 1 saniyede bir bu olay tetiklenir. Timer olayının içine Label bileşeninin yazısını değiştiren, bir resmi hareket ettiren veya bir değişkenin değerini azaltan bloklar yerleştirebilirsin.
Basit bir zamanlayıcı mantığında, her Timer olayında kalan süre değişkeninden 1 çıkarılır:
when Clock1.Timer
set kalanSure to kalanSure - 1
set LabelSure.Text to kalanSure
Bu blok mantığında kalanSure değişkeni 30 ise ilk Timer olayından sonra etikette 29, sonraki olaydan sonra 28 görünür. Değişkenin ilk değerini belirleme, zamanlayıcıyı başlatma ve sıfırlama blokları sonraki adımlarda hazırlanır.
TimerInterval, TimerEnabled ve TimerAlwaysFires nasıl çalışır?

Clock bileşeninin zamanlayıcı davranışını üç özellik belirler. TimerInterval olayların arasındaki süreyi, TimerEnabled zamanlayıcının çalışıp çalışmayacağını, TimerAlwaysFires ise uygulama ekranda görünmüyorken Timer olayının gönderilip gönderilmeyeceğini kontrol eder. Bu özelliklerin varsayılan değerleri güncel MIT App Inventor bileşen tanımında sırasıyla 1000, true ve true olarak belirtilir.
| Özellik | Ne işe yarar? | Bu örnekteki kullanım | Varsayılan değer |
|---|---|---|---|
| TimerInterval | İki Timer olayı arasındaki süreyi milisaniye cinsinden belirler. | Her 1 saniyede bir olay çalışması için 1000 kullanılır. | 1000 milisaniye |
| TimerEnabled | true olduğunda Timer olayının çalışmasına izin verir, false olduğunda zamanlayıcıyı durdurur. | Başlatırken true, durdururken false yapılır. | true |
| TimerAlwaysFires | Uygulama ekranda görünmüyorken Timer olayının çalışmasına izin verir. | Bu örnekte uygulama ekranda kullanıldığı için false olarak bırakılabilir. | true |
TimerInterval için kullanılan birim milisaniyedir. 1 saniye 1000 milisaniye olduğundan, 30 saniyelik bir zamanlayıcıda her saniyede bir işlem yapılmasını istiyorsan 1000 değerini kullanırsın. Bu ayarla 30 saniye boyunca yaklaşık 30 Timer olayı çalışır. Uygulama veya telefon başka işlemlerle meşgul olduğunda zamanlamada küçük gecikmeler oluşabileceği için olayların her zaman tam aynı anda gerçekleşmesi beklenmemelidir.
TimerEnabled özelliği zamanlayıcının çalışmasını kontrol eder. Clock1.Timer olayının tekrar tekrar çalışması için bu özellik true olmalıdır. Bir geri sayım sıfıra ulaştığında TimerEnabled değerini false yaparak yeni Timer olaylarının çalışmasını durdurabilirsin.
TimerAlwaysFires özelliği, zamanlayıcının tekrarlanma sayısını belirlemez. Uygulama ekranda görünürken TimerEnabled true olduğu sürece Timer olayı çalışabilir. TimerAlwaysFires false yapılırsa uygulama ekranda değilken olay gönderilmez; true yapılırsa bu durumda da gönderilmesine izin verilir.
30 saniyelik zamanlayıcı için ekran ve değişken nasıl hazırlanır?

Önce ekranda kalan süreyi gösterecek bir Label ve üç düğme oluştur. Label bileşeninin adını LabelSure, düğmelerin adlarını BaslatButton, DurdurButton ve SifirlaButton yapabilirsin. Label yazısını büyük harflerle KALAN SÜRE: 30 olarak ayarla. Yazının daha rahat okunması için yazı boyutunu artırman da yararlı olur.
Designer ekranında Sensors kategorisinden bir Clock bileşeni ekle. Clock, ekranda görünmeyen bir bileşendir ve eklendiğinde ekranın altındaki görünmeyen bileşenler alanında Clock1 adıyla görünür. Bu örnekte TimerInterval değerini 1000 yap. Bu değer milisaniye cinsindedir, yani 1000 milisaniye yaklaşık 1 saniyeye karşılık gelir. Clock bileşeninin başlangıçta açık gelen TimerEnabled özelliğini kapat ve TimerAlwaysFires özelliğini bu örnek için false yap. Böylece sayaç yalnızca Başlat düğmesine basıldığında çalışır.
Sürenin dolduğunu bildirmek için Designer içindeki Media kategorisinden Sound bileşenini ekle. Kısa bir ses dosyasını projenin medya alanına yükledikten sonra Sound1 bileşenini seç ve Source özelliğinde bu dosyayı belirle. Blocks ekranında ses çalmak için kullanılacak yöntem call Sound1.Play bloğudur. Sound bileşeni, kısa ses efektleri için kullanılabilir.
Blocks ekranında Variables bölümünden bir global değişken oluştur ve adını kalanSure yap. Başlangıç değerini 30 olarak belirle. Bu değişkeni, zamanlayıcının her çalışmasında değişen sayıyı saklayan bir kutu gibi düşünebilirsin. Başlangıçta kutunun içinde 30 bulunur. Her saniyede kutudaki sayı bir azalır ve Label bileşeni kutudaki yeni değeri gösterir.
Başlat, durdur ve sıfırla blokları hangi sırayla kurulur?
Her düğmenin tıklanması bir olay oluşturur. Başlatma, durdurma ve sıfırlama işlemlerini ayrı düğme olaylarının içine yerleştir. Clock bileşeninin Timer olayı ise süre boyunca düzenli olarak çalışır.
- Başlat düğmesini kur:
when BaslatButton.Clickolayının içine önceset global kalanSure to 30bloğunu yerleştir. Ardından Label metninijoinbloğuyla KALAN SÜRE: 30 biçiminde güncelle veset Clock1.TimerEnabled to truebloğuyla sayacı başlat. Süreyi her başlangıçta 30 yapmak, geri sayımın eski veya eksi bir değerden başlamasını önler. - Durdur düğmesini kur:
when DurdurButton.Clickolayında yalnızcaset Clock1.TimerEnabled to falsebloğunu kullan. Böylece mevcut sayı korunur, ancak Clock1.Timer olayı çalışmaz. - Sıfırla düğmesini kur:
when SifirlaButton.Clickolayında önce zamanlayıcıyı kapat. SonrakalanSuredeğişkenini 30 yap ve Label metnini yeniden KALAN SÜRE: 30 olarak ayarla. - Clock olayını tamamla:
when Clock1.TimerolayındakalanSuredeğerini 1 azalt. Yeni değer sıfıra eşitse TimerEnabled özelliğini kapat, Label metnini Süre doldu! yap vecall Sound1.Playbloğunu çalıştır. Değer sıfır değilse Label metnini KALAN SÜRE: sayı biçiminde güncellemeye devam et.
when Clock1.Timer
set global kalanSure to global kalanSure - 1
if global kalanSure = 0
set Clock1.TimerEnabled to false
set LabelSure.Text to "Süre doldu!"
call Sound1.Play
else
set LabelSure.Text to join "KALAN SÜRE: " global kalanSure
Bu blok mantığında Başlat düğmesine bastığında değer 30 olur, ardından Label 29, 28 ve devam eden değerleri gösterir. Sayaç 0 olduğunda Clock durur, ekranda Süre doldu! yazısı görünür ve seçtiğin ses dosyası çalar. Sound1.Play bloğunu sıfır kontrolünün dışına koyarsan ses her saniyede çalabileceği için bu sıraya dikkat et.
Zamanlayıcı nasıl test edilir ve hangi hatalar düzeltilir?
Zamanlayıcıyı test etmek için projeni AI Companion ile telefona bağla; ardından düğmeleri, etiketin güncellenmesini ve süre bitişindeki sesi kontrol et. Bağlantı açıkken Designer ve Blocks alanlarında yaptığın değişiklikleri telefonda gözlemleyebilirsin.
Telefonuna MIT AI2 Companion uygulamasını yükleyip aç. Bilgisayarda projen açıkken üst menüden Connect ve ardından AI Companion seçeneğine bas. Telefonda Scan QR code düğmesiyle bilgisayardaki QR kodunu okutabilir veya ekrandaki kodu uygulamaya yazıp Connect with code seçeneğini kullanabilirsin. Bağlantı kurulmazsa telefonun ve bilgisayarın aynı kablosuz ağa bağlı olup olmadığını kontrol et.
Uygulama telefonda açıldığında şu adımları sırayla dene:
- Başlat: Etiketin 30'dan başlayıp yaklaşık her saniye bir azaldığını gözlemle.
- Durdur: Düğmeye bastığında sayının değişmeden kaldığını kontrol et.
- Sıfırla: Etiketin yeniden 30'u gösterdiğini ve sayacın durduğunu doğrula.
- Süre bitişi: Sayım sıfıra ulaştığında etikette “Süre doldu!” yazdığını ve sesin yalnızca bu aşamada çaldığını kontrol et.
Timer olayları cihazın çalışma koşullarına göre gecikebilir. Bu nedenle saniye saniye azaltma yöntemi, geçen süreyi her durumda tam olarak ölçmek için uygun olmayabilir.
Sayı çok hızlı azalıyorsa
Clock bileşeninin TimerInterval değerine bak. Bu değer milisaniye cinsindendir; 1 yazmak bir saniye anlamına gelmez. Yaklaşık bir saniyelik aralık için değeri 1000 yap.
Sayı sıfırın altına düşüyorsa
Clock.Timer olayında süre sıfıra ulaştığında TimerEnabled özelliğinin false yapıldığını kontrol et. Ayrıca azaltma işlemini kalan süre pozitifken çalıştırmak, sayının yanlışlıkla sıfırın altına düşmesini önlemeye yardımcı olur.
Başlat eski değerden devam ediyorsa
Başlat düğmesinin bloklarını kontrol et. Her basışta yeni bir sayım istiyorsan önce kalanSure değişkenini 30 yap, etiketi güncelle ve ardından TimerEnabled değerini true olarak ayarla. Bu düzende Başlat, duraklatılan sayımı sürdürmek yerine yeni bir sayım başlatır.
Sık Sorulan Sorular
App Inventor’da TimerInterval neden 1 değil 1000 olarak ayarlanır?
TimerInterval milisaniye kullandığı için bir saniyelik aralık 1000 olarak yazılır. 1 ise bir milisaniyeyi belirtir.
TimerEnabled ile TimerAlwaysFires arasındaki fark nedir?
TimerEnabled, Timer olayının çalışıp çalışmayacağını belirler. TimerAlwaysFires ise uygulama ekranda görünmediğinde de Timer olayının çalışıp çalışmayacağını etkiler; bunun için zamanlayıcının etkin olması gerekir.
Zamanlayıcının kalan süresi neden eksiye düşer ve bu nasıl engellenir?
Kalan süre sıfıra ulaştıktan sonra Timer olayı sayıyı azaltmaya devam ederse değer eksiye düşer. Süre bittiğinde TimerEnabled değerini false yap ve azaltma işlemini pozitif süre koşuluna bağla.
Başlat düğmesine basınca geri sayımın her defasında 30’dan başlaması nasıl sağlanır?
Başlat düğmesinin olayında kalanSure değerini 30'a ayarla, etiketi yenile ve sonra zamanlayıcıyı etkinleştir.
App Inventor zamanlayıcı uygulaması AI Companion ile nasıl test edilir?
Projede Connect menüsünden AI Companion seçeneğini aç ve telefondaki Companion uygulamasıyla QR kodunu okut veya bağlantı kodunu gir. Uygulama açıldığında düğmeleri ve süre bitişini telefonda deneyebilirsin.
Testleri tamamladıktan sonra değişiklik yaptığın blokları aynı adımlarla yeniden deneyerek zamanlayıcının davranışını kontrol edebilirsin.