رفتن به مطلب

کمک - مشکل تو منطق برنامه نویسی


!Hooman

ارسال های توصیه شده

سلام :icon_gol:

 

یه کمکی از دوستان میخواستم ، پیشاپیش از لطفتون ممنونم :icon_gol:

 

من دارم یه برنامه برای یه برد الکترونیکی مینویسم که تو قسمت برنامش مشکل اساسی دارم! هر کاری میکنم بازم مشکلم حل نمیشه ( البته در حد ابتدایی بلدم ولی این موضوع خیلی پیچیده هم نیست!)

زبانش به زبان ++C شبیه هست.

 

و چیزی که از برنامه میخوام اینه که ماکزیمم و مینیمم رو در طول اجرای برنامه ثابت نگه داشته باشه ولی الان آخرین تغییرات رو لحاظ میکنه!

بطور مثال اگه دمای ماکزیمم 20 باشه و دما افت کنه بیاد 15 ، صفحه نمایش Max=20 و Min=15 رو نشون میده و اگه دما بازم افت کنه تا 12 بیاد Max=20 و Min=12 رو نشون میده ( که تا اینجاش درسته ) ولی همین که دما بشه 13 خروجی اینطور میشه Max=13 و Min=12 ، ماکزیمم عدد 20 رو بیخیال میشه و 13 رو ماکزیمم فرض یکنه !!! که این اشتباه هست!

امیدوارم منظورمُ خوب رسونده باشم.

کل چیزی که مد نظر هست اینه ک کمترین و بیشترین مقدار تو کل پروسه اجرا حفظ بشه

کد برنامه ( کد های رنگ سبز برای LCD برد و تو منطق برنامه تاثیری نداره و کد های رنگ قرمز به منطق برنامه بر می گرده ! کل برنامه با 2 تا IF نوشته شده :ws3: ولی نمیدونم چرا جواب نمیده hanghead.gif )

 

 

#include

LiquidCrystal lcd (14,15,16,17,18,19,20);

 

 

 

 

float reading , temperature;

float maximum , minimum , space ;

 

 

 

 

 

 

 

 

 

 

byte degree[8] =

{

0b00011,

0b00011,

0b00000,

0b00000,

0b00000,

0b00000,

0b00000,

0b00000

};

 

 

 

 

 

 

 

 

void setup()

{

 

 

 

lcd.begin(20,4);

lcd.createChar(1, degree);

lcd.setCursor(0,0);

lcd.print(" DIGITAL ");

lcd.setCursor(0,1);

lcd.print(" TEMPERATURE ");

delay(5000);

lcd.clear();

 

 

 

 

 

}

 

 

 

void loop()

{

 

/*---------Temperature-------*/

reading=analogRead(A0);

temperature=((reading*5.0)/1023.0)*100;

delay(1000);

 

/*------Display Result------*/

//lcd.clear();

lcd.setCursor(1,0);

lcd.print("Temp Now: ");

lcd.setCursor(11,0);

lcd.print(temperature);

lcd.write(1);

lcd.print("C");

delay(1000);

 

 

 

maximum = space ;

minimum = space ;

 

 

space = temperature ;

 

 

 

 

 

 

if ( space > maximum ){

 

maximum = space ;

lcd.setCursor(0,1);

lcd.print(" Max.Temp: ");

lcd.setCursor(11,1);

lcd.print(maximum);

lcd.write(1);

lcd.print("C");

delay(1000);

 

}

 

if ( space

 

minimum = space ;

lcd.setCursor(0,2);

lcd.print(" Min.Temp: ");

lcd.setCursor(11,2);

lcd.print(minimum);

lcd.write(1);

lcd.print("C");

delay(1000);

 

}

 

 

 

 

}

  • Like 6
لینک به دیدگاه
سلام :icon_gol:

 

یه کمکی از دوستان میخواستم ، پیشاپیش از لطفتون ممنونم :icon_gol:

 

