برد STM سخت افزار قطعات الکترونیک

پروژه مدار گیرنده ریموت کدلرن ASK با میکروکنترلر STM32

نوشته شده توسط علی زاهدی

فرستنده و گیرنده های رادیویی به دلیل سهولت در استفاده و هزینه ساخت کم بسیار محبوب هستند. این نوع فرستنده گیرنده‌ها را در اطراف خود بسیار مشاهده کرده اید. از جمله کاربرد این نوع فرستنده ها در کنترلرهای درب های اتوماتیک و سیستم‌های امنیتی ، دزدگیر منازل و خودرو، کنترلر روشنایی و … است. در این پست قصد داریم تا نحوه ساخت گیرنده با ریموت کدلرن ASK استفاده از میکروکنترلر STM32 را آموزش دهیم. در ادامه با مرجع تخصصی بردهای امبدد به زبان فارسی، دیجی اسپارک همراه باشید.

 


شناخت مدولاسیون در صنعت برق


در رشته ی مهندسی برق و مخابرات به فرایند سوار کردن سیگنال پیام (اطلاعات) بر روی سیگنال حامل (معمولا دارای فرکانس بالا تری است) را مدولاسیون میگویند. این فرایند برای افزایش بهره‌وری انتقال و برد سیگنال و همچنین استفاده بهینه تر از پهنای باند صورت میگیرد. مدولاسیون انواع مختلفی دارد. که در تصویر زیر میتوانید انواع مدولاسیون را مشاهده کنید.

Type of Modulation

در صورتی که سیگنال حامل زمان پیوسته باشد. مدولاسیون به انواع آنالوگ و دیجیتال تقسیم می‌شود که هر یک دارای زیر شاخه هایی هستند. در این آموزش قصد داریم در مورد مدولاسون ASK که زیر شاخه ای از مدولاسون دیجیتال است صحبت کنیم.

 


مدولاسیون ASK


ASK مخفف Amplitude-shift keying به معنای کلیدزنی تغییر دامنه، یک روش مدولاسیون دیجیتال است (برای اشاره به مدولاسیون ‌های دیجیتال بیشتر از اصطلاح کلیدزنی استفاده می‌شود). در این روش مدولاسیون دیتای دیجیتال با تغییر دامنه‌ی سیگنال حامل ارسال می‌شود. همانطور که گفته شده این نوع مدولاسون زیر شاخه ای از مدولاسیون دیجیتال است و منطق آن صفر و یک است. بنابراین زمانی که سیگنال پیام دارای سطح منطقی یک باشد، فرستنده فرکانس مربوطه را تولید کرده و ارسال می‌کند. زمانی که سطح منطقی سیگنال پیام صفر باشد، فرستنده خاموش شده و سیگنالی ارسال نمی‌کند.

 

ASK Modulation

 


ریموت کنترل کدلرن ASK


عمده ترین کاربرد مدولاسیون ASK در ریموت های کنترلر درب اتوماتیک، دزدگیر اماکن و خودرو و … است. این نوع ریموت بصورت آماده در بازار با فرکانس های ۳۱۵ و ۴۳۳ مگاهرتز موجود است. ریموت ها دارای ۲ نوع کد گذاری هستند. نوع اول ریموت های کد فیکس هستند. در این نوع ریموت ها بر روی برد ریموت ۸ پین موجود است که هر یک از این پین ها میتوانند سه حالت داشته باشند (متصل به مثبت، متصل به منفی و بدون اتصال).

کد فیکس

کدگذاری کد فیکس

 

این نوع ریموت ها امنیت بالایی ندارند. همچنین به دلیل کد گذاری نسبتا مشکل محبوبیت زیادی ندارند. مورد دیگری که از نظر من برای ریموت های کد فیکس یک عیب به حساب می آید. این است که گیرنده های این نوع ریموت تنها میتوانند یک کد را تشخیص دهند و در صورتی که شما دو ریموت با کد های متفاوت داشته باشید، گیرنده تنها قادر به تشخیص یکی از آنها خواهد بود. نوع دوم ریموت های کد لرن یا همان ریموت کدلرن ASK هستند که امنیت بیشتری نسبت به ریموت های کد فیکس دارند. این نوع ریموت دارای یک کد ۲۰ رقمی منحصر به فرد است. در این نوع ریموت با فشردن هر کلید یک کد ۲۴ رقمی به سمت گیرنده ارسال می‌شود که ۲۰ آن مربوط به کد امنیتی و ۴ رقم دیگیر برای تشخیص کلید ها است. با استفاده از این ریموت با توجه به حافظه میکروکنترلر استفاده شده در بخش گیرنده شما میتوانید هر تعداد ریموت که در نظر دارید به گیرنده معرفی کنید.

