# data[].attributes.body
#include <Deneyap_Servo.h>

#define SERVOPIN1 D14

#define SERVOPIN2 D9

#define SW_pin D0

#define X_pin A0

#define Y_pin A1

Servo myservo1, myservo2; // Servo motorların tanımlanması

int X_Val, Y_Val; // kumanda kolu eksen değişkenleri

int pos1 = 90, pos2 = 90; // SERVOLAR BAŞLANGIÇTA 90 DERECEDE

int dly = 10; // Servo hız gecikmesi

int stp = 1; // Servo adım değeri

int Dig_Val = 0; // Joystick buton değişkeni

// Servo limitleri

int teta1min = 0;

int teta1max = 180;

int teta2min = 0;

int teta2max = 180;

void setup()

{

// Servo motorların bağlanması

myservo1.attach(SERVOPIN1);

myservo2.attach(SERVOPIN2, 1);

// BAŞLANGIÇ POZİSYONLARI 90°

myservo1.write(90);

myservo2.write(90);

pinMode(SW_pin, INPUT_PULLUP);

digitalWrite(SW_pin, HIGH);

pinMode(X_pin, INPUT);

pinMode(Y_pin, INPUT);

}

void loop()

{

// Joystick X-Y okuma

X_Val = analogRead(X_pin);

Y_Val = analogRead(Y_pin);

Dig_Val = digitalRead(SW_pin);

// Joystick butonuna basıldığında hız değiştirme

if (Dig_Val < 1)

{

if (dly == 5) dly = 10;

else if (dly == 10) dly = 20;

else if (dly == 20) dly = 5;

delay(500); // Tek basışı algılamak için

}

// X ekseni servo1 kontrol (sol-sağ)

if (X_Val < 1000 && pos1 > teta1min) pos1 -= stp;

if (X_Val > 3000 && pos1 < teta1max) pos1 += stp;

// Y ekseni servo2 kontrol (ileri-geri)

if (Y_Val < 1000 && pos2 > teta2min) pos2 -= stp;

if (Y_Val > 3000 && pos2 < teta2max) pos2 += stp;

// Yeni pozisyonları servolara gönder

myservo1.write(pos1);

myservo2.write(pos2);

delay(dly);

}

# data[].attributes.body
// Kumanda kolu butonunun dijital pini ve X-Y hareketlerinin analog pinleri için değişken tanımlamaları
#define SW_pin D0
#define X_pin A0
#define Y_pin A1

// Program içerisinde kullanılacak değişkenler de tanımlanır.
int X_Val, Y_Val, Dig_Val;

/* Başlangıç düzenlemeleri aşağıdaki gibi yapılır. Değişkenlerin ekrana yazdırılacağı Serial Monitör
örnekleme frekansı ve analog/dijital pinlerin giriş, çıkış ayarlamaları yapılır. */
void setup()
{
    Serial.begin(115200);          // Seri portun 115200 baudrate hızında başlatılması.
    pinMode(SW_pin, INPUT_PULLUP); /* Switch (anahtar) değişkeni mod'u HIGH' e ayarlanır.
    Butona basıldığında LOW değerini alır .*/
    digitalWrite(SW_pin, HIGH);
    // kumanda kolu eksen değişken değerlerinin alınacağı 2 pin'in INPUT (giriş) olarak tanımlanması.
    pinMode(X_pin, INPUT);
    pinMode(Y_pin, INPUT);
}

/* Kumanda kolu fonksiyonlarını algılamak için dijital ve analog girişlerden elde edilen
değerlerin genel döngü (loop) içerisinde atama ve ekrana yazdırma işlemleri yapılır. */
void loop()
{
    X_Val = analogRead(X_pin);
    Y_Val = analogRead(Y_pin);
    Dig_Val = digitalRead(SW_pin);
    Serial.print("X_Val: ");
    Serial.println(X_Val);
    Serial.print("Y_Val: ");
    Serial.println(Y_Val);
    Serial.print("Dig_Val: ");
    Serial.println(Dig_Val);
    delay(100); /* Burada bu delay (gecikme) fonksiyonu içindeki milisaniye değeri artırılarak
    serial monitor'deki akış yavaşlatılabilir ve öğrencilerin kumanda kolu değerlerini daha
    rahat okumaları sağlanabilir. */
}

