Telsiz Trainer bağlantısı (Yeniden)

Arduino micro ve leonardo hatta mega bile mevcut su an elimde. Kod geldiğinde test ederim abi teşekkürler şimdiden
 
Bu benim Cessna Switch Panel için yazdığım kod:

Kod:
/* Cessna172 Switch Panel

*/
//--------------------------------------------------------------------

#include <Joystick.h>
// Arduino input pins
#define parkingbrake_pin 2
#define pitotheat_pin 3
#define strobe_pin 4
#define nav_pin 5
#define taxi_pin 6
#define landing_pin 7
#define beacon_pin 8
#define fuelpump_pin 9
#define avionics_pin 10
#define battery_pin 11
#define alternator_pin 12
#define magoff_pin A0
#define magR_pin A1
#define magL_pin A2
#define magboth_pin A3
#define starter_pin A4

// Joystick button assignements
#define parkingbrake_ON 0
#define parkingbrake_OFF 1
#define pitotheat_ON 2
#define pitotheat_OFF 3
#define strobe_ON 4
#define strobe_OFF 5
#define nav_ON 6
#define nav_OFF 7
#define taxi_ON 8
#define taxi_OFF 9
#define landing_ON 10
#define landing_OFF 11
#define beacon_ON 12
#define beacon_OFF 13
#define fuelpump_ON 14
#define fuelpump_OFF 15
#define avionics_ON 16
#define avionics_OFF 17
#define battery_ON 18
#define battery_OFF 19
#define alternator_ON 20
#define alternator_OFF 21
#define magR_ON 22
#define magR_OFF 23
#define magL_ON 24
#define magL_OFF 25
#define starter_ON 26
#define mag_OFF 27
#define magBOTH_ON 28

boolean parkingbrake_prev;
boolean pitotheat_prev;
boolean strobe_prev;
boolean nav_prev;
boolean taxi_prev;
boolean landing_prev;
boolean beacon_prev;
boolean fuelpump_prev;
boolean avionics_prev;
boolean battery_prev;
boolean alternator_prev;
boolean magoff_prev;
boolean magR_prev;
boolean magL_prev;
boolean magboth_prev;
boolean starter_prev;

boolean temp;
boolean changed;

void setup()
{
  // Configure inputs
  for (int n = 2; n < 14; n++)
  {
    pinMode(n, INPUT_PULLUP);
  }
  pinMode(A0, INPUT_PULLUP);
  pinMode(A1, INPUT_PULLUP);
  pinMode(A2, INPUT_PULLUP);
  pinMode(A3, INPUT_PULLUP);
  pinMode(A4, INPUT_PULLUP);
  // Initialize Joystick Library
  Joystick.begin();
  initialise();
}