ریموت کدلرن ASK - دیجی اسپارک

 


گیرنده ASK


شماتیک مدار گیرنده ASK با یک سرچ ساده در گوگل پیدا می‌شود. اما در صورتی که اطلاعات کافی درباره طراحی مدار را ندارید پیشنهاد می‌کنم از ماژول های آماده موجود در بازار استفاده کنید. ماژول های گرینده نیز همانند ریموت ها با فرکانس های ۳۱۵ و ۴۳۳ مگاهرتز در ببازار موجود است.  ماژول های گیرنده ASK موحود دربازار را میتوان به دو دسته super regenerative و super heterodyne تقسیم نمود. گیرنده های نوع super regenerative قدیمی تر هستند و دارای دقت، برد انتقال و هزینه کمتری هستند.

super regenerative Module

ماژول گیرنده

نوع دیگر گیرنده های موجود در بازار، گیرند های super heterodyne هستند. که نسبت به گیرنده نوع قبلی جدی تر و دارای حساسیت و کیفیت بیشتری است. و همچنین به دلیل استفاده از کریستال ثبات فرکانس بهتری دارد.

superheterodyne receiver module

ماژول گیرنده

 


اتصالات پروژه


ماژول های گیرنده دارای ۴ پایه هستند. پایه VCC به ۵+ ولت و پایه GND به زمین متصل می‌شود. همچنین دو پایه با نام Data موجود است که به یک دیگر متصل هستند. در این آموزش پای دیتا به پایه PB0 میکروکنترلر STM32 متصل شده است. همچنین برای تست برنامه ۳ عدد LED بر روی پایه های PB12 تا PB14 متصل شده است (شما میتوانید از رله بجای LED ها استفاده کنید) همچنین پایه PB15 برای تعریف ریموت جدید به یک کلید متصل شده است.

شماتیک پروژه ریموت کنترل ASK با برد STM32 - دیجی اسپارک

 


پیکربندی میکروکنترلر STM32


پس از ساخت پروژه در نرم افزار STM32CubeMX مطابق بخش اول آموزش میکروکنترلر های STM32 بایستی ۳ پایه برای LED ها بعنوان خروجی و یک پایه برای کلید بعنوان ورودی و Pull-up تعریف کنید. پایه PC13 را نیز با لیبل LED خروجی کنید. برای خواندن کد ریموت نیاز به فعال سازی وقفه خروجی بر روی یکی از پایه های میکروکنترلر است. در بخش دوم آموزش میکروکنترلر های STM32 نحوه تعریف پایه بعنوان وقفه خروجی توضیح داده شده است. یک پایه را بعنوان وقفه خارجی تعریف کنید. سپس برای پایه وقفه خارجی لیبیل “RF_IN” را انتخاب کنید. پس از آن به بخش GPIO رفته و در تنظیمات پایه RF_IN قسمت GPIO Mode را بر روی گزینه “External Interrupt Mode with Rising/Falling edge trigger detection” تنظیم کنید. همچنین در بخش NVIC  نیز وقفه خارجی را فعال کنید. در این آموزش پایه ها به مطابق تصویر زیر تعریف شده‌اند.

Stm32 Pinout

 

آموزش راه اندازی تایمر میکروکنترلرهای STM32 را مطالعه کنید. و سپس یک تایمر های موجود را انتخاب کنید. گزینه Clock Source را بر روی Internal Clock قرار دهید. سپس مقدار ۷۱۹ در قسمت Prescaler قرار دهید. فرکانس میکروکنترلر را بر روی ۷۲ مگاهرتز تنظیم کنید. سپس در بخش Project manager تنظیمات مورد نیاز را انجام دهید. سپس وارد بخش Code Generator شده و در قسمت Generated files تیک مربوط به گزینه Generate pripheral iniialization as a pair of ‘.c/.h’ files per pripheral را بزنید.

تنظیمات نرم افزار stm32cubemx Setting - دیجی اسپارک