# data[].attributes.body
#include <Deneyap_Servo.h>

#define SERVOPIN1 D14

#define SERVOPIN2 D9

Servo myservo1, myservo2; // Servo motorların tanımlanması.

int pos = 0; // İlk pozisyon. Her 2 motor için ortak değişken.

// Servo motorların hangi dijital pinlere bağlı olduklarının belirtilmesi.

void setup()

{

myservo1.attach(SERVOPIN1);

myservo2.attach(SERVOPIN2, 1);

}

/* Servo motorların kontrol girişlerine kontrol sinyallerin gönderilmesi işlemi

genel döngü (loop) içerisine yazılan kodlar ile yapılır. Aşağıdaki kod yazılarak,

motorlara tek bir pos değişkeni ile seri bir demo hareket yaptırılmaktadır. */

void loop()

{

for (pos = 0; pos <= 180; pos += 1)

{ // pos değişkeni 0'dan 180'e kadar artar

myservo1.write(pos); // Servo motor 1 pozisyonu ayarlanır

myservo2.write(pos); // Servo motor 2 pozisyonu ayarlanır

delay(15); // 15 ms bekleme

}

for (pos = 180; pos >= 0; pos -= 1)

{ // pos değişkeni 180'den 0'a kadar azalır

myservo1.write(pos); // Servo motor 1 pozisyonu ayarlanır

myservo2.write(pos); // Servo motor 2 pozisyonu ayarlanır

delay(15); // 15 ms bekleme

}

}

# data[].attributes.body
#include <Deneyap_Servo.h>

// Dijital servo pin bağlantıları:

#define SERVOPIN1 D4

#define SERVOPIN2 D12

// Işık sensörleri analog bağlantıları:

#define L1_pin A0

#define L2_pin A1

#define L3_pin A2

// (İstersen kullanırsın diye bıraktım, ama şu an kodda YOK)

// #define Pot_pin A3

// Motor dönüş açı alt ve üst limitleri (şimdilik bilgi amaçlı):

int teta1min = 0;

int teta1max = 180;

int teta2min = 0;

int teta2max = 180;

// Accelerometre X ve Y eksenleri etrafı açı değişkenleri (şu an kullanılmıyor):

int accAngleX = 0;

int accAngleY = 0;

int conavail = 0;

int valin1, valin2, valin3; // Işık sensörlerinden okunan değerler

// Servo motor dönüş açı değişkenleri:

int pos1 = 0;

int pos2 = 0;

int clb1 = 0;

int clb2 = 0;

int clb3 = 0;

// Noise azaltmak için moving average değişkenleri:

int i = 0;

int n = 4; // 10'dan 4'e düşürdüm → daha hızlı tepki

long tot1 = 0;

long tot2 = 0;

long tot3 = 0;

// Tepki şiddeti (gain) – artırırsan servo daha sert döner:

const float GAIN1 = 0.15f; // pos1 için

const float GAIN2 = 0.15f; // pos2 için

// Servo motorların tanımlanması:

Servo myservo1, myservo2;

void setup() {

myservo1.attach(SERVOPIN1); // 1. servo

myservo2.attach(SERVOPIN2, 1); // 2. servo (kanal 1)

// Başlangıçta orta konuma getir

pos1 = 90;

pos2 = 120;

myservo1.write(pos1);

myservo2.write(pos2);

}