من دارم یه برنامه برای یه برد الکترونیکی مینویسم که تو قسمت برنامش مشکل اساسی دارم! هر کاری میکنم بازم مشکلم حل نمیشه ( البته در حد ابتدایی بلدم ولی این موضوع خیلی پیچیده هم نیست!)

زبانش به زبان ++C شبیه هست.

 

و چیزی که از برنامه میخوام اینه که ماکزیمم و مینیمم رو در طول اجرای برنامه ثابت نگه داشته باشه ولی الان آخرین تغییرات رو لحاظ میکنه!

بطور مثال اگه دمای ماکزیمم 20 باشه و دما افت کنه بیاد 15 ، صفحه نمایش Max=20 و Min=15 رو نشون میده و اگه دما بازم افت کنه تا 12 بیاد Max=20 و Min=12 رو نشون میده ( که تا اینجاش درسته ) ولی همین که دما بشه 13 خروجی اینطور میشه Max=13 و Min=12 ، ماکزیمم عدد 20 رو بیخیال میشه و 13 رو ماکزیمم فرض یکنه !!! که این اشتباه هست!

امیدوارم منظورمُ خوب رسونده باشم.

کل چیزی که مد نظر هست اینه ک کمترین و بیشترین مقدار تو کل پروسه اجرا حفظ بشه

کد برنامه ( کد های رنگ سبز برای LCD برد و تو منطق برنامه تاثیری نداره و کد های رنگ قرمز به منطق برنامه بر می گرده ! کل برنامه با 2 تا IF نوشته شده :ws3: ولی نمیدونم چرا جواب نمیده hanghead.gif )

 

 

#include

LiquidCrystal lcd (14,15,16,17,18,19,20);

 

 

 

 

float reading , temperature;

float maximum , minimum , space ;

 

 

 

 

 

 

 

 

 

 

byte degree[8] =

{

0b00011,

0b00011,

0b00000,

0b00000,

0b00000,

0b00000,

0b00000,

0b00000

};

 

 

 

 

 

 

 

 

void setup()

{

 

 

 

lcd.begin(20,4);

lcd.createChar(1, degree);

lcd.setCursor(0,0);

lcd.print(" DIGITAL ");

lcd.setCursor(0,1);

lcd.print(" TEMPERATURE ");

delay(5000);

lcd.clear();

 

 

 

 

 

}

 

 

 

void loop()

{

 

/*---------Temperature-------*/

reading=analogRead(A0);

temperature=((reading*5.0)/1023.0)*100;

delay(1000);

 

/*------Display Result------*/

//lcd.clear();

lcd.setCursor(1,0);

lcd.print("Temp Now: ");

lcd.setCursor(11,0);

lcd.print(temperature);

lcd.write(1);

lcd.print("C");

delay(1000);

 

 

 

maximum = space ;

minimum = space ;

 

 

space = temperature ;

 

 

 

 

 

 

if ( space > maximum ){

 

maximum = space ;

lcd.setCursor(0,1);

lcd.print(" Max.Temp: ");

lcd.setCursor(11,1);

lcd.print(maximum);

lcd.write(1);

lcd.print("C");

delay(1000);

 

}

 

if ( space

 

minimum = space ;

lcd.setCursor(0,2);

lcd.print(" Min.Temp: ");

lcd.setCursor(11,2);

lcd.print(minimum);

lcd.write(1);

lcd.print("C");

delay(1000);

 

}

 

 

 

 

}

 

تو این برنامه ماکزیمم و مینیمم رو هردو برابر مقدار space در نظر گرفتید و به نوعی ماکزیمم مینیمم ثابت در نظر گرفته شده و تو هردو برابر space هست و مقایسه ای بین ورودی و ماکزیمم و مینیممهای قبلی صورت نگرفته پیشنهاد من اینه که نیازی نیست از ابتدا ماکزیمم مینیمم رو تعیین کنید بلکه تو خود برنامه بدست بیارید من همون قسمتهای قرمز رو با این کد عوض میکنم

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

 

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

  • Like 6
