در مورد سوالتون در مورد کد قبلی هم، قبل از return کردن x اون رو پرینت بگیرید و ببینید مقدار داره یا نه. اگر مقدار داره و باز هم موقع return خالی برمیگرده، متغیر x رو به صورت global و خارج از loop و setup (بالاشون) تعریف کنید و ببینید مشکل حل میشه یا نه. خبرش رو به من بدید تا بعدش توضیح بدم که چه اتفاقی داره میافته. (البته مجدد تاکید می کنم که تا واقعا و صد در صد لازم نبود، متغیر ها رو به صورت global نباید تعریف کنید. ولی الان فقط جنبه آموزشی داره)
اما مهندس برگردیم روی همون کد اول من اون کد رو خیلی خلاصه کردم و فقط مشکلی که وجود داره این هستش تابع reader فراخوانی میشه ولی خروجی رشته وجود نداره یعنی تابع تمام کارکترهای ورودی رو باید تک تک به متغییر x که از نوع string هستش اضافه کنه و وقتی به کاراکتر n میرسه متغییر x رو برامون return کنه اما متغییر x مقداری نداره. مشکل اینجاست!!!
درضمن میدونم این قطعه کد نیاز به پاک کردن مقدار string بعداز رسیدن به n داره تا صحیح و کاملتر کار کنه اما فقط این قسمت که مشکل داره فعلا دیباگ بشه برام کافیه.
بازم ممنون مهندس
سلام دوست عزیز، کد جدید رو دیدم. بهتون تبریک میگم. خیلی بهتر شده. چند نکته به نظرم میرسه:
۱. در همه حالت های if شما در نهایت متغیر str رو خالی کردید. خوب این می تونست بعد از if انجام بشه چون مستقل از نتیجه if هست.
۲. برای دریافت یک string روی سریال، می تونید از دستور readString استفاده کنید که در بسته توضیح داده شده و احتمالا در جلسات بعدی بررسی شده و شما هنوز بهش نرسیدید. با استفاده از اون دیگه لازم نیست که خودتون دنبال
باشید و آخر رشته رو پیدا کنید.
نکته دیگه ای به ذهنم نمی رسه و در انتها بهتون تبریک میگم که تونستید این کد رو بنویسید و مشکلتون رو حل کنید. نکاتی مثل رعایت کردن indentation و define کردن پایه ها رو هم رعایت کنید. در ادامه کدها مرحله به مرحله پیچیده تر میشن و شما با استایل کد نویسی صحیح بیشتر آشنا میشید.
@Mehrad#2987
سلام مهندس، ممنون که وقت برای دیباگ کردن کد گذاشتین. توضیحاتتون مثل همیشه کامل و جامع و دارای نکات مهمی برای من بود.
امیدوارم در تمام مراحل زندگی موفق باشید.
دوست عزیز، من الان دسترسی به آردوینو ندارم. اجازه بدید در اولین فرصت کد شما رو روی یک دستگاه تست می کنم و مشکلش رو بهتون می گم.
اینکه سعی می کنید خودتون کد ها رو بزنید قبل از اینکه جواب رو ببینید هم بسیار کمک می کنه به اینکه کامل مفاهیم و دلایل و ریزه کاری ها رو درک کنید.
سلام دوست عزیز، لطفا یکم در مورد کدتون برای من توضیح بدید. جون متغیر ها اسم هایی مثل a و b دارن و من در جریان کد شما نیستم و زیاد نمی تونم کمک کنم.
ولی چند تا نکته:
پس این نکات رو اصلاح کنید. بعد اگر مشکل حل شد که عالیه، اگر نشد، مجدد با توضیح خط به خط کد، همینجا سوال کنید. (قسمت های مهمش، مثلا serial.begin توضیح لازم نداره. اونجایی که مثلا b++ و یا c=b رو برام توضیح بدید که قصدتون چی بوده)
سلام مهندس
کدی نوشتم که ورودی رو کلمه به کلمه بخونه و هرگاه کلمات خاصی برابر با شرطی درون if اول شد پین 13 را high و هرگاه کلمات ورودی برابر با شرط if دوم شد پین 13 را low کنه ولی مشکل اینه خروجی تابع reader درست هستش ولی ifها کار نمیکنن. هر چه بالا پایینش کردم درست نشد.
سلام ممنون که پاسخ دادین توی پاسختون چندین نکته مفید برای من وجود داشت.
من کد رو اصلاح کردم در واقع کاملا تغییرش دادم و تونستم خروجی موردنظر رو ازش بگیرم هدف از این کد این بود که ورودی بگیره و مقایسه انجام بشه و درنهایت چراغی روشن یا خاموش بشه، همون تمرین خودتون هستش. این کد رو براتون ارسال میکنم درموردش نظرتون رو بگید .
ممنون
@Mehrad#2936
سلام مهندس، ممنون که وقت برای حل مشکل بنده میزارید.
همنوطور که گفته بودین قبل از return مقدار متغییر x را پرینت بگیرم و متغیر رو بصورت global معرفی کنم رو قبل از اینکه کد رو برای شما ارسال کنم انجام داده بودم و دوباره هم انجام دادم ولی مقداری برای x چاپ نمیشه!!!
پ.ن:من در حین تماشای آموزش خوب شما تا جاییکه میتونم از روش حل مسئله (قطعه کد) شما استفاده نمیکنم و سعی میکنم خودم راه حل رو پیدا کنم همین امر باعث شده سرعت حرکت آموزشیم کم بشه اینو عرض کردم چون فرموده بودید هنوز به دستورreadString نرسیدی.
تشکر فراوان