سلام دوست عزیز، لطفا یکم در مورد کدتون برای من توضیح بدید. جون متغیر ها اسم هایی مثل 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 رو برام توضیح بدید که قصدتون چی بوده)