When to use global variables vs using method RETURN variables
                    I am slowly working my way into the SPIN language and was wondering if there is any accepted good programming practice of when to use a method RETURN variable vs just declaring the variable as a global.
I was writing a simple object to monitor battery voltage (prop system supply) using a RC circuit and RC time counter. It became apparent that this simple object (as practically any programming task) could be written either way:
Using Global Vars:
Using Return Values:
I think the global var procedure is a little easier to read and understand, but I am wondering if there is a better chance of problems due to the fact that any method could conceivably access the vars meant for use by the voltage measuring object? Less global variables the better?
Any opinions/ anecdotal good/bad knowledge/stories?
                            I was writing a simple object to monitor battery voltage (prop system supply) using a RC circuit and RC time counter. It became apparent that this simple object (as practically any programming task) could be written either way:
Using Global Vars:
CON
  _clkmode = xtal1 '+ pll16x        'Using no PLL so I can use damaged PPB                       
  _xinfreq = 5_000_000
  'PIN CONNECTIONS
  debugLED      = 0   'FOR TESTING
  Vdd         = 14      'voltage to monitor
  'calculated constants for calculating Vx
  c1    = 26615
  c2    = 18
  
VAR
  long  rct
  long  Vx
  
OBJ
  PST:  "Parallax Serial Terminal"      'FOR TESTING
PUB MAIN
     'init
    PST.start(9600)        'TEST 
    'dira[debugLED] := 1     'TEST
    repeat
      getVoltage(vdd)
      
      PST.dec(Vx)
      PST.newline
      
      waitcnt(clkfreq + cnt)
      !outa[debugLED]
      
PUB getVoltage(inPin)  
    getRCT(inPin)
    Vx := c1/rct*10+(c1//rct*10/rct) + (10 * c2)
    
      
PUB getRCT(inPin) 
  'init
    outa[inPin] := 0    'low
    dira[inPin] := 1    'output
    rct := 0  'zero counter
    waitcnt(clkfreq + cnt)      'pause 1 sec to drain cap
    dira[inPin] := 0    'input
    
    repeat until ina[inPin] <> 0
        rct++
Using Return Values:
CON
  _clkmode = xtal1 '+ pll16x        'Using no PLL so I can use damaged PPB                       
  _xinfreq = 5_000_000
  'PIN CONNECTIONS
  debugLED      = 0   'FOR TESTING
  Vdd         = 14      'voltage to monitor
  'calculated constants for calculating Vx
  c1    = 26615
  c2    = 18
  
OBJ
  PST:  "Parallax Serial Terminal"      'FOR TESTING
PUB MAIN
     'init
    PST.start(9600)        'TEST 
    'dira[debugLED] := 1     'TEST
    repeat      
      PST.dec(getVoltage(vdd))
      PST.newline
      
      waitcnt(clkfreq + cnt)
      '!outa[debugLED]
      
PUB getVoltage(inPin) : Vx  |  rct
    rct := getRCT(inPin)
    Vx := c1/rct*10+(c1//rct*10/rct) + (10 * c2)
    
      
PUB getRCT(inPin)  : rct
  'init
    outa[inPin] := 0    'low
    dira[inPin] := 1    'output
    rct := 0  'zero counter
    waitcnt(clkfreq + cnt)      'pause 1 sec to drain cap
    dira[inPin] := 0    'input
    
    repeat until ina[inPin] <> 0
        rct++
I think the global var procedure is a little easier to read and understand, but I am wondering if there is a better chance of problems due to the fact that any method could conceivably access the vars meant for use by the voltage measuring object? Less global variables the better?
Any opinions/ anecdotal good/bad knowledge/stories?

 
                            
Comments
I just realized that global vars are not accessible from other objects, so I think the RETURN variable is the way to go as to exploit the power of spin (ie build lots of useful objects that can be easily thrown together to make a quick solution to the task at hand....)