Kod Sadeleştirme için yardımınız ?
  • Selamlar.

    Arkadaşlar böyle konu açtığım için kusra bakmayın. Kaç gündür uykusuzum şu an beynim iflas.
    Kodu direk kopyala yapıştır yapıcam, bana sadece sadeleştirmesi gerekli.
    Üstün körü baktım biraz da. Dediğim gibi şu an beynim durmuş vaziyette.

    NRF24L01 alıcı ve verici kodu:

    _______________________________________-ALICI:


    // Kütüphaneler projeye dahil ediliyor.
    #include < SPI.h>
    #include < nRF24L01.h>
    #include < RF24.h>

    //Pinler tanımlanıyor...
    #define CE_PIN 4
    #define CSN_PIN 10

    //Değişkenler yazılıyor.
    int hiz1;
    int hiz2;
    int donus1;
    int donus2;
    int donus3;
    int donus4;
    int skid1a;
    int skid1b;
    int skid2a;
    int skid2b;
    int skid3a;
    int skid3b;
    int skid4a;
    int skid4b;

    const int solileri = 6;
    const int solgeri = 5;
    const int sagileri = 9;
    const int saggeri = 3;

    const uint64_t pipe = 0xE8E8F0F0E1LL;

    RF24 radio(CE_PIN, CSN_PIN);

    int joystick[3]; //3 elemanlı joystick değişkenimizi tanımladık. Bu elemanlardan ilki Y ekseni, ikincisi X ekseni, 3.sü de joystick'in orta butonu.

    void setup()
    {
    pinMode(8,OUTPUT);
    digitalWrite(8,HIGH);
    pinMode(7,OUTPUT);
    pinMode(2,OUTPUT);
    digitalWrite(7,HIGH);
    pinMode(solileri, OUTPUT);
    pinMode(solgeri, OUTPUT);
    pinMode(sagileri, OUTPUT);
    pinMode(saggeri, OUTPUT);

    // Serial.begin(9600);

    delay(1000);
    radio.begin();
    radio.openReadingPipe(1,pipe);
    radio.startListening();;
    }


    void loop() {
    if ( radio.available() ) //Eğer sinyal algılarsan...
    {
    radio.read( joystick, sizeof(joystick) ); //Bu sinyallerden gelen verileri 3 elemanlı joystick değişkenine sırasıyla yaz.
    hareket(joystick[0],joystick[1],joystick[2]); // Sonra bu verileri kullanarak hareket fonksiyonunu çağır.

    }
    }

    void hareket(int X_ekseni, int Y_ekseni, int buton) { //Asıl olay

    //0-1023 arasındaki X ve Y ekseninden gelen geri bildirimi, 0-255 aralıklarına
    // uygun şekilde çekerek aşağıdaki değişkenlere yazdırıyoruz. Daha sonra bu değişkenleri
    // analogWrite komutu ile motorlara hız vermek için kullanacağız.

    hiz1 = map(Y_ekseni,550,1023,0,255);
    hiz1= constrain(hiz1,0,255);

    hiz2 = map(Y_ekseni,500,0,0,255);
    hiz2= constrain(hiz2,0,255);

    donus1 = map(X_ekseni,500,0, -128,128);
    donus1= constrain(donus1,-128,128);

    skid1a = (hiz1 - donus1);
    skid1a = constrain(skid1a,0,255);
    skid1b = (hiz1 +donus1);
    skid1b = constrain(skid1b,0,255);

    donus2 = map(X_ekseni,550,1023,-128,128);
    donus2= constrain(donus2,-128,128);

    skid2a = (hiz1 - donus2);
    skid2a = constrain(skid2a,0,255);
    skid2b = (hiz1 +donus2);
    skid2b = constrain(skid2b,0,255);

    skid3a = (hiz2 - donus1);
    skid3a = constrain(skid1a,0,255);
    skid3b = (hiz2 +donus1);
    skid3b = constrain(skid1b,0,255);

    skid4a = (hiz2 - donus2);
    skid4a = constrain(skid2a,0,255);
    skid4b = (hiz2 +donus2);
    skid4b = constrain(skid2b,0,255);

    donus3 = map(X_ekseni,500,0,0,255);
    donus3= constrain(donus3,0,255);

    donus4 = map(X_ekseni,550,1023,0,255);
    donus4= constrain(donus4,0,255);


    if (Y_ekseni > 550) { //Eğer joystick yukarı doğru hareket ederse...
    if ((X_ekseni > 501) && (X_ekseni < 549)) { //Eğer yukarıya doğru hareket etmişken sağa ve sola hareket etmemişse...
    analogWrite(solileri, hiz1);
    analogWrite(sagileri, hiz1);
    analogWrite(solgeri, 0);
    analogWrite(saggeri, 0);
    }
    if (X_ekseni < 500) { //Eğer yukarıya doğru hareket etmişken sola doğru hareket ederse...
    analogWrite(solileri, skid1a);
    analogWrite(sagileri, skid1b);
    analogWrite(solgeri, 0);
    analogWrite(saggeri, 0);
    }
    if (X_ekseni > 550) { //Eğer yukarıya doğru hareket etmişken sağa doğru hareket ederse...
    analogWrite(solileri, skid2b);
    analogWrite(sagileri, skid2a);
    analogWrite(solgeri, 0);
    analogWrite(saggeri, 0);
    }
    }

    if (Y_ekseni < 500) { //Eğer joystick aşağı doğru hareket ederse...
    if ((X_ekseni > 501) && (X_ekseni < 549)) { //Eğer aşağıya doğru hareket etmişken sağa ve sola hareket etmemişse...
    analogWrite(solileri, 0);
    analogWrite(sagileri, 0);
    analogWrite(solgeri, hiz2);
    analogWrite(saggeri, hiz2);
    }
    if (X_ekseni < 500) { //Eğer aşağıya doğru hareket etmişken sola doğru hareket ederse...
    analogWrite(solileri, 0);
    analogWrite(sagileri, 0);
    analogWrite(solgeri, skid3a);
    analogWrite(saggeri, skid3b);

    }

    if (X_ekseni > 550) { //Eğer aşağıya doğru hareket etmişken sağa doğru hareket ederse...
    analogWrite(solileri, 0);
    analogWrite(sagileri, 0);
    analogWrite(solgeri, skid4b);
    analogWrite(saggeri, skid4a);

    }
    }


    if ((Y_ekseni < 549) && (Y_ekseni >501 )) { //Eğer joystick ne yukarı ne de aşağı hareket ettirilmemişse.

    if (X_ekseni <500) { //360 derece sola dönüş...<br />analogWrite(solileri, 0);
    analogWrite(sagileri, donus3);
    analogWrite(solgeri, donus3);
    analogWrite(saggeri, 0);

    }
    if (X_ekseni >550) { //360 derece sağa dönüş...
    analogWrite(solileri, donus4);
    analogWrite(sagileri, 0);
    analogWrite(solgeri, 0);
    analogWrite(saggeri, donus4);
    }
    if ((X_ekseni > 501)&& (X_ekseni <549)) { //full stop<br />analogWrite(solileri, 0);
    analogWrite(sagileri, 0);
    analogWrite(solgeri, 0);
    analogWrite(saggeri, 0);
    }
    }

    if (buton==0) { //Buzzer (zil) çal.
    digitalWrite(2,HIGH);
    }
    else{
    digitalWrite(2,LOW);
    }


    //HATA AYIKLAMA (DEBUG)
    //Serial.print ("X Ekseni: ");
    //Serial.println(X_ekseni);
    //Serial.print (" Y Ekseni: ");
    //Serial.println(Y_ekseni);
    //Serial.print (" Hiz1: ");
    //Serial.println (hiz1);
    //Serial.print (" Hiz2: ");
    //Serial.println (hiz2);
    //Serial.print (" Donus1: ");
    //Serial.println (donus1);
    //Serial.println (" Donus2: ");
    //Serial.println (donus2);
    //Serial.print (" Skid1a: ");
    //Serial.println (skid1a);
    //Serial.print (" Skid1b: ");
    //Serial.println (skid1b);
    //Serial.print (" Skid2a: ");
    //Serial.println (skid2a);
    //Serial.print (" Skid0b: ");
    //Serial.println (skid2b);
    //Serial.print ( " BUTON: ");
    Serial.println (buton);
    }

    ______________________________________VERİCİ

    // Kütüphaneler projeye dahil ediliyor.
    #include < SPI.h>
    #include < nRF24L01.h>
    #include < RF24.h>

    //Pinler tanımlanıyor...
    #define CE_PIN 9
    #define CSN_PIN 10
    #define JOYSTICKX A0 //X ekseni Analog 0 pinine bağlı.
    #define JOYSTICKY A1 // Y ekseni Analog 1 pinine bağlı.
    #define BUTON 8 //Bizdeki joystick'in butonu 8. pine bağlıydı. Siz de test ederek bulabilirsiniz.

    //Değişkenler yazılıyor.
    const uint64_t pipe = 0xE8E8F0F0E1LL;
    RF24 radio(CE_PIN, CSN_PIN);
    int joystick[3]; //3 elemanlı joystick değişkenimizi tanımladık. Bu elemanlardan ilki Y ekseni, ikincisi X ekseni, 3.sü de joystick'in orta butonu.

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

    void loop()
    {

    joystick[0] = analogRead(JOYSTICKX);
    joystick[1] = analogRead(JOYSTICKY);
    joystick[2] = digitalRead(BUTON);
    radio.write( joystick, sizeof(joystick) ); //Gönderim yapılıyor...

    //HATA AYIKLAMA (DEBUG)
    Serial.print(analogRead(A0));
    Serial.println(" ");
    Serial.print(analogRead(A1));
    Serial.println(" ");
    Serial.println(digitalRead(BUTON));
    }

  • bu gayet sade ve temiz kod sadeleştirmeye gerek yok bırebır aynı donanımı kullanıyorsanız çalışır
  • okoman üstad sabah kafamı toparladım hallettim. Bu nrf24l01 ile herkezin genelde bir sorunu oluyor ya. Bugün ben şöyle bişe keşfettim. Normal nrf de iletişimde sıkıntı olmuyor. fakat antenli olan(+pa+lna) parça parça haberleşiyor.

    Tam nedeninin anlayamadım. 3.3v mu yetmiyor. Bilmiyorum.
  • okoman üstad bu kodda bir sıkıntı var zaman bulup bakamadım. Şimdi paletli bir araç yaptım. Şöyle bir sıkıntı var. ileri giderken sağa veya sola vb. yaptığım zaman motor çok yavaş dönüyor. Benim tahminim kodda aynı anda hem ileri hem geri sinyali gönderilmesi olabilir mi ?
  • ya da motorlara yeterli akım gitmiyor olabilir mi
  • yok yetersiz akım olsa ileri ve geri giderken de aynısını yapar. sonuçta hep iki motor çalışıyor.
  • Arkadaşlar bu kodun skid kısımları bence gereksiz. Şuna bir el atsanız ? tank ileri giderken bir tarafa döneceği zaman yani ileri çapraz pozisyonda joystick. Bir tarafa dönüyor diğer tarafa tuhaf bişey yapıyo.
  • sanirim if kullaniminda yada kalibresinde bir sorun var, alinan sinyal sonrasi konu disi iflerin olaya mudahele olmasini onlemek icin else if kullanmani oneririm
  • ridvan kardeş bu kod hazır kod olduğundan bazı kısımları ben de anlayamadım çok fazla if var. skid kısımlarını anlamadım zaten. orda map yapılanmasında -128 ile 128 kullanılmış. pwm de -128 diye bişey mi var ki ?
  • debug yaparken gozunuze carpan bir sey var mi peki

Howdy, Stranger!

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

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