void loop() {

// Işık sensörlerinden okuma (4095 - okunan → daha çok ışık = daha büyük değer)

valin1 = 4095 - analogRead(L1_pin);

valin2 = 4095 - analogRead(L2_pin);

valin3 = 4095 - analogRead(L3_pin);

// Moving average ile gürültü azaltma

if (i < n) {

i++;

}

tot1 = ((long)(i - 1) * tot1 + valin1) / i;

tot2 = ((long)(i - 1) * tot2 + valin2) / i;

tot3 = ((long)(i - 1) * tot3 + valin3) / i;

// Hesaplanan verilerle servo açıları:

// Sağ-sol için: sensör2 - sensör1 farkı

pos1 = 90 + (int)((tot2 - tot1) * GAIN1);

// Yukarı-aşağı için: (L1+L2)/2 ile L3 farkı

pos2 = 120 + (int)(((0.5f (tot1 + tot2)) - tot3) GAIN2);

// Servo açılarını 0–180 aralığında tut

if (pos1 < 0) pos1 = 0;

if (pos1 > 180) pos1 = 180;

if (pos2 < 0) pos2 = 0;

if (pos2 > 180) pos2 = 180;

// Motorlara komut gönder

myservo1.write(pos1);

myservo2.write(pos2);

delay(5); // Kısa bekleme süresi

}

# data[].attributes.attachment_link.readable_text
#include <Deneyap_Servo.h>

// Dijital servo pin ba��lant��lar��:
#define SERVOPIN1 D9
#define SERVOPIN2 D14

// I����k sens��rleri analog ba��lant��lar��:
#define L1_pin A0
#define L2_pin A1
#define L3_pin A2

// Potansiyometre analog ba��lant��s��.
#define Pot_pin A3

// Motor d��n���� a���� alt ve ��st limitleri:
int teta1min = 0;
int teta1max = 180;
int teta2min = 0;
int teta2max = 180;

// Accelerometre X ve Y eksenleri etraf�� a���� de��i��kenleri
int accAnglex = 0;
int accAngleY = 0;
int conavail = 0;

int coef;                   // Potansiyometreden elde edilen katsay�� de��i��keni.
int valin1, valin2, valin3; // I����k sens��rlerinden hesaplanan de��erlerin atanaca���� de��i��kenler.

// Servo motor d��n���� a���� de��i��kenleri
int pos1 = 0;
int pos2 = 0;
int clb1 = 0;
int clb2 = 0;
int clb3 = 0;

// ��vme ��l��er verisinde olu��an noise'i (g��r��lt��y��) azaltmak (hatta yok etmek) i��in "moving average"
// algoritmas��n��n uygulanmas��nda kullan��lan de��i��kenler.
int i = 0;
int n = 10;
int32_t tot1 = 0;
int32_t tot2 = 0;
int32_t tot3 = 0;

// Servo motorlar��n tan��mlanmas��.
Servo myservo1, myservo2;

void setup()
{
    // Servo motorlar��n hangi dijital pinlere ba��l�� olduklar��n��n belirtilmesi.
    myservo1.attach(SERVOPIN1);
    myservo2.attach(SERVOPIN2, 1);
}

void loop()
{
    coef = analogRead(Pot_pin); // Potansiyometre ����k������n��n bir katsay�� de��i��kenine atanmas��.

    // I����k sens��rlerinden hesaplanan de��erlerin atand������ de��i��kenler.
    valin1 = 4095 - analogRead(L1_pin);
    valin2 = 4095 - analogRead(L2_pin);
    valin3 = 4095 - analogRead(L3_pin);

    // I����k sens��r�� verisindeki noise'i (g��r��lt��y��) azaltmak i��in "moving average" (hareketli ortalama) y��ntemi:
    if (i < n)
    {
        i++;
    }

    tot1 = int(((i - 1) * tot1 + valin1) / i);
    tot2 = int(((i - 1) * tot2 + valin2) / i);
    tot3 = int(((i - 1) * tot3 + valin3) / i);

    // I����k sens��rlerinden hesaplana verilerin kullan��lmas�� ile hesaplanan servo motor d��n���� a����lar��:
    pos1 = 90 + (tot2 - tot1) * ((2048 - coef) / 2048.);
    pos2 = 120 + (0.5 * (tot1 + tot2) - tot3) * ((2048 - coef) / 2048.);

    // Motorlara d��n���� komutlar��n��n verilmesi.
    myservo1.write(pos1);
    myservo2.write(pos2);

    delay(5); // K��sa bir bekleme s��resi.
}