NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 3152 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
نمایش نتایج: از 1 به 7 از 7

موضوع: توضیح برنامه

  1. #1
    عضو جدید
    تاریخ عضویت
    Aug 2015
    نوشته ها
    8
    تشکر
    0
    تشکر شده 0 بار در 0 پست

    پیش فرض توضیح برنامه

    سلام

    من یک برنامه ی کوتاه وکاملاضروی دارم که نمی فهممش .متن برنامه ساده است کسی می تونه توضیح بده؟؟؟؟؟



    void getstr(char *str)
    {
    char ch = 0;
    ch = getchar();
    while((ch == 10) || (ch == 13) || (ch == 0))
    ch = getchar();

    while((ch != 10) && (ch != 13))
    {
    *str++ = ch;
    ch = getchar();
    }
    *str = 0;
    }

    int getnstr(char *str , int n)
    {
    char ch = 0, counter = 0;
    ch = getchar();
    while((ch == 10) || (ch == 13) || (ch == 0)) {
    ch = getchar();
    if((counter++ == n))
    return 0;
    }

    while((ch != 10) && (ch != 13))
    {
    *str++ = ch;
    ch = getchar();
    }
    *str = 0;

    return 1;
    }

    //++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++
    // Power off the SIM900
    //++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++
    void SIM900_PWR_OFF(void)
    {
    char text1[100],text2[100];

    printf("AT+CPOWD=1%c",Enter);
    getstr(text1);
    getstr(text1);
    lcd_gotoxy(0,0);
    lcd_puts(text1);
    }int SIM900_Is_ON(void)
    {
    char text1[100],text2[100];
    int a1=0,a2=0;

    printf("AT%c",Enter);
    a1 = getnstr(text1,10);
    a2 = getnstr(text2,10);

    if((a1 == 1) & (a2 == 1))
    return 1;
    else
    return 0;}




  2. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نوشته ها
    Many
     

  3. #2
    کاربر فعال
    تاریخ عضویت
    Feb 2012
    نام
    مصطفی
    نوشته ها
    273
    تشکر
    195
    تشکر شده 128 بار در 93 پست

    پیش فرض

    سلام
    فکر میکنم مشکلتون تو تابع getstr باشه.
    این تابع اول یه سری کاراکتر رو از پورت سریال میگیره تا به یکی از کاراکتر های 10, 13 و یا 0 برسه و بعد از اون هر کاراکتری که دریافت کرد رو تو یه آرایه مینویسه و این کار رو ادامه میده
    تا دوباره به کاراکتر 10 یا 13 برسه و ازتابع خارج میشه.

  4. #3
    عضو جدید
    تاریخ عضویت
    Aug 2015
    نوشته ها
    8
    تشکر
    0
    تشکر شده 0 بار در 0 پست

    پیش فرض

    سلام
    ممنون از لطفتون.ولی من منظور فراخوانی تابع getstr در power off sim 900 که بعد ازدستورprintfدوبار پشت سر هم فراخوانی شده رو نمی فهمم.؟؟؟ممنون به خاطر پاسختون

  5. #4
    کاربر فعال
    تاریخ عضویت
    Feb 2012
    نام
    مصطفی
    نوشته ها
    273
    تشکر
    195
    تشکر شده 128 بار در 93 پست

    پیش فرض

    سلام این تابع برای خوندن پاسخ sim900 فراخونی شده و دوبار بودنش هم احتمالا به خاطر اینه که توی متن پاسخ چند تا کاراکتر 10 و 13 وجود داره.

  6. #5
    عضو جدید
    تاریخ عضویت
    Aug 2015
    نوشته ها
    8
    تشکر
    0
    تشکر شده 0 بار در 0 پست

    پیش فرض

    سلام دوباره ممنون
    ببخشید من منظورتونو نفهمیدم.میشه بیشتر توضیح بدید؟؟؟؟؟؟؟؟؟؟؟؟؟

  7. #6
    کاربر فعال
    تاریخ عضویت
    Feb 2012
    نام
    مصطفی
    نوشته ها
    273
    تشکر
    195
    تشکر شده 128 بار در 93 پست

    پیش فرض

    بعد از اینکه شما یه کامندی رو برای ماژول ارسال میکنی (مثلا با تابع printf) ماژول در پاسخ یه رشته رو ارسال میکنه که معمولا توی این رشته چند تا کاراکتر 10 و 13 وجود داره. حالا توی برنامه بعد از ارسال کامند یعنی بعد از دستور printf شما باید رشته ارسالی ماژول رو با تابع getstr بخونی. منتها با توجه با پیاده سازی تابع getstr و به خاطر وجود کاراکترهای اضافی اگه فقط یه بار این تابع رو فراخونی کنی احتمالا متن اصلی رو از دست میدی.

  8. #7
    عضو جدید
    تاریخ عضویت
    Aug 2015
    نوشته ها
    8
    تشکر
    0
    تشکر شده 0 بار در 0 پست

    پیش فرض

    خیلی ممنون از توضیح کاملتون.می دونم که امروز وقتتون گرفتم. اما یک سوال دیگه ام دارم؟؟؟
    توی تابعی که الان براتون کپی می کنم در قستstrncpy منظوراز ptemp1+1یا ptemp1+4و... چیه؟؟؟
    وچرا هربار درایه ی0 متغییرDT رو برابر صفر میزاره؟؟؟؟
    وشرط تناقض در IFچد باید با شه که 1 رو برگردونه؟؟؟؟
    باتشکر
    // Get Time & Date
    //++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++
    int Get_CLK(int *year,int *month,int *day,int *hour,int *minute,int *second)
    {
    char text1[100],text2[100],DT[5];
    char *ptemp1;


    printf("AT+CCLK?%c",Enter);
    getstr(text1);
    getstr(text1);
    getstr(text2);
    //+CCLK: "12/07/24,21:56:19+00"
    //Clear_String(DT,29);
    ptemp1 = strchr(text1,'\"');
    strncpy(DT,ptemp1+1,2);
    DT[2] = 0;
    *year = atoi(DT);
    strncpy(DT,ptemp1+4,2);
    DT[2] = 0;
    *month = atoi(DT);
    strncpy(DT,ptemp1+7,2);
    DT[2] = 0;
    *day = atoi(DT);
    strncpy(DT,ptemp1+10,2);
    DT[2] = 0;
    *hour = atoi(DT);
    strncpy(DT,ptemp1+13,2);
    DT[2] = 0;
    *minute = atoi(DT);
    strncpy(DT,ptemp1+16,2);
    DT[2] = 0;
    *second = atoi(DT);

    if(!strcmp(text2,"OK"))
    return 1;
    else
    return 0;

    }

موضوعات مشابه

  1. !!!!! رگولاتور ولتاژ ژنراتور با استفاده از فیدبک !!!!!
    توسط REZA_KLNTR در انجمن کنترل هوشمند و plc
    پاسخ: 19
    آخرين نوشته: 29-05-2016, 17:18
  2. جلوگیری از تقلب اپراتور در کار با پرس
    توسط raminrayat در انجمن کنترل هوشمند و plc
    پاسخ: 3
    آخرين نوشته: 13-05-2014, 15:47
  3. توابع ریاضی در کیل؟
    توسط m-arm در انجمن AT91 series (ATMEL)
    پاسخ: 2
    آخرين نوشته: 16-02-2012, 16:34
  4. کانکتور din
    توسط sigma-mx در انجمن پیشنهاد واردات قطعات / اضافه کردن محصول به فروشگاه
    پاسخ: 1
    آخرين نوشته: 13-08-2011, 14:55

مجوز های ارسال و ویرایش

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