تنظیمات نرم افزار STM32CubeMX

در آخر بر روی گزینه GENERATE CODE کلیک کنید و وارد نرم افزار KEIL شوید.

 


کدنویسی در نرم افزار KEIL


ابتدا از کتابخانه Stm32 Remote decoder را دانلود کنید. سپس کتابخانه را به پروژه ریموت کدلرن ASK اضافه کنید. در صورتی که با نحوه اضافه کردن کتابخانه به پروژه آشنا نیستید. آموزش اضافه کردن کتابخانه به پروژه های STM32 را مطالعه کنید. سپس بایستی وارد فایل askConfig.h شده و شمار تایمر تعریف شده را در قسمت #define _ASK_TIM وارد می‌کنیم. در این آموزش تایمر شماره ۴ در نظر گرفته شده است. پس این قسمت را مطابق دستور زیر تغییر می‌دهیم.

#define   _ASK_TIM          htim4 //  10us tick

سپس وارد فایل main.c شده و کد زیر را به فایل main خود اضافه کنید. همانطور که در آموزش های قبل گفته شده است بایستی بخش های مختلف کد زیر را به بخش های مشخص شده در فایل main اضافه کنید. درصورتی که کد زیر را یکجا کپی کنید. با خطا مواجه خواهید شد.

// ASK Receiver Library
#include "ask.h"

// ASK Stract
ask_t	rf;

// Intrrupt PB0 Callback
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	if(GPIO_Pin == RF_IN_Pin)
		ask_callBackPinChange(&rf);  
}

int main(void)
{
  //Local Variable
  uint8_t	RemoteData[3],Lern_Code[2];
  // ASK initialize
  ask_init(&rf,RF_IN_GPIO_Port,RF_IN_Pin);
  while (1)
  {
	ask_loop(&rf);
	// Receive Data
	if(ask_available(&rf))
	{
		if(ask_read(&rf,RemoteData,NULL,NULL))
		{
			// Remote Define
			if(HAL_GPIO_ReadPin(Lern_GPIO_Port,Lern_Pin) == GPIO_PIN_RESET)
			{
				for(uint8_t i=0;i<2;i++)Lern_Code[i]=RemoteData[i];
				for(uint8_t i=0;i<6;i++)
				{
						HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);
						HAL_Delay(250);
				}
			}
			else
			{
				// Check Remote Code
				if(Lern_Code[0] == RemoteData[0] && Lern_Code[1] == RemoteData[1])
				{
					// Output 1 ON
					if((RemoteData[2]&0x0f)==0x1) 
					{
						HAL_GPIO_WritePin(OUT1_GPIO_Port,OUT1_Pin,GPIO_PIN_SET);
						HAL_GPIO_WritePin(OUT2_GPIO_Port,OUT2_Pin,GPIO_PIN_RESET);
						HAL_GPIO_WritePin(OUT3_GPIO_Port,OUT3_Pin,GPIO_PIN_RESET);
					}
					// Output 2 ON
					else if((RemoteData[2]&0x0f)==0x2) 
					{
						HAL_GPIO_WritePin(OUT1_GPIO_Port,OUT1_Pin,GPIO_PIN_RESET);
						HAL_GPIO_WritePin(OUT2_GPIO_Port,OUT2_Pin,GPIO_PIN_SET);
						HAL_GPIO_WritePin(OUT3_GPIO_Port,OUT3_Pin,GPIO_PIN_RESET);
					}
					// Output 3 ON
					else if((RemoteData[2]&0x0f)==0x4) 
					{
						HAL_GPIO_WritePin(OUT1_GPIO_Port,OUT1_Pin,GPIO_PIN_RESET);
						HAL_GPIO_WritePin(OUT2_GPIO_Port,OUT2_Pin,GPIO_PIN_RESET);
						HAL_GPIO_WritePin(OUT3_GPIO_Port,OUT3_Pin,GPIO_PIN_SET);
					}
					// All Outputs OFF 
					else if((RemoteData[2]&0x0f)==0x8) 
					{
						HAL_GPIO_WritePin(OUT1_GPIO_Port,OUT1_Pin,GPIO_PIN_RESET);
						HAL_GPIO_WritePin(OUT2_GPIO_Port,OUT2_Pin,GPIO_PIN_RESET);
						HAL_GPIO_WritePin(OUT3_GPIO_Port,OUT3_Pin,GPIO_PIN_RESET);
					}
				}
			}
		}
	}
  }
}

