How to decode an SMS which looks like this ...


Closed Thread
Results 1 to 13 of 13

Hybrid View

  1. #1


    Did you find this post helpful? Yes | No

    Exclamation

    Hi Aratti
    Here is a snapshot of what I have done till now:

    num var byte[12]
    sum var byte[21]
    baud con 188

    sum[0] = "A"
    sum[1] = "T"
    sum[2] = "+"
    sum[3] = "C"
    sum[4] = "M"
    sum[5] = "G"
    sum[6] = "S"
    sum[7] = "="
    sum[21]= 13

    Serin2 rx,baud,5000,main,[WAIT("REC UNREAD"),SKIP 3, STR num\12, skip 28, STR sms\8]
    checkms:
    If sms[0]="d" and sms[1]="e" and sms[2]="a" and sms[3]="c" and sms[4]="t" then
    For c=0 to 12
    sum[c+8]=num[c]
    next c
    For c=0 to 21
    serout tx,T2400,[sum[c]]
    next c
    Serin2 rx,baud,5000,checkms,[WAIT(">")]


    This arrangement is not working. Can you advise me of whats wrong. Many thanks for your time in advance

  2. #2
    Join Date
    May 2008
    Location
    Italy
    Posts
    825


    Did you find this post helpful? Yes | No

    Default

    In your code you use the byte variable "C" but I don't see it declared.

    Did you include "MODEDEFS.BAS" in your code?


    Code:
    num var byte[12]
    
    For c=0 to 12 ' you will need 13 bytes here
    sum[c+8]=num[c]
    next c
    How long is your phone number? You have declared an array (num) of 12 bytes but the for/next loop is trying to use 13 bytes!

    Also the array sum is declared for 21 and you are attempting to use 22 (you have sum[21]= 13) This is an array of 22 bytes!
    Remember that you have to count also the zero.

    So adjust both the arrays as per the lenght of your phone number ( if 13 digits then you need 13 in the declaration and 13 in the string numerical. If on the contrary the phone lenght is 12 digits then modify the for/next loop to For c=0 to 11 and put byte array sum var byte[22]


    Al.
    Last edited by aratti; - 7th October 2009 at 23:18.
    All progress began with an idea

  3. #3


    Did you find this post helpful? Yes | No

    Exclamation

    Hi
    My number length is +447832225144 (0-12)(or 13 if counted from 1)

    I declared variable num var byte[12] because it can take my number from num[0]="+" to num[12]="4"

    I also declared sum var byte[21] because :
    sum[0]="A" and so on upto sum[7]="="
    and further
    sum[8]="+"
    sum[9]="4"
    sum[10]="4"
    sum[11]="7"
    sum[12]="8"
    sum[13]="3"
    sum[14]="2"
    sum[15]="2"
    sum[16]="2"
    sum[17]="5"
    sum[18]="1"
    sum[19]="4"
    sum[20]="4"
    sum[21]=13

    and to fill sum[8] to sum[20] we need loop 13 times (sum[8] included), and so c=0 to 12

    Also while serout it needs to transmit whole sum[0] to sum[21] so c=0 to 21.

    Do you still feel this is the wrong way? Thanks

  4. #4
    Join Date
    May 2008
    Location
    Italy
    Posts
    825


    Did you find this post helpful? Yes | No

    Default


    Include "MODEDEFS.BAS"
    num var byte[13]
    sum var byte[22]
    c var byte

    baud con 188

    sum[0] = "A"
    sum[1] = "T"
    sum[2] = "+"
    sum[3] = "C"
    sum[4] = "M"
    sum[5] = "G"
    sum[6] = "S"
    sum[7] = "="
    sum[21]= 13

    Serin2 rx,baud,5000,main,[WAIT("REC UNREAD"),SKIP 3, STR num\13, skip 28, STR sms\8]
    checkms:
    If sms[0]="d" and sms[1]="e" and sms[2]="a" and sms[3]="c" and sms[4]="t" then
    For c=0 to 12
    sum[c+8]=num[c]
    next c
    For c=0 to 21
    serout tx,T2400,[sum[c]]
    next c
    Serin2 rx,baud,5000,checkms,[WAIT(">")]
    The above (marked in red) are the correction needed.

    Al.
    Last edited by aratti; - 7th October 2009 at 23:40.
    All progress began with an idea

  5. #5


    Did you find this post helpful? Yes | No

    Exclamation

    I have used a special routine so that to know if code is not getting stuck atleast after 5 tries which is as follows:

    If sms[0]="d" and sms[1]="e" and sms[2]="a" and sms[3]="c" and sms[4]="t" then
    i=i+1
    if i=5 then
    while 1
    toggle portb.6
    pause 100
    wend : endif

    for c=0 to 12
    sum[c+8]=num[c]
    next c
    for c=0 to 21
    serout tx,T2400,[sum[c]]
    next c

    Serin2 rx,baud,5000,checkms,[WAIT(">")]

    Problem is that since I have made the last change of serin2....STR num\13, the code is getting stuck somewhere and not moving at all as it is not entering the toggle loop which it should after waiting 5 times for ">".

  6. #6
    Join Date
    May 2008
    Location
    Italy
    Posts
    825


    Did you find this post helpful? Yes | No

    Default

    Sorry, I have forgotten to cange also the skip value after the string numeral:

    Serin2 rx,baud,5000,main,[WAIT("REC UNREAD"),SKIP 3, STR num\13, skip 27, STR sms\8]

    This should be one less since you have increased one byte the string.

    Al.
    All progress began with an idea

  7. #7


    Did you find this post helpful? Yes | No

    Exclamation

    Yu huuuuuuu

    thank you so much. It's working now

Similar Threads

  1. Replies: 11
    Last Post: - 19th August 2009, 15:23
  2. Replies: 0
    Last Post: - 21st May 2009, 00:58
  3. Replies: 13
    Last Post: - 12th May 2009, 17:26
  4. Siemens c55 sms control help please
    By camolas in forum mel PIC BASIC Pro
    Replies: 85
    Last Post: - 20th August 2008, 01:13
  5. Reading a SMS to an array
    By KA5MAL in forum GSM
    Replies: 3
    Last Post: - 17th June 2008, 17:24

Members who have read this thread : 0

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts