Shop OBEX P1 Docs P2 Docs Learn Events
Spin String Confusion — Parallax Forums

Spin String Confusion

skynuggetskynugget Posts: 172
edited 2012-07-10 10:06 in Propeller 1
Hey all, im working on wunderground reporting project for the spinneret that will report data from my wireless weather station. this is my first leap into spin and I am having trouble debugging out some strings and i was hoping someone could spot my error. i am using some "barrowed" code from jonnymac's simple gps demo to move some ascii characters around, and its acting like the strings arnt zero terminated when i debug them out through the parallax serial terminal object.

please help me understand, thanks!

the output on the debug looks like this:
Startup...
!!WX,225305,070912,  259,  786,  772,  296,  247
03:53:05
2012-07-10
  78.6
  77.2
  29.6
&2012-07-10  78.  77.  29.6 03:53:052012-07-10  78.  77.  29.6&realtime=1&tempf=
Finished...

it should look like this : &2012-07-10 03:53:05&realtime=1&tempf=
what i dont get is why it debugs the string for time correctly the first time after i format the data, but the second time i spit it out the debug, i get more data in the string then should be.
PUB Main | ch, hr, dy
  

  Digi.GetStr(@DigiBuf)  ' get string from ether
  Pst.Str(@digiBuf)       ' deebug string
  PST.CHAR (13)
  
  '''''''''''''''''''''''''''
  fcopy(@UTCTIME, @digiBuf, 1)
  hr := str2dec(@utctime, 2)                   '  get utc hours
  hr := (hr + (24 + utcoffset)) // 24          '  add utc offset
  utctime[0] := (hr  / 10) + "0"               '  convert back to string
  utctime[1] := (hr // 10) + "0"
  s_insert(":", 2, @utctime)
  s_insert(":", 5, @utctime)
  utctime[8] := 0
   
  Pst.Str(@UTCTime)
  PST.CHAR (13)

  ''''''''''''''''''''''''''''
  fcopy(@UTCdate, @digiBuf, 2)
  if hr <= utcoffset                           ' catch day shift
    dy :=str2dec(@utcdate[2],2)                
    dy := dy + 1
    utcdate[2] := (dy  / 10) + "0"             ' convert back to string
    utcdate[3] := (dy // 10) + "0"
    
  s_insert("0", 0,@utcdate)                    ' format for msql style time from mmddyy to yyyy-mm-dd
  s_insert("2", 0,@utcdate)                    ' add century
  
  s_insert(utcdate[6], 2,@utcdate)             ' move year to end of century
  s_insert(utcdate[8], 3,@utcdate) 

  s_insert("-", 4,@utcdate)                    ' add dashes
  s_insert("-", 7,@utcdate)
  utcdate[10] := 0                             ' terminate
  
  Pst.Str(@UTCdate)
  PST.CHAR (13)
               
'''''''''''''''''''''''''''''''  
  fcopy(@tempF, @digiBuf, 4)
  
  s_insert(".", 4, @tempf)
  tempf[6] := 0
  
  Pst.Str(@tempF)
  PST.CHAR (13)

'''''''''''''''''''''''''''''''
  fcopy(@humP, @digiBuf, 5)
  s_insert(".", 4, @humP)
  hump[6] := 0
  
  Pst.Str(@humP)
  PST.CHAR (13)

'''''''''''''''''''''''''''''''
  fcopy(@PresIn, @digiBuf, 6)
  s_insert(".", 4, @PresIn)
  presIn[6] := 0
  
  Pst.Str(@PresIn)
  PST.CHAR (13)
   
'''''''''''''''''''''''''''''''
'now lets spit it all out at once!
 PST.char("&")
 
 PST.str(@UTCdate)
 pst.char(" ")
 pst.str(@utctime)
 pst.str(string("&realtime=1&tempf="))

Comments

  • Dave HeinDave Hein Posts: 6,347
    edited 2012-07-10 08:27
    You need to increase the size of your string buffers by 1 to include the terminating null.
  • skynuggetskynugget Posts: 172
    edited 2012-07-10 10:06
    thank you dave, you nailed it right on the head!
Sign In or Register to comment.