در آخر  بایستی برنامه را کامپایل کرده و بر روی برد Bluepill پروگرام کنید. در صورتی که با نحوه پروگرام کردن میکروکنترلر های Stm32 آشنا نیستید. لطفا بخش اول آموزش های میکروکنترلر Stm32 را مطالعه نمایید.

 

توجه داشته باشید که سورس داخل این آموزش مظابق ورژن قدیم این کتابخانه بوده است و برای دسترسی به سورس جدید میتوانید به لینک مراجعه کنید.

 


نحوه عملکرد پروژه گیرنده کدلرن


هر بار که یکی از کلید های ریموت کدلرن ASK فشرده می‌شود. ریموت کد ۲۴ رقمی به سمت گیرنده ارسال می‌کند. زمانی که گیرنده دیتایی دریافت کند. در پایه های Data ماژول گیرنده موج مربعی تولید می‌شود. این موج مربعی توسط وقه خارجی میکروکنترلر شناسایی می‌شود و بهمراه تایمر به کد ۲۴ رقمی باینری تبدیل می‌شود. و در آخر کد دریات شده در آرایه RemoteData بصورت ۳ عدد هگز ذخیره می‌شود.

در ابتدا پس از روشن شدن سیستم بایستی کلید را نگه متصل به پایه PB15 را نگه داشته و سپس یکی از کلید های ریموت را فشار داده و کلید متصل به پایه PB15 را رها کنید. سپس LED موجود بر روی برد Bluepill چند بار چشمک خوهد زد. حالا ریموت به سیستم معرفی شده است. پس از این با فشردن هر کلید از ریموت یکی از LED ها روشن خواهد شد. همچنین یکی از کلید های ریموت برای خاموش شدن تمامی کلید ها تعریف شده است.

پروژه مدار گیرنده کد لرن ASK با برد STM32 - دیجی اسپارک

 


جمع بندی


در این آموزش ابتدا با مدولاسیون و انواع آن آشنا شدیم. سپس درباره ی مدولاسیون ASK صحبت کردیم. پس از آن با ریموت ها و نحوه کدگذاری آن ها آشنا شدیم. در ادامه گیرنده های موجود در بازار مورد بررسی قرار گرفتند. سپس کتابخانه ای برای تشخیص کد ریموت ها بر روی میکروکنترلر های STM32 معرفی شد. در آخر نحوه ساخت گیرنده ریموت کدلرن با میکروکنترلر STM32 توضیح داده شد.

 


لوازم مورد نیاز


 

چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریع‌ترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند می‌توانید از همین طریق اطلاع رسانی کنید.

 

در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی از وبسایت دیجی اسپارک حمایت کنید.

 

درباره نویسنده

علی زاهدی

برنامه نویس و طراح سیستم های مبتنی بر میکروکنترلر

دانسته هایتان را مانند یک ساعت مچی در دست کنید، نه صرفا به این خاطر که نشان دهید آن را دارید. بلکه به این خاطر که اگر کسی از شما ساعت را پرسید، برایش بگویید.
لرد چسترفیلد

تبادل نظر و رفع عیب با ثبت دیدگاه

