نمایش نتایج: از 1 به 5 از 5

موضوع: عدم دریافت کامل متن از سریال

  1. #1
    Junior Member
    تاریخ عضویت
    Nov 2015
    نوشته ها
    8

    عدم دریافت کامل متن از سریال

    سلام
    من برد آردوینو uno رو با یک مودم A6 وصل کردم.

    کدم اینه:

    کد:
    String inputString = "";         // a String to hold incoming data
    boolean stringComplete = false;  // whether the string is complete
    void setup() {
      // put your setup code here, to run once:
      Serial.begin(9600);
      Serial.println("AT+CMGF=1");
      Serial.println("AT+CPMS=\"SM\",\"SM\",\"SM\"");
    }
    
    void loop() {
      Serial.begin(9600);
      // put your main code here, to run repeatedly:
      Serial.println("AT+CMGF=1");
      delay(5000);
      Serial.println("AT+CMGR=1");
    
        inputString = "";
        stringComplete = false;
      delay(5000);
    }
    
    void serialEvent() {
       while (Serial.available()) {
        // get the new byte:
        char inChar = (char)Serial.read();
        // add it to the inputString:
        inputString += inChar;
        // if the incoming character is a newline, set a flag so the main loop can
        // do something about it:
        if (inChar == '\n') {
          stringComplete = true;
        }
      }
      Serial.println(inputString);
      delay(5000);
    }
    هدفم اینه که یک اس ام اس رو بخونم و طبق اون یه تصمیم بگیرم. تا اینجای کار فقط خواستم ببینم خروجی چی میشه

    اما خروجی کامل رو نشون نمیده و بجای این خروجی :
    کد:
    +CMGL: 1,"REC READ","+989207201219",,"2017/08/26,21:54:56+05"
    test 20
    این خروجی ناقص رو میده

    کد:
    +CMGR: "REC READ","+989207201219",,"2017/08/26,21:
    ممنون میشم اگه راهنمایی بفرمایید.

  2. #2
    Senior Member
    تاریخ عضویت
    Feb 2017
    نوشته ها
    153
    شما بجای خوندن کل متن بهتره که فقط کلمه کلیدی رو چک کنید . برای این کار تو آردوینو میتونید از دستور ()string.indexOf استفاده کنید .

    رفرنس کامل به اضافه مثالها از اینجا قابل مشاهده هستش .

    در ضمن شما تو کدتون یه فانکشن ساختید و ازش استفاده نکردید . مهمترین نکته که باید بهش توجه کنید مدیریت حافظه هستش چون تو ++C مدیریت حافظه با برنامه نویس هستش . کدهایی کارا تر هستن که بهینه تر باشن .

    موفق باشید .
    ویرایش توسط Ahmad110 : 08-28-2017 در ساعت 01:42 PM

  3. #3
    Junior Member
    تاریخ عضویت
    Nov 2015
    نوشته ها
    8
    ممنون
    میشه بیشتر توضیح بدید؟

    اگر منظورتون فانکشن serialevent هست، خودش زمانی که ورودی سریال داشته باشه توی هر لوپ اجرا میشه.

    زمانی که کل متن توی حافظه نمیره چجوری میتونم از stringindexof استفاده کنم؟

    ممنون میشم اگر بیشتر راهنماییم کنید یا تغییراتی در کد من بگید ایجاد کنم. من میخوام اس ام اس وردی رو بخونم و با رله یه چیزی رو خاموش روشن کنم. کدهای روی اینترنت همش با ماژول sim بودن که مال من A6 هست و نمیتونم با کدهای نمونه کار کنم.

  4. #4
    Senior Member
    تاریخ عضویت
    Feb 2017
    نوشته ها
    153
    نقل قول نوشته اصلی توسط moosavi نمایش پست ها
    ممنون
    میشه بیشتر توضیح بدید؟

    اگر منظورتون فانکشن serialevent هست، خودش زمانی که ورودی سریال داشته باشه توی هر لوپ اجرا میشه.

    زمانی که کل متن توی حافظه نمیره چجوری میتونم از stringindexof استفاده کنم؟

    ممنون میشم اگر بیشتر راهنماییم کنید یا تغییراتی در کد من بگید ایجاد کنم. من میخوام اس ام اس وردی رو بخونم و با رله یه چیزی رو خاموش روشن کنم. کدهای روی اینترنت همش با ماژول sim بودن که مال من A6 هست و نمیتونم با کدهای نمونه کار کنم.
    شما بهتره از کتابخانه softwareSerial استفاده کنی و اونجا کل دستوری که از طریق rx میاد رو با تابع ()read بخونی . تاپیک زیر در پست 7 کد نمونه رو ببینید :

    https://forum.arduino.cc/index.php?topic=422375.0

    پی نوشت : شما چرا از کتابخانه a6 استفاده نمیکنی ؟

    https://github.com/skorokithakis/A6lib
    ویرایش توسط Ahmad110 : 08-28-2017 در ساعت 03:20 PM

  5. #5
    Junior Member
    تاریخ عضویت
    Nov 2015
    نوشته ها
    8
    از راهنمایی شما ممنونم

    مشکلم حل شد با تغییراتی که دادم.

    کد:
    String inputString = "";         // a String to hold incoming data
    void setup() {
      // put your setup code here, to run once:
      Serial.begin(9600);
      Serial.println("AT+CMGF=1");
      Serial.println("AT+CPMS=\"SM\",\"SM\",\"SM\"");
    }
    
    void loop() {
    
      Serial.println("AT+CMGR=1");
      
    }
    
    void serialEvent() {
        inputString = Serial.readString();
        Serial.println(inputString);
        delay(5000);
      }
    از اینکه کتابخانه رو معرفی کردید ممنونم.

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

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

SEO by vBSEO