Ana içeriğe geç

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

MyProject/
├── MyProject.ino    // setup() ve loop() burada
└── libraries/       // Kütüphaneler

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ü

void setup() {
    Serial.begin(9600);
    pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
    digitalWrite(LED_BUILTIN, HIGH);
    delay(1000);
    digitalWrite(LED_BUILTIN, LOW);
    delay(1000);
}
#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ı

  1. Bu sayfayı tam anlayın - Arduino vs Probot farkları
  2. Robot Yaşam Döngüsü - Modlar arası geçiş
  3. Gamepad Kontrolü - Joystick kullanımı
  4. Web Interface - Driver station kullanımı
  5. Pratik Örnekler - Gerçek robot kodu

İpucu: Arduino bilginizi kaybetmiyorsunuz! Probot, Arduino üzerine ek özellikler getiriyor. Aynı kod mantığı, daha güçlü kontrol sistemi.