void loop()
{
  changed = 0;
  temp = digitalRead(parkingbrake_pin);
  if (temp != parkingbrake_prev)
  {
    changed = 1;
    if (temp)
    {
      Joystick.setButton(parkingbrake_ON, 1);
      Joystick.setButton(parkingbrake_OFF, 0);
    }
    else
    {
      Joystick.setButton(parkingbrake_ON, 0);
      Joystick.setButton(parkingbrake_OFF, 1);
    }
    parkingbrake_prev = temp;
  }


  temp = digitalRead(pitotheat_pin);
  if (temp != pitotheat_prev)
  {
    changed = 1;
    if (temp)
    {
      Joystick.setButton(pitotheat_ON, 1);
      Joystick.setButton(pitotheat_OFF, 0);
    }
    else
    {
      Joystick.setButton(pitotheat_ON, 0);
      Joystick.setButton(pitotheat_OFF, 1);
    }
    pitotheat_prev = temp;
  }


  temp = digitalRead(strobe_pin);
  if (temp != strobe_prev)
  {
    changed = 1;
    if (temp)
    {
      Joystick.setButton(strobe_ON, 1);
      Joystick.setButton(strobe_OFF, 0);
    }
    else
    {
      Joystick.setButton(strobe_ON, 0);
      Joystick.setButton(strobe_OFF, 1);
    }
    strobe_prev = temp;
  }


  temp = digitalRead(nav_pin);
  if (temp != nav_prev)
  {
    changed = 1;
    if (temp)
    {
      Joystick.setButton(nav_ON, 1);
      Joystick.setButton(nav_OFF, 0);
    }
    else
    {
      Joystick.setButton(nav_ON, 0);
      Joystick.setButton(nav_OFF, 1);
    }
    nav_prev = temp;
  }


  temp = digitalRead(taxi_pin);
  if (temp != taxi_prev)
  {
    changed = 1;
    if (temp)
    {
      Joystick.setButton(taxi_ON, 1);
      Joystick.setButton(taxi_OFF, 0);
    }
    else
    {
      Joystick.setButton(taxi_ON, 0);
      Joystick.setButton(taxi_OFF, 1);
    }
    taxi_prev = temp;
  }


  temp = digitalRead(landing_pin);
  if (temp != landing_prev)
  {
    changed = 1;
    if (temp)
    {
      Joystick.setButton(landing_ON, 1);
      Joystick.setButton(landing_OFF, 0);
    }
    else
    {
      Joystick.setButton(landing_ON, 0);
      Joystick.setButton(landing_OFF, 1);
    }
    landing_prev = temp;
  }


  temp = digitalRead(beacon_pin);
  if (temp != beacon_prev)
  {
    changed = 1;
    if (temp)
    {
      Joystick.setButton(beacon_ON, 1);
      Joystick.setButton(beacon_OFF, 0);
    }
    else
    {
      Joystick.setButton(beacon_ON, 0);
      Joystick.setButton(beacon_OFF, 1);
    }
    beacon_prev = temp;
  }


  temp = digitalRead(fuelpump_pin);
  if (temp != fuelpump_prev)
  {
    changed = 1;
    if (temp)
    {
      Joystick.setButton(fuelpump_ON, 1);
      Joystick.setButton(fuelpump_OFF, 0);
    }
    else
    {
      Joystick.setButton(fuelpump_ON, 0);
      Joystick.setButton(fuelpump_OFF, 1);
    }
    fuelpump_prev = temp;
  }


  temp = digitalRead(avionics_pin);
  if (temp != avionics_prev)
  {
    changed = 1;
    if (temp)
    {
      Joystick.setButton(avionics_ON, 1);
      Joystick.setButton(avionics_OFF, 0);
    }
    else
    {
      Joystick.setButton(avionics_ON, 0);
      Joystick.setButton(avionics_OFF, 1);
    }
    avionics_prev = temp;
  }


  temp = digitalRead(battery_pin);
  if (temp != battery_prev)
  {
    changed = 1;
    if (temp)
    {
      Joystick.setButton(battery_ON, 1);
      Joystick.setButton(battery_OFF, 0);
    }
    else
    {
      Joystick.setButton(battery_ON, 0);
      Joystick.setButton(battery_OFF, 1);
    }
    battery_prev = temp;
  }


  temp = digitalRead(alternator_pin);
  if (temp != alternator_prev)
  {
    changed = 1;
    if (temp)
    {
      Joystick.setButton(alternator_ON, 1);
      Joystick.setButton(alternator_OFF, 0);
    }
    else
    {
      Joystick.setButton(alternator_ON, 0);
      Joystick.setButton(alternator_OFF, 1);
    }
    alternator_prev = temp;
  }


  temp = digitalRead(magoff_pin);
  if (temp != magoff_prev)
  {
    changed = 1;
    if (!temp)
    {
      Joystick.setButton(mag_OFF, 1);
    }
    else
    {
      Joystick.setButton(mag_OFF, 0);
    }
    magoff_prev = temp;
  }


  temp = digitalRead(magR_pin);
  if (temp != magR_prev)
  {
    changed = 1;
    if (!temp)
    {
      Joystick.setButton(magR_ON, 1);
    }
    else
    {
      Joystick.setButton(magR_ON, 0);
    }
    magR_prev = temp;
  }


  temp = digitalRead(magL_pin);
  if (temp != magL_prev)
  {
    changed = 1;
    if (!temp)
    {
      Joystick.setButton(magL_ON, 1);
    }
    else
    {
      Joystick.setButton(magL_ON, 0);
    }
    magL_prev = temp;
  }


  temp = digitalRead(magboth_pin);
  if (temp != magboth_prev)
  {
    changed = 1;
    if (!temp)
    {
      Joystick.setButton(magBOTH_ON, 1);
    }
    else
    {
      Joystick.setButton(magBOTH_ON, 0);
    }
    magboth_prev = temp;
  }

  temp = digitalRead(starter_pin);
  if (temp != starter_prev)
  {
    changed = 1;
    if (!temp)
    {
      Joystick.setButton(starter_ON, 1);
      Joystick.setButton(magBOTH_ON, 1);
    }
    else
    {
      Joystick.setButton(starter_ON, 0);
      Joystick.setButton(magBOTH_ON, 1);
    }
    starter_prev = temp;
  }
//  if (!changed) Joystick.sendState();
  delay(40);
}









