اطلاعیه

Collapse
No announcement yet.

جداسازی اعداد از متن در C یا c++ برای میکرو AVR

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

    پاسخ : جداسازی اعداد از متن در C یا c++ برای میکرو AVR

    نوشته اصلی توسط flightsazan نمایش پست ها
    از دستور زیر استفاده می کنم ولی کار نمی کند:
    کد:
    [FONT=Yekan] while (1)[/FONT]    {               
        char str[];///= "sd      0.45g";
        
         data= getchar();
         
         sscanf(str,"%c", data );
         // gets(*str);  
         puts(str);  
          putchar(0X0d);          
    [FONT=Yekan]      printf("your data input%s: ",str);
    [/FONT]
    ,ولی در عمل اتفاقی نمی افتد
    ممنون

    دلیل: ادغام دو پست برای جلوگیری از اسپم

    راستی امروز ترازو رو بررسی کردم در وزن صفر و ماکزیمم گرمی است و روش نمایش همانطور هست که قبلا ذکر کردم

    باسلام.
    ;کد شما به نظر نباید درست کار کنه، چون اول آوردید یک رشته تعریف کردید به نام str و بعد با استفاده ازgetchar اومدید یک کاراکتر دریافت کردید و در متغیر دیتا که تعریف نشده ریختید!
    تا اینجای کار چند تا اشکال وجود داره:اولا متغیر بهتره داخل سوپرلوپ تعریف نشه دوما با استفاده از getchar میشه فقط یک کاراکتر دریافت کرد همچنین این سری توابه به دلیل مشکلات بافر اورفلو به کل غیراستاندارد هستن و به جای اونها باید از fgets یا fputs استفاده کرد.سوما کاراکتر دریافتی در str ذخیره نشده.
    در بخش sscanf شما فرمت رو به کل اشتباه نوشتید و %c به معای کاراکتر هست و فرمت باید به این شکل میبود:

    sscanf(str,"%*s%f%*s",&data)
    فرمت %s به معنای رشته هست و ستاره قرار گرفته در پشت اون یعنی اون رشته رو نادیده بگیر.برای g بعد عدد داخل دیتای شما میشه از %*c استفاده کرد.
    جدیدترین ویرایش توسط A.I.E; ۱۳:۳۰ ۱۴۰۰/۰۴/۲۷.

    دیدگاه


      پاسخ : جداسازی اعداد از متن در C یا c++ برای میکرو AVR

      سلام مهندس جان کاملا درسته ولی علت امر اینه که کد ویژن برای دستورات دیگه عمل نمی کنه و یا خطا میگیره مثل fgets
      ممنون

      دلیل: ادغام دو پست برای جلوگیری از اسپم

      راستی یادم رفت منظور من بیشتر فقط تست دریافت و نمایش بود

      دلیل: ادغام دو پست برای جلوگیری از اسپم

      راستی چطور همین دریافت ها بصورت آنلاین چطور تو یک رشته بیارم که در سونسگمنت نمایش بدم عددها از صفر تا نه و ممیز هم هست از همراهیتون سپاسگزارم

      دیدگاه


        پاسخ : جداسازی اعداد از متن در C یا c++ برای میکرو AVR

        با سلام
        اگر رشته ارسالی را بررسی کردی و محل شروع و پایان کاراکتری وزن در صفر و ماکزیمم یکسانه اینقدر خودت را درگیر اعشار نکن. اون قسمت رشته که وزن را شامل میشه از رشته جدا کن
        سلام
        مهندس جان منظور من هم همین هست جدا کردن عددهام با توجه به اعشاری بودن از رشته این پست برای همین شروع کردم (عددها رو می خواهم رو سون سگمنت نمایش بدم)ممنون


        دلیل: ادغام دو پست برای جلوگیری از اسپم

        توجه شما رو جلب کنم در حالت صفر هم عدد خروجی اعشار هست بدین صورت:
        کد:
        0.00
        دلیل: ادغام دو پست برای جلوگیری از اسپم

        برای نمایش با سونسگمنت این نوشتم برای اینتجر ها ولی اعشار رو نمی تونم نمایش بدم:
        کد:
        [FONT=Yekan]#include <mega32.h>[/FONT]#include <stdio.h>
        #include <string.h>
        #include <delay.h>
          flash char num[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
          int num_p2[8];
          long int num_p=[SIZE=4][COLOR=#00ffff]123456789[/COLOR][/SIZE]; ///akar adad in tor bashad khta midahad--012345678
             //float fn =1234.567;
        
        
        void cal(void);
        void main(void)
        {
        int i=0;
        //long int num_p=12345678;
        char refreshing=0x01;
        DDRA=0xff;   // output port A&B
        DDRB=0xff;
        //PORTC=num[0];       
            
        //UCSRA=0x00;
        UCSRB=0x18; // USART Receiver: On
        UCSRC=0x86; //8 Data, 1 Stop, No Parity
        UBRRH=0x00;
        UBRRL=0x33; // USART Baud rate: 9600
        
        
        
        
        
        
        
        
        while (1)
              {
              // Place your code here 
              cal();
              PORTB =~ refreshing;
              refreshing = refreshing<<1;
              PORTA=num[num_p2[i]];
              i++;      
              if (i==8)
              i=0;
              
              if (refreshing == 0x00)
              refreshing= 0x01;
              delay_ms(5);
              } 
        }
            
           
         void cal(void) {
            num_p2[7]=(num_p%10);
            num_p2[6]=(num_p/10)%10;
            num_p2[5]=(num_p/100)%10;
            num_p2[4]=(num_p/1000)%10;
            num_p2[3]=(num_p/10000)%10;
            num_p2[2]=(num_p/100000)%10;
            num_p2[1]=(num_p/1000000)%10;
            num_p2[0]=(num_p/10000000)%10;
            
        }
        دلیل: ادغام دو پست برای جلوگیری از اسپم

        اگر در همین حالت صفر در سمت چپ باشد کامپایلر خطا می دهد
        01234567

        دلیل: ادغام دو پست برای جلوگیری از اسپم

        تو اینترنت این و دیدم:
        کد:
        [FONT=Yekan]void cal(float input) {[/FONT]input*=10;
        a=(int)input%10;
        b=(int)input/10%10;
        c=(int)input/100%10;
        d=(int)input/1000;
        }
        اینها که اینتجر هستند چطور اعشار رو نمایش خواهند داد الان باید قسمت اعشار حذف بشه!
        جدیدترین ویرایش توسط flightsazan; ۰۲:۴۸ ۱۴۰۰/۰۴/۲۸.

        دیدگاه


          پاسخ : جداسازی اعداد از متن در C یا c++ برای میکرو AVR

          دوستان پیشنهادی که دادند نادیده گرفتن اعشار هست

          دیدگاه


            پاسخ : جداسازی اعداد از متن در C یا c++ برای میکرو AVR

            با پیشنهاد بالا تونستم عدد رو نشان بدم فقط مثلا تو دو رقم می خواهم نقطه ممیز رو نشون بدم با روشن کردن ممیز هر سونسگمنت در پروتئوس ان سون سگمنت عددش بهم می ریزه

            دیدگاه


              پاسخ : جداسازی اعداد از متن در C یا c++ برای میکرو AVR

              سلام
              در نمایش روی سون سگمنت دچار مشکل شدم البته در محیط پروتئوس نمی دونم در دنیای واقعی هم اینطور خواهد بود
              وقتی مثلا در سگمنت3 از سمت راست می خواهم ممیز را روشن کنم عدد نمایش داده شده بهم می زیزه

              دیدگاه


                پاسخ : جداسازی اعداد از متن در C یا c++ برای میکرو AVR

                سلام
                بالاخره موفق شدم حتما تو ساخت هم مشکلات فراوانی پیش خواهد امد یه نمونه کوچک خواهم ساخت مثلا من از کریستال داخلی استفاده می کنم ولی توصیه شده از کریستال بیرونی استفاده بشه تو پروژه usart ولی من باهاش مشکل تنظیم دارم

                دلیل: ادغام دو پست برای جلوگیری از اسپم

                از تمامی دوستان در کانال کد ویژن هم سپاسگزارم
                ممنون
                جدیدترین ویرایش توسط flightsazan; ۰۳:۲۰ ۱۴۰۰/۰۶/۰۹.

                دیدگاه

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