Arduino ile nrf24l01 haberleşmesinde tutarsızlık
  • Merhaba , arduino nrf24l01 modül kullanarak uno ve mega arasında haberleşmeyi sağlayabiliyorum (meganın SPI pinleri csn ce pinleri doğru takılıdır). Linkteki kodları attığımda her zaman sorunsuz çalışmaktadır.
    http://www.arduist.com/arduino-ile-nrf24l01-kullanimi/
    Kendi ekleme kodlarımı attığımda ise çalışmıyor ama önce linkteki kodları atıp sonra benim kodlarımı attığımda ise kodlar sorunsuz şekilde çalışıyor. Bunun sebebi ne olabilir acaba ?
    Şimdiden teşekkürler.
  • kodunun bir kısmını koysaydın belki bellı olurdu buyuk ıhtımal zaman kaybediyorsun bir yerde aradabir nrf de data varmı kontrol etmen lazım...
  • alıcı kısmı :

    #include SPI.h>
    #include nRF24L01p.h>
    #include Servo.h> // servo motor kütüphanesi
    #include NewPing.h> // ULTRASONİK

    nRF24L01p alici(7,8);

    int stepPin1 = 46; // Blue - 28BYJ48 pin 1
    int stepPin2 = 47; // Pink - 28BYJ48 pin 2
    int stepPin3 = 48; // Yellow - 28BYJ48 pin 3
    int stepPin4 = 49; // Orange - 28BYJ48 pin 4 Red - 28BYJ48 pin 5
    int sagi=22;
    int sagg=24;
    int solg=26; // MOTOR KONTROL PİNLERİ
    int soli=28;


    int deger = 0; //HAREKET SENSÖRÜ İÇİN
    int ses = 0;
    int alev_degeri;
    int isik_degeri;
    float sicaklik;
    float gerilim;

    int led1=32; //FAR
    int led2=30;
    int lazer=35; //LAZER
    int ledm=40;
    int ledk=38;
    int ledy=36;
    int mz=34;
    int buzzer=44;
    int fan1=43; // SOĞUTUCU
    int fan2=45;
    int pirPin = 39;
    int sespin=42;

    unsigned int uzaklik;
    int on_uzaklik;
    unsigned int sol_uzaklik;
    unsigned int sag_uzaklik;
    unsigned int zaman;




    void setup() {
    delay(300);
    // Serial.begin(9600);
    SPI.begin();
    SPI.setBitOrder(MSBFIRST);
    alici.channel(90); // Kanal numaraları aynı olmalı(0-125)
    alici.RXaddress("Kumanda");
    alici.TXaddress("Robot");
    alici.init();


    pinMode(sagi, OUTPUT);
    pinMode(sagg, OUTPUT); //motorlar
    pinMode(solg, OUTPUT);
    pinMode(soli, OUTPUT);
    pinMode(led1, OUTPUT);
    pinMode(led2, OUTPUT); //LED ,FAN,SENSÖRLER
    pinMode(lazer, OUTPUT);
    pinMode(buzzer, OUTPUT);
    pinMode(fan1, OUTPUT);
    pinMode(fan2, OUTPUT);
    pinMode(ledm, OUTPUT);
    pinMode(ledk, OUTPUT);
    pinMode(ledy, OUTPUT);
    pinMode(mz, INPUT);
    pinMode(sespin, INPUT);
    pinMode(pirPin, INPUT);

    }

    ////////////////////////////////////////////////////////////////////
    int dataGiden; // Gelen mesajı tutacak
    int dataGelen;
    int data_isik;
    int data_ses;
    float data_sicaklik;
    int data_deger;
    int data_mesafe;
    int data_alev;
    int data_pil;
    int data_x2;
    int data_y2;
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    void loop() {


    if(alici.available()) // Gelen veri varsa
    {
    alici.read();
    alici.rxPL(dataGelen);

    if(dataGelen == 0)
    {
    dur(); //DUR
    }
    else if(dataGelen == 1)
    {
    ileri(); //İLERİ
    }
    else if(dataGelen == 2)
    {
    sag(); //SAĞ
    }

    else if(dataGelen == 3)
    {
    geri(); //GERİ
    }
    else if(dataGelen == 4)
    {
    sol(); //SOL
    }

    else if(dataGelen == 5)
    {
    gerilim = analogRead(A8);
    sicaklik = map (gerilim, 0, 205, 0, 100);

    deger = digitalRead(pirPin);

    ses = digitalRead(sespin);

    data_isik = analogRead(A9);
    data_alev = analogRead(A10);
    data_ses = ses;
    data_deger = deger;
    data_mesafe = uzaklik;
    data_sicaklik = sicaklik;
    Serial.print("aldik");

    delay(10);

    alici.txPL(data_isik);
    alici.txPL(data_alev);
    alici.txPL(data_deger);
    alici.txPL(data_sicaklik);
    alici.txPL(data_mesafe);
    alici.txPL(data_ses);
    alici.txPL(data_pil);

    delay(100);
    alici.send(SLOW);

    }
    }} //void loop ve haberleşmekapatma

    void ileri()
    {
    digitalWrite(solg, LOW);
    digitalWrite(soli, HIGH); //ileri gitme
    digitalWrite(sagg, LOW);
    digitalWrite(sagi, HIGH);
    // Serial.println("FORWARD");
    }
    void geri() //geri gitme
    {
    digitalWrite(solg, HIGH);
    digitalWrite(soli, LOW);
    digitalWrite(sagg, HIGH);
    digitalWrite(sagi, LOW);
    // Serial.println("BACK");
    }
    void sol()
    { //sola dönme
    digitalWrite(soli, LOW);
    digitalWrite(solg, HIGH);
    digitalWrite(sagg, LOW);
    digitalWrite(sagi, HIGH);
    // Serial.println("LEFT");
    }
    void sag()
    {
    digitalWrite(solg, LOW);
    digitalWrite(soli, HIGH); //sağa dönme
    digitalWrite(sagg, HIGH);
    digitalWrite(sagi, LOW);
    // Serial.println("RIGHT");
    }
    void dur() //motorları durdur
    {
    digitalWrite(solg, LOW);
    digitalWrite(soli, LOW);
    digitalWrite(sagg, LOW);
    digitalWrite(sagi, LOW);
    // Serial.println("STOP");
    }

  • verici kısmı :

    #include
    #include

    nRF24L01p verici(7,8); // csn ce pinleri

    const int x1 = A1; // ARACIN KONTROLÜ
    const int y1 = A0; // ARACIN KONTROLÜ

    int Xdeger;
    int Ydeger;

    int butonsol = 0;
    const int buttonsol = 3;
    int butonsag = 0;
    const int buttonsag = 2;
    int butonVERI = 0;
    const int buttonVERI = 6;

    void setup()
    {
    delay(150);
    Serial.begin(9600);
    SPI.begin();
    SPI.setBitOrder(MSBFIRST);
    verici.channel(90); // Kanal numaraları aynı olmalı(0-125)
    verici.TXaddress("Kumanda");
    verici.RXaddress("Robot");
    verici.init();

    pinMode(buttonsol, INPUT);
    pinMode(buttonsag, INPUT);
    pinMode(buttonVERI, INPUT);

    }
    /////////////////////////////////////////////////////////////
    int dataGiden;
    int dataGelen;
    int data_isik;
    int data_ses;
    float data_sicaklik;
    int data_deger;
    int data_mesafe;
    int data_alev;
    int data_pil;

    ///////////////////////////////////////////////////

    void loop()
    {
    butonsol = digitalRead(buttonsol);
    butonsag = digitalRead(buttonsag);
    butonVERI = digitalRead(buttonVERI);

    Xdeger = analogRead (x1);
    Ydeger = analogRead (y1);

    X2deger = analogRead (x2);
    Y2deger = analogRead (y2);


    if(Ydeger>750) // İLERİ
    {
    dataGiden = 1;
    verici.txPL(dataGiden);
    verici.send(SLOW);
    }

    else if(Ydeger>450 && Ydeger <=650 && Xdeger>=500 && Xdeger<=650) //DURDUR<br /> {
    dataGiden = 0;
    verici.txPL(dataGiden);
    verici.send(SLOW);
    }

    else if(Xdeger>=700 && Xdeger<1023 && Ydeger>430 && Ydeger <=650)// SOL<br /> {
    dataGiden = 4;
    verici.txPL(dataGiden);
    verici.send(SLOW);
    }

    else if(Xdeger<=300 && Xdeger>=0 && Ydeger >=430 && Ydeger <=750)//SAĞ<br /> {
    dataGiden = 2;
    verici.txPL(dataGiden);
    verici.send(SLOW);
    }

    else if(Ydeger>=0 && Ydeger<=300) // geri<br /> {
    dataGiden = 3;
    verici.txPL(dataGiden);
    verici.send(SLOW);
    }

    if (butonsol == HIGH)
    {

    dataGiden = 7;
    verici.txPL(dataGiden);
    verici.send(SLOW);

    }

    else if (butonVERI == HIGH)
    { //veri al
    dataGiden = 5;
    verici.txPL(dataGiden);
    verici.send(SLOW);

    }

    // delay(100);

    if (verici.available())
    {
    verici.read();
    verici.rxPL(data_isik);
    verici.rxPL(data_alev);
    verici.rxPL(data_deger);
    verici.rxPL(data_sicaklik);
    verici.rxPL(data_mesafe);
    verici.rxPL(data_ses);
    verici.rxPL(data_pil);

    Serial.print("Havanin aydinligi=");
    Serial.println(data_isik);
    Serial.print("Ates =");
    Serial.println(data_alev);
    Serial.print("Hareketlilik =");
    Serial.println(data_deger);
    Serial.print("Sicaklik degeri=");
    Serial.println(data_sicaklik);
    Serial.print("Mesafe =");
    Serial.println(data_mesafe);
    Serial.print("Gurultu=");
    Serial.println(data_ses);
    Serial.print("Kalan pil omru = ");
    Serial.println( data_pil);
    delay(1000);
    } }

  • hocam delay leri koyma sebebim ; Haberleşme takılmasın diye, delay koymayınca veri alırken donup kalıyor , donmaması içinde delay koydum.
  • Hocam çok teşekkür ederim verici kısmında gelen mesaj yerindeki delay yüzündenmiş.Şimdi başarılı şekilde haberleşiyor.
  • şu nrf24l01 modüllerini nerdeyse kırıp atacağım elimde 10 tane var. bi türlü çalıştıramadım kondansatör ekledim türlü arduinolarla türlü kütüphaneler denedim yok çalıştıramadım. hazır canlı çalıştıranı bulmuşken sorayim elinizdeki nrf24l01in 1 resmini eklermisiniz ? elimde 2 ayrı üretim var biri çok belli klonda diğerlerinden umutluyum.
  • Merhaba windshair

    buradan bakabilirsin bende aldım sorunsuz çalışıyor. Gerekirse kodları atarım bağlantıları ile birlikte
    http://www.robotistan.com/wireless-nrf24l01-24ghz-transceiver-modul-24ghz-alici-verici-modul

    kolay gelsin
  • Teşekkür ederim. Son çare birde burdan alacağım bende takıntı oldu bu modül. Rica edeceğim hangi kütüphane ve bağlantıyı kullanıyorsunuz cs ve ce pinler opsiyonel biliyorumda kimi 13. Pini miso kimi ırq olarak kullanıyor. Kesme pini pek kullanılmasada ve 11 12 13 nolu pinler spi pinleriyken 13. Pinin irqda kullanılması garip.
  • Bu tür tutatsızlıklar yaşayıp örnek kodlarda iletişim kuramayanlar için not düşeyim.

    1 Bağlantılar karıştırılabiliyor her kütüphanede farklı bağlantılar oluyor buna dikkat edin.

    2. Kartınızın 3.3v çıkışı stabil olmayabiliyor modülde vcc ve gnd arasına 10 uf kondansatör lehimleyin.

    3. Jumperlar parazit yapabiliyor. Mümkünse bağlantıları lehimleyin. Ben hdd ide kablosunun soketinden faydalanıp proya lehimledim.

    Bu basit şeyler yüzünden günlerim heba oldu.

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Login with Facebook

Tagged

Açık kaynak kültürü gereği, çözdüğünüz problemlerin çözümlerini paylaşmayı lütfen unutmayın.