void initialise()
{
  temp = digitalRead(parkingbrake_pin);
  if (temp)
  {
    Joystick.setButton(parkingbrake_ON, 1);
    Joystick.setButton(parkingbrake_OFF, 0);
  }
  else
  {
    Joystick.setButton(parkingbrake_ON, 0);
    Joystick.setButton(parkingbrake_OFF, 1);
  }
  parkingbrake_prev = temp;

  temp = digitalRead(pitotheat_pin);
  if (temp)
  {
    Joystick.setButton(pitotheat_ON, 1);
    Joystick.setButton(pitotheat_OFF, 0);
  }
  else
  {
    Joystick.setButton(pitotheat_ON, 0);
    Joystick.setButton(pitotheat_OFF, 1);
  }
  pitotheat_prev = temp;

  temp = digitalRead(strobe_pin);
  if (temp)
  {
    Joystick.setButton(strobe_ON, 1);
    Joystick.setButton(strobe_OFF, 0);
  }
  else
  {
    Joystick.setButton(strobe_ON, 0);
    Joystick.setButton(strobe_OFF, 1);
  }
  strobe_prev = temp;

  temp = digitalRead(nav_pin);
  if (temp)
  {
    Joystick.setButton(nav_ON, 1);
    Joystick.setButton(nav_OFF, 0);
  }
  else
  {
    Joystick.setButton(nav_ON, 0);
    Joystick.setButton(nav_OFF, 1);
  }
  nav_prev = temp;

  temp = digitalRead(taxi_pin);
  if (temp)
  {
    Joystick.setButton(taxi_ON, 1);
    Joystick.setButton(taxi_OFF, 0);
  }
  else
  {
    Joystick.setButton(taxi_ON, 0);
    Joystick.setButton(taxi_OFF, 1);
  }
  taxi_prev = temp;

  temp = digitalRead(landing_pin);
  if (temp)
  {
    Joystick.setButton(landing_ON, 1);
    Joystick.setButton(landing_OFF, 0);
  }
  else
  {
    Joystick.setButton(landing_ON, 0);
    Joystick.setButton(landing_OFF, 1);
  }
  landing_prev = temp;

  temp = digitalRead(beacon_pin);
  if (temp)
  {
    Joystick.setButton(beacon_ON, 1);
    Joystick.setButton(beacon_OFF, 0);
  }
  else
  {
    Joystick.setButton(beacon_ON, 0);
    Joystick.setButton(beacon_OFF, 1);
  }
  beacon_prev = temp;

  temp = digitalRead(fuelpump_pin);
  if (temp)
  {
    Joystick.setButton(fuelpump_ON, 1);
    Joystick.setButton(fuelpump_OFF, 0);
  }
  else
  {
    Joystick.setButton(fuelpump_ON, 0);
    Joystick.setButton(fuelpump_OFF, 1);
  }
  fuelpump_prev = temp;

  temp = digitalRead(avionics_pin);
  if (temp)
  {
    Joystick.setButton(avionics_ON, 1);
    Joystick.setButton(avionics_OFF, 0);
  }
  else
  {
    Joystick.setButton(avionics_ON, 0);
    Joystick.setButton(avionics_OFF, 1);
  }
  avionics_prev = temp;

  temp = digitalRead(battery_pin);
  if (temp)
  {
    Joystick.setButton(battery_ON, 1);
    Joystick.setButton(battery_OFF, 0);
  }
  else
  {
    Joystick.setButton(battery_ON, 0);
    Joystick.setButton(battery_OFF, 1);
  }
  battery_prev = temp;

  temp = digitalRead(alternator_pin);
  if (temp)
  {
    Joystick.setButton(alternator_ON, 1);
    Joystick.setButton(alternator_OFF, 0);
  }
  else
  {
    Joystick.setButton(alternator_ON, 0);
    Joystick.setButton(alternator_OFF, 1);
  }
  alternator_prev = temp;

  temp = digitalRead(magoff_pin);
  if (!temp)
  {
    Joystick.setButton(mag_OFF, 1);
  }
  else
  {
    Joystick.setButton(mag_OFF, 0);
  }
  magoff_prev = temp;

  temp = digitalRead(magR_pin);
  if (!temp)
  {
    Joystick.setButton(magR_ON, 1);
  }
  else
  {
    Joystick.setButton(magR_ON, 0);
  }
  magR_prev = temp;

  temp = digitalRead(magL_pin);
  if (!temp)
  {
    Joystick.setButton(magL_ON, 1);
  }
  else
  {
    Joystick.setButton(magL_ON, 0);
  }
  magL_prev = temp;

  temp = digitalRead(magboth_pin);
  if (!temp)
  {
    Joystick.setButton(magBOTH_ON, 1);
  }
  else
  {
    Joystick.setButton(magBOTH_ON, 0);
  }
  magboth_prev = temp;

  temp = digitalRead(starter_pin);
  if (!temp)
  {
    Joystick.setButton(magBOTH_ON, 1);
    Joystick.setButton(starter_ON, 1);
  }
  else
  {
    Joystick.setButton(magBOTH_ON, 1);
    Joystick.setButton(starter_ON, 0);
  }
  starter_prev = temp;
}
 
  • Beğen
