پرش به محتوای اصلی
نماتک
حل شده

راهنمایی جهت رفع عدم اجرای کد به صورت صحیح

تصویر کیوان جهان تاب زادهکیوان جهان تاب زادهپرسیده شده ۵ سال پیش۷۲ بازدید۸ پاسخ
سلام مهندس کدی نوشتم که ورودی رو کلمه به کلمه بخونه و هرگاه کلمات خاصی برابر با شرطی درون if اول شد پین 13 را high و هرگاه کلمات ورودی برابر با شرط if دوم شد پین 13 را low کنه ولی مشکل اینه خروجی تابع reader درست هستش ولی ifها کار نمیکنن. هر چه بالا پایینش کردم درست نشد. [upl-file uuid=75074577-e99d-4e34-9730-3bedb84be247 size=825B]sketch-oct28a.txt[/upl-file]

پاسخ منتخب

تصویر مهراد معینمهراد معیناستاد· ۵ سال پیش
پاسخ منتخب
سلام دوست عزیز، لطفا یکم در مورد کدتون برای من توضیح بدید. جون متغیر ها اسم هایی مثل a و b دارن و من در جریان کد شما نیستم و زیاد نمی تونم کمک کنم. ولی چند تا نکته: - - شما چک کردید که تا وقتی که serial.available بود آنگاه تابع reader رو صدا زدید و اونجا هم مجدد همین مورد رو چک کردید. می تونید while اول رو به if تغییر بدید. چون داخل reader شما دارید هرآنچه که روی سریال اومده رو می خونید و عملا while اول فقط یکبار اتفاق میافته و میتونه به if تغییر کنه. - - شما در تابع reader ابتدا نوشتید return x و سپس زیرش هم چند خط کد زدید. توجه داشته باشید که بعد از دستور return، تابع شما مقدار رو برمی گردونه و دیگه ادامه کد اجرا نمیشه. پس کدهای b = 0; و x = x.substring(c,x.length()); دیگه اجرا نمیشن. - - متغیر str رو خارج از loop و setup تعریف کردید که کار درستی نیست. - - وقتی که دو تا شرط دارید که فقط یکیشون باید اجرا بشه، به جای if دوم از else if استفاده کنید. - - شما برای اینکه turnon و turnoff از لحاظ حروف بزرگ و کوچک اشتباه نشن، حالت های مختلف اونها رو چک کردید. به جای اینکار می تونید از اعداد استفاده کنید و یا اینکه در فرستنده و یا گیرنده چک کنید که همه حروف کوچک بشن. مثلا با استفاده از دستور toLowerCase() می تونید همه حروف یک string رو کوچک کنید. اینطوری مهم نیست فرستنده چطوری ارسال کرده، شما هر چیزی که فرستاده رو تبدیل به حروف کوچک می کنید و بعد فقط یک if استفاده می کنید که با حروف کوچک چک می کنه. پس این نکات رو اصلاح کنید. بعد اگر مشکل حل شد که عالیه، اگر نشد، مجدد با توضیح خط به خط کد، همینجا سوال کنید. (قسمت های مهمش، مثلا serial.begin توضیح لازم نداره. اونجایی که مثلا b++ و یا c=b رو برام توضیح بدید که قصدتون چی بوده)

پاسخ‌ها (۸)

  • تصویر مهراد معینمهراد معیناستاد· ۵ سال پیش
    سلام دوست عزیز، کد جدید رو دیدم. بهتون تبریک میگم. خیلی بهتر شده. چند نکته به نظرم میرسه: ۱. در همه حالت های if شما در نهایت متغیر str رو خالی کردید. خوب این می تونست بعد از if انجام بشه چون مستقل از نتیجه if هست. ۲. برای دریافت یک string روی سریال، می تونید از دستور readString استفاده کنید که در بسته توضیح داده شده و احتمالا در جلسات بعدی بررسی شده و شما هنوز بهش نرسیدید. با استفاده از اون دیگه لازم نیست که خودتون دنبال باشید و آخر رشته رو پیدا کنید. نکته دیگه ای به ذهنم نمی رسه و در انتها بهتون تبریک میگم که تونستید این کد رو بنویسید و مشکلتون رو حل کنید. نکاتی مثل رعایت کردن indentation و define کردن پایه ها رو هم رعایت کنید. در ادامه کدها مرحله به مرحله پیچیده تر میشن و شما با استایل کد نویسی صحیح بیشتر آشنا میشید.
  • تصویر مهراد معینمهراد معیناستاد· ۵ سال پیش
    در مورد سوالتون در مورد کد قبلی هم، قبل از return کردن x اون رو پرینت بگیرید و ببینید مقدار داره یا نه. اگر مقدار داره و باز هم موقع return خالی برمیگرده، متغیر x رو به صورت global و خارج از loop و setup (بالاشون) تعریف کنید و ببینید مشکل حل میشه یا نه. خبرش رو به من بدید تا بعدش توضیح بدم که چه اتفاقی داره میافته. (البته مجدد تاکید می کنم که تا واقعا و صد در صد لازم نبود، متغیر ها رو به صورت global نباید تعریف کنید. ولی الان فقط جنبه آموزشی داره)
  • تصویر کیوان جهان تاب زادهکیوان جهان تاب زاده· ۵ سال پیش
    سلام مهندس، ممنون که وقت برای حل مشکل بنده میزارید. همنوطور که گفته بودین قبل از return مقدار متغییر x را پرینت بگیرم و متغیر رو بصورت global معرفی کنم رو قبل از اینکه کد رو برای شما ارسال کنم انجام داده بودم و دوباره هم انجام دادم ولی مقداری برای x چاپ نمیشه!!! پ.ن:من در حین تماشای آموزش خوب شما تا جاییکه میتونم از روش حل مسئله (قطعه کد) شما استفاده نمیکنم و سعی میکنم خودم راه حل رو پیدا کنم همین امر باعث شده سرعت حرکت آموزشیم کم بشه اینو عرض کردم چون فرموده بودید هنوز به دستورreadString نرسیدی. تشکر فراوان
  • تصویر مهراد معینمهراد معیناستاد· ۵ سال پیش
    دوست عزیز، من الان دسترسی به آردوینو ندارم. اجازه بدید در اولین فرصت کد شما رو روی یک دستگاه تست می کنم و مشکلش رو بهتون می گم. اینکه سعی می کنید خودتون کد ها رو بزنید قبل از اینکه جواب رو ببینید هم بسیار کمک می کنه به اینکه کامل مفاهیم و دلایل و ریزه کاری ها رو درک کنید.
  • تصویر کیوان جهان تاب زادهکیوان جهان تاب زاده· ۵ سال پیش
    سلام مهندس، ممنون که وقت برای دیباگ کردن کد گذاشتین. توضیحاتتون مثل همیشه کامل و جامع و دارای نکات مهمی برای من بود. امیدوارم در تمام مراحل زندگی موفق باشید.

پاسخ شما

برای پاسخ دادن به این سوال وارد شوید.