گفتیم که تو فرستنده داده ی اصلیمون رو داخل یه قالب قرار میدیم که حالا به صورت نمادی با سه تا S شروع و با سه تا E تموم میشه. سمت گیرنده ما باید بتونیم بین داده ی درست و داده ی اشتباه تمایز قائل بشیم. بنابراین می تونیم یه ماشین حالت تعریف کنیم که بتونیم گام به گام باهاش جلو بریم و دادمون رو از بین انبوهی از اطلاعات بیرون بکشیم.

فرض می کنیم متغیری از نوع unsigned char داریم که هربار که داده ای دریافت میشه داخلش ریخته میشه (تو روتین وقفه). بلافاصله تابعی هست که این داده ی دریافتی رو  پردازش میکنه. در قدم اول داده ی دریافتی یا S هست یا نیست. اگه هست یه قدم میریم جلو. داده ی بعدی هم باید S باشه. در غیر اینصورت یه قدم به عقب برمیگردیم. اگه یه بار دیگه S رو دریافت کنیم دوباره یه قدم جلوتر میریم. این آخرین باریه که منتظر S میمونیم. دقت کنید وسط این انتظارها اگه چیزی غیر از S دریافت کنیم یعنی فریم درست نیست و باید همه چی رو از نو شروع کنیم. با فرض دریافت سومین S حالا به تعداد داده هامون ( اینجا ۳ بایت) باید بافرمون رو پر کنیم. نکته ی مهم دیگه اینکه بعد از دریافت داده ها باید سه بار E رو دریافت کنیم وگرنه داده ها از اعتبار ساقط هستن و باید دور ریخته شن. وقتی سه بار S رو دریافت کرده باشیم و سه بار E یعنی فریم با موفقیت دریافت شده.

unsigned char buf[3];
unsigned char rxcnt=0;
void analys_data(unsigned char din){
	if(state==0){
		if(din=='S')
			state=1;
	}else if(state==1){
		if(din=='S')
			state=2;
		else
			state=0;
	}else if(state==2){
		if(din=='S')
			state=3;
		else
			state=0;
	}else if (state==3){
		buf[rxcnt++]=din;
		if(rxcnt==3)
			state=4;
	}else if(state==4){
		if(din=='E')
			state=5;
		else
			state=0;
	}else if(state==5){
		if(din=='E')
			state=6;
		else
			state=0;
	}else if(state==6){
		if(din=='E')
			printf("Msg rcvrn");
		else
			state=0;
	}
	{

یک پروژه ی کاملا عملی و خوب رو هم در این زمینه انجام میدیم و البته کلا با این ماژول ها زیاد کار داریم فعلا.

فرستنده گیرنده ی رادیویی ASK – قسمت سوم
دسته بندی شده در:                                                

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

31 − 29 =