Tepkiler: Mehmet Kucuksari
Joystick Library kullanılıyor.
Gerekli işlevleri tanımlayarak Arduino Micro'yu sisteme bir game controller olarak tanıtmış oluyorsun.
İstediğin sayıda alıcı kanalını okutarak elde ettiğin veriyi Joystick Library'nin analog kanalları üzerinden PC'ye gönderebilirsin.
 
  • Beğen
Tepkiler: Mehmet Kucuksari
Kablosuz trainer sistemini Hezarfen'de epeyce kullandık. En ufak bir sorun yaşamadık. Ancak birkaç gün önce tekrar lazım oldu ve bulamadık. Bir yerlere koyup unuttuk muhtemelen. Ben de daha derli toplu bir trainer sistemi oluşturmaya karar verdim. Daha önceden yapmış olduğum 8 kanal vericiyi trainer kumandası olarak görevlendirdim. Atık kablo ve soketleri biriktirdiğim çantayı da bu işe aktardım.

Bu RESMİ görmek için izniniz yok. Giriş yap veya üye ol


Çok daha küçük ve basit bir devre ve kod oluşturdum. Sistemde alıcı verici olarak eski Assan 2.4 GHz sistemi kullandım.

Bu RESMİ görmek için izniniz yok. Giriş yap veya üye ol


Bir de kutu basınca işlem tamam oldu.

Bu RESMİ görmek için izniniz yok. Giriş yap veya üye ol


Devreye herhangi bir alıcının ilk dört kanalı bağlanabiliyor ve farklı vericilerle de uyumlu sorunsuz bir trainer sistemi kurulmuş oluyor.
Ana kumandaya bağlantı için hem Futaba hem de 3.5 mm jack çıkışı var.
 
Son düzenleme:
Kablosuz trainer sistemini Hezarfen'de epeyce kullandık. En ufak bir sorun yaşamadık. Ancak birkaç gün önce tekrar lazım oldu ve bulamadık. Bir yerlere koyup unuttuk muhtemelen. Ben de daha derli toplu bir trainer sistemi oluşturmaya karar verdim. Daha önceden yapmış olduğum 8 kanal vericiyi trainer kumandası olarak görevlendirdim. Atık kablo ve soketleri biriktirdiğim çantayı da bu işe aktardım.

Bu RESMİ görmek için izniniz yok. Giriş yap veya üye ol


Çok daha küçük ve basit bir devre ve kod oluşturdum. istemde alıcı verici olarak eski Assan 2.4 GHz sistemi kullandım.

Bu RESMİ görmek için izniniz yok. Giriş yap veya üye ol


Bir de kutu basınca işlem tamam oldu.

Bu RESMİ görmek için izniniz yok. Giriş yap veya üye ol


