اطلاعیه

Collapse
No announcement yet.

استفاده از متغیر؟

Collapse
این موضوع بسته شده است.
X
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    استفاده از متغیر؟

    سلام من دارم یه ربات تعقیب خط درست میکنم.برای تشخیص بعضی از حالت ها یه متغیر تعریف میکنم(تو نرم افزار PIC Basic Pro از نوع Byte) و به اون

    متغیر مقدار های مربوط تو جاهای مختلف داده میشه .مثلا اگه سنسور 1و2 با هم فعال بشه اون متغیر 1 میشه و اگه سنسور 3و2 با هم فعال بشه اون

    متغیر 2بعد ربات به جلو حرکت میکنه.حالا اگه سنسور 4 فعال شد و اون متغیر مقدارش 1 بود باید ربات به چپ بچرخه و بعد متغیر رو صفر میکنه و اگه

    سنسور 5 فعال بشه و اون متغیر مقدارش 2 بود باید ربات به راست بچرخه و دوباره متغیر صفر میشه.ولی اگه متغیر صفر باشه و یکی از سنسور های 4یا 5

    فعال بشه همچنان ربات به جلو حرکت کنه. اما عملا وقتی که باید متغیر 1 یا 2 بشه بعد گردش به چپ یا راست ربات سر جاش میمونه و مثل .....!!!! به

    پیست نگاه میکنه :eek:(تو این حالت سنسوری که باید تشخیص گردش رو بده فعال میشه). :angry:(شرمنده اگه توضیحش خیلی طولانیه!)میشه منو راهنمایی کنین که

    برای حل این مسئله چی کار کنم؟

    #2
    پاسخ : استفاده از متغیر؟

    شاهرخ جان موضوع اینجوری کمی مبهم هست، اگر تونستی برنامه ونحوه ارتباط میکرو با روبات و سنسورها رو اینجا قرار بده شاید دوستانی که با بیسیک کار کردند بهتر بتونند کمکت کنند.
    از آنجا که گاهی فرصت بازخوانی پست نیست، بابت غلط های املایی و نگارشی احتمالی معذرت میخوام.
    هیچیک از پاسخ هایی که میدم را کاملا تایید نمیکنم و ممکن هست اشتباه کرده باشم، اگر من به نوشته ام مطمئن هستم شما مشکوک باشید.
    اگر در حل مشکل من کمک کردید و دکمه تشکر رو نزدم حتما فراموش کردم کوچکترین کمک شما برایم ارزشمند است!
    اگر به هر طریقی از من ناراحت شدید حتما با یک پیام خصوصی تذکر بدهید تا مشکل رو حل کنیم و رابطه ی صمیمانه، پایدار بماند.
    شاد و موفق باشید

    دیدگاه


      #3
      پاسخ : استفاده از متغیر؟

      و اما توضیح مفصل....!!
      میکرو مورد استفاده من PIC16F877Aهستش. 8 تا سنسور IR دارم که به هشت تا Op-Amp وصل کردم(IC= LM324) خروجی Op-Amp ها رو وصل کردم به پورت B. موتور ها رو هم از طریق پورت D کنترل میکنم.بری تشخیص بعضی از حالت ها(چرخیدن 90 درجه یا چرخیدن به اندازه بیش از 90 درجه مثلا120درجه) احتیاج به در نظر گرفتن حالت های قبلی سنسور ها هست.من برای این کار یه متغیر اول برنامه تعریف میکنم:

      N var byte
      بعد این دستور رو نوشتم:

      if portd=19 then
      n=1
      gosub forward
      endif

      واضح هستش که اگه سنسور های 1و2و5 فعال بشن(که نتیجه عدد 19 هست) ربات همچنان به جلو حرکت کنه و به متغیر n مقدار 1اختصاص داده بشه.

      if port d=24 & N=1 then
      gosub turnleft
      n=0
      end if

      وقتی میکرو به این جا میرسه هیچ کاری انجام نمیده :angry: با وجود اینکه سنسور های 4و5(که برابر با 24هست) فعال هست ربات سرجاش میمونه شایان ذکر است که قبل از این حالت سنسور های 1و2و5 فعال شدن و اصولا متغیر N باید برابر 1 شده باشه. :redface: ممنون میشم اگه زودتر کمکم کنید.

      دیدگاه


        #4
        پاسخ : استفاده از متغیر؟

        راستش من با بیسیک کار نکردم ولی:
        عملکرد میکرو رو جدا از روبات چک کردید؟ وردودی ها رو به صورت دستی بهش بدید ببینید خروجی مورد نظر رو به شما میده. اگر نمیده ممکنه مشکل از پورت B باشه، فیوز بیت های debug و LVP رو OFF کنید تا کل پین های پورت B به صورت ورودی و خروجی تعریف بشه. ( کلا اگر از هر 8 پین پورت B میخواید به صورت I/O استفاده بکنید باید این فیوز بیتها رو به این شکل تنظیم کنید چون در حالت پیشفرض همه پایه ها ورودی خروجی نیستند، مراجعه کنید به بخش special features of the cpu )
        اگر میکرو جدا از روبات کارش رو درست انجام میده پس احتمالا مشکل توی نحوه اتصالات یا الگوریتم کار روبات هست.
        از آنجا که گاهی فرصت بازخوانی پست نیست، بابت غلط های املایی و نگارشی احتمالی معذرت میخوام.
        هیچیک از پاسخ هایی که میدم را کاملا تایید نمیکنم و ممکن هست اشتباه کرده باشم، اگر من به نوشته ام مطمئن هستم شما مشکوک باشید.
        اگر در حل مشکل من کمک کردید و دکمه تشکر رو نزدم حتما فراموش کردم کوچکترین کمک شما برایم ارزشمند است!
        اگر به هر طریقی از من ناراحت شدید حتما با یک پیام خصوصی تذکر بدهید تا مشکل رو حل کنیم و رابطه ی صمیمانه، پایدار بماند.
        شاد و موفق باشید

        دیدگاه


          #5
          پاسخ : استفاده از متغیر؟

          تو اول برنامه همش رو تعریف کردم.میکرو بدون استفاده از متغیر کامل دستورات رو اجرا میکنه و ربات خط رو دنبال میکنه :redface:ولی خیلی از جاها به خاطر در نظر نگرفتن حالت های قبل از خط خارج میشه. :cry2: .بازهم ممنون از اینکه به سوالاتم جواب میدید.

          اضافه شده در تاریخ :
          دوباره سلام. با برنامه کلی ور رفتم ولی نمیشه که نمیشه!!! البته الان دقیقا میدونم که ایراد از کجاست: دو تا شرط رو چطور میشه همزمان با هم چک کرد؟ وقتی که تو یه خط مینویسم if n=1 and portd=8 اجرا نمیشه. if رو تو در تو نوشتم نشد(دو تا if). جای یکی از if ها while گذاشتم دوباره نشد. حتی کلا از while استفاده کردم باز هم نشد...! :cry2: :angry:
          اصلا انگار تو این قسمت از برنامه چیزی نوشته نشده. سنسور میبینه ولی عکس العمل نداریم.ضمنا کامپایلر هم به هیچ چیزی گیر نمیده.به جای دستور AND از & و یا & & هم استفاده کردم ولی باز....... :angry:
          بابا یکی بیاد کمک...... :cry2:

          دیدگاه


            #6
            پاسخ : استفاده از متغیر؟

            در بیسیک دستوری به شکل & وجود نداره و دستور مورد نظر شما AND یا && هست که مسلماً کاملا درست کار میکنه.
            مشکل از الگوریتمه و نه از کامپایلر و نه از میکرو.

            Hope You Success

            دیدگاه


              #7
              پاسخ : استفاده از متغیر؟

              kapouchima جان من & و && هم توی PicBasic Pro دیدم، و توی نمونه برنامه ها هم دیدم که استفاده بشه، فکر میکنم وجود داشته باشه.
              در مورد اینکه ایراد کار کجا هست که از خیلی جاها ممکنه باشه، نمیشه نظر قطعی داد ولی چیزی که هست اینه که قطعا مشکل قابل حل هست.
              از آنجا که گاهی فرصت بازخوانی پست نیست، بابت غلط های املایی و نگارشی احتمالی معذرت میخوام.
              هیچیک از پاسخ هایی که میدم را کاملا تایید نمیکنم و ممکن هست اشتباه کرده باشم، اگر من به نوشته ام مطمئن هستم شما مشکوک باشید.
              اگر در حل مشکل من کمک کردید و دکمه تشکر رو نزدم حتما فراموش کردم کوچکترین کمک شما برایم ارزشمند است!
              اگر به هر طریقی از من ناراحت شدید حتما با یک پیام خصوصی تذکر بدهید تا مشکل رو حل کنیم و رابطه ی صمیمانه، پایدار بماند.
              شاد و موفق باشید

              دیدگاه


                #8
                پاسخ : استفاده از متغیر؟

                سلام بالاخره یه جورایی مسئله رو حل کردم! به قول معروف:" کس نخارد پشت من جز ناخن انگشت من !! "
                راه حلش ساده است ولی اینکه چرا مستقیم جواب نمیداد در همچنان در پرده ابهام قرار داره !!
                شرط دوم یا شرط سوم یا شرط n ام رو تو زیر برنامه نوشتم تا این کامپایلر زبون.... حالیش شد :icon_razz:
                اگه کسی راجع به این مسئله سوالی داشت مطرح کنه تا در حد توان و با توجه به تجارب ناقص این بنده ی حقیر اگه تونستم جواب بدم.موفق و موید باشید.

                دیدگاه


                  #9
                  پاسخ : استفاده از متغیر؟

                  آفرین شاهرخ جان اینکه بهش گیر دادی تا جواب گرفتی خیلی خوبه، از اینجور مشکلات زیاد پیش میاد و خیلی اوقات غیر از خودتون کسی نمیتونه به شما کمک کنه، اما همیشه برای هر مشکلی راه حل هست، چیزی که تو امضات نوشتی رو مثل اینبار که عمل کردی همیشه عمل کن ولی اگر از هشت بیشتر شد هم نا امید نشو :agree:
                  موفق باشی
                  از آنجا که گاهی فرصت بازخوانی پست نیست، بابت غلط های املایی و نگارشی احتمالی معذرت میخوام.
                  هیچیک از پاسخ هایی که میدم را کاملا تایید نمیکنم و ممکن هست اشتباه کرده باشم، اگر من به نوشته ام مطمئن هستم شما مشکوک باشید.
                  اگر در حل مشکل من کمک کردید و دکمه تشکر رو نزدم حتما فراموش کردم کوچکترین کمک شما برایم ارزشمند است!
                  اگر به هر طریقی از من ناراحت شدید حتما با یک پیام خصوصی تذکر بدهید تا مشکل رو حل کنیم و رابطه ی صمیمانه، پایدار بماند.
                  شاد و موفق باشید

                  دیدگاه

                  لطفا صبر کنید...
                  X