Shop OBEX P1 Docs P2 Docs Learn Events
LCD Bargraph help — Parallax Forums

LCD Bargraph help

tgraz34tgraz34 Posts: 16
edited 2010-03-07 18:00 in BASIC Stamp
This code dispays RPM and a percentage of how fast your going with a bar graph. How can i make this code so that the bar graph displays on a 4 x 20 LCD screen instead of a 2 X 16. So the bar graph doesn't stop at the 16th position and keeps going till the 20th.


' {$STAMP BS2}
' {$PBASIC 2.5}

' -----[noparse][[/noparse] I/O Pins ]-----------------------------------------------------------

LcdPin         PIN     15
SpeedIn        PIN     3
' -----[noparse][[/noparse] Constants ]----------------------------------------------------------

T9600          CON     84                    ' True, 8-bits, no parity, 9600
Capture        CON     5000
LcdCls         CON     12                    ' Form feed -> clear screen
LcdCr          CON     13                    ' Carriage return
LcdOff         CON     21                    ' Turns display off
LcdOn          CON     22                    ' Turns display on
Line0          CON     128                   ' Line 0, character 0
Line1          CON     148                   ' Line 1, character 0
Define         CON     248                   ' Address defines cust char 0
LcdBLon        CON     $11                   ' Backlight On

' -----[noparse][[/noparse] Variables ]----------------------------------------------------------
rpm            VAR     Word
pulses         VAR     Word
custChar       VAR     Nib                   ' Custom charcter selector
index          VAR     Nib                   ' Eeprom index variable
dotLine        VAR     Byte                  ' 5-pixel dotted line
cursor         VAR     Nib                   ' Cursor placement
value          VAR     Byte                  ' Value to be graphed.
charCnt        VAR     Byte                  ' Character counting variable
line           VAR     Byte                  ' Line0 or Line1
percent        VAR     Byte
highVal        VAR     Word
' -----[noparse][[/noparse] Initialization ]-----------------------------------------------------

PAUSE 100
SEROUT LcdPin, T9600, [noparse][[/noparse]LcdOn, LcdCls, LcdBLon]
PAUSE 5

custChar = 3
dotLine = %11111
GOSUB Def_Horiz_Bar_Char

line = Line1
pulses = 0
highVal = 3500

DO
  GOSUB Acquire_RPM
  value = rpm / 44
  GOSUB Bar_Graph:
LOOP


Acquire_RPM:
  COUNT SpeedIn, Capture, Pulses
  rpm = (pulses * 12)
  percent = (rpm / (highVal / 100))
  RETURN

Bar_Graph:
  value = value MAX 80
  charCnt = value / 5
  custChar = 3

  IF charCnt > 0 THEN
    FOR cursor = 0 TO charCnt - 1
      GOSUB Disp_Cust_Char
    NEXT
  ENDIF


  cursor = charCnt
  custChar = value // 5

  LOOKUP custChar,
         [noparse][[/noparse]%00000, %10000, %11000, %11100, %11110],
         dotLine
  custChar = 2
  GOSUB Def_Horiz_Bar_Char
  GOSUB Disp_Cust_Char


 IF (charCnt + 1) < 15 THEN
    FOR cursor = (charCnt + 1) TO 15
      SEROUT LcdPin, T9600,
             [noparse][[/noparse]line + cursor, " "]
    NEXT
  ELSEIF value = 80 THEN
    SEROUT LcdPin, T9600,
           [noparse][[/noparse]line + cursor, 3]
  ELSEIF charCnt = 14 THEN
    SEROUT LcdPin, T9600, [noparse][[/noparse]line + 15, " "]
  ENDIF

  RETURN



Def_Horiz_Bar_Char:

  SEROUT LcdPin, T9600,
         [noparse][[/noparse]Define + custChar]
  FOR index = 0 TO 7
    SEROUT LcdPin, T9600, [noparse][[/noparse]dotLine]
  NEXT
    SEROUT LcdPin, T9600, [noparse][[/noparse]134, DEC rpm, " RPM    "]
    SEROUT LcdPin, T9600, [noparse][[/noparse]164, DEC percent, "%  "]
  RETURN



Disp_Cust_Char:

  SEROUT LcdPin, T9600,
         [noparse][[/noparse]line + cursor, custChar]
  RETURN

Comments

  • PJAllenPJAllen Banned Posts: 5,065
    edited 2010-03-07 13:58
    To start:·look at the program and then hunt out the stuff that implies '16'

    ·??
  • tgraz34tgraz34 Posts: 16
    edited 2010-03-07 13:59
    tried that... but thanks
  • hover1hover1 Posts: 1,929
    edited 2010-03-07 14:29
    Hint.. 16 = 0>15
  • Tracy AllenTracy Allen Posts: 6,662
    edited 2010-03-07 18:00
    Two main changes will be the lines
    [s]value = rpm / 44 [/s]
      value = rpm MAX hiVal / 35      ' value can go to 100 when hiVal is 3500
    and
      [s]value = value MAX 80[/s]
      value = value MAX 100   ' 100 bars
    



    Also there will be changes in the program segment that begins with
    IF (charCnt + 1) < 15 THEN
    where numbers 15, 80 and 14 should probably(?!) be 19, 100 and 18, respectively.

    ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
    Tracy Allen
    www.emesystems.com
Sign In or Register to comment.