Devreye herhangi bir alıcının ilk dört kanalı bağlanabiliyor ve farklı vericilerle de uyumlu sorunsuz bir trainer sistemi kurulmuş oluyor.
Ana kumandaya bağlantı için hem Futaba hem de 3.5 mm jack çıkışı var.
Elinize sağlık Sümer abi :bravo::bravo:
 
Devreye herhangi bir alıcının ilk dört kanalı bağlanabiliyor ve farklı vericilerle de uyumlu sorunsuz bir trainer sistemi kurulmuş oluyor.
Ana kumandaya bağlantı için hem Futaba hem de 3.5 mm jack çıkışı var.
Kumanda markasından bağımsız genel bir çözüm olmuş oluyor, daha ne olsun abi. :thumbup::bravo::bravo:
 
  • Beğen
Tepkiler: Türker Akgün
Konu ile ilgili bazı gelişmeleri paylaşayım.
Öncelikle Assan verici modülü ve alıcı ile ilgili bir türlü çözemediğim bir sorun var ve sistem ara ara çalışsa da genelde saçmalıyor. Trainere geçince servolar sapıtıyor. Osiloskop ve logic analyser ile yaptığım incelemelerde Assan alıcı çıkış sinyalinin servo darbelerinin olması gerektiği gibi peş peşe gelmediğini gördüm. Bu da kullandığım bazı kod versiyonlarında (o ayrıntılara girmiyorum, birden çok algoritma denedim) tamamen sapıtmaya, bazı versiyonlarda da ara ara sapıtmaya yol açıyor. Aklıma gelen tüm donanımsal ve yazılımsal seçenekleri denedikten sonra Assan sistemini kenara koymaya karar verdim.
Elimde atıl vaziyette beklemekte olan Turnigy 9 kumandaya yöneldim. Sağolsun @Deniz Tanrıverdi bir alıcı verdi ve onunla sistemi test etmeye başladım. Onda da başka sorunlar vardı. Yaptığım incelemelerde gördüm ki, alıcı çıkışları bunda da saçma sapan.
Kısaca anlatayım. Normalde alıcıdan beklenen şey, her bir kanalın çıkış darbesini aralık bırakmadan ve peşisıra vermektir. Ama Turnigy alıcının kanal çıkış sırası 1-3-2-4 şeklinde!!! Allahtan Assan gibi arada duraklaması yok. Detaya boğmayayım. Öyle, böyle, şöyle derken sonunda yazdığım algoritma ile sistem sorunsuz çalıştı. Yani öğrenci Turnigy kumanda ile uçuyor. Turnigy alıcının bağlandığı benim modül de öğretmen kumandasına giriyor. Hem Futaba hem de Hitec kumandada sorunsuz çalışıyor. Yeni nesil birçok kumandanın bağlantısı Hitec ile aynı olduğu için muhtemelen hemen her kumanda ile de çalışacak.
Ama ben SumeronicsRC kumandanın kullanılması konusunu kafaya takmıştım bir kere. Assan modül olmayınca geriye iki seçenek kalıyordu. Ya Uzak Doğu'dan bir verici alıcı çifti getirtecektim ki bu biraz pahalı bir yöntemdi. Ya da telsiz veri taşıması için başka bir çözüm bulacaktım. Burada imdadıma, piyasada inanılmaz ucuza bulunan 433 MHz alıcı verici modüller yetişti. Benim yaptığım kumandanın çıkışına minicik bir 433 MHz verici taktım. Vericiyi kasa içine anteni kumandanın sapının içine gizledim. Alıcı ve minik LiPo için de bir kutu bastım.

Bu RESMİ görmek için izniniz yok. Giriş yap veya üye ol


Hitec sistem ile gayet güzel çalıştı. Aklıma alandaki bariyer kumandasından etkilenip etkilenmeyeceği konusu geldi. Onu test ettim. Bariyer kumandası eğer alıcının 1 m kadar yakınında aktive edilirse sistem sapıtıyor. Ama daha uzaktayken hiçbir sorun olmuyor. Dolayısıyla bence bu aşamada yeterince güvenli. Ancak bana saç baş yolduran bir sorun var. Sistem Futaba ile çalışmıyor. İşin daha ilginci, osiloskop ekranında Futaba'da çalışan sistemin sinyali ile bu sistemin sinyalini karşılaştırınca hiçbir fark yok. Ama Futaba inatla cevap vermiyor trainer sistemine. Bakalım onu da bir şekilde çözeriz diye umuyorum.