اطلاعیه

Collapse
No announcement yet.

مشکل در ارسال آرایه با UART

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    مشکل در ارسال آرایه با UART

    من به دلیل محدودیت سیم کشی و تعداد پین ناچار شدم که ال سی دی رو از میکرو اتمگا32 فاصله بدم. تصمیم گرفتم که نزدیک ال سی دی یک اتمگا 8 قرار بدم و بوسیله UART دو میکرو رو به هم متصل کنم.
    برای ارسال ابتدا بوسیله دستور sprintf خط اول ال سی دی رو در یک آرایه قرار میدهم و سپس با puts آرایه رو ارسال میکنم. برای دریافت هم با تابع scanf داده رو خوانده و در یک آرایه ذخیره میکنم.
    مشکل اصلی اینه که تابع scanf اتمام داده رو به کد 0x0D یا جای خالی میبینه و در متن ارسالی من هم space وجود داره. متن تکه تکه و نامفهوم نمایش داده میشه....
    برای ارسال آرایه که شامل کاراکتر جای خالی هست باید چه کنم؟
    یه ایده به ذهنم اومد که کتابخانه stdio رو دستکاری کنم و یک کاراکتر بی استفاده رو به عنوان انتهای آرایه قرار بدم ولی نتونستم....
    (اکثر تاپیک های مرتبط رو سرچ کردم و خوندم ولی تاپیک مشابه نبود.)
    اگر از تاپيکي بدتون مياد...
    اگر با استارتر تاپيکي مشکل دارين...
    اگر خواستين تاپيکي فراموش بشه...
    ...بگين که
    [glow=red,2,300]من تو اون تاپيک پستي ارسال کنم.[/glow]

    #2
    پاسخ : مشکل در ارسال آرایه با UART (خیلی فوری)

    سلام
    باید توی ارسال طول داده مشخص باشه مثلا اگر رشته بود طولشو مشخص کن و در دریافت داده متغییر با با همون طولش ذخیره کنی ..
    و توی دریافت وقتی از scanf استفاده میکنی باید نوع دریافت را هم مشخص کنی مثلا شما میخواهید اطلاعات دریافتی را روی lcd نمایش بدی باید اون را به صورت زیر دریافت کنی
    scanf("%s",srt)
    برای ارسال اطلا عات هم بهتره مقادیر را تبدیل به رشته کنی و بعد ارسال کنی بهتره..
    موفق باشی
    :job:
    قنديل، تنديس قطره هايي است كه تسليم جاذبه زمين نشدند. "چگوآرا"

    دیدگاه


      #3
      پاسخ : مشکل در ارسال آرایه با UART

      ببینید من همچین دستوری دارم:
      ;(sprintf(buffer,"hello hi %4.2f",i
      چطور باید این رو ارسال کنم. و در طرف دیگه چطور باید دریافت کنم؟
      لطفا کمکم کنید چون باید تا آخر هفته پروژه رو تحویل استاد بدم....
      اگر از تاپيکي بدتون مياد...
      اگر با استارتر تاپيکي مشکل دارين...
      اگر خواستين تاپيکي فراموش بشه...
      ...بگين که
      [glow=red,2,300]من تو اون تاپيک پستي ارسال کنم.[/glow]

      دیدگاه


        #4
        پاسخ : مشکل در ارسال آرایه با UART

        اول باید buffer را ابتدای برنامه طولش را مشخص کنی
        char buffer [7];
        بعد اون را با دستور
        puts (buffer )
        ارسال میکنی وبعد با دستور
        scanf("%s",srt)
        دریافت میکنی
        :job:
        قنديل، تنديس قطره هايي است كه تسليم جاذبه زمين نشدند. "چگوآرا"

        دیدگاه


          #5
          پاسخ : مشکل در ارسال آرایه با UART

          نوشته اصلی توسط mohsen_22
          اول باید buffer را ابتدای برنامه طولش را مشخص کنی
          char buffer [7];
          بعد اون را با دستور
          puts (buffer )
          ارسال میکنی وبعد با دستور
          scanf("%s",srt)
          دریافت میکنی
          :job:
          دقیقا این کار رو کردم ولی scanf با رسیدن به کاراکتر space تشخیص پایان رشته رو میده... :angry:
          اگر از تاپيکي بدتون مياد...
          اگر با استارتر تاپيکي مشکل دارين...
          اگر خواستين تاپيکي فراموش بشه...
          ...بگين که
          [glow=red,2,300]من تو اون تاپيک پستي ارسال کنم.[/glow]

          دیدگاه


            #6
            پاسخ : مشکل در ارسال آرایه با UART

            شما دقیقا چی را میخواهی ارسال کنی که space داره....
            قنديل، تنديس قطره هايي است كه تسليم جاذبه زمين نشدند. "چگوآرا"

            دیدگاه


              #7
              پاسخ : مشکل در ارسال آرایه با UART

              ابتدا ازتون تشکر کنم که با سرعت پاسخ میدین و بدون توجه عبور نمیکنید. واقعا جای سپاسگذاری داره...
              اون مشکل با کد زیر در گیرنده حل شد...
              کد:
              gets(buffer1,16);
              lcd_gotoxy(0,0);
              lcd_puts(buffer1);
              حالا مشکل جدید و دردسر جدید شروع شده...
              من دو خط ال سی دی رو توسط دو بافر ارسال میکنم. یکی buffer1 برای خط بالا(نمایش ساعت و دما) و دیگری buffer2 برای خط پایین(نمایش پیغام های جاری سیستم).
              جهت تست فعلا 2تا ال سی دی به دو میکرو وصل کردم تا از ارسال صحیح مطمئن بشم. حالا باید دوتا بافر 16 بایتی رو توسط یوارت ارسال کنم. نمیدونم چرا با اینکه من فقط buffer1 رو ارسال میکنم ولی هردو آرایه پشت سر هم ارسال میشه خط اول ال سی دی گیرنده مداوم اطلاعات buffer1 و buffer2 رو بصورت چشمک زن نشون میده....
              کد زیر در فرستنده نوشته شده. چهار خط ابتدا جهت نمایش در ال سی دی متصل به فرستنده هست(جهت تست ارسال صحیح هست و بعد از اطمینان حذف خواهد شد) خط پنجم ارسال buffer 1 به پورت سریاله...
              متاسفانه با اینکه ال سی دی فرستنده بدون خطا نمایش میده(buffer1 و 2 سالم هستند) ولی در گیرنده هردو بافر دریافت میشه.... من اصلا دستور ارسال buffer2 ندارم...
              پیش خودم گفتم شاید چون برای ال سی دی فرستنده بافر ها لود میشوند مقادیرشان تداخل پیدا میکند که دستورات نمایش را در فرستنده حذف کردم و فقط دستور ارسال را نگه داشتم که باز هم مشکل پا بر جا بود...

              کد:
               lcd_gotoxy(0,0);
               lcd_puts(buffer1);
               lcd_gotoxy(0,1);
               lcd_puts(buffer2);
               puts(buffer1);
              بعد از همه مشکلات فوق من باید دو آرایه را ارسال کنم(یکی برای خط پایین و دیگری برای خط بالای نمایش) چطور هردو بافر رو ارسال کنم و چگونه هنگام دریافت از هم تفکیکشون کنم؟
              متاسفانه استاد آخرین مهلت رو پنج شنبه گذاشته و گفته که به ازای هر روز دیرکرد دو نمره کم میشه... :sad:
              فرداش هم جمعه هست و اگر نرسه 4 نمره میپره...
              اگر از تاپيکي بدتون مياد...
              اگر با استارتر تاپيکي مشکل دارين...
              اگر خواستين تاپيکي فراموش بشه...
              ...بگين که
              [glow=red,2,300]من تو اون تاپيک پستي ارسال کنم.[/glow]

              دیدگاه


                #8
                پاسخ : مشکل در ارسال آرایه با UART

                لطفا کد برنامتون را کامل بگذارید.من خیلی متوجه مشکل شما نمی شوم....
                قنديل، تنديس قطره هايي است كه تسليم جاذبه زمين نشدند. "چگوآرا"

                دیدگاه

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