Kontrolör yardım

ucan_tekme

Üye
Katılım
7 Eki 2010
Mesajlar
2
Puanları
1
Öncelikle herkese merhaba. Yaşadığım sorunu anlatımım biraz uzun olacak, ancak her aşamasını anlatmak istiyorum.

Küçük kızımla oynamak için bir adet 4WD araç yaptım. Bu aracı kontrol etmek için ise bir tane kumanda yaptım. NRF24L01 kablosuz haberleşme modülünü kullanarak araçla kumanda arasında bağlantıyı kurdum ve sorunsuz bir şekilde çalıştırdım. Kumandada sol joystick ileri-geri, sağ joystick ise sağ-sol fonksiyonunu kontrol ediyor. *Kumandanın devre şeması ve kaynak kodu aşağıdadır.
controller1.png


Kod:
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(7,8);

const int xekseni = A3;
const int yekseni = A0;
int data[2];
int xyonu;
int yyonu;

const uint64_t pipe = 0xE8E8F0F0E1LL;


void setup()
{
  Serial.begin(9600);
  radio.begin();
  radio.openWritingPipe(pipe);

}

void loop()
{
  xyonu = analogRead(xekseni);
  yyonu = analogRead(yekseni);


  data[0] = xyonu;
  data[1] = yyonu;
  radio.write( data, sizeof(data) );

}


Tabi sonra rahat battı! Kumandaya ekleyeceğim bir toggle switch ile kumandanın çalışma şeklini değiştirmek istedim. Bu switch “0“ olduğunda sol joystick ileri-geri fonksiyonunu, sağ joystick ise sağ-sol fonksiyonunu gerçekleştirecekti. Switch “1” konumuna alındığında ise sol joystick sol tekerleri ileri-geri, sağ joystick ise sağ tekerleri ileri-geri kontrol edecekti. Gerekli lehimlemeleri kumandaya yaptım ve switch’i ekledim. Test amaçlı olarak Serial.print çıktısı almak için de gerekli kodu yazdım. Kumanda serial haberleşmeden sorunsuz bir şekilde çalışıyor, switch 0 iken 0 bilgisini ve joystick değerlerini yazdırıyor, switch 1 iken 1 bilgisini ve joystick değerlerini doğru bir şekilde yazdırıyordu. *Kumandanın yeni devre şeması ve kaynak kodu aşağıdadır.

controller2.png


Kod:
#include <SPI.h>

const int tbuton = 10;
const int xekseni1 = A1;
const int yekseni1 = A0;
const int xekseni2 = A3;
const int yekseni2 = A2;
int data[5];
int toggle;
int xyonu1;
int yyonu1;
int xyonu2;
int yyonu2;

void setup()
{
  Serial.begin(9600);
  pinMode(tbuton , INPUT);
}

void loop()
{
  toggle = digitalRead(tbuton);
  xyonu1 = analogRead(xekseni1);
  yyonu1 = analogRead(yekseni1);
  xyonu2 = analogRead(xekseni2);
  yyonu2 = analogRead(yekseni2);

  Serial.print ("Toggle = ");
  Serial.println (toggle);
  Serial.print ("X1 = ");
  Serial.println (xyonu1);
  Serial.print ("Y1 = ");
  Serial.println (yyonu1);
  Serial.print ("X2 = ");
  Serial.println (xyonu2);
  Serial.print ("Y2 = ");
  Serial.println (yyonu2);
  delay(500);
}

Ardından kumandanın kablosuz haberleşme kodlarını da ekledim. Bu şekilde test ettiğimde ise kumanda Serial.print komutunu bir kere çalıştırdı ve kablosuz haberleşme kanalına geldiğinde takılı kaldı. İlk başta anlayamadım. Switchi 1 konumuna aldığımda sorunsuz bir şekilde çalışmaya başladı. Hem serial ekranına doğru değerleri yazıyor, hem kablosuz haberleşmeden doğru kodları gönderiyordu (Araç için de gerekli kodları yazıp test ettiğimde switch 1 konumunda doğru kodlar araç tarafından alınıyordu.). Ancak switchi 0 konumuna alınca çalışmakta iken kablosuz haberleşme satırına geldiğinde takılıp kalıyordu. *Kumandanın devre şeması yukardaki ile aynı, kullandığım kaynak kod aşağıdadır.

