ElapsedTime Mantığı
Bir Zaman Limiti Belirlemek Şu anki hedefimiz, motorların 3 saniye boyunca ileri gitmesini sağlamak. Bunu başarmak için, ana While Loop'umuzu düzenlememiz gerekiyor, böylece OpMode aktif olduğu sürece ve ElapsedTime zamanlayıcı 3 saniyeye eşit veya daha küçük olduğu sürece tetiklenir.
İlk olarak, zamanlayıcımızın OnBot Java'da nasıl göründüğüne bir göz atalım, 3 saniyeye eşit veya daha küçük olup olmadığını kontrol ederken:
Kopyala:
runtime.seconds() <= 3.0While Döngümüzü Değiştirmek Varsayılan şablonumuzu kullandığımızda, programımız sürücü hub'ında durdurma butonuna basana kadar çalışmaya devam eder. Ancak bu durumda, programımızın zamanlayıcı süresi dolduğunda bitmesini istiyoruz. Bu, while döngümüzü değiştirmemiz gerektiği anlamına gelir; ikinci bir koşul eklemeliyiz!
opModeIsActive() kontrolümüze ek olarak, runtime'ın 3 saniye altında olup olmadığını kontrol etmeliyiz:
Kopyala:
waitForStart();
while (opModeIsActive() && (runtime.seconds() <= 3.0)) {
}&& Java'da mantıksal bir operatördür. Bu sembol, Java'da "ve" anlamına gelir.
Part 1'de || sembolünün OnBot Java'da "VEYA" anlamına geldiğini öğrendiğimizi hatırlayın!
Artık While Döngüsü, AND bloğunun her iki koşulu doğru olduğunda aktive olacaktır.
Hızlı Kontrol! OpMode'nuzu bir deneyelim ve şu senaryoları test edelim:
Başlatma butonuna basıldıktan sonra hemen PLAY'e basıldığında ne olur?
Başlatma butonuna basıldıktan 2 saniye sonra PLAY'e basıldığında ne olur?
Başlatma butonuna basıldıktan 10 saniye sonra PLAY'e basıldığında ne olur?
Zamanlayıcıyı Sıfırlamak Başlatma ile PLAY'e basma arasında duraklama yapamamak, çoğu durumda ideal olmayabilir. Bu, robotun ne kadar yol alacağını takip etmeyi zorlaştırır ki bu, ElapsedTime'ın yardımcı olmasını istediğimiz şeyin tam tersidir.
Bunun olmasını engellemek için, zamanlayıcı OpMode aktif olduğunda sıfırlanmalıdır. Bu yüzden waitForStart(); komutuyla while döngüsü arasına şu satırı ekleyelim:
Kopyala:
waitForStart();
runtime.reset();Bu, döngümüzün öncesinde olduğu için, robotumuz Play'e basıldığında bir kez tamamlanacaktır. Ardından, While Döngüsünün kontrolü yapılacaktır.
Bu değişiklikle programınızı tekrar test edin!
Kopyala:
rightmotor.setDirection(DcMotorSimple.Direction.REVERSE);
telemetry.addData("Status", "Initialized");
telemetry.update();
// Oyun başlamadan önce bekleyin (sürücü PLAY'e basar)
waitForStart();
runtime.reset();
// Maç bitene kadar çalışmaya devam edin (sürücü STOP'a basar)
while (opModeIsActive() && (runtime.seconds() <= 3.0)) {
leftmotor.setPower(1);
rightmotor.setPower(1);
telemetry.addData("Status", "Running");
telemetry.update();
}Şimdi, zaman limitimizi farklı sürelerde değiştirdiğimizde ne olacağına göz atalım. Zaman limitini değiştirmek için (runtime.seconds() <= 3.0) içindeki 3 saniyeyi farklı sayılara değiştirebilirsiniz.
Robotun belirli hedeflere ulaşması için ne kadar zamana ihtiyacı olduğunu belirlemek için zemine farklı hedefler işaretleyebilirsiniz.
Telemetry Ekleme Önceki bölümlerde, robotun bizimle iletişim kurması için telemetry eklemeyi inceledik. Bu durumda, robotun ne kadar zaman saydığına dair bize bilgi vermesi yararlı olacaktır, böylece programımızda ayarlamalar yapabiliriz!
Anahtarımızı şu an için "Phase 1'de Geçen Saniye Sayısı" olarak adlandıralım. Bu, robotumuzun bir sonraki bölümde hangi aşamada olduğunu ayırt etmek için faydalı olacaktır.
Kopyala:
// Maç bitene kadar çalışmaya devam edin (sürücü STOP'a basar)
while (opModeIsActive() && (runtime.seconds() <= 3.0)) {
leftmotor.setPower(1);
rightmotor.setPower(1);
telemetry.addData("Status", "Running");
telemetry.addData("Number of Seconds in Phase 1", runtime.seconds());
telemetry.update();
}Last updated