به نام خدا : بلاخره کتابخونه nRF24L01 رو نوشتم و تو سایت ECA منتشر کردم، چند وقتی بود میخواستم تو سایت خودم هم قرارش بدم ولی حالش رو نداشتم، این کتابخونه برای برد آردوینو هستش، تقریبا از تمام امکانات اصلی ماژول NRF24L01 استفاده کردم در این کتابخونه، کتابخونه دو سری NRF24L01 و +NRF24L01 رو براتون قرار دادم در این مطلب، پروژه نمونه، پروژه های نمونه بیشتر با این کتابخونه رو بعدا براتون میزارم، این پروژه هایی که میزارم، پروژه آردوینو هستن فقط و نه کدویژن و نه چیز دیگه ای.
پروژه و کتابخونه و آموزش nrf24l01 با آردوینو
تغییرات داده شده در کتابخونه +NRF24L01
سه شنبه – ۶ مهر ۱۳۹۵
- تابع ارسال عدد اعشاری
- تابع ارسال عدد صحیح
- تابع پیدا کردن تعداد ارقام یه عدد صحیح ( به صورت Privete تعریف شده و برای شما قابل استفاده نیست )
- اضافه شدن دو پروژه ارسال و دریافت عدد اعشاری
- اضافه شدن دو پروژه ارسال و دریافت عدد صحیح
- حل مشکل عدم نمایش لیست مثال ها در آردوینو
تغییراتی که در کتابخونه +NRF24L01 باید داده شود
- اضافه کردن spi مجازی
- private کردن توابع و متغییر های غیر ظرروری
- استفاده از پایه وقفه ماژول Nrf24l01
ویژگی های ماژول NRF24L01
- فراهم بودن باند آزاد (ISM1) و حهانی ۴Ghz
- تا Mbps2 نرخ انتقال داده (در) هوا
- توان مصرفی فوق العاده کم
- ۳mA جریان مصرفی فرستنده(مد TX) در ۴۰dbm
- ۳mA جریان مصرفی گیرنده(مد RX) در نرخ انتقال داده هوا ۲Mbps
- ۹۰۰nA در مد PowerDown
- ۲۲uA در مد Standby-1
- وجود رگولاتور ولتاژ بر روی تراشه
- تامین محدوده ولتاژ ۱٫۹ الی ۳٫۶ ولت
- وجود تکنولوژی Enhanced ShockBurst 3
- جابجایی خودکار بسته های اطلاعاتی
- معامله خودکار بسته های اطلاعاتی
- ۶ لوله دیتا MULTICEIVER برای ارتباط چند ماژول به یکدیگر و ایجاد یک شبکه محلی
- سازگاری هوایی با ماژول های nRF2401A ,02 ,E1 AND E2
- یه چیپ ( BOM) کم هزینه.(قسمت ماژول رو میگه!)
- وجود کریستال ۱۶MHz با خطای +-۶۰ppm5
- تحمل ولتاژ ۵ ولت ورودی
- پکیج QFN (فشرده و کوچ) به اندازه ۴*۴ میلی متر با ۲۰ پایه
گفتن ویژگی های ماژول nRF24L01 به صورت دیگه ای :
nRF24L01 شامل ویژگی های زیر هستش :
رادیو
- فراهم بودن باند فرکانسی آزاد(ISM) 4GHz
- ۱۲۶ کانال رادیویی
- پایه های RX و TX مشترک
- مودلاسون GFSK
- نرخ انتقال داده در هوا با ۱-۲Mbps
- در هر دو نرخ انتقال داده همپوشانی فرکانسی رخ نمیده در اون نرخ انتقال داده با بقیه امواج
فرستنده
- قابلیت تنظیم توان خروجی : ۰, -۶, -۱۲ or -18dBm
- ۳mA در ۰dBm توان خروجی
گیرنده
- Integrated channel filters
- ۳mA در ۲Mbps
- حساسیت -۸۲dBm در ۲Mbps
- حساسیت -۸۵dBm در ۱Mbps
- قابلیت برنامه ریزی LNA gain
موارد استفاده از ماژول NRF24L01
- لوازم جانبی وایرلس(بیسیم) کامپیوتر
- موس، کیبورد و کنترل از راه دورها
- ۳-in-one desktop bundles
- کنترل از راه دور وسایل مرکزی پیشرفته
- هدست های VoIP
- دستگاه های کنترل کننده بازی
- ساعت های هوشمند و سنسورها
- کنترل از راه دور دستگاه های مصرف کننده الکترونیکی
- اتوماسیون خانگی و صنعتی
- سنسور های شبکه با توان مصرفی خیلی پایین
- RFID های فعال۲
- سیستم های ردیابی اموال
- اسباب بازی ها
معرفی پایه های ماژول NRF24L01
خب همون طور که در شکل زیر میبیند این ماژول حدود ۸ تا پایه داره، ۲ تای اول برا تغذیه ماژول هستش که باید ولتاژ ۳٫۳ ولت بهش بدی، ۵ تا پایه بعدی برا بحث ارسال و دریافت داده از ماژول هستش که این ماژول از پروتکول SPI استفاده میکنه، و پایه آخری هم پایه وقفه ماژول هستش، که من در این کتابخونه ازش استفاده نکردم، حالا شاید تو آینده این امکان رو بهش اضافه کردم شاید هم نکردم :-D، این ترتیب پایه ها رو هم ببینید تا در عمل و در بستن مدار به مشکل بر نخورید.
اینم از ماژول سری بدون آنتن که ترتیب پایه هاش رو مشاهده میکنید و فرقی با سری آنتن دار نداره.
اتصال ماژول NRF به آردوینو
برای این کار باید اتصالاتتون همانند شکل زیر باشه، ولی میتونید از طریق کدهای پروژه پایه های ۳و۴ ماژول رو جاشون رو تغییر بدین و به یه پایه های دیگه از از بردتون وصل کنید، ولی برا پایه های مربوط به SPI نمیتونید این کار رو بکنید چون من تو کتابخونه از SPI سخت افزاری استفاده کردم و نه مجازی، جالا اگه بعدا یادم بود و وقتش و حسش و… بود این امکان رو هم اضافه میکنم.
این عکس زیر رو هم که میبینید، من یادمه رفتم سراغ راه اندازی NRF24L01 بعد کتابخونه آماده دانلود کردم و شماتیک اون کتابخونه همین عکس زیر بود، بعد من از کتابخونه هه خوشم نیومد و رفتم شروع کردم به نوشتن کتابخونه، و این کار حدود ۱ ماه برام طول کشید، ترجمه دیتاشیت، مطالعات جانبی در مرود اصطلاحات اختصاصی و چیزای دیگه، مطالعه در زمینه برنامه نویسی و مخصوصا کار با اشاره گرها، نوشتن مطالب مورد نیاز در سایت و… و این شماتیک پیشم موند و مدارم رو بر طبق همین بستم و الان هم همین طور هستش
برای اتصال ماژول به میکرو کنترلر arduino mega باید اتصالات به صورت زیر باشه، توچه کنید که در زیر ماژول رو چرخوندن و اگه ماژول در عکس زیر و عکس بالا رو با هم مقایسه کنید میبینید که ماژول چرخیده، برا میکرو های دیگه هم به همین صورت هستش، پایه های Spi ماژول رو که باید به پایه های Spi اون میکرو وصل کنید و پایه های gnd و ۳٫۳ ولت هم که گفتن نداره^_^، پایه های ce و csn هم که قابل تعیین کردن هستش.
این پروژه رو با مگا هم تست کردم با ماژول های سری بدون آنتن هم تست کردم، با یه مگا و یه یونو هم تست کردم و در همه حالات جواب داده.
تفاوت بین NRF24L01 و +NRF24L01
خب همون طور که در شکل زیر میبینید مدار هر دو ماژول فوق یکسان هستش، یعنی برید دیتاشیت هر دو ماژول رو بخونید همین مدار زیر رو عینا میبینید، تنها تفاوت این دو، در هسته مرکزیشون و اون IC اصلیشون هستش، که +NRF24L01 نسخه ارتقا یافته NRF24L01 هستش.(اگه خواستین میتونید خودتون هم این ماژول رو بسازید و اگه خواستید هم میتونید برید به قیمتی حدود ۳۰ تومن برا سری آنتن دار و ۱۰ تومن برا سری بدون آنتن بخرید.)
که تفاوت این دو مورد رو در زیر براتون قرار میدم :
+NRF24L01 | NRF24L01 |
۲۵۰kbps, 1Mbps and 2Mbps on air data rates | ۱Mbps and 2Mbps on air data rates |
۱۳٫۵mA RX at 2Mbps air data rate | ۱۲٫۳mA RX at 2Mbps air data rate |
۲۶µA in standby-I | ۲۲µA in standby-I |
در مکان ۰۹ حافظه ریجستر RPD قرار دارد | در مکان ۰۹ حافظه ریجستر CD قرار دارد |
این بیت حذف شده. | وجود بیت LNA_HCURR از ریجستر RF_SETUP این بیت مربوطه به جریان مصرفی اگه اشتباه نکنم. |
دیتاشیت فارسی و انگلیسی ماژول NRF24L01
خب این دیتاشیت ماژول رو براتون ترجمه کردم و در زیر برا دانلود براتون قرار میدم، اگه میخواین خودتون کتابخونه منو تغییر بدین و یا خودتون کتابخونه بنویسید و یا هر کاربرد دیگه ای که نیاز به ترجمه دیتاشیت داشته باشه میتونید از این فایل استفاده کنید.
مشکلاتی در ترجمه هستش قطعا که بعضیاش رو میخواستم تصحیح کنم ولی قسمت نشد بعضیاش رو هم بزارید رو حساب بی سوادی ما.
دانلود دیتاشیت فارسی و انگلیسی ماژول + توضیحات و فایل های مورد نیاز NRF24L01
توضیح توابع کتابخانه ماژول NRF24L01
خب این کتابخونه ای که من نوشتم شامل توابع زیر هستش(حالا هی من من کن، خوب شد کار بزرگی نکردی اون موقع چی کار میکردی خودم خودمو نصیحت میکنم
)
لیست توابع این کتابخونه رو در زیر قرار میدم و بعد میرم مورد به مورد هر کدوم رو توضیح میدم.( فقط توابع عمومی/Public )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
class NRF { public: void init(uint8 ce_pin, uint8 csn_pin); void setReceiverAddress(uint8 PipeNumber, char * AddressReceiver, uint8 AddressWidth); void setSenderAddress(char * AddressSender, uint8 AddressWidth); void Pipe(uint8 PipeNumber, bool EnablePipe, uint8 payloadSize, bool enableACK); void config(uint8 channel, CrcLength CRCval, AirDataRate DataRate, uint8 DelayReTransmin, uint8 CountReTransmin); void setStaticPayloadSize(uint8 PipeNumber, uint8 payloadSize); uint8 getStaticPayloadSize(uint8 PipeNumber); void setDPL(bool Enable); void setDynamicPayload(uint8 PipeNumber, bool EnablePipe); uint8 getDynamicPayloadSize(void); bool getDynamicPayload(uint8 PipeNumber); bool setChannel(uint8 channel); uint8 getChannel(); void flushRx(); void flushTx(); void ceW(bool level); bool ceR(void); void csnW(bool level); void getData(void * data); void send(char * DataSend, uint8 PALevel, bool NoACK); void sendInt(unsigned long DataSend, uint8_t base, uint8 PALevel, bool NoACK); void sendFloat(double DataSend, uint8_t floatDigits, uint8 PALevel, bool NoACK); bool isSending(); void configRegister(uint8 reg, uint8 value); void readRegister(uint8 reg, uint8 * value, uint8 len); void writeRegister(uint8 reg, char * value, uint8 len); void SetpowerUpRx(); void SetpowerUpTx(); void SetpowerDown(); Mode getMode(); bool setAddressWidth(uint8 width); uint8 getAddressWidth(); void EnableDataPipe(uint8 PipeNumber, bool EnablePipe); uint8 CountLostPackets(); void ResetCountLostPackets(uint8 ChannelChangeCount); uint8 CountRetransmitPackets(); void SetCRC(CrcLength Length); uint8 getCRCLength(void); void setDataRate(AirDataRate DataRate); uint8 getDataRate(void); uint8 TXFifo(void); uint8 RXFifo(uint8* pipe_num); void setIRQ(bool tx, bool fail, bool rx); void getIRQ(bool *fail, bool *tx, bool *rx); void toggle_features(void); uint8 getPayloadSize(void); void setPALevel(uint8 level); uint8 getPALevel(void); bool testCarrier(void); void findBestChannel(uint8 * ChannelList, uint8 StartChannel, uint8 EndChannel, int Delay); void setAutoAck(uint8 PipeNumber, bool Enable); bool isAutoAckEnabled(uint8 PipeNumber); void SetupReter(uint8 delay, uint8 count); // AutoRetransmit Count & Delay //uint8 FindChannelAnoderNrf_RiciveData(uint8 Delay); private: unsigned char numberDigits(unsigned long int Number); uint8 CLP=0; // CountLostPackets uint8 payloadStatic; //Payload width, if(payload==0)DynamicPayload=Enable uint8 PTX; //In sending mode. uint8 cePin; //CE Pin controls RX / TX, default 8. uint8 csnPin; //CSN Pin Chip Select Not, default 7. CrcLength Crc; }; |
خب این کتابخونه حدود ۵۱ تابع داره که یه سری هاش رو ما باید ازش استفاده کنیم و یه سری هاش رو نباید استفاده کنیم(منم یادم رفت دیگه توابع غیر ضروری رو private کنم) که الام میریم سراغ توضیح دادنشون به صروت تک تک(البته اونایی که مورد نیاز هستش و به کار میاد)
1 |
void init(uint8 ce_pin, uint8 csn_pin); |
خب این تابع در اول پروژه باید فراخونی بشه و کارش تعیین پایه های ce و csn ماژول Nrf هستش.
1 2 |
void setReceiverAddress(uint8 PipeNumber, char * AddressReceiver, uint8 AddressWidth); void setSenderAddress(char * AddressSender, uint8 AddressWidth); |
خب اگه دیتاشیت فارسی ماژول nrf24l01 رو خونده باشید(در زیر قرار دادم) این تابع و این توضیحات من رو الان دقیقا متوجه میشید، این ماژول NRF24L01 حدود ۶ تا لوله دریافت داده داره و یه لوله ارسال داده، البته ماژول NRF با N تا ماژول دیگه میتونه ارتباط داشته باشه و این عدد ۶ که من میگم برا اینه که همزمان میتونه از ۶ تا ماژول دیگه دیتا دریافت کنه و بیاد دونه دونه لوله ها رو بخونه، بگذریم از این بحث،
PipeNumber : خب این پارامتر در تابع “تظیم آدرس لوله دریافت” ( setReceiverAddress ) قرار داره و میتونه اعداد ۰ تا ۵ رو بهش انتصاب بدید.
AddressReceiver و AddressWidth : این پارامتر(AddressReceiver) نام ماژول دریافت کننده رو تعیین میکنید و یه نامی برای این لوله قرار میدید که میتونه ۳ تا ۵ بایت طول داشته باشه و این مقدار طول داده رو در پارامتر AddressWidth قرار میدید، مثلا اگه طول AddressReceiver برابر ۴ بایت باشه شما در قسمت پارامتر AddressWidth میاید و عدد ۴ رو قرار میدید.(من برای کاهش حجم برنامه این قسمت رو گزاشتم بر عهده کاربر)
AddressSender و AddressWidth : این دو تا پارامتر هم مثل ۲ پارامتر بالا هستش فقط این مورد برا تعیین آدرس ماژول فرستنده داده هستش.
توجه ۱ : این که میگم فرستنده گیرنده به این معنی نیستش که فقط یکی میتونه دیتا ارسال کنه و فقط یه ماژول میتونه دیتا دریافت کنه، اصلا به این معنی نیستش، چون ما از هر دو تابع در هر ماژول nrf استفاده میکنیم، یعنی یه نام برای لوله دریافت کننده اش تعیین میکنیم و یه نام برای لوله ارسال کننده داده اش تعیین میکنیم.
توجه ۲ : تنها ماژول هایی که نام AddressReceiver ماژول شما و همچنین کانال ماژول شما رو بدونن میتونن به ماژول شما دیتا ارسال کنن ولاغیر.
توجه ۳ : شما تنها به ماژول هایی میتونید دیتا ارسال کنید که نام AddressReceiver ماژولشون رو بدونید و همچنین کانال فرکانسیشون رو(همون توجه ۲ بود این فقط به یه صورت دیگه گفتمش )
توجه ۴ : سعی کنید طول آدرس گیرنده و فرستندتون رو روی حداکثر یعنی ۵ بایت قرار بدید تا هک کردن ماژول مشکل بشه.
توجه ۵ : از تابع setReceiverAddress در برناممون دو بار استفاده میکنیم یکی لوله ۰ باید باشه و اون یکی فرق نداره، یکی رو برای لوله ۰ انتخاب میکنیم چون بسته تصدیق نامه توسط این لوله دریافت میشه، بسته تصدیق نامه چیزی هستش که به ما میگه که دیتایی که ارسال کردیم آیا توسط گیرنده دریافت شده یا نه، اگه ما این بسته تقدیق نامه رو دریافت کنیم یعنی ماژول گیرنده دیتا رو به درستی دریافت کرده؛ توجه داشته باشید که وقتی برای ماژول گیرنده دیتا ارسال میکنیم وقتی ماژول گیرنده دیتا رو دریافت کرد میاد یه بسته تصدیق نامه به صورت خودکار برا ماژول فرستنده ارسال میکنه و بهش میگه که داداش دمت گرم من دیتا رو دریافت کردم به درستی. بسته صدیق نامه رو فک کنم میگفتن ACK (حالا باید تو دیتاشیتش نگاه کنید، آخرای دیتاشیت فارسی ماژول فوق رو که براتون گزاشتم)
1 |
void Pipe(uint8 PipeNumber, bool EnablePipe, uint8 payloadSize, bool enableACK); |
خب لوله هایی که در تابع بالا استفاده کردید رو میاید اینجا و تنظیماتش رو تعیین میکنید(تنظیمات باید یکسان باشه – این طوری بهتره)
PipeNumber : شماره لوله(۵-۰)
EnablePipe : فعال کردن لوله(عدد ۱ رو باید قرار بدید)
payloadSize : طول حامل(دیتا)یی که این طوله باید دریافت کنه، که این طول حامل میتونه از ۱-۳۲ بایت باشه؛ اگه اعداد ۱-۳۲ قرار بدید ماژول فقط به اون مقدار میتونه دیتا در هر لحظه بخونه و در ضمن ماژول ارسال کننده هم باید به همین مقدار دیتا ارسال کنه، یعنی اگه این پارامتر رو روی ۱۰ بایت تنظیم کردید، ماژول فرستنده هم باید روی ۱۰ بایت تنظیم بشه، در این حالت دیتایی با طول ثابت ۱۰ بایت ارسال و دریافت میشه ولی اگه عدد ۰ روز قرار بدید، هر دیتایی با هر طولی میتونه ارسال و یا دریافت بشه.
enableACK : خب اینو حتما حتما فعال کنید(عدد ۱ قرار بدید) تا از ارسال شدن دیتا مطمئن بشید و اگه دیتا ارسال نشد ماژول میاد طبق یه سری قوانین که براش وضع میکنیم (توسط توابعی که در ادامه میگم) میادو دیتا رو دوباره ارسال میکنه.
توجه : خب از اونجایی که میدونم خسته شدید(منم همین طور) یه ۳ تا صلوات برا سلامتی خودتون و خودم بفرستید. خب بریم سراغ ادامه کارمون.
1 |
void config(uint8 channel, CrcLength CRCval, AirDataRate DataRate, uint8 DelayReTransmin, uint8 CountReTransmin); |
خب این تابع برای تنظیمات ماژول NRF24L01 هستش.
channel : تنظیم کانال فرکانسی ماژول(۰-۱۲۷ فک کنم)
DataRate : تنظیم نرخ انتقال داده، مقادیر ۲ میگ، ۱ میگ و ۲۵۰ کیلو رو داره که برا انتخاب هر کدوم باید مقادیر زیر رو قرار بدید.
توجه : مقدار ۲۵۰کیلو در NRF24L01 وجود ندارد و فقط در +nRF24L01 موجود هستش.
۲۵۰kbps_
۱Mbps_
۲Mbps_
توجه مهم : کانال فرکانسی و نرخ انتقال داده در هر دو ماژول فرستنده گیرنده باید یکسان باشد.
DelayReTransmin : خب این پارامتر زمان بین هر ارسال مجدد هستش، مثلا اگه دیتا رو فرستادی و دریافت نشد، این پارامتر تعیین میکنه که ماژول nRF باید چقدر صبر کنه و باز دیتا رو دوباره ارسال کنه.(اعداد ۱۵-۰ رو میتونید انتصاب بدید)
اگه ۰ قرار بدید حدود ۲۵۰μS صبر میکنه، اگه ۱ قرار بدید ۵۰۰μS صبر میکنه…. و اگه ۱۵ قرار بدید ۴۰۰۰μS صبر میکنه.
CountReTransmin : تعداد دفعال ارسال مجدد رو با این تعیین میکنیم(۱ تا ۱۵ بار)
1 |
void send(void * value, uint8 PALevel, bool NoACK); |
خب این تابع برای ارسال دیتا هستش.
value : دیتایی که میخواید ارسال کنید.
PALevel : میزان قدرت ارسال دیتا، که میتونید اعداد ۰ تا ۳ رو طبق جدول زیر قرار بدید(هر چی عدد بزرگتر باشه قدرت و برد ارسال بیشتر میشه ولی جریان مصرفی هم بیشتر میشه و بلعکس)
DC current consumption | RF output power | (SPI RF-SETUP (RF_PWR |
۱۱٫۳ mA | ۰ dBm | ۱۱ |
۹ mA | -۶ dBm | ۱۰ |
۷٫۵ mA | -۱۲ dBm | ۰۱ |
۷ mA | -۱۸ dBm | ۰۰ |
VDD = 3.0 V , VSS = 0 V , T A = ۲۷ºC, Load impedance = 15Ω+j88Ω
NoACK : خب اگه میخواید بسته تصدیق نامه دریافت نکنید و این طوری سرعت ارسال و دریافت رو ببرید بالا میتویند این بیت رو فعال کنید ولی توجه داشته باشید که دیگه نمیتونید از صحت ارسال و دریافت داده اطمینان پیدا کنید چون دیگه گیرنده دیتا شما رو از دریافت دیتا خبردار نمیکنه(به نظرم همشه بزارید ۰ و غیرفعال بمونه.)
1 |
void sendInt(unsigned long DataSend, uint8_t base, uint8 PALevel, bool NoACK); |
این تابع برای ارسال عدد صحیح هستش.
DataSend : دیتای ارسالی
base : نحوه فرمت بندی دیتا و ارسالش که مقادیر زیر رو میتونید قرار بدید :
1 2 3 4 |
#define DEC 10 #define HEX 16 #define OCT 8 #define BIN 2 |
اگه میخواین عددتون به صورت عادی و ۱۰ دهی ارسال بشه به جای base مقدار DEC رو قرار بدین.
اگه میخواین به صورت باینری ارسال بشه BIN قرار بدید، برای هگزادسیمال هم HEX و برای اکتادسیمال هم OCT قرار بدید.
دو پارامتر دیگه مثل تابع Send هستش.
1 |
void sendFloat(double , uint8_t floatDigits, uint8 PALevel, bool NoACK); |
ارسال عدد اعشاری
DataSend : عدد اعشاری ارسالی
floatDigits : تعداد ارقام اعشار که باید ارسال بشه.(مثلا عدد اعشاری شما ۳ رقم اعشار داره و شما میخواین فقط ۱رقم اعشار ارسال بشه)
بقیه پارامتر ها مثل تابع Send هستش.
1 |
bool isSending(); |
خب به کمک این تابع میتونیم بفهمیم که دیتا ارسال شده یا نه.
بعد از ارسال داده میایم و از این تابع استفاده میکنیم و داخل یه while قرارش میدیم و تا زمانی که ۱ هستش یعنی دیتا ارسال نشده و اگه صفر بشه یعنی دیتا ارسال شد.
1 |
void getData(void * data); |
این تابع برای دریافت داده هستش.
data : دیتای دریافتی در این متغییر ذخیره میشود.
1 2 3 |
uint8 CountLostPackets(); void ResetCountLostPackets(uint8 ChannelChangeCount); uint8 CountRetransmitPackets(); |
خب این ۳ تا تابع هم میتونه مفید باشه.
CountLostPackets : تعداد بسته های از دست رفته.(با تغییر کانال مقدار این تابع ریست(۰) میشه)
ResetCountLostPackets : ریست کردن شمارنده تعداد بسته های از دست رفته(اگه CountLostPackets مقدارش به ۱۵ برسه دیگه افزایش پیدا نمیکنه و متوقف میشه و در این صورت باید مقدارش رو ریست کنیم که همون طور که گفتم تنها با تغییر کانال این مقدار رست میبشه و اگه میخواین همین کانال باشید بایدبه جای ChannelChangeCount عدد ۰ رو قرار بدید و اگه میخواید یه مقداری کانل افزایش پیدا کنه مثلا از ۰ بره به ۳ باید به جای ChannelChangeCount عدد ۳ رو قرار بدید و اگه میخواید کانال کاهش پیدا کنه مثلا از ۵ به ۱ باید عدد ۴- رو قرار بدید.)
CountRetransmitPackets : تعداد ارسال مجددها رو برای هر ارسال نشون میده، با شروع ارسال جدیدی، این پارامتر مقدارش ریست(۰) میشه.
1 2 |
bool setChannel(uint8 channel); uint8 getChannel(); |
setChannel : تنظیم کانال – عددی بین ۰ تا ۱۲۶
getChannel : پیدا کردن شماره کانال
پروژه های آردوینو با ماژول nrf24l01
خب در این قسمت دو تا پروژه میزارم براتون یکی دیتا با طول ثابت ارسال میشه و تو یکی دیتا با طول متغییر(که این حالتش یه جورایی میشه گفت چت روم ساختیم )
ارسال و دریافت دیتا با طول ۵ بایت(هر کدوم از کدها رو در یه ماژول قرار بدید)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
/* BY DMF313.IR !!!! ^_^ Hardware SPI: MISO -> 12 MOSI -> 11 SCK -> 13 CE -> 8 CSN -> 7 */ #include <SPI.h> #include <DmfNRF.h> NRF DMF313; // ساخت یه شیء از کتابخونه byte Number = 0; char Data[5]; // payloadSize=5 void setup() { Serial.begin(9600); DMF313.init(8, 7); // cePin=8, csnPin=7 DMF313.setSenderAddress((char *)"Majid", 5); // AddressSender = Majid, AddressWidth=5 DMF313.setReceiverAddress(0, (char *)"Majid", 5); //PipeNumber=0, AddressReceiver=Mahde, AddressWidth=5 DMF313.setReceiverAddress(1, (char *)"Mahde", 5); //PipeNumber=0, AddressReceiver=Mahde, AddressWidth=5 DMF313.Pipe(0, 1, 5, 1); //PipeNumber=0, EnablePipe=1, payloadSize=5, enableACK=1 DMF313.Pipe(1, 1, 5, 1); //PipeNumber=1, EnablePipe=1, payloadSize=5, enableACK=1 DMF313.config(100, Crc8Bit, _1Mbps, 5, 10); // channel=100, Crc8Bit, _1Mbps, DelayReTransmin=5, CountReTransmin=10 Serial.println("Beginning ...\n\n"); //Serial.print("getDynamicPayload(0)"); Serial.println( DMF313.getDynamicPayload(0) ); //Serial.print("getDynamicPayload(1)"); Serial.println( DMF313.getDynamicPayload(1) ); } void loop() { // ارسال دیتا while (Serial.available() > 0) { Data[Number] = Serial.read(); ++Number; if (Number == 5) // sizeof(unsigned long)=4, PayloadSize=4 { DMF313.send(Data, 3, 0); while (DMF313.isSending()) {} Serial.println("Finished sending"); delay(10); Serial.print("CountLostPackets="); Serial.println(DMF313.CountLostPackets()); if (DMF313.CountLostPackets() >= 15) DMF313.ResetCountLostPackets(0); //Serial.print("CountRetransmittedPackets="); //Serial.println(DMF313.CountRetransmittedPackets()); Serial.print("------------------------------\n\n"); Number = 0; } } // دریافت دیتا while (DMF313.RXFifo(NULL) != 0) { DMF313.getData(Data); Serial.println(Data); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
/* BY DMF313.IR !!!! ^_^ Hardware SPI: MISO -> 12 MOSI -> 11 SCK -> 13 CE -> 8 CSN -> 7 */ #include <SPI.h> #include <DmfNRF.h> NRF DMF313; // ساخت یه شیء از کتابخونه byte Number = 0; char Data[5]; // payloadSize=5 void setup() { Serial.begin(9600); DMF313.init(8, 7); // cePin=8, csnPin=7 DMF313.setSenderAddress((char *)"Mahde", 5); // AddressSender = Mahde, AddressWidth=5 DMF313.setReceiverAddress(0, (char *)"Mahde", 5); //PipeNumber=0, AddressReceiver=Majid, AddressWidth=5 DMF313.setReceiverAddress(1, (char *)"Majid", 5); //PipeNumber=0, AddressReceiver=Majid, AddressWidth=5 DMF313.Pipe(0, 1, 5, 1); //PipeNumber=0, EnablePipe=1, payloadSize=5, enableACK=1 DMF313.Pipe(1, 1, 5, 1); //PipeNumber=1, EnablePipe=1, payloadSize=5, enableACK=1 DMF313.config(100, Crc8Bit, _1Mbps, 5, 10); // channel=100, Crc8Bit, _1Mbps, DelayReTransmin=5, CountReTransmin=10 Serial.println("Beginning ...\n\n"); } void loop() { // ارسال دیتا while (Serial.available() > 0) { Data[Number] = Serial.read(); ++Number; if (Number == 5) // sizeof(unsigned long)=4, PayloadSize=4 { DMF313.send(Data, 3, 0); while (DMF313.isSending()) {} Serial.println("Finished sending"); delay(10); Serial.print("CountLostPackets="); Serial.println(DMF313.CountLostPackets()); if (DMF313.CountLostPackets() >= 15) DMF313.ResetCountLostPackets(0); //Serial.print("CountRetransmittedPackets="); //Serial.println(DMF313.CountRetransmittedPackets()); Serial.print("------------------------------\n\n"); Number = 0; } } // دریافت دیتا while (DMF313.RXFifo(NULL) != 0) { DMF313.getData(Data); Serial.println(Data); } } |
برنامه شماره دو، ارسال و دریافت داده هر طولی(چت روم!!!)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
/* BY DMF313.IR !!!!! ^_^ Hardware SPI: MISO -> 12 MOSI -> 11 SCK -> 13 CE -> 8 CSN -> 7 */ #include <SPI.h> #include <DmfNRF.h> NRF DMF313; // ساخت یه شیء از کتابخونه char Data[33]; // Max Size Payload is 32 byte void setup() { Serial.begin(9600); DMF313.init(8, 7); // cePin=8, csnPin=7 DMF313.setSenderAddress((char *)"Majid", 5); // AddressSender = Mahde, AddressWidth=5 DMF313.setReceiverAddress(0, (char *)"Majid", 5); //PipeNumber=0, AddressReceiver=Majid, AddressWidth=5 DMF313.setReceiverAddress(1, (char *)"Mahde", 5); //PipeNumber=0, AddressReceiver=Majid, AddressWidth=5 DMF313.Pipe(0, 1, 0, 1); //PipeNumber=0, EnablePipe=1, payloadSize=0, enableACK=1 DMF313.Pipe(1, 1, 0, 1); //PipeNumber=1, EnablePipe=1, payloadSize=0, enableACK=1 DMF313.config(1, Crc8Bit, _1Mbps, 1, 2); // channel=10, Crc8Bit, _1Mbps, DelayReTransmin=10, CountReTransmin=15 Serial.println("Beginning ...\n\n"); /* // Waite 2 Minute uint8_t ChannelList[128]; DMF313.findBestChannel(ChannelList,0,127,500); for (uint8 i = 0; i <= 127; i++) { Serial.print("ChannelList["); Serial.print(i); Serial.print("] = "); Serial.println(ChannelList[i]); } */ } void loop() { // ارسال دیتا while (Serial.available() > 0) { // خالی کردن آرایه for (uint8 i = 0; i <= 31; i++) Data[i] = NULL; // پر کردن آرایه for (uint8 i = 0; Serial.available() > 0 ; i++) { if (i == 32) break; // این کار رو میکنیم تا به اندازه طول آرایه دیتا دریافت بشه Data[i] = Serial.read(); delay(5); } DMF313.send(Data, 3, 0); // PALevel=3, NoACK=0=false while(DMF313.isSending()) {} Serial.print("CountLostPackets="); Serial.println(DMF313.CountLostPackets()); if (DMF313.CountLostPackets() >= 15) DMF313.ResetCountLostPackets(0); Serial.print("CountRetransmitPackets="); Serial.println(DMF313.CountRetransmitPackets()); Serial.print("------------------------------\n\n"); } // دریافت دیتا while (DMF313.RXFifo(NULL) != 0) { // خالی کردن آرایه for (uint8 i = 0; i <= 31; i++) Data[i] = NULL; DMF313.getData(Data); Serial.println(Data); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
/* BY DMF313.IR !!!!! ^_^ Hardware SPI: MISO -> 12 MOSI -> 11 SCK -> 13 CE -> 8 CSN -> 7 */ #include <SPI.h> #include <DmfNRF.h> NRF DMF313; // ساخت یه شیء از کتابخونه char Data[33]; // Max Size Payload is 32 byte void setup() { Serial.begin(9600); DMF313.init(8, 7); // cePin=8, csnPin=7 DMF313.setSenderAddress((char *)"Mahde", 5); // AddressSender = Mahde, AddressWidth=5 DMF313.setReceiverAddress(0, (char *)"Mahde", 5); //PipeNumber=0, AddressReceiver=Majid, AddressWidth=5 DMF313.setReceiverAddress(1, (char *)"Majid", 5); //PipeNumber=0, AddressReceiver=Majid, AddressWidth=5 DMF313.Pipe(0, 1, 0, 1); //PipeNumber=0, EnablePipe=1, payloadSize=0, enableACK=1 DMF313.Pipe(1, 1, 0, 1); //PipeNumber=1, EnablePipe=1, payloadSize=0, enableACK=1 DMF313.config(1, Crc8Bit, _1Mbps, 1, 2); // channel=10, Crc8Bit, _1Mbps, DelayReTransmin=10, CountReTransmin=15 Serial.println("Beginning ...\n\n"); /* // Waite 2 Minute uint8_t ChannelList[128]; DMF313.findBestChannel(ChannelList,0,127,500); for (uint8 i = 0; i <= 127; i++) { Serial.print("ChannelList["); Serial.print(i); Serial.print("] = "); Serial.println(ChannelList[i]); } */ } void loop() { // ارسال دیتا while (Serial.available() > 0) { // خالی کردن آرایه for (uint8 i = 0; i <= 31; i++) Data[i] = NULL; // پر کردن آرایه for (uint8 i = 0; Serial.available() > 0 ; i++) { if (i == 32) break; // این کار رو میکنیم تا به اندازه طول آرایه دیتا دریافت بشه Data[i] = Serial.read(); delay(5); } DMF313.send(Data, 3, 0); // PALevel=3, NoACK=0=false while(DMF313.isSending()) {} Serial.print("CountLostPackets="); Serial.println(DMF313.CountLostPackets()); if (DMF313.CountLostPackets() >= 15) DMF313.ResetCountLostPackets(0); Serial.print("CountRetransmitPackets="); Serial.println(DMF313.CountRetransmitPackets()); Serial.print("------------------------------\n\n"); } // دریافت دیتا while (DMF313.RXFifo(NULL) != 0) { // خالی کردن آرایه for (uint8 i = 0; i <= 31; i++) Data[i] = NULL; DMF313.getData(Data); Serial.println(Data); } } |
فیلم پروژه و کتابخونه در عمل ( توضیحات هم داخلش دادم )
توجه ۱ : پروژه های دیگه داخل کتابخونه پوشه Example هستش.
توجه ۲ : در پوشه کتابخونه، فایل DmfNRF.h، خط ۲۵، ماکرو یی با نام DEBUG تعریف شده که مقدارش ۱ هستش، در هر تابعی یه سری توضیحات هستش که در صورت فراخونی اون تابع، اون توضیحات در پنجره سریال نمایش داده میشه، اگه نمیخواین این اطلاعات نمایش داده بشن، میتونید مقدار این ماکرو رو ۰ کنید.
نحوه هک کردن ماژول
- دانستن کانال فرکانسیش
- دانستن آدرس فرستنده یا گیرنده ماژول
- دانستن نرخ انتقال داده ماژول
والا میخوام تغییرات بدم ولی هر روز یه قطعه و ماژول بهتر میاد آدم دلش نمیاد از این کارا(تغییرات و نوشتن کتابخونه) انجام بده/ف مثلا همین Nrf برا سال ۲۰۰۸ هستش و الا سال ۲۰۱۶ هستش یعنی ۸ سال پیش تقریبا، و الان فک کنید چه چیز های جدیدی اومده تو بازار، ولی ما داریم با تکنولوژی ۸ سال پیش کار میکنیم و جیزای حدید هنوز تو ایران نیومده(حالا شاید هم اجنبی ها نساختن و یا هنوز وارد ایران نشده و یا وارد شده و ما خبر ندارم، غیر از این ۳ حالت که دیگه نیستش )
خب این مطلب هم تموم شد، اگه مفید بود براتون یه دعایی کنید ما رو و رهبرمون رو و رزمندگان اسلام رو(چقدر “رو” :-D).
حدیث تصویری زیر رو هم ببینید ( دم اونی که این عکس رو طراحی کرده گرم، خدایش هر موقع میبینم این عکس رو کلی میخندم، در ضمن حدیثش صحیح هستش و تو نهج البلاغه دیدم به همین صورت بود.)
فعلا یا علی.
مهمان
سلام وقت بخیر.میشه ا نمونه از چند nrfبه صورت شبکه بزارین.مثلا از 3 نقطه دیگه دما به صورت جداگانه بخونه.ممنون
مهمان
با عرض سلام و خسته نباشید ، نرم افزار آردوینو ، همون اول کار میگه ، از این کتابخانه نمیتونید استفاده کنید ، لطف کنید بگید اشکال کار کجاست ؟ چرا رنگ کلمات کلیدی مربوط به کتابخانه عوض نمیشه ؟
مهمان
سلام و عرض خسته نباشید من یه سوال دارم .
من این پروژه هارا با اردوینو میزنم ولی زمانی که پورو مینی را به عنوان ارسال کننده و نانو را به عنوان دریافت کننده قرار میدهم همه چیز درست هست ولی وقتی برعکس میکنم یعنی پورو مینی دریافت کننده و نانو ارسال کننده دیتاهام از بین میرن و چیزی ارسال نمیشه من همه چیز مثل سیم بندی و غیره را هم چک کردم ولی وقتی دوباره برعکس میکنم درست میشه وسر vcc , gnd هردو nrf هام هم خازن ۱۰۰ میکروفاراد گذاشتم تا ماژول هی ریست نشه اگه میشه راهنمایی کنید ممنون.
مهمان
سلام دادا اگه از کتاب خونه اصلی استفاده کنم(کتابخونه شما نه) ، اگه کس دیگه نزدیک من از nrf یا رادیو کنترل شرکتها استفاده کنه قاطی نمیکنه یا مثلا ب اون وصل نمیشه؟ اخه تو سایتای دیگه ک اومدن از کنابخونه اصلی استفاده کردن نیومدن بگن ک یک اسم بزار ۴ بیت . میدونی منظورمو؟ اصلا کاری ب توی کتابخونه ندارن فقد فراخانی میکنن
این سوالم پرسیدم چون یه جاهایی از مطلبتو نگرفتم دا . وگرنه همینو میزدم غمم نبود
در کل تشکر
مهمان
سلام خسته نباشی .یه دستور میخوام واسه فرستنده که بره تو استند بای.مثلا فرستنده کنترل ماشین اسباب بازی باشه و وقتی 2 دقیقه باهاش کار نکنی بره تو استند بای یا اصلا خاموش بشه چون فرستنده با باتری کار میکنه شارژش تموم نشه چکار کنم؟
مهمان
سلام
عالی ممنون بینهایت
الان دو روزه دارم میگردم چرا پایپ 0 رو مثل ادرس گیرنده مینویسند. هیچ جا پیدا نکردم.
مهمان
با عرض سلام و تشکر بابت مطلب مفیدتون. من می خواستم از یه ماژول به چند تا دیگه ماژول (حداکثر تعداد که نمیدونم چنده) یه متن یا شناسه ارسال کنم. البته نه به صورت همزمان. مثلا بگم به فلان ادرسی فلان متن رو بفرست. و همچنین هر یک از این ماژولها بتونن به ماژول مستر هم ارسال کنن. ولی نمیدونم تو ماژول مستر و ماژول های اسلیو رجیسترهای tx_addr و rx_addr_px رو چجوری ادرس دهی کنم. همچنین تنظیم رجیسترهای فعال سازی پایپها هم نمیدونم چطوره. ارتباط بین دو ماژول که یکی فرستنده و اون یکی گیرنده باشه رو راحت انجام میدم. اگه ممکنه توضیح بدید این دوتا رجیستر که گفتم واسه چی استفاده میشه و ادرس دهی واسه کاری که میخوام بکنم چجوریه. یه توضیح کوتاه هم بدید کافیه
. در کل میخوام واسه هوشمندسازی ساختمان استفاده کنم
مهمان
ببخشید امکان داره یه نمونه از تابع isSending مثال بزنین؟!
متوجه نمیشم چجوری باید ازش استفاده کنم …
مهمان
خیلی خیلی ممنون، فوق العاده مفید! اجرتون با خدا… .
مهمان
این کتابخونه ها رو فقد میشه تو اردینو استفاده کرد یا با کدویژنم میشه
نویسنده این مطلب
تو کدویژن باید تغیرات بدی.
مهمان
بخاطر شی گراییش؟
نویسنده این مطلب
این که آردوینو cpp هستش و کدویژن c یه بحثیه
مورد دیگه مثلا نام گزاری رجیستر ها، توابع پیشفرض ( مثل خوندن نوشتن پورت ها ) و …
اینا همه رو باید اصلاح کنی..
مهمان
سلام مهندس خسته نباشید.
همین پروژه که با avrانجام دادین جلو نظراتشو بستین یه سوال داشتم اونجا اگه ما بخوایم با پوش باتونی که زده میشه اون ور یه نوشته نمایش داده بشه چع تغییراتی باید تو سورس داده بشه؟میشه کمکم کنین کارم خیلی گیره مرسی.
مهمان
با سلام
خداقوت
من خیلی از اطلاعات شما بهره بردم ، خدا به شما توفیق بده در ظل توجهات حضرت مهدی(عج) به کارتون ادامه بدید. یاعلی(ع)
مهمان
واقعا دمت گرم. به بهترین شکل ممکن مشکلمو حل کردی. امیدوارم پر انرژی به کارت ادامه بدی.
مهمان
سلام
دمت گرم حاجی خیلی کارت درسته
تقریبا برای هر مطلب و موضوعی میخوام سرچ کنم حواسمو میدم که dmf313.ir مطلبی داره یا نه، خواستم بگم در این حد مخلصم یا بیشتر
حالا سوالم
کتابخونه عالیه و برای یه ریموت عالیه اما من میخوام بدونم دیتای دریافتیم با چه قدرتی دریافت شده تا بدونم فرستنده چه مقدار فاصله احتمالی با گیرنده داره؟
تو توضیحاتت نوشته بودی که حساسیت گیرنده بسیار خوبی داره که داره اما آیا میشه مقدار توان ورودی رو هم برگردونیم
ممنون
مهمان
سلام. اگه بخوام یه سیستم بسازم با یه فرستنده و بیش از 6 گیرنده(منظورم از بیش از 6 اینه که شما تا 6 تا گیرنده رو توی آموزش توضیح دادید) رو کنترل کنم(مثلا 30 گیرنده)، آیا با این کتابخونه امکانپذیر هست؟
مهمان
سلام.میشه از این کتابخونه برای میکروهای STM استفاده کرد؟ اگه آره چه جوری؟
یا اینکه چه جوری میشه این کتابخونه رو به یک کتابخونه برای STM تبدیل کرد؟لطف می کنید اگه پاسخ بدین.
نویسنده این مطلب
سلام-نه.
شما اگه C/CPP بلد باشید و برا آردوینو و STM کد زده باشید، تبدیل یه کد به محیط دیگه نباید کار سختی باشه، بعضی توابع رو مثلا باید تغییر بدی – DELAY – ورودی خروجی ها – رجیسترها که یکم اذیت میکنه -و….
مهمان
سلام

ممنون از اموزش عالی و کتابخونه خوبی که نوشتی
یه سوال داشتم ، من یسری ماژول دارم میخوام که سه تا سه تا به هم متصل باشن ( مثلا 30 تا ماژول که هر 3 تایی یه شبکه جدا باشن ) ، برای اینکار کانال ها با هم فرق داشته باشه کافیه ؟ ( که تداخل نداشته باشند )
و اینکه چجوری میشه تعیین کرد توی یه شبکه ، دستگاه A ، اطلاعات رو بفرسته برای دستگاه C و دستگاه B اطلاعات رو دریافت نکنه ؟
تشکر
مهمان
سلام تفاوت این کتابخانه ای که گذاشتین با کتابخانه RF24 چیه و کدوم بهتره؟؟؟
نویسنده این مطلب
سلام – کتابخونه توی این مطلبو من نوشتم – اون یکی رو یه نفر دیگه – جفتش هم بر مبنای دیتاشیت آیسی هستش و نه چیز دیگه ای.
کدومش بهتره؟ نمیدونم – من تا حد امکان سعی کردم کتابخونه رو کامل بنویسم – اون یکی کتابخونه رو نمیدونم –
مهمان
دست درد نکنه داداش مهدی!
مهمان
نه،سوالم اینه که من تو توابع که ماکرو dibug رو 0 میکنم و یا print رو کامنت می کنم ولی بازم توضیحات نمایش داده میشه.اشکال از کجایه؟
مهمان
خدا خیرتون بده.عالی.
فقطیک سوال. این توضیحات که بعد از هر با ارسال فرستاده میشه کجا دقیقا نوشتینش تو کدوم تابع هست؟
نویسنده این مطلب
از طریق serial نمایش داده میشه.
مهمان
سلام اقا مهدی دست درد نکنه کتابخونه خوبی نوشتی
. یک سوال دارم-
اگر که کد حالت استاتیک رو پایپ لاین و کانال ثابت بگیریم و کدPTX رو ;ها همون باشن و برای کد های PRX بیایم مثلا 10 تا ماژول بزاریم و یک متن رو از فرستنده PTX به 10 تا گیرنده ارسال کنیم که متن حاوی یک پیغام باشد که همه ماژول ها دریافت کند و در هر گیرنده نسبت به پیام گرفته شده یک عمل حاص انجام شود در این حالت به نظرتون بهترین راه چیه؟
مهمان
همه چی عالی. فقط ای کاش برای تهیه آموزش که این قدر زحمت کشیدید در تصویر برداری از صفحه نمایش از نرم افزار Camtasia Studio استفاده می کردید.
ممنونم
مهمان
سلام
من سعی کردم این پروژتون را با پروژه avr تلفیق کنم به این صورت که یک طرف ارسال کننده nrf داشته باشم(که با استفاده از arduino کنترل میشه ) و سر دیگه گیرنده avr داشته باشم که دیتا را روی lcd نمایش بده اما این دو ماژول با هم ارتباط برقرار نمیکنند
لازم به ذکره برای arduino از کتابخانه شما و برای avr هم از کتابخانه ای که شما استفاده کرده بودید استفاده کردم.
به نظرتون مشکل چی میتونه باشه؟
مهمان
سلام کسی با ای سی ADF7020 کار کرده؟
بردش رو زدم تو فرکانس 910 مگاهرتز ارسال دارم اما تو گیرنده چیزی دریافت نمی کنم
مهمان
سلام
وقتتون بخیر باشه
ببخشید بنده یه سوال دارم میخاستم ببینم شما با IC یا مازول ADF7020 برای ارتباط بی سیم کار کردید؟؟؟
بنده میخام با ARM این IC را راه اندازی کنم. میشه راهنمایی بفرمایید.
نویسنده این مطلب
سلام – تا جایی که یادمه سریال بود – و ارتباطش 2 طرفه غیر همزمان بود – یعنی همزمان نمیتونی هم دیتا بفرستی و هم بخونی – باید یه تغییر 10 میلی ثانیه ای قرار بدی مثلا یا بیشتر کمتر که باید تست کنی و مقدارشو بدست بیاری
مهمان
طبق معمول َ عالی و عالی و عکسی که گذاشتی هم عالی
مهمان
سلام
دستت درد نکنه داداش من این کتابخونه رو دانلود کردم و با یکم تغییرات تبدیلش کردم به اتمل استدیو. اگر وقت داشته باشم برای STM32 هم همین کارو میکنم. فقط اگر میشه یجایی از آموزش ذکر کنید که حتما برای تغذیه ماژول، یه خازن بزرگ، مثلا 1000uf بذارن تا ماژول هنگام ارسال هنگ نکنه و مثل من چند ماه بیخودی علاف نشن
مهمان
سلام من اینو راه انداختم ،فقط تو اینو به عنوان تذکر یا هرچی اضافه کنید که باید فرکانس هر دو تا ماژول یکی باشه!
مهمان
سلام و خسته نباشید

مهندس اینو اضافه کنید که اگر کسی براش جواب نداد nrf ، اسم همه ی ارسال کننده و گیرنده رو یکی کنه تا جواب بده!(منظورم اون اسم فرستنده و گیرنده که اول کد تایین میکنیم)
راه پیشنهادی:
میتوننند هم از مبدل سریال یا السیدی استفاده کنند تا ببینند که ایا بین این دوتا اطلاعا ت رد و بدل میشه یا نه!
مهمان
سلام من از کد شما برای انتقال عدد استفاده کردم و 19200 عدد رو میفرستم سرعت رو 2مگابیت هست و بادریت روی 2,000,000 هست ئلی این انتقال 20 ثانیه طول میکشه دلیل چی میتونه باشه
مهمان
سلام من از کتابخونه ی nrf شما استفاده کردم و 19200 بایت رو با sendint پشت سر هم ارسال میکنم و با get_data اونور میگیرم. سرعت رو 2مگابیت هست و بادریت رو 2,000,000 ولی باز ارسال حدود 20 ثانیه طول میکشه !!!!!
مهمان
سلام و عرض ادب؛ آیا کتابخانه این ماژول برای پروتئوس نوشته نشده است؟ (میخواستم تو پروتئوس شبیه سازی رو انجام بدم)
نویسنده این مطلب
سلام-نمیشه.
مهمان
سلام. خسته هم نباشی.
میخواستم ی رادیو ۱۴ کانال بسازم با این nrf و ی کدی برای خود ترنسمیتر نوشتم و اضافه کردم به کد های تو ینی یجوری مخلوطش کردم. ولی فقط تا اخر تابع setup موفق بودم. موندم چجوری ۱ و ۰ منطقی کانال ها و ۰ تا ۲۵۵ جوی استیک ها رو بفرستم و از اونطرف چجوری به همون صورت خروجی بگیرمشون. تو رو خدا ی راهنمایی بکن. و دمت گرم و خدا خیرت بده عالی توضیح دادی کتابخونه رو.
مهمان
سلام، آیا با آردیونو می تونیم هم ماژول بلوتوث و هم nrf رو با هم داشته باشیم؟
نویسنده این مطلب
سلام – نمیدونم چه مدل ماژول بلوتوی مد نظرتونه ولی برای مثال ماژول hc05 که سریال هستش و nrf که اکثرا spi هستن و مشکلی ندارن با هم – میتونی از هر دوش استفاده کنی.
مهمان
سلام چجوری میشه فاصله ی حدودی رو در فاصله کم مثلا اگه nrf به یک متری یا دومتری nrf دیگه رسید متوجه بشیم؟
راستی چجوری باید irq استفاده کنم؟ تو کتابخونه رو نگاه کردم چیزی متوجه نشدم که چجوری باید پایه ی وقفه رو به تایمر اردوینو متصل کنم.
ممنون
مهمان
با سلام و با تشکر از مطالب بسیار زیبا و پر محتوای سایت.
چطوری میشه فهمید که ماژول آماده بکار هست و متصل هست به اردوینو
نویسنده این مطلب
سلام-باید بررسی کنی که تابعی برای این کار هستش که یه دیتا بفرسته به ماژول و اگه جواب گرفتن یعنی.. و اگه نگرفت یعنی…
مهمان
اقا سلام
من به یک مسئله ای بر خوردم امیدوارم بتونم منظورمو بدرستی بگم و شماهم راهنماییم کنیم،پیشاپیش ممنونم بخاطر وقتی که میگذارید.
پروژه ای که من میخوام استفاده از Nrf به این صورت هستش که اول میخوام با اردوینو A به اردوینو B یک کدی بفرستم اگر اون کد در اردوینو B درست بود بعدش یک کد دیگه به اردوینو A بفرستم از طریق اردوینو B حالا مشکلی که من دارم اینه که تا مرحله دوم رو انجام میده ولی مرحله آخر رو انجام نمیده.
یعنی کد از A به B میره ,ولی از B به A نمیره.
لطفا اگه میشه کمکم کنید خیلی درگیرش شدم.
ممنون
ببخشید اگه بد توضیح دادم.
نویسنده این مطلب
سلام
متاسفانه از nrf به علت مشکلاتش دیگه استفاده نمیکنم و لذا خودتون باید مشکلو پیدا کنید و من کمکی نمیتونم بکنم.
مهمان
سلام شما چه فرستنده و گیرنده ای رو پیشنهاد میکنید؟
ممکنه چند تا از مشکلاتش که خیلی به چشم میاد رو بگید بلاخره شما تجربتون بیشتره باز.
ممنون
نویسنده این مطلب
سلام-فعلا هیچی
چون هر چی که کار کردم هر کدوم یه مشکلی داشته.
الان مثلا دارم با ADF7020 کار میکنم خوبیش اینه که پروتکولش سریاله – نیاز به کتابخونه خاصی نداره و راه اندازیش سادس – بدیش اینه که فرستندگی و گیرندگیش همزمان کار نمیکنه و اصل مشکل من باهاش فعلا اینه که باید حلش کنم.
یه ماژول هستش بردش کمه
یکی قیمتش زیاده
یکی برد واقعیش کمه ( برد اسمی و ذکر شده تو دیتاشیت ماژول بدرد عمه سازنده ماژول میخوره )
باید بگردی والا – خودم حقیقتا ماژول خوبی که از همه نظر خوب باشه رو سراغ ندارم فعلا
مهمان
سلام ممنون از پاسختون.
نیاز های من به این صورته که برد کم ، امنیت و ارتباطش دوطرفه باشه مثل nrf باشه کارمو راه میندازه.
فقط من زیاد شنیدم که میگن nrf امنیتش پایینه.
راه حلی هستش برای این مسئله؟
یا بااین مشخصات ماژول بهتری سراغ دارید؟
ی سوال دیگه هم داشتم از خدمتتون: با این کتابخانه ی شما میشه از پایه ی IRQ استفاده کرد؟من ی جا خوندم که از پایه ی IRQ استفاده کنم دیتا رو با اطمینان بیشتری میتونم ارسال و دریافت کنم
ممنون از وقتی که گذاشتید ببخشید سوالاتم زیاد شد.
نویسنده این مطلب
سلام
امنیت رو چی تعریف میکنید؟
نویسنده سایت
سلام، من با این ماژول کار نکردم اما اگر میخواید حین ارسال و دریافت داده هاتون شنود نشه، باید داده ها هنگام ارسال رمزگذاری بشه،مثلا فرض کنین عبارت salam رو میخواین بفرستین، میتونین به صورت برعکس بفرستین یعنی به صصورت malas بفرستین و گیرنده خودش برعکسش کنه، اینجوری اگر داده ها شنود بشه یه چیزبی معنی میشه و کسی متوجه. نمیشه شما چی فرستادین
برای اطلاعات بیشتر تو این زمینه الگوریتم های رمزنگاری رو یه سرچی بزنین
مهمان
سلام فرمودید امنیت رو چی تعریف میکنم در جواب باید خدمتتون بگم که پروژه ی به این صورت هستش که ازnrf A یک کد رو میفرستم به nrf B وقتی کد برای nrf B شناسی شد یک کد دیگه میفرسته به nrf A و میگه من شناساییت کردم.
و nrf A قراره یک درب رو باز کنه امنیتی هم هستش. حالا در این بین چون هر 2 ثانیه nrf A یک کد رو میفرسته تا ببینه nrf B نزدیکش هستش که کد رو دریافت کنه و درب رو باز کنه در این بین ممکنه بتونن به ادرس فرستنده و کانالش دسترسی پیدا کنن و درب رو باز کنن.
پینشهاد شما چی هست برای قضیه برای جلوگیری از غیر قابل دسترس بودن این اطلاعات.
این پروژه برام خیلی مهمه ممنون میشم جواب بدید.
باتشکر
مهمان
سلام اقا مهدی مرد
عمو با این ماژول فرستنده گیرنده میشه ارتباط دو نفره داشت یا مثل واکی تاکی وقتی صدا میفرستی دیگه نمشه همزمان دریافت کرد ؟
اگه پروژه ارسال و دریافت صدا هم داشتی دیگه حرف نداشتی?
نویسنده این مطلب
سلام-بستگی به صدا داره – MONO باشه یا STERIO – بیت ریتش چقدر باشه و … سرعت ماژول رو چند تنظیم شده باشه و … – که باید بشینی حساب کنی.
تا جایی که یادمه – همزمان هم میفرستی و هم میگیری.
شما ADC و PWM میکرو رو راه اندازی کنید – بعد ماژول فرستنده گیرنده خوب پیدا کنید و راه اندازیش کنید – بعد یه میکرو فون به پایه ADC میکرو وصل کنیدو مقدارشو بخونید و بفرستید و دریافت کنید و بعد با PWM دوباره به ولتاژ تبدیلش کنید.وسلام.
مهمان
با عرض سلام و خدا قوت
واقعا سایت و آموزشها عالیه
آقا مهدی چطوری میشه این کتابخونه رو برای کدویژن و C تبدیل زد
مهمان
سلام تازه کارم مثلا اگه بخوای دیتا شیت یه ماژول رو خوب بخونی چطور واز کجا بایدشروع کنی چون دیتا شیت بعضی از ماژول ها رو که مسخوندم خیلی سخت بود نمی فهمیدم میشه بگی خودت چطور ترجمه میکنی واون کلماتی هم که نمیفهی چیکار میکنی
نویسنده این مطلب
سلام – انگلیسیت باید خوب باشه و درباره قطعه مورد نظر هم باید اطلاعاتی داشته باشی – مثلا تو ترانزیستور میری میبینی نوشته Hfe خب اگه درباره ترانزیستور مطالعه نکرده باشی شاید فهمیدن این اصطلاح یکم سخت باشه – والا روش خاصی نداره – اگه هم داشته باشه من بلد نیستم توضیح بدم حقیقتا – خودم هم دیتاشیت خونیم ضعیفه
مهمان
سلام :
این ارورر چیه
exit status 1
Error compiling for board Arduino/Genuino Mega or Mega 2560.
نویسنده این مطلب
سلام.نمیدونم
مهمان
سلام
اگر امکان دارد یه برنامه مثال که در ان یک ماژول به طور خودکار پاسخ یک پیام را میدهد قرار دهید.
من از برنامه شما استفاده کردم و همه چیز عالی است. ولی میخواهم یک ماژولم پس از دریافت کدی خاص عددی را به ماژول اولیه برگرداند، اکثرا پیغام data lose میدهد.
ممنون از مطالب مفید سایتتون.
نویسنده این مطلب
سلام
این کاری که گفتید رو من حوصلشو ندارم
اما data lose – بررسی کنید ببینید مشکل از چیه و به ما هم بگید-
مهمان
آقا مهدی دسسسسسسسسسسس خوش داری …
واقعا مرسی …
http://s9.picofile.com/file/8314259342/robowifi.rar.html
اینم جایزت …
یه نمونه کار ساده …
یه رباته …
مهمان
سلام
از کتابخانه nrf24l01+ که زحمتشو کشیدید استفاده کردم در یک پروژه.
الان میخوام شیلد اترنت رو هم وصل بکنم به آردوینو.
میخواستم بپرسم که soft spi رو چطور باید اضافه بکنم به کتابخانه؟
آیا اگر همه پین های دو تا شیلد رو به جز ce و csn به هم وصل بکنم امکان استفاده از دو شیلد رو دارم؟
نویسنده این مطلب
سلام-spi که مثل serial نیست که – چندین تا قطعه رو میشه بهش وصل کرد.
مهمان
DMF313.RXFifo(NULL)
ببقشید که بازم مزاحم شدم
میشه این تابع رو هم توضیح بدی؟؟؟
مهمان
سلام داداش مهدی.
امیدوارم حالت خوب باشه.
میخواستم بدونم منظور از پاکت های از دست رفته چیه (خود مفهوم پاکت) و اینکه چرا مقدارش بیشتر از ۱۵ نمیشه.
و اینکه تو تابع ResetCountLostPackets منظور از کانالی که گفتین همون ۱۲۷ تا کانال فرکانسیه؟؟
حالا مگه این کانالو تغییر بدیم مشکلی پیش نمیاد؟؟؟ اخه قبلش گفتید که باید این کانال هم واسه فرستنده و هم واسه گیرنده یکی باشه.
و حالا اگه تغیرش ندیم و ۰ رو بذاریم که همون کانال بمونه اون تابع شمارنده پاکت های از دست رفته ریست میشه یا نه؟؟؟
و اینکه تو اون پروژه ی اول اصلا دونستن پاکت های از دست رفته به چه کاری میاد؟؟
ببقشید سرتو درد اوردم
ممنون میشم جوابمو کامل بدی.
مهمان
سلام خسته نباشید من کتابخانه RF24 از سایت github.com زدم تو نرم افزار اردینیو. میخاستم یه راهنمایی کنی من برنامه تست Hello World که برای راه اندازی با همون کتابخانه که زدم با دو ماژول nrf2401بدون انتن خوب کار میکنه ولی تو قسمت فرستنده ماژول nrf2401+ انتن دار جای یکی از ایم ماژولnrf2401 بدون انتن میذارم برنامه کار نمیکنه بعد دوباره هیمن ماژول انتن دارتو قسمت گیرنده میذارم برنامه کار میکنه ایا برای nrf2401+ انتن دار باید کتابخانه جدا بزنم ؟ ممنون میشم راهنمایی کنید
مهمان
خب کاش یه همچین کتاب خونه ای برای avr بود.من نیاز دارم ولی نیست
مهمان
سلام مهندس
سمت فرستننده در قسمت serial monitor تنها این پیغام چاپ میشه
PALevel = 3
Dynamic Payload Size = 9
PALevel = 3
Dynamic Payload Size = 9
PALevel = 3
Dynamic Payload Size = 9
Size = 9
PALevel = 3
Dynamic Payload Size = 9
PALevel = 3
لطفا راهنمایی کنید
مهمان
سلام
من هرکاری میکنم کتابخانه DmfNRF اضافه نمیشه
لطفا راهنمایی کنید
نویسنده این مطلب
سلام
اون فایل آخری رو دانلود کن.
مهمان
سلام .من کدهای شمارو روی اردینو اپلود کردم ولی متاسفانه موفق به ارسال داده نمیشم.شما احنمال میدین کجای کارم ناقصه؟ایا کار اضافه ای لازمه انجام بدم؟تنضیماتی چیزی؟
مهمان
سلام
با اجازه بزرگ تر ها
سیم بندی رو چک کنید ببینید که پایه misoدرست وصل شده.
یه وقت بجای irqمتصل نشده باشه.
اگر اتصال درست بود از یک آردوینو ئیگه استفاده کنید .احتمال خیلی زیاد جواب می گیرید
مهمان
سلام.
این کتابخونه واسه کدویژن کار نمیکنه؟
ممنون بابت زحمتاتون.
نویسنده این مطلب
سلام – نه باید تبدیل کنی اگه بلدی.
مهمان
سلام مهندس.وقت بخیر. سایتت واقعا عالیه. فقط یک سوال .فرض کنیم من بخوام از ۲ مکان مختلف با سنسور ds18b20 دما رو اندازه بگیرم و برای یک گیرنده ارسال کنم(با ماژول nrf24l01+) میشه راهنماییم کنی درمورد کدهای برنامه نویسیش، خیلی کارم گیره. در پناه حق پاینده باشی مهندس.
مهمان
سلام
منم همچین مشکلی دارم و برای یک پروژه دانشگاهی چند وقته درگیر این مشکل شدم. لطفا اگه امکانش هست راهنمایی کنید.
با نهایت سپاس
مهمان
سلام مهندس
من قصد دارم یک چت روم چند نفره بسازم، طبق آن چیزی که در نظرات گفتید برای اتصال آنتن سوم به بالا، هم اسم فرستنده ها رو توی گیرنده و فرستنده تنظیم کردم و هم پایپ ها رو دو به دو شماره گذاری کردم ولی فقط دوتا آنتن به هم وصل می شوند و آنتن سوم، نه از طریق پایپ هم نام با آنتن اول و نه از طریق پایپ های دیگه، به چت روم وصل نمیشود. لطفا راهنمایی بفرمایید.
ممنون از سایت خوبتان
با تشکر
مهمان
سلام
تا اونجایی که من بررسی کردم مشکل از کتابخونه است.
کتابخونه فقط پایپ یک را میشناسه و فقط دوتا آنتن از طریق پایپ یک به هم وصل میکنه.
همون دوتا آنتن از طریق پایپ های دیگه قابل اتصال نیستن و فقط باید پایپ یک باشه.
پایپ های دیگه قابل معرفی نیستن و از طریق پایپ یک هم فقط همون دوتا آنتن به هم وصل میشن
مهندس دمرچیلو عزیز راهنمایی میکنید؟؟؟؟؟؟
مهمان
سلام مهندس دمرچیلو
من دنبال پروژه ۳ یا ۴ nrf با این ماژول هستم
اگه کدهاش خدمتتون هست میشه کمکم کنید؟
مهمان
من از ماژول USB to Serial PL2303 استفاده میکنم و همونطور که می دونید dtr نداره میتونه مشکل از اونجا باشه
اگه میشه یخورده دربارش توضیح بدین وبگین راه حلش چیه
مهمان
سلام
من کدها رو اینجوری بهش اعمال کردم ولی از هیچ کدوم از سنسورها دیتا دریافت نمیکنه
DFM313.SetsenderAddress(0,(char)”A”,5)\\A
DFM313.SetReceverAddress(1,(char),”B”,5)//B
DFM313.SetReceverAddress(2,(char),”C”,5)//C
DFM313.Pipe(0,1,01)//pipe1
DFM313.Pipe(1,1,0,1)//pipe2
DFM313.Pipe(2,1,0,1)//pipe3
DFM313.config(1,Crc8bit,_1Mbps,1,15)//configution
لطفا راهنمایی بفرمایید. دوتا با هم کار نمیکنه. باید چکارش کنم آقای دمرچیلو؟
مهمان
تعداد ادرس فرستنده و گیرنده ی شما روی 5 بایت هستش ولی اسم ادرس فرستنده و گیرنده ی شما یک باید هستش.
مهمان
چشم. ممنون. دستتان درد نکند
مهمان
استاد من ار برد پرو مینی استفاده کردم com بهش وصل شده ولی وقتی کد ها رو اپلود میکنم ارور ۵۰۰ میده
اگه میشه سریع پاسخ بدین
ممنون
مهمان
استاد من ار برد پرو مینی استفاده کردم com بهش وصل شده ولی وقتی کد ها رو اپلود میکنم ارور ۵۰۰ میده
مهمان
استاد من ار برد مینی استفاده کردم com بهش وصل شده ولی وقتی کد ها رو اپلود میکنم ارور ۵۰۰ میده
مهمان
سلام
پروژه ارتباط دو nrf را برای انتقال داده جواب گرفتم. پروژه ارتباط ۳ الی ۴ یا بیشتر nrf را چطور باید انجام بدم.
مهمان
سلام.
ممنونم از شما. مشکلم تا حدود زیادی حل شده . آقا مهدی پرو زه ارتباط ۳-۴ آردینو که توی نظرات گفتین انجامش دادین را از کجا باید گیر بیارم.
اگه انجامش دادین از کجا دانلودش کنم. و اگه انجام نشده چجوری باید تعدادی آردوینو را به یک آردوینو وصل کنم. با nbrf
ممنونم از سایت عالی که داری
نویسنده این مطلب
سلام
انجام ندادم – یادم هم نمیاد همچین حرفی زده باشم – احتمالا گفتم که میخوام انجام بدم و از این جور حرفا – به علت مشکلاتی که nRF داره به نظرم – باهاش کار نمیکنم دیگه.
مهمان
پس پیشنهاد شما چه ماژولی هست که جایگزین کنم با این؟
که بتونم ۳-۴یا تعداد بیشتری آنتن را به هم وصل کنم؟
نویسنده این مطلب
بررسی نکردم که چه ماژولی قابلیت شبکه داره.
مهمان
با سلام و عرض خسته نباشید.

یک اتفاق عجیب برای nrf من افتاده است. به این صورت که داده را می فرستد و من در سمت گیرنده داده را دریافت می کند. ولی در سمت فرستنده می نویسد که داده گم شده است و ان عدد تا ۱۵ می شمارد و دوباره صفر می شود.!!!!!!!!!!!!!!!!!!!!!
عجیبش این است که داده انتقال پیدا می کند. الان مشکل در کجا هست که می نویسد داده گم شده ولی داده را انتقال می دهد؟ فکر کنم این مشکل را حل کنم قسمت دینامیک هم راه بافتد.
راستی فرکانس کاری SPI بر روی کار کرد کد تاثیر می گذارد؟ یعنی حتما باید همین فرکانس را در نظر بگیریم.؟ من کد شما را انتقال داده ام به STM32F4.
لطفا در صورت امکان نظرتان را بفرمایید با تشکر.
نویسنده این مطلب
سلام-برا مورد اول بررسی کنید – امکان بررسی کردن به علت سرگرم بودن به کارای دیگه
نیست.
مهمان
داداش چرا جواب ما رو نمیدی نوکرتم. سوالام به دستت نمیرسه؟
کارم گیر افتاده تنها کد که به خوبی کار میکنه کدهای شماست. اگه این نکته را هم بهم بگی که چطور سه یا چارتا آردوینو را به هم اتصال بدم ممنونت میشم.
نویسنده این مطلب
چی بگم آخه نوکرتم – گفتم که – من با این ماژول که مشکلاتی داره دیگه خیلی وقته کار نکردم و نمیکنم – هر چی هستش تو مطلب گفتم – اگه هم طبق مطلب رفتی و راه نیوفتاد باید کتابخونه رو بررسی کنی – ترجمه دیتاشیت رو هم که گزاشتم براتون.
مهمان
توی دستور cofig که برای پاپ ها نوشتید
یه قسمت هست به اسم crc8bit که توضیحش توی سایت، از قلم افتاده
این چه کاری انجام میده و آیا میشه تغییرش داد. آیا طول داده ارسالی رو این تعیین میکنه و مثلا میشه بیشترش کرد؟
مهمان
همه اعداد رو ۲۷۰ برمیگردونه.
مهمان
باید چکارش کنم که همه اعداد رو یکسان نخونه؟
مهمان
من یه متغیر به اسم
Int number
تعریف کردم. و این تفریق رو که شما گفتید انجام دادم. کامپایل شد. ولی عددی که بر میگردونه مثلا به جای اینکه ۱ را برگردونه ۲۵۰ برمیگردونه.
نویسنده این مطلب
یکم زبون برنامه نویسی c/c++ رو برو مطالعه کن.
مهمان
آقا مهدی عزیز
با تشکر از سایت بسیار خوبتون و کمکی که در زمینه برنامه نویسی به امثال بنده میفرمایید
لطفا بهم بگید که چطور دیتا دریافتی را به فرمت اینتیجر دربیارم متشکرم
نویسنده این مطلب
بستگی به اندازه دیتای شما داره –
و بازم بستگی داره دیتا رو به صورت کاراکتر بفرستی یا عدد ۸ بیتی!
مهمان
طولش دینامیکه.
من دارم با همین مثال که شما توی کتابخونه گذاشتین برای ارسال اینتیجر دینامیک کار میکنم.
فرستنده به صورت دسیمال میفرسته اعداد رو
ولی گیرنده به صورت کاراکتر میگیره اعداد رو.
اجازه نمیده که اعداد رو از ۴۸ کم کنم که اینتیجر بدست بیاد.
لطفا بهم بگید چکار کنم که داده ای که توی خروجی میاد جنسش اینتیجر باشه. نه کد اسکی و نه کاراکتر.
نویسنده این مطلب
اگه منظورت اینه که تابعش رو بنویسم که امکانش نیس
کدت باید تو این مایه ها باشه :
Number = charReaded - '0';
مهمان
سلام آقای دمرچیلو
من میخوام توی خروجی هم مقدار اینتیجر یا فلوت دریافت کنم
ولی مثالهای شما همه خروجی ها کاراکتر هستن.
مطلب رو هم خوندم ولی به نتیجه ای نرسیدم
لطفا کمکم کنید.
مهمان
وقتی عدد ۱ را میفرستم
در حالت DEC عدد خروجی را ۴۹ میده یعنی عددایی که توی خروجی بهم میده ۴۸ تا از مقدار واقعی بیشترن.
دوم اینکه چون فرمت خروجی های این تابع کاراکتر هست نمیتونم روی اونها کار ریاضی انجام بدم. راه حلش چیه؟ ممنونم
نویسنده این مطلب
خب شما باید از ‘۰’ کمش کنید که کد اسکی ۰ میشه ۴۸
مهمان