Kod:
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(7,8);

const int tbuton = 10;
const int xekseni1 = A1;
const int yekseni1 = A0;
const int xekseni2 = A3;
const int yekseni2 = A2;
int data[5];
int toggle;
int xyonu1;
int yyonu1;
int xyonu2;
int yyonu2;

const uint64_t pipe = 0xE8E8F0F0E1LL;


void setup()
{
  Serial.begin(9600);
  radio.begin();
  radio.openWritingPipe(pipe);
  pinMode(tbuton , INPUT);

}

void loop()
{
  toggle = digitalRead(tbuton);
  xyonu1 = analogRead(xekseni1);
  yyonu1 = analogRead(yekseni1);
  xyonu2 = analogRead(xekseni2);
  yyonu2 = analogRead(yekseni2);

  Serial.print ("Toggle = ");
  Serial.println (toggle);
  Serial.print ("X1 = ");
  Serial.println (xyonu1);
  Serial.print ("Y1 = ");
  Serial.println (yyonu1);
  Serial.print ("X2 = ");
  Serial.println (xyonu2);
  Serial.print ("Y2 = ");
  Serial.println (yyonu2);
  delay(500);

  data[0] = toggle;
  data[1] = xyonu1;
  data[2] = yyonu1;
  data[3] = xyonu2;
  data[4] = yyonu2;
  radio.write( data, sizeof(data) );
}

İlk hatayı araç kodları almadığında fark ettim. Aracın kaynak koduyla biraz uğraşarak sorunun araçta olmadığını fark ettim. Sorun kumandada. Multimetre ile tüm pin ve lehimleri kontrol ettim kısa devre yok. Bağlantılarda da sorun yok, sinyal iletiliyor.
Bazı sayfalarda toggle değişkenini boolean türünde bir değişken tanımlamışlar. Denedim o da olmadı...

Sonuç olarak:

1.
NRF24L01 devreye bağlı iken radio.write kodları olmadan toggle switch ve joystickler sorunsuz çalışıyor serial monitöre yazdırıyor.

2. Toggle switch devreye bağlı iken switch kodları olmadan kablosuz bağlantı joystick komutlarını aktarılıyor. ( Switch kodları olmamasına rağmen on-off yaptım sistem etkilenmeden çalışıyor.)

3. Toggle switch ve NRF24L01 devreye bağlı ve kodları eklenmiş iken toggle switch 1 konumunda sorunsuz çalışıyor. 0 konumuna alınca arduino kitleniyor. Arduino üzerindeki ışıklar da kitleniyor.

Tahmini hata sebepleri:

1.
Switch üzerinde kullanmış olduğum 1kohm direnç değeri küçük ya da büyük gelmiş olabilir.

2. 9V Pil ile çalıştırdığım Arduino Nano 5v çıkışından 2 joystick + Toggle Switch, 3.3V çıkışından NRF24L01 besliyor. Besleyemiyor olabilir.

Sorunu çözmemde yardımcı olursanız çok sevinirim. Şimdiden ilgilenen arkadaşlara teşekkür ederim.
 
Son düzenleme:
Pin10 SPI SS pini. Bunu kullanma başka pin kullan. SPI iletişimini bozuyorsun
 
Mesajını görür görmez denedim. Evet sorun buymuş. Düzeldi teşekkürler...
 

Forum istatistikleri

Konular
127,952
Mesajlar
913,873
Kullanıcılar
449,599
Son üye
Gksn

Yeni konular

Geri
Üst