لینک به دیدگاه
تو این برنامه ماکزیمم و مینیمم رو هردو برابر مقدار space در نظر گرفتید و به نوعی ماکزیمم مینیمم ثابت در نظر گرفته شده و تو هردو برابر space هست و مقایسه ای بین ورودی و ماکزیمم و مینیممهای قبلی صورت نگرفته پیشنهاد من اینه که نیازی نیست از ابتدا ماکزیمم مینیمم رو تعیین کنید بلکه تو خود برنامه بدست بیارید من همون قسمتهای قرمز رو با این کد عوض میکنم

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

 

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

 

من ی تغییراتی دادم درست شد

اول اومدم طبق گفته شما این قسمت رو حذف کردم خب مشکل اصلی حل شد

 

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

 

ولی مشکل اینجا بود که مقدار اولیه نداشتن! برای همین خارج از لوپ ماکزیمم رو 0 و مینیمم رو 100 قرار دارم

از طرفی شما space = minimum; قرار دارین که باید بر عکسش قرار بگیره! چون اینطوری مقدارش تو خروجی صفر نشون داده میشد

 

ممنوونم :icon_gol:

  • Like 4
لینک به دیدگاه

مثل اينكه مشكلتون حل شد ه

ولي براي من يه سوالي ايجاد شد نقش متغير space اينجا چيه ؟:ws52:

temperature داره مدام دماي محيط رو ميگيره درسته ؟

  • Like 4
لینک به دیدگاه
مثل اينكه مشكلتون حل شد ه

ولي براي من يه سوالي ايجاد شد نقش متغير space اينجا چيه ؟:ws52:

temperature داره مدام دماي محيط رو ميگيره درسته ؟

 

 

الان که دقت کردم واقعا نقشی نداره !

حرفتون درسته

در واقع یه برنامه نوشته شده رو ویرایش کردم ، میتونم حذفش کنم

منظورتون اینه متغیر temperature خودش میتونه داده ها رو مستقیم تو maximum و

minimum

قرار بده دیگه ؟

 

___________________________________________________________________________________

 

پست قبلی که فرستادم ، اگه بخوام با حلقه For بنویسم و شمارنده من به عدد مورد نظر رسید ، برنامه از For رد میشه یا باید شرط بذارم و بعدش دستور Break

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

  • Like 2
لینک به دیدگاه

مشکل پست قبلیم حل شده ! الان چند روزه رو این قسمت مشکل دارم

مثلا میخوام بگم تو یک سری دماها مثلا 25 و 26 عبارت نرمال رو نمایش بده ولی الان رو همه ی دماها نمایش میده !! حتی رو 20 هم که واسش شرط گذاشتم نرمال نشون میده

ی راه حل دیگه داره که ازش جواب گرفتم، برای هر عدد ی شرط بذارم که خیلی برنامه طولانی میشه!!

یه متغیر temp با int تعریف کردم برای اینکه اعشار رو برداره و عدد صحیح بده

مگه این علامت || OR نیست؟!! که بشه گفت یا 25 یا 26 اومد فلان کار رو بکن

 

 

 

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

لینک به دیدگاه
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

 

خیلی خیلی ممنوون که جواب دادین :icon_gol:

ببخشید ی سوال دیگه !

سنسور برای اینکه ضریب خطا اندازه گیریش پایین بیاد میگن بهتره 10 بار ورودی رو بخونه و میانگینش رو تو خروجی نمایش بده

طبق برنامه زیر چطور باید بعدش حلقه FOR بنویسم ؟

من دو تا متغیر avg و sum تعریف کردم و حلقه رو نوشتم ، ولی جواب نداد ..

 

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

  • Like 1
لینک به دیدگاه
×
×
  • اضافه کردن...