setup() vs robotInit() - Arduino'dan Probot'a Geçiş¶
Arduino'da kod yazıyorsanız setup()
ve loop()
fonksiyonlarına alışkınsınızdır. Probot'ta ise biraz farklı bir yaklaşım var. Hem benzerlikler hem de önemli farklar bulunuyor.
Temel Karşılaştırma¶
Arduino Yaklaşımı¶
void setup() {
Serial.begin(9600);
pinMode(LED_BUILTIN, OUTPUT);
// Motor başlatma vs.
// Bir kez çalışır, robot açılırken
}
void loop() {
// Sürekli tekrar eder
digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
}
Probot Yaklaşımı¶
void robotInit() {
Serial.begin(115200);
pinMode(LED_BUILTIN, OUTPUT);
// Motor başlatma vs.
// Robot "enable" olduğunda bir kez çalışır
}
void teleopLoop() {
// Sadece teleop modundayken tekrar eder
if (gamepad.getButton(Button::A)) {
digitalWrite(LED_BUILTIN, LOW);
} else {
digitalWrite(LED_BUILTIN, HIGH);
}
}
void autoLoop() {
// Sadece autonomous modundayken tekrar eder
basicBlink();
}
Ana Fark: Robot Modları¶
Arduino'da robot açılır açılmaz kodunuz çalışmaya başlar. Probot'ta ise robot farklı modlarda çalışabilir:
- Disabled: Robot kapalı, hiçbir motor çalışmaz
- Autonomous: Robot kendisi hareket eder, joystick yasak
- Teleop: Joystick kontrolü aktif
Bu mod sistemi yarışma robot mantığıdır. FRC, FTC gibi yarışmalarda da böyle çalışır.
Dosya Yapısı Farkları¶
Arduino Projesi¶
Probot Projesi¶
#include <probot.h>
// Global objeler
TunaGamepad gamepad(robot);
BasicMotorController motor(9, 8, 7);
// Robot yaşam döngüsü fonksiyonları
void robotInit() { }
void robotEnd() { }
void autoInit() { }
void autoLoop() { }
void teleopInit() { }
void teleopLoop() { }
setup() → robotInit() Dönüşümü¶
Arduino LED Blink¶
void setup() {
Serial.begin(9600);
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
}
Probot LED Blink¶
#include <probot.h>
TunaGamepad gamepad(robot);
void robotInit() {
Serial.begin(115200);
pinMode(LED_BUILTIN, OUTPUT);
}
void teleopLoop() {
if (gamepad.getButton(Button::A)) {
digitalWrite(LED_BUILTIN, LOW); // ESP32'de LOW = ON
} else {
digitalWrite(LED_BUILTIN, HIGH); // ESP32'de HIGH = OFF
}
}
void autoLoop() {
// Otomatik blink
static unsigned long lastBlink = 0;
if (millis() - lastBlink > 500) {
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
lastBlink = millis();
}
}
Joystick Kontrolü - Arduino'da Yok!¶
Arduino projelerinde genelde button veya potansiyometre ile kontrol yaparsınız. Probot'ta WiFi üzerinden joystick kontrolü var:
Arduino Potansiyometre Kontrolü¶
void loop() {
int potValue = analogRead(A0);
int motorSpeed = map(potValue, 0, 1023, -255, 255);
// Motor kontrolü
analogWrite(MOTOR_PWM, abs(motorSpeed));
digitalWrite(MOTOR_DIR, motorSpeed > 0);
}
Probot Joystick Kontrolü¶
void teleopLoop() {
// Sol joystick Y ekseni (-1.0 ile +1.0)
float power = -gamepad.getAxis(Axis::LeftJoystickY);
// Motor kontrolü (aynı mantık, farklı veri kaynağı)
motor.setPower(power);
}
WiFi Driver Station¶
Arduino projelerinde genelde: - Serial Monitor ile debug - Fiziksel button/potansiyometre ile kontrol
Probot'ta: - Web tabanlı driver station (telefon, tablet, laptop) - Gerçek zamanlı joystick verisi - Robot durumu görüntüleme
Bu sayede robotu uzaktan kontrol edebilirsiniz!
Yaygın Hatalar¶
1. delay() Kullanımı¶
// ❌ Arduino'da çalışır, Probot'ta sorunlu
void teleopLoop() {
digitalWrite(LED_BUILTIN, HIGH);
delay(1000); // Robot 1 saniye donacak!
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
}
// ✅ millis() ile non-blocking
void teleopLoop() {
static unsigned long lastBlink = 0;
static bool ledState = false;
if (millis() - lastBlink > 1000) {
ledState = !ledState;
digitalWrite(LED_BUILTIN, ledState);
lastBlink = millis();
}
}
2. setup() ve loop() Kullanmaya Çalışmak¶
// ❌ Probot'ta setup() ve loop() kullanmayın
void setup() { } // Çalışmayacak
void loop() { } // Çalışmayacak
// ✅ Probot fonksiyonları kullanın
void robotInit() { } // setup() yerine
void teleopLoop() { } // loop() yerine (teleop'ta)
3. Global robot Objektini Unutmak¶
// ❌ robot objesi tanımlanmamış
TunaGamepad gamepad(robot); // Hata!
// ✅ probot.h robot objektini otomatik sağlar
#include <probot.h>
TunaGamepad gamepad(robot); // Çalışır
Avantajlar¶
Arduino'dan Üstün Yanlar:¶
- WiFi kontrolü - Kablolu bağlantı gerekmez
- Web interface - Her cihazdan erişim
- Robot modları - Yarışma formatına uygun
- Gamepad desteği - Xbox, PlayStation kontrolcüleri
- Gerçek zamanlı durum - Robot durumunu anlık görme
Arduino Mantığını Korur:¶
- Aynı pin kontrolleri -
digitalWrite()
,analogRead()
- Aynı serial iletişim -
Serial.begin()
,Serial.println()
- Aynı timing fonksiyonları -
millis()
,delay()
(dikkatli kullanın)
Öğrenme Sırası¶
- Bu sayfayı tam anlayın - Arduino vs Probot farkları
- Robot Yaşam Döngüsü - Modlar arası geçiş
- Gamepad Kontrolü - Joystick kullanımı
- Web Interface - Driver station kullanımı
- Pratik Örnekler - Gerçek robot kodu
İpucu: Arduino bilginizi kaybetmiyorsunuz! Probot, Arduino üzerine ek özellikler getiriyor. Aynı kod mantığı, daha güçlü kontrol sistemi.