۴۹ دیدگاه

    • با سلام
      تصور کنید شما قرار است یک دزدگیر اماکن طراحی کنید. پس از بررسی امکانات مورد نیاز به نتیجه میرسید که از میکروکنترلر های STM32 استفاده کنید. در این موقع یکی از مهم ترین بخش های مورد نیاز همین پروژه داخل آموزش است.

    • با سلام
      اگر متن آموزش را با دقت مطالعه کنید. نوشته شده است که ASK یک نوع مدولاسیون دیجیتال است که در ریموت ها بسیار کاربرد دارد.

    • با سلام از توجه شما سپاسگزارم
      بله، امکان پیاده سازی این پروژه روی تمامی میکروکنترلر های STM32 وجود دارد.

      • متاسفانه میکرو عمل نکرد شاید در تعریف interrupt مشکلی وجود داره ممنون میشم راهنمایی کنید

          • سلام
            بله تنظیمات دقیقا همان هستش
            ولی چون کریستال میکرو stm32f100rbt بیشتر از ۲۴MHz نمیتونه باشه اون قسمت رو با توجه به میکرو تنظیم کردم ولی کار نکرد
            نمیدونم شاید اشتباه تنظیم کردم

  • سلام برای ارسال اطلاعات میشه از این روش استفاده کرد؟ من می خوام اطلاعات فریم ده بایتی رو ارسال کنم مثلا با ماژول h3v3e و چند گیرنده دارم در اونها اطلاعات را دریافت کنم میشه؟

    • با سلام
      بله امکان دریافت دیتا از این روش هست اما برای این کار بایستی تغییرات لازم را در کتابخانه ایجاد کنید.

  • سلام من چند روزی هست درگیر این پروژه هستم متاسفانه مدارم کار نمیکنه و نمیدونم مشکل از کجاست. اگه میشه بصورت مستقیم در ارتباط باشم باهاتون ممنون میشم

    • با سلام
      لطفا مشکل را از طریق بخش نظرات بیان کنید تا در آینده دیگر دوستان نیز بتوانند زودتر به پاسخ مشکلات برسند.
      برای شروع دیباگ با استفاده از یک LED بررسی کنید تا زمانی که کلید ریموت زده می‌شود. پایه دیتا گیرنده پالسی دریافت می‌کند یا خیر؟

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

    • با سلام
      برای این که با استفاده از یک ریموت، چند گیرنده را کنترل کنیم. بایستی برای مثال ۴ عدد ماژول گیرنده به همراه میکروکنترلر قرار دهیم و در کد، قسمت مربوط به فعال کردن یکی از خروجی ها را در یکی از میکروکنترلر ها بنویسیم و باقی خروجی ها را پاک کنیم. و همچنین برای دیگر خروجی ها در میکروکنترلر های دیگر همین کار را انجام دهیم. تا با فشار دادن هر کلید دستور مربوط به آن خروجی در میکروکنترلر مربوطه اجرا شود.

  • سلام مهندس بابت لایو امشب تشکر میکنم. فوق العاده بود.
    راجع به سوالی که در لایو مطرح شد، به نظر شما چرا استفاده از فرکانس ۴۳۳ مگاهرتز بیشتر روال پروژه‌ها است؟

    • با سلام از توجه شما سپاسگزارم
      من این مورد را بررسی کردم، دلیل استفاده از باند ۴۳۳ مگاهرتز این است که این باند در اکثر کشور ها (مخصوصا کشور های اروپایی) این باند آزاد است و همه میتواند از این باند استفاده کنند. برای فرکانس های دیگر باید مجوز هایی تهیه شود که این مجوز ها هزینه سالیانه تقریبا بالایی دارند. دلیل محبوبیت و استفاده زیاد از باند ۴۳۳ مگاهرتز این است.

  • آقا سلام، لایو عالی بود، خسته نباشید هم شما و هم آقای طباطبایی
    میخواستم بدونم که با یه برد دیگه که خودش از تراشه STM تهیه شده، باید این برد را پروگرام کنیم؟

    • با سلام از توجه شما سپاسگزارم.
      بله عموم پروگرامر های میکروکنترلر های STM32 از همین میکروکنترلر های STM32 ساخته شده اند. البته راه های دیگری هم برای پروگرام میکروکنترلر وجود دارد. ولی پیشنهاد بنده استفاده از پروگرامر های STLINK است. در انتهای آموزش لینک تهیه این پروگرامر را در قسمت لوازم مورد نیاز قرار دادم.

  • با تشکر. اگر تغذیه خاموش بشه و مجدد روشن بشه داده های که معرفی شده داخل آرایه پاک خواهد شد

  • سلام. ممنون از مطالب خوبتان. ظاهرا کتابخانه ask stm32 تغییر کرده. خیلی چیزی از اون نفهمیدم. rx433 , tx433 , ….

    • با سلام با تشکر از توجه شما
      بله کتابخانه ASK قرار گرفته در گیتهاب به کلی تغییر کرده است. به زودی آموزش مطابق اخرین ورژن کتابخانه بروزرسانی خواهد شد.

  • سلام وقت شما بخیر
    با تشکر از مقاله جذابتون، من دقیقا همین گیرنده رو دارم که فرکانس ۳۱۵mhz داره و یه فرستنده فیکس کد دارم که یه کنترل آماده اس . من خروجی گیرنده رو با ماژول usb/TTL توو نرم افزار realterm دیدم( فقط محض اینکه بدونم گیرنده کار میکنه) ولی گیرنده بدون وقفه روی پایه دیتا اطلاعات داره. از همین جهت هم بعد از پروگرام میکرو با کد شما، به صورت پیوسته اینتراپت زده میشه .
    از اطلاعات دیگه ای که میتونم بدم اینه که شرط if(GPIO_Pin == RF_IN_Pin) همیشه برقراره . شرط if(ask_available(&rf)) اصلا برقرار نمیشه ،حتی وقتی با فرستنده چیزی میفرستم.
    حدس خودم اینه که:
    ۱- یا کیفیت گیرنده پایینه و یا خرابه
    ۲- کلا یه الگوی خاصی اول هر دیتا هست که باعث میشه الگوریتم شما فقط همونو بخونه که من از کد متوجه نشدم.
    ۳- توی محیط نویز هست و یا فرستنده دیگه ای داره روی این فرکانس این نزدیکیا کار میکنه که بعید میدونم.
    ممنون میشم اگه راهنماییم کنین .

    • با سلام
      کتابخانه ASK موجود در Github به تازگی بروزرسانی شده و بسیاری از دستورات در این کتابخانه تغییرات اساسی داشته است. بزودی این آموزش نیز مطابق بروزرسانی جدید این کتابخانه بروزرسانی خواهد شد.

  • سلام و وقت بخیر مهندس زاهدی. میشه فایل کتابخانه قبلی را برای بنده ایمیل کنید. کتابخانه جدید خیلی کار میبره.

  • سلام موقع کامپایل ارور میده
    خط ۱۹برنامه بالا موقع کپی کردن به تابع هم ارور داره من که هر کار کردم راه نیفتاد دوستان تونستن راه اندازی کنم با این کتابخانه

    • با سلام
      کتابخانه قرار گرفته در Github بروز رسانی شده و بایستی آموزش نیز بروز رسانی شود. بزودی بروز رسانی کتابانه جدید قرار میگیرد.

  • سلام وقت بخیر
    من نتونستم از برنامه استفاده کتم امکان دارد پروژه kiel و یا stm32cubeide را برا گذاری کنید
    من لینک دانلود نتونستم پیدا کنم
    ممنون

    • با سلام
      کتابخانه بروزرسانی هایی داشته که باعث شده کد قرار گرفته در این آموزش با کتابخانه ورژن جدید سازگار نباشد. به زودی آموزش همانند آخرین ورژن کتابخانه بروز رسانی خواهد شد.

    • با سلام
      در حال حاظر خیر، کتابخانه موجود در Github درحال برروز رسانی است و مقاله بایستی پس از هربار برروزرسانی مظابق آپدیت جدید بروزرسانی شود.

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

  • سلام وقتتون بخیر
    مهندس زاهدی میشه لطفا فایل کتابخانه قبلی این پروژه رو برای من ایمیل کند، ممنون میشم.

  • سلام من کتابخانه و کد ها رو در cubeide اوردم و تایمر و پین ها ر تنظیم کردم ولی خطا دارم در ask_loop(&rf); و ask_init(&rf,RF_IN_GPIO_Port,RF_IN_Pin);
    کتابخانه قدیمی کجاست شاید از اون باشه

  • سلام فایل ask.h و ask.c ورژن قبلی رو میخواستم ممنون میشم برام ایمیل کنید لینک دانلود شو

  • سلام مهندس وقت بخیر ممنون از آموزش خوبتون
    خروجی گیرنده من یکسره روش دیتا داره (صفرو یک میشه ) و اصلا صفر نمیشه حتی زمانی که فرستنده ندارم برای همین یکسره فقفه فعال میشه و میکرو کاردیگه ای انجام نمیده

  • با سلام و تشکر از اینکه کد و توضیحات را در سایتتون قرار دادین.
    سوالم در مورد کد این هست که یه سری توابع در تابع main فراخوانی شده که در جایی تعریف نشده .برای مثال:
    ask_loop، ask_read، ask_callBackPinChange
    و تعدادی تابع هم آرگومان ورودیش بیش از چیزی هست که تعریف شده برای مثال: ask_init
    ممنون میشم اگر راهنمایی بفرمایید