نمایش نتایج 1 تا 7 از 7

نام تاپیک: *** خروجی گرفتن از یه تابع معمولی !!!!

  1. #1

    *** خروجی گرفتن از یه تابع معمولی !!!!

    سلام

    من میخواهم از تابع زیر 3 خروجی pitch و yaw و roll که در پایان هر پاراگراف ساخته میشه رو به صورت جدا از هم در 3 متغیر داشته باشم
    ممنون میشوم کمکم کنید

    void IMU_Poll(IMU_DATA *data)
    {
    static float pitch_n , pitch,pitch_w;
    static float yaw_n , yaw,yaw_w;
    static float roll_n , roll,roll_w;
    static MPU6050Data MPU_Data;

    pitch_n=(acos((float)MPU_Data.Accel_Z/sqrt(MPU_Data.Accel_X*MPU_Data.Accel_X+MPU_Data.Ac cel_Z*MPU_Data.Accel_Z))-1.58925 )*57.297469;// Accelerator degree
    pitch_w=( ((float)(MPU_Data.Gyro_Y)) / 131.07 ); // angular speed calculation
    pitch=0.98*(pitch+pitch_w*0.01)+0.02*pitch_n ; // complementry filter
    data->pitch=pitch;

    roll_n=(acos((float)MPU_Data.Accel_Y/sqrt(MPU_Data.Accel_Y*MPU_Data.Accel_Y+MPU_Data.Ac cel_Z*MPU_Data.Accel_Z))-1.58925 )*57.297469;// Accelerator degree
    roll_w=( ((float)(MPU_Data.Gyro_X)) / 131.07 ); // angular speed calculation
    roll=0.98*(pitch+roll_w*0.01)+0.02*roll_n ; // complementry filter
    data->roll=roll;

    yaw_n=(acos((float)MPU_Data.Accel_X/sqrt(MPU_Data.Accel_X*MPU_Data.Accel_X+MPU_Data.Ac cel_Y*MPU_Data.Accel_Y))-1.58925 )*57.297469;// Accelerator degree
    yaw_w=( ((float)(MPU_Data.Gyro_Z)) / 131.07 ); // angular speed calculation
    yaw=0.98*(yaw+yaw_w*0.01)+0.02*yaw_n ; // complementry filter
    data->yaw=yaw;
    }

  2. #2

    نقل قول: *** خروجی گرفتن از یه تابع معمولی !!!!

    منتظرم

  3. #3
    منتظر تایید آدرس ایمیل
    تاریخ عضویت
    مرداد 1391
    سن
    29
    پست
    596

    نقل قول: *** خروجی گرفتن از یه تابع معمولی !!!!

    ۳ تا متغیر رو بریز تو ارایه بعد return کن .
    یا ۳ تا متغیر با آدرس بفرست به تابع توی تابع عوضشون کن.

  4. #4

    نقل قول: *** خروجی گرفتن از یه تابع معمولی !!!!

    خیلی ممنون میشوم که مثال عملیش رو بزنید چون برنامه نویسیم یکم ضعیفه

  5. #5

    نقل قول: *** خروجی گرفتن از یه تابع معمولی !!!!

    اولا که این خیلی هم «معمولی» نیست بعدش
    تابع شما یک ورودی بصورت استاکچر داره به نام data از نوع IMU_DATA که نتیجه محاسبه pitch roll yaw توی همون استراکچر ریخته میشه
    نکته بعدی اینه که در محاسبه یک استراکچر دیگه وجود داره به نام MPU_Data از نوع MPU6050Data که باید قبلا تعریف و مقدار دهی شده باشه ظاهرا داده های یک سخت افزار توی اون هست حالا توی اینجا من یک سری مقدار رو به اون دادم مثل .1 و .23 .که خودتون باید درستش رو بعدا اصلاح کنید


    #include <stdio.h>
    #include <math.h>
    typedef struct IMU_DATA{
    float pitch;
    float yaw;
    float roll;
    } IMU_DATA;
    typedef struct MPU6050Data{
    double Accel_X;
    double Accel_Y;
    double Accel_Z;
    double Gyro_X ;
    double Gyro_Y;
    double Gyro_Z;
    MPU6050Data():
    Accel_X(0.1),
    Accel_Y(0.23),
    Accel_Z(0.12),
    Gyro_X(0.43),
    Gyro_Y(0.56),
    Gyro_Z(0.25){}
    } ;
    void IMU_Poll(IMU_DATA *data);
    int main()
    {
    IMU_DATA data;
    IMU_Poll(&data);
    printf("\n pitch=%f\n yaw=%f\n roll=%f",data.pitch,data.yaw,data.roll);
    }
    void IMU_Poll(IMU_DATA *data)
    {
    static float pitch_n , pitch,pitch_w;
    static float yaw_n , yaw,yaw_w;
    static float roll_n , roll,roll_w;
    static MPU6050Data MPU_Data;
    pitch_n=(acos((float)MPU_Data.Accel_Z/sqrt(MPU_Data.Accel_X*MPU_Data.Accel_X+MPU_Data.Ac cel_Z*MPU_Data.Accel_Z))-1.58925 )*57.297469;// Accelerator degree
    pitch_w=( ((float)(MPU_Data.Gyro_Y)) / 131.07 ); // angular speed calculation
    pitch=0.98*(pitch+pitch_w*0.01)+0.02*pitch_n ; // complementry filter
    data->pitch=pitch;

    roll_n=(acos((float)MPU_Data.Accel_Y/sqrt(MPU_Data.Accel_Y*MPU_Data.Accel_Y+MPU_Data.Ac cel_Z*MPU_Data.Accel_Z))-1.58925 )*57.297469;// Accelerator degree
    roll_w=( ((float)(MPU_Data.Gyro_X)) / 131.07 ); // angular speed calculation
    roll=0.98*(pitch+roll_w*0.01)+0.02*roll_n ; // complementry filter
    data->roll=roll;

    yaw_n=(acos((float)MPU_Data.Accel_X/sqrt(MPU_Data.Accel_X*MPU_Data.Accel_X+MPU_Data.Ac cel_Y*MPU_Data.Accel_Y))-1.58925 )*57.297469;// Accelerator degree
    yaw_w=( ((float)(MPU_Data.Gyro_Z)) / 131.07 ); // angular speed calculation
    yaw=0.98*(yaw+yaw_w*0.01)+0.02*yaw_n ; // complementry filter
    data->yaw=yaw;
    }

  6. #6

    نقل قول: *** خروجی گرفتن از یه تابع معمولی !!!!

    سلام

    خیلی ممنون از پاسختون
    ولی این کامپایل نمیشه ؟؟؟
    حرف شما درسته ، این تابع IMU-Poll کلا با چندتا سابع دیگه توی یه کتابخونس که اول برنامه اضافش کردم ، و طبق گفتتون ، اون MPU-Data همون اول کتابخونه مقدار دهی میشه
    ولی الان به خط های :

    IMU_DATA data; IMU_Poll(&data);

    ارور های زیر رو میگره :
    Program.c(65): error: #268: declaration may not appear after executable statement in block
    Program.c(66): error: #167: argument of type "IMU_DATA *" is incompatible with parameter of type "IMU_DATA *"


    و این :
    typedef struct IMU_DATA{
    float pitch;
    float yaw;
    float roll;
    } IMU_DATA;

    رو باید حتما داخل int-main() وارد کنم وگرنه خطا میگیره !!!

    ممنون میشوم بیشتر توضیح بدید که چطور این مقادیر رو بخونم
    شرمنده و تشکر

  7. #7

    نقل قول: *** خروجی گرفتن از یه تابع معمولی !!!!

    این فایل رو مستقل از سایر فایلها اجرا کردید یک بار دیگه فایل رو zip کردم فرستادم لطفا اون را بصورت مستقل از لایبری های دیگه اجرا کنید من نمی دونم شما توی برنامه program.c چه چیزی اضافه کردید اون رو بذارید ببینیم اشکال کجاست
    نکته دیگه برنامه از نوع سی پلاس پلاسه نه از نوع سی بنابراین پسوند برنامه رو به program.cpp تغییر بدید تا کامپایلر تشخیص بده باید اون رو بعنوان سی پلاس پلاس کامپایل کنه
    فایل های ضمیمه فایل های ضمیمه

تاپیک های مشابه

  1. سوال: گرفتن مقدار برگشتی تابع جاوااسکریپت
    نوشته شده توسط ameysams در بخش PHP
    پاسخ: 4
    آخرین پست: شنبه 04 خرداد 1387, 19:51 عصر
  2. خروجی گرفتن از برنامه
    نوشته شده توسط mohandesan در بخش VB.NET
    پاسخ: 4
    آخرین پست: دوشنبه 09 مهر 1386, 21:14 عصر
  3. نحوه خروجی گرفتن از بانک بصورت XML
    نوشته شده توسط Tasnim در بخش برنامه نویسی در Delphi
    پاسخ: 2
    آخرین پست: جمعه 07 مهر 1385, 14:34 عصر
  4. پاسخ: 4
    آخرین پست: جمعه 27 آبان 1384, 15:58 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •