اطلاعیه

Collapse
No announcement yet.

[آموزش]راه اندازی ماژول +nRF24L01

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    پاسخ : راه اندازی ماژول +nRF24L01

    نوشته اصلی توسط M3R-E نمایش پست ها
    من فکر کردم از هدری که تو این تاپیک هست استفاده میکنید!!
    دستوراتی که استفاده کردین هم که مشخص هست هر کدومش چه کاری انجام میده مشکل چیه؟
    واسه اون کدهایی هم که گذاشتم اگه به عکسی که گذاشتم دقت کنید متوجه میشید چطوری اون 0 و 1 ها رو انتخاب کردم
    سلام اون هدری که تو کتابخانه اردینو هستش من داخلش گشتم برای جا گذاری Command_Reg = 0x06; اصلا چنین عبارتی نبود
    دوست عزیز برای همون 0و1 که تو هشت بیت قرار دادید و گفتید شد 26 هگزا من تا اینجاش گرفتم که بله تو جدول برای صفر دسیبل 11 زده و نرخ 250 زده 10 خوب بقیشو نگرفتم این هشت بیتی چطور و رو چه حسابی کنار هم گذاشتین واضح تر توضیح بدین ممنون میشم در واقع اون 26هگزا چطور بدست اوردید؟ و در ضمن نگفتید nrf2401 که خریدیم رو پیش فرض رو چه سرعتی و چه دسیبیل تنظیم هست با تشکر من اماتور هستم ممنون میشم از توضیخات شما
    جدیدترین ویرایش توسط farzintey; ۱۴:۳۵ ۱۳۹۶/۱۱/۱۶.

    دیدگاه


      پاسخ : راه اندازی ماژول +nRF24L01

      نوشته اصلی توسط mfazl22 نمایش پست ها
      اون طور توی خود برنامه باید بنویسم یا کتاب خانه؟؟؟
      مثلا پورت C رو بدست آوردم که باید بزارم توی این آرایه اینو بلد نیستم راه نشون میدین
      همون آرایه هایی که تو هدر هست رو بیار تو فایل اصلی (main.c) و بعد به هدر برو و به صورت extern همون متغیر رو تعریف کن. هر جا که خواستی تغییر رو اعمال کن ، مثلا واسه Base_Addrs[0] مقداری که از پورت c خوندی رو قرار بده و بعد دوباره کانفیگ رو انجام بده ، من الان زیاد وقت ندارم واسه همین سرع توضیح دادم اگه متوجه نشدی بگو سر فرصت کامل توضیح بدم

      دلیل: ادغام دو پست برای جلوگیری از اسپم

      نوشته اصلی توسط farzintey نمایش پست ها
      سلام اون هدری که تو کتابخانه اردینو هستش من داخلش گشتم برای جا گذاری Command_Reg = 0x06; اصلا چنین عبارتی نبود
      دوست عزیز برای همون 0و1 که تو هشت بیت قرار دادید و گفتید شد 26 هگزا من تا اینجاش گرفتم که بله تو جدول برای صفر دسیبل 11 زده و نرخ 250 زده 10 خوب بقیشو نگرفتم این هشت بیتی چطور و رو چه حسابی کنار هم گذاشتین واضح تر توضیح بدین ممنون میشم در واقع اون 26هگزا چطور بدست اوردید؟ و در ضمن نگفتید nrf2401 که خریدیم رو پیش فرض رو چه سرعتی و چه دسیبیل تنظیم هست با تشکر من اماتور هستم ممنون میشم از توضیخات شما
      حالت پیش فرض 2 مگابیت بر ثانیه و توان 0 دسیبل هست (حد اکثر توان)
      ببینید کتابخانه ای که شما استفاده میکنید کلا فرق داره و اون چیزی که من گفتم واسه هدری هست که تو این تاپیک قرار داره
      واسه شما همه چیز مشخص هست مثلا خط زیر :
      کد:
      setDataRate( RF24_250KBPS ) ;
      مشخصه که سرعت رو روی 250 کیلو بیت تنظیم کرده

      دیدگاه


        پاسخ : راه اندازی ماژول +nRF24L01

        نوشته اصلی توسط M3R-E نمایش پست ها
        کد:
        Command_Reg = 0x06;
        Set_Reg(0x26);
        Command_Reg مقداری هست که در خانه 6 هگز ذخیره میشه
        مثلا اگه بخوایم توان ماژول رو روی 0 دسی بل و سرعت ارسال رو 250 کیلوبایت در ثانیه قرار بدیم مقدار Command_Reg به صورت زیر تغییر میکنه:
        بیت اول : 0
        بیت دوم :1
        بیت سوم:1
        بیت چهارم:0
        بیت پنجم:0
        بیت ششم:1
        بیت هفتم:0
        بیت هشتم:0
        که میشه 26 هگز
        هرجاش رو متجه نشدی بگو توضیح بدم
        موفق باشی


        با سلام من فایل هدری که میگفتین تو این تایپیک پیدا کردم و عکسشو گذاشتم منظور شما همون خط 286 تا 291 بود که برای تنظیم سرعت جا گذاری کنیم؟ تا اینجاشو گرفتم فقط لطف کن اون جا گذاری 8 بیتی که انجام دادی
        بیت اول : 0
        بیت دوم :1
        بیت سوم:1
        بیت چهارم:0
        بیت پنجم:0
        بیت ششم:1
        بیت هفتم:0
        بیت هشتم:0
        یه توضیح بدی که بیت اول برای چی هست که صفر گذاشتی و الی تا بیت هشت؟

        دیدگاه


          پاسخ : راه اندازی ماژول +nRF24L01

          نوشته اصلی توسط farzintey نمایش پست ها


          با سلام من فایل هدری که میگفتین تو این تایپیک پیدا کردم و عکسشو گذاشتم منظور شما همون خط 286 تا 291 بود که برای تنظیم سرعت جا گذاری کنیم؟ تا اینجاشو گرفتم فقط لطف کن اون جا گذاری 8 بیتی که انجام دادی
          بیت اول : 0
          بیت دوم :1
          بیت سوم:1
          بیت چهارم:0
          بیت پنجم:0
          بیت ششم:1
          بیت هفتم:0
          بیت هشتم:0
          یه توضیح بدی که بیت اول برای چی هست که صفر گذاشتی و الی تا بیت هشت؟

          فقط خط 286
          بیت اول که خودش گفته مهم نیست و هم میتونه 0 باشه و هم 1 که من 0 گذاشتم
          بیت دوم و سوم مربوط به توان فرستنده هست که اگه دوتاش 1 باشه حد اکثر توان رو داریم
          بیت چهارم به همراه بیت ششم (پنجم نه ششم) مربوط به تنظیم سرعت هست و همینطور که تو عکس مشخصه سمت راست مربوط به بیت چهارم و سمت چپ مربوط به بیت ششم هست که اگه بخوام سرعتم 250 کیلو بیت باشه بیت چهارم 0 و بیت ششم باید 1 باشه
          بیت پنجم هم که مربوط به حلقه قفل فاز هست و کار دقیقش رو نمیدونم ولی همینطور که گفته فقط در حالت تست 1 انتخاب کنید و در حالت دائم باید 0 باشه
          بیت هفتم هم که فقط باید 0 باشه
          بیت هشتم هم در زمان تست 1 میشه در غیر اینصورت باید 0 باشه

          دیدگاه


            پاسخ : راه اندازی ماژول +nRF24L01

            نوشته اصلی توسط M3R-E نمایش پست ها
            فقط خط 286
            بیت اول که خودش گفته مهم نیست و هم میتونه 0 باشه و هم 1 که من 0 گذاشتم
            بیت دوم و سوم مربوط به توان فرستنده هست که اگه دوتاش 1 باشه حد اکثر توان رو داریم
            بیت چهارم به همراه بیت ششم (پنجم نه ششم) مربوط به تنظیم سرعت هست و همینطور که تو عکس مشخصه سمت راست مربوط به بیت چهارم و سمت چپ مربوط به بیت ششم هست که اگه بخوام سرعتم 250 کیلو بیت باشه بیت چهارم 0 و بیت ششم باید 1 باشه
            بیت پنجم هم که مربوط به حلقه قفل فاز هست و کار دقیقش رو نمیدونم ولی همینطور که گفته فقط در حالت تست 1 انتخاب کنید و در حالت دائم باید 0 باشه
            بیت هفتم هم که فقط باید 0 باشه
            بیت هشتم هم در زمان تست 1 میشه در غیر اینصورت باید 0 باشه
            با سلام ممنون از توضیح کامل شما کاملا متوجه شدم فقط اون دستوراتی که من برای توان و سرعت تو محیط اردینو براتون گذاشته بودم من تا حالا از اون دستورات استفاده نکردم و از یه سایتی پیدا کردم که در زیر هم سایت و دستورات میذارم بنظر شما این دستورات میتونیم تو محیط اردینو استفاده کنیم برای تغییرات سرعت و توان ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟


             // Max power setPALevel( RF24_PA_MAX ) ; 


            // Min speed (for better range I presume)
            setDataRate( RF24_250KBPS ) ;


            // 8 bits CRC
            setCRCLength( RF24_CRC_8 ) ;


            // Disable dynamic payloads
            write_register(DYNPD,0);


            // increase the delay between retries & # of retries
            setRetries(15,15);

            دیدگاه


              پاسخ : راه اندازی ماژول +nRF24L01

              نوشته اصلی توسط farzintey نمایش پست ها
              با سلام ممنون از توضیح کامل شما کاملا متوجه شدم فقط اون دستوراتی که من برای توان و سرعت تو محیط اردینو براتون گذاشته بودم من تا حالا از اون دستورات استفاده نکردم و از یه سایتی پیدا کردم که در زیر هم سایت و دستورات میذارم بنظر شما این دستورات میتونیم تو محیط اردینو استفاده کنیم برای تغییرات سرعت و توان ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟


               // Max power setPALevel( RF24_PA_MAX ) ; 


              // Min speed (for better range I presume)
              setDataRate( RF24_250KBPS ) ;


              // 8 bits CRC
              setCRCLength( RF24_CRC_8 ) ;


              // Disable dynamic payloads
              write_register(DYNPD,0);


              // increase the delay between retries & # of retries
              setRetries(15,15);
              خواهش میکنم
              واسه توان از تابع
              کد:
              setPALevel( RF24_PA_MAX ) ;
              واسه سرعت از تابع این:
              کد:
              setDataRate( RF24_250KBPS ) ;
              کتابخانه هایی که واسه آردوینو هست معمولا بدون مشکل جواب میدن
              شما تا حالا nrf رو با آردوینو راه اندازی کردید؟

              دیدگاه


                پاسخ : راه اندازی ماژول +nRF24L01

                نوشته اصلی توسط M3R-E نمایش پست ها
                شما تا حالا nrf رو با آردوینو راه اندازی کردید؟
                سلام بله من مثال Hello World کار کردم فقط نمیدونم شما چقدر تو امر برنامه نویسی وارد هستین من الان دارم رو یه پروژه کار میکنم که میخام سیگنال مادون قرمز توسط nrf2401انتقال بدم تقریبا نصف راه رفتم و برنامه فرستنده و گیرنده نوشتم و ارتباط nrf2401 برقرار کردم در واقع اون برنامه انتقال مادون قرمز ادغامش کردم ولی نتونستم هنوز جواب بگیرم اگر تمایل داشته باشید براتون بفرستم یه نگاهی بکنید و کارمو تکمیل کنید چون من اماتور هستم

                فقط یه توضیح کلی بدم اول اینکهمن برنامه اردینو که با دو ماژول گیرنده و فرستنده مادون قرمز راه اندازی کردم و عکسشو پایین میذارم و کد مربوطه که اپلود میکنم به راحتی از ریموت کنترل سیگنال دریافت و در اخر با ماژول فرستنده همون سیگنالو تحویل میده فقط من همین عمل میخام با nr2401 انجام بدم



                این لینک فایل کتابخانه ای برای اردینو هست میتونید از این لینک دانلود کنید در مورد مادون قرمز و بعد دانلود و از زیپ خارج کردن در قسمت libraries اردینو قرار بدید تا برای کد بالا ایراد نگیره

                خوب الان پایین برنامه ای هست که عکسشم بالا گذاشتم .رو اردینو اپلود کردم و خوب جواب داد بعد هیمن برنامه روی
                nr2401پیاده کردم ولی نتونستم روی nr2401 کامل جواب بگیرم نصفشو رفتم اگه میتونید بقیشم برام راهنمایی کنید که مشکل کار کجاست؟



                //Illustrate how to record a signal and then play it back.


                #include <IRLibDecodeBase.h> //We need both the coding and
                #include <IRLibSendBase.h> // sending base classes
                #include <IRLib_P01_NEC.h> //Lowest numbered protocol 1st
                #include <IRLib_P02_Sony.h> // Include only protocols you want
                #include <IRLib_P03_RC5.h>
                #include <IRLib_P04_RC6.h>
                #include <IRLib_P05_Panasonic_Old.h>
                #include <IRLib_P07_NECx.h>
                #include <IRLib_HashRaw.h> //We need this for IRsendRaw
                #include <IRLibCombo.h> // After all protocols, include this
                // All of the above automatically creates a universal decoder
                // class called "IRdecode" and a universal sender class "IRsend"
                // containing only the protocols you want.
                // Now declare instances of the decoder and the sender.
                IRdecode myDecoder;
                IRsend mySender;


                // Include a receiver either this or IRLibRecvPCI or IRLibRecvLoop
                #include <IRLibRecv.h>
                IRrecv myReceiver(11); //pin number for the receiver


                // Storage for the recorded code
                uint8_t codeProtocol; // The type of code
                uint32_t codeValue; // The data bits if type is not raw
                uint8_t codeBits; // The length of the code in bits


                //These flags keep track of whether we received the first code
                //and if we have have received a new different code from a previous one.
                bool gotOne, gotNew;


                void setup() {
                gotOne=false; gotNew=false;
                codeProtocol=UNKNOWN;
                codeValue=0;
                Serial.begin(9600);
                delay(2000);while(!Serial);//delay for Leonardo
                Serial.println(F("Send a code from your remote and we will record it."));
                Serial.println(F("Type any character and press enter. We will send the recorded code."));
                Serial.println(F("Type 'r' special repeat sequence."));
                myReceiver.enableIRIn(); // Start the receiver
                }


                // Stores the code for later playback
                void storeCode(void) {
                gotNew=true; gotOne=true;
                codeProtocol = myDecoder.protocolNum;
                Serial.print(F("Received "));
                Serial.print(Pnames(codeProtocol));
                if (codeProtocol==UNKNOWN) {
                Serial.println(F(" saving raw data."));
                myDecoder.dumpResults();
                codeValue = myDecoder.value;
                }
                else {
                if (myDecoder.value == REPEAT_CODE) {
                // Don't record a NEC repeat value as that's useless.
                Serial.println(F("repeat; ignoring."));
                } else {
                codeValue = myDecoder.value;
                codeBits = myDecoder.bits;
                }
                Serial.print(F(" Value:0x"));
                Serial.println(codeValue, HEX);
                }
                }
                void sendCode(void) {
                if( !gotNew ) {//We've already sent this so handle toggle bits
                if (codeProtocol == NEC) {
                codeValue ^= 0x0800;
                }
                else if (codeProtocol == RC6,RC5,NEC ) {
                switch(codeBits) {
                case 20: codeValue ^= 0x10000; break;
                case 24: codeValue ^= 0x100000; break;
                case 28: codeValue ^= 0x1000000; break;
                case 32: codeValue ^= 0x8000; break;
                }
                }
                }
                gotNew=false;
                if(codeProtocol== UNKNOWN) {
                //The raw time values start in decodeBuffer[1] because
                //the [0] entry is the gap between frames. The address
                //is passed to the raw send routine.
                codeValue=(uint32_t)&(recvGlobal.decodeBuffer[1]);
                //This isn't really number of bits. It's the number of entries
                //in the buffer.
                codeBits=recvGlobal.decodeLength-1;
                Serial.println(F("Sent raw"));
                }
                mySender.send(codeProtocol,codeValue,codeBits);
                if(codeProtocol==UNKNOWN) return;
                Serial.print(F("Sent "));
                Serial.print(Pnames(codeProtocol));
                Serial.print(F(" Value:0x"));
                Serial.println(codeValue, HEX);
                }


                void loop() {
                if (Serial.available()) {
                uint8_t C= Serial.read();
                if(C=='r')codeValue=REPEAT_CODE;
                if(gotOne) {
                storeCode();
                myReceiver.enableIRIn(); // Re-enable receiver
                }
                }
                else if (myReceiver.getResults()) {
                myDecoder.decode();
                sendCode();
                myReceiver.enableIRIn(); // Re-enable receiver
                }
                }

                خوب من برنامه بالایی رو در کد فرستنده و کد گیرنده nrf2401 نوشتم که تو پایین میذارم ولی نتونستم سیگنال انتقال بدم ببینید مشکل کار کجاست درواقع وقتی ریموت کنترل بزنیم توسط گیرنده دریافت و انطرفتر همون سیگنال توسط فرستنده دریاف و در خروجی مشاهده کنیم

                این کدفرستنده



                #include <SPI.h>
                #include "nRF24L01.h"
                #include "RF24.h"
                #include <IRLibDecodeBase.h> //We need both the coding and
                #include <IRLibSendBase.h> // sending base classes
                #include <IRLib_P01_NEC.h> //Lowest numbered protocol 1st
                #include <IRLib_P02_Sony.h> // Include only protocols you want
                #include <IRLib_P03_RC5.h>
                #include <IRLib_P04_RC6.h>
                #include <IRLib_P05_Panasonic_Old.h>
                #include <IRLib_P07_NECx.h>
                #include <IRLib_HashRaw.h> //We need this for IRsendRaw
                #include <IRLibCombo.h>
                #include <IRLibRecv.h>
                ////////////////////////////////////////////////
                boolean ok;
                bool gotOne, gotNew;
                ////////////////////////////////////////////////
                uint8_t codeProtocol; // The type of code
                uint32_t codeValue; // The data bits if type is not raw
                uint8_t codeBits; // The length of the code in bits
                ///////////////////////////////////////////////
                IRdecode myDecoder;
                IRsend mySender;
                IRrecv myReceiver(6); //pin number for the receiver
                //////////////////////////////////////////////
                int transmiting_payload[2]; // Array for Storing Transmitting Variables
                ////////////////////////////////////////////////////////////
                RF24 radio(9,10);

                // Radio pipe addresses for the 2 nodes to communicate.
                const uint64_t pipes[2] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL };

                // Role management
                typedef enum { role_ping_out = 1, role_pong_back } role_e;

                // The debug-friendly names of those roles
                const char* role_friendly_name[] = { "invalid", "Ping out", "Pong back"};

                // The role of the current running sketch
                role_e role = role_pong_back;
                //////////////////////////////////////////////////////////////////////
                void setup() {
                Serial.begin(57600);
                IRtest_init();
                //////////////////////////////////////////////////////
                Serial.println("NRF24L01 Default Mode is:");
                Serial.println(role_friendly_name[role]);
                // Setup and configure rf radio
                radio.begin();
                radio.setPALevel(RF24_PA_MIN);
                // optionally, increase the delay between retries
                radio.setRetries(15,15);
                radio.openReadingPipe(1,pipes[1]);
                // Start listening
                radio.startListening();
                // Dump the configuration of the rf unit for debugging
                radio.printDetails();
                // NRF Change roles
                NRF_ChangeRole();
                }
                /////////////////////End of NRF////////////////////////////
                void loop() {
                delay(5);
                //transmit_enable = digitalRead(transmit_enable_pin); //Check for Enable Transmitting by key
                if (Serial.available()) {
                uint8_t C= Serial.read();
                if(C=='r')codeValue=REPEAT_CODE;
                if(gotOne) {
                storeCode();
                myReceiver.enableIRIn(); // Re-enable receiver
                }
                }
                else if (myReceiver.getResults()) {
                myDecoder.decode();
                sendCode();
                myReceiver.enableIRIn(); // Re-enable receiver
                }
                int codeBits=recvGlobal.decodeLength-1;
                //NRF Transmitting (Default Mode)
                NRF_Transmitting();
                //NRF Receiving
                // NRF_Receiving();
                print_data(); //Enable this Line Only For Debugging
                }
                /////////////////////////////////////////////////////////////////
                int NRF_Transmitting(){
                if (role == role_ping_out )
                {
                // First, stop listening so we can talk.
                radio.stopListening();
                transmiting_payload[0]= codeValue;
                ok = radio.write( transmiting_payload, sizeof(transmiting_payload) );
                // Try again 1s later
                delay(5);
                // Now, continue listening
                radio.startListening();
                }
                }
                //////////////////////////////////////////////////////////////////////
                void NRF_ChangeRole(){
                Serial.println("You Are in Transmitting Mode (Default)");
                // Become the primary transmitter (ping out)
                role = role_ping_out;
                radio.openWritingPipe(pipes[0]);
                radio.openReadingPipe(1,pipes[1]);
                }
                /////////////////////////////////////////////////////////////
                void IRtest_init(void){
                gotOne=false; gotNew=false;
                codeProtocol=UNKNOWN;
                codeValue=0;
                //Serial.begin(9600);
                delay(2000);while(!Serial);//delay for Leonardo
                Serial.println(F("Send a code from your remote and we will record it."));
                Serial.println(F("Type any character and press enter. We will send the recorded code."));
                Serial.println(F("Type 'r' special repeat sequence."));
                myReceiver.enableIRIn(); // Start the receiver
                }
                /////////////////////////////////////////////////////////////////
                // Stores the code for later playback
                void storeCode(void) {
                gotNew=true; gotOne=true;
                codeProtocol = myDecoder.protocolNum;
                Serial.print(F("Received "));
                Serial.print(Pnames(codeProtocol));
                if (codeProtocol==UNKNOWN) {
                Serial.println(F(" saving raw data."));
                myDecoder.dumpResults();
                codeValue = myDecoder.value;
                }
                else {
                if (myDecoder.value == REPEAT_CODE) {
                // Don't record a NEC repeat value as that's useless.
                Serial.println(F("repeat; ignoring."));
                } else {
                codeValue = myDecoder.value;
                codeBits = myDecoder.bits;
                }
                Serial.print(F(" Value:0x"));
                Serial.println(codeValue, HEX);
                }
                }
                ///////////////////////////////////////////////////////////////
                void sendCode(void) {
                if( !gotNew ) {//We've already sent this so handle toggle bits
                if (codeProtocol == NEC) {
                codeValue ^= 0x0800;
                }
                else if (codeProtocol == RC6,RC5,NEC ) {
                switch(codeBits) {
                case 20: codeValue ^= 0x10000; break;
                case 24: codeValue ^= 0x100000; break;
                case 28: codeValue ^= 0x1000000; break;
                case 32: codeValue ^= 0x8000; break;
                }
                }
                }
                gotNew=false;
                if(codeProtocol== UNKNOWN) {
                //The raw time values start in decodeBuffer[1] because
                //the [0] entry is the gap between frames. The address
                //is passed to the raw send routine.
                codeValue=(uint32_t)&(recvGlobal.decodeBuffer[1]);
                //This isn't really number of bits. It's the number of entries
                //in the buffer.
                codeBits=recvGlobal.decodeLength-1;
                Serial.println(F("Sent raw"));
                }
                mySender.send(codeProtocol,codeValue,codeBits);
                if(codeProtocol==UNKNOWN) return;
                Serial.print(F("Sent "));
                Serial.print(Pnames(codeProtocol));
                Serial.print(F(" Value:0x"));
                Serial.println(codeValue, HEX);
                }
                void print_data(){
                if (ok){
                Serial.println("Transmitting :");
                ok = false;
                delay(1000);
                }
                else{
                Serial.println("Failed to connect");
                delay(1000);
                }
                }



                و کد گیرنده



                #include <SPI.h>
                #include <RF24_config.h>
                #include "nRF24L01.h"
                #include "RF24.h"
                #include <IRLibDecodeBase.h> //We need both the coding and
                #include <IRLibSendBase.h> // sending base classes
                #include <IRLib_P01_NEC.h> //Lowest numbered protocol 1st
                #include <IRLib_P02_Sony.h> // Include only protocols you want
                #include <IRLib_P03_RC5.h>
                #include <IRLib_P04_RC6.h>
                #include <IRLib_P05_Panasonic_Old.h>
                #include <IRLib_P07_NECx.h>
                #include <IRLib_HashRaw.h> //We need this for IRsendRaw
                #include <IRLibCombo.h>
                //////////////////////////////////////////////////////////////

                uint8_t codeProtocol; // The type of code
                uint32_t codeValue; // The data bits if type is not raw
                uint8_t codeBits; // The length of the code in bits
                /////////////////////////////////////////////////////////////////
                IRdecode myDecoder;
                IRsend mySender;
                ////////////////////////////////////////////////////////////////
                int received_payload[2]; // Variable for Storing Received Value
                /////////////////////////////////////////////////////////////////
                boolean done=false;
                bool gotOne, gotNew;
                //////////////////////////////////////////////////////////////////
                //IRrecv irrecv(RECV_PIN);
                //decode_results results;
                /////////////////////////////////////////////////////////
                // Set up nRF24L01 radio on SPI bus plus pins 7 & 8
                RF24 radio(7,8);
                // Radio pipe addresses for the 2 nodes to communicate.
                const uint64_t pipes[2] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL };
                // Role management
                // The various roles supported by this sketch
                typedef enum { role_ping_out = 1, role_pong_back } role_e;
                // The debug-friendly names of those roles
                const char* role_friendly_name[] = { "invalid", "Ping out", "Pong back"};
                // The role of the current running sketch
                role_e role = role_pong_back;
                void setup(void){
                Serial.begin(57600);
                // printf_begin();
                radio.begin();
                radio.setPALevel(RF24_PA_MIN);
                // optionally, increase the delay between retries
                radio.setRetries(15,15);
                radio.openWritingPipe(pipes[1]);
                radio.openReadingPipe(1,pipes[0]);
                // NRF Change roles
                NRF_ChangeRole();
                // Start listening
                radio.startListening();
                // Dump the configuration of the rf unit for debugging
                radio.printDetails();
                IRtest_init();
                }
                ///////////////////////////////////////////////////////////////////
                void loop(void)
                {
                delay(10);
                // NRF Receiving Mode (Default)
                int codeValue =0;
                NRF_Receiving();
                if (codeBits > 0) {
                digitalWrite(3,HIGH);
                delay(40);}
                else{digitalWrite(3,LOW);
                return;
                }
                //NRF Transmitting
                // NRF_Transmitting();
                print_data(); //Printing Data Enable this line only for Debugguing
                }
                //////////////////////////////////////////////////////////////////
                int NRF_Receiving(){
                // radio.startListening();
                if ( role == role_pong_back )
                {
                // if there is data ready
                if ( radio.available() )
                {
                // Dump the payloads until we've gotten everything
                done = false;
                while (!done)
                {
                // Fetch the payload, and see if this was the last one.
                done = radio.read( received_payload, sizeof(received_payload) );
                // received_payload[0]=sendCode;
                }

                //printf("Got payload %lu...",received_payload[0]);
                // Serial.println(sendCode);

                delay(20);
                codeValue = received_payload[0];
                }
                }
                }
                /////////////////////////////////////////////////////
                void NRF_ChangeRole(){
                Serial.println("You Are in Receiving Mode (Default)");
                // Become the primary receiver (pong back)
                role = role_pong_back;
                radio.openWritingPipe(pipes[1]);
                radio.openReadingPipe(1,pipes[0]);
                }
                //////////////////////////////////////////////////////////
                void IRtest_init(void){
                gotOne=false; gotNew=false;
                codeProtocol=UNKNOWN;
                codeValue=0;
                //Serial.begin(9600);
                delay(2000);while(!Serial);//delay for Leonardo
                Serial.println(F("Send a code from your remote and we will record it."));
                Serial.println(F("Type any character and press enter. We will send the recorded code."));
                Serial.println(F("Type 'r' special repeat sequence."));
                //myReceiver.enableIRIn(); // Start the receiver
                }
                ///////////////////////////////////////////////////////////
                void print_data(){
                if(done){
                Serial.println("Received payload:");
                done = false;
                }
                }






                جدیدترین ویرایش توسط farzintey; ۱۷:۵۱ ۱۳۹۶/۱۱/۱۹.

                دیدگاه


                  پاسخ : راه اندازی ماژول +nRF24L01

                  نوشته اصلی توسط M3R-E نمایش پست ها
                  همون آرایه هایی که تو هدر هست رو بیار تو فایل اصلی (main.c) و بعد به هدر برو و به صورت extern همون متغیر رو تعریف کن. هر جا که خواستی تغییر رو اعمال کن ، مثلا واسه Base_Addrs[0] مقداری که از پورت c خوندی رو قرار بده و بعد دوباره کانفیگ رو انجام بده ، من الان زیاد وقت ندارم واسه همین سرع توضیح دادم اگه متوجه نشدی بگو سر فرصت کامل توضیح بدم
                  نتونستم
                  درست کنم امکان داره توضیح بیشتر بدی
                  گاهی نمی شود که نمی شود
                  گاهی قرعه نگفته به نام تو می شود
                  گاهی گدای گدایی و چاره چیست
                  گاهی تمام شهر گدای تو میشود
                  ای بنده بدان در این عالم ___هرچه خدا خواست همان می شور

                  دیدگاه


                    پاسخ : راه اندازی ماژول +nRF24L01

                    نوشته اصلی توسط mfazl22 نمایش پست ها
                    نتونستم
                    درست کنم امکان داره توضیح بیشتر بدی
                    ببین
                    شما یه مقدار رو از پورت c میخونید و تو یه متغیر ذخیره میکنید
                    خط زیر در هدر nrf رو پیدا کن :
                    کد:
                    flash unsigned char Base_Addrs[5]={0x00,0x01,0x03,0x07,0x00};
                    و به صورت زیر تغییرش بده :
                    کد:
                    extern unsigned char Base_Addrs[5]={0x00,0x01,0x03,0x07,0x00};
                    حالا به main.c برو یه متغیر به شکل زیر تعریف کن :
                    کد:
                    unsigned char Base_Addrs[5]={0x00,0x01,0x03,0x07,0x00};
                    حالا هر موقع که خواستی کد رو عوض کنی مقدار هر کدوم از این آرایه ها رو برابر با مقداری که از portc خوندی قرار بده و دوباره تابع کانفیگ رو اجرا کن

                    دیدگاه


                      پاسخ : راه اندازی ماژول +nRF24L01

                      درست شد


                      ممنونم از زحمت بی منت شما دوست عزیز
                      گاهی نمی شود که نمی شود
                      گاهی قرعه نگفته به نام تو می شود
                      گاهی گدای گدایی و چاره چیست
                      گاهی تمام شهر گدای تو میشود
                      ای بنده بدان در این عالم ___هرچه خدا خواست همان می شور

                      دیدگاه


                        پاسخ : [آموزش]راه اندازی ماژول +nRF24L01

                        با سلام ایا میشه یه NRF2401 بین دو تا NRF2401 قرار داد و نقش یک پارال بازی کرد به عبارتی اگه به ترتیب شماره 1 و 2 و 3 داشته باشیم شماره یک اطلاعات به 2 بده و دو هم به 3 اینجور چییزی امکان داره بین NRF024 اتفاق بیوفته اگه امکانش هست طرز ادرس دهی چطوره ممنون میشم یکی راهنمایی کنه؟

                        دیدگاه


                          پاسخ : [آموزش]راه اندازی ماژول +nRF24L01

                          نوشته اصلی توسط farzintey نمایش پست ها
                          با سلام ایا میشه یه NRF2401 بین دو تا NRF2401 قرار داد و نقش یک پارال بازی کرد به عبارتی اگه به ترتیب شماره 1 و 2 و 3 داشته باشیم شماره یک اطلاعات به 2 بده و دو هم به 3 اینجور چییزی امکان داره بین NRF024 اتفاق بیوفته اگه امکانش هست طرز ادرس دهی چطوره ممنون میشم یکی راهنمایی کنه؟
                          سلام
                          شما کد شماره 1 و 2 رو مثل هم بزار و 3 یه کد دیگه بزار
                          از 1 که ارسال کردی به 2 و 2 دریافت کرد کد 2 رو با کد 3 یکی کن و دوباره ارسال کن

                          دیدگاه


                            پاسخ : [آموزش]راه اندازی ماژول +nRF24L01

                            با سلام من این برنامه رو کامپایل کردم
                            ولی جواب نداد
                            انگار هیچی ارسال و دریافت نمیشه؟
                            ماژول گیرنده من یکم گرم میشه احتمال سوختن ماژول هستش ؟؟
                            یه بار اشتباهی به 5 ولت زدم ؟؟
                            میتونه 5 ولت رو تحمل کنه ماژول یا نه ؟؟؟؟

                            دیدگاه


                              پاسخ : [آموزش]راه اندازی ماژول +nRF24L01

                              نوشته اصلی توسط yasin136n نمایش پست ها
                              با سلام من این برنامه رو کامپایل کردم
                              ولی جواب نداد
                              انگار هیچی ارسال و دریافت نمیشه؟
                              ماژول گیرنده من یکم گرم میشه احتمال سوختن ماژول هستش ؟؟
                              یه بار اشتباهی به 5 ولت زدم ؟؟
                              میتونه 5 ولت رو تحمل کنه ماژول یا نه ؟؟؟؟
                              سلام
                              از ماژولی استفاده کنید که مطمئنید سالمه و اینکه یه خازن بین 470 تا 1000 میکرو باید نزدیکترین جا به تغذیه ماژول قرار بدین ، خیلی مهمه این خازن و اگه نباشه ماژول کار نمیکنه

                              دیدگاه


                                پاسخ : [آموزش]راه اندازی ماژول +nRF24L01

                                ممنون از پاسخ دهیتون
                                چرا باید از خازن استفاده کنیم ؟؟؟
                                با تشکر

                                دیدگاه

                                لطفا صبر کنید...
                                X