Shop OBEX P1 Docs P2 Docs Learn Events
BS2P-Graph VFD-Switch — Parallax Forums

BS2P-Graph VFD-Switch

RobbanRobban Posts: 124
edited 2008-01-23 19:54 in BASIC Stamp
Hi!

I am building a project for my car where i want to be able to display diffrent data from a OBD interface to a VFD.
I use a switch with resistors to get the diffrent values so i can choose diffrent windows on the display,
My trouble is that when i have chosen one window ex Speed and then want to see the temperatures the display does not clear the screen,so the text is written above the speed data.

Here is my program
' {$STAMP BS2p}
' {$PBASIC 2.5}
· HEXSTR VAR Byte(15)
· I VAR Byte
· Result VAR Word
· value VAR Word
· disp VAR Byte
· light VAR Word
· lux VAR Word
· lical CON 647

'reset OBD-interface
resetobd:
PAUSE 2000
SEROUT 2,240,[noparse][[/noparse]$19]
SEROUT 2,240,[noparse][[/noparse]$10,$7,$10,$1e,"INITIATING"]
SEROUT 2,240,[noparse][[/noparse]$10,$20,$25,$1e," ECU"]
SEROUT 3,16624,[noparse][[/noparse]"atz",13]
'SERIN 4,16624,[noparse][[/noparse]WAIT(">")]
SEROUT 2,240,[noparse][[/noparse]$1D,$10,$20,$35,"CONNECTED" ]
PAUSE 2000

' send echo off to ECU
echo_off:
SEROUT 3,16624,[noparse][[/noparse]"ate0",13]
'SERIN 4,16624,[noparse][[/noparse]WAIT(">")]
PAUSE 2000
' clear display
cleardisp:
SEROUT 2,240,[noparse][[/noparse]$19]
Main:
' Read the outside light intensity
ljusintens:
RCTIME 1,1,light
HIGH 1
lux=65535/light*/lical
IF lux<20 THEN disp=$ff
IF lux=>20 THEN disp=$ff
' Dim the H.U.D
SEROUT 2,240,[noparse][[/noparse]$1B,disp]

' check the switch position
switch:
HIGH 0
PAUSE 10
RCTIME 0,1,Result
IF result=>200 AND result<300 THEN dispoff
IF result>3000 AND result<4000 THEN reserv
IF result>7000 AND result<9000 THEN reserv
IF result>10000 AND result<13000 THEN reserv
IF result>15000 AND result<18000 THEN reserv
IF result>19000 AND result<21000 THEN reserv
IF result>23000 AND result<26000 THEN felkoder
IF result>28000 AND result<31000 THEN fueltrim
IF result>35000 AND result<37000 THEN volt
IF result>40000 AND result<45000 THEN motor
IF result>50000 AND result<56000 THEN temp
IF result=>63000 AND result<>65500 OR result=>0 AND result<200 THEN hast
GOTO Main

' Turn off H.U.D
dispoff:
SEROUT 2,240,[noparse][[/noparse]$20,$19]
PAUSE 50
GOTO main
' Display Speed
hast:
SEROUT 2,240,[noparse][[/noparse]$10,$20,$9,$1D,"HASTIGHET",$0e,$0d]

SEROUT 3,16624,[noparse][[/noparse]"010c",13]
GOSUB HExkonv2
SEROUT 2,240,[noparse][[/noparse]$10,$1,$40,$1d,"Varv: ",DEC value/4," ",$0d ]
PAUSE 1000
SEROUT 3,16624,[noparse][[/noparse]"0111",13]
GOSUB HExkonv
SEROUT 2,240,[noparse][[/noparse]$10,$48,$40,$1d,"Gas.%:",DEC value*100/255,$0d ]
PAUSE 1000
SEROUT 3,16624,[noparse][[/noparse]"010d",13]
GOSUB hexkonv
SEROUT 2,240,[noparse][[/noparse]$10,$30,$18,$1e,$0a,DEC value,$0e,$0d ]
SEROUT 2,240,[noparse][[/noparse]$10,$59,$20,$1d,$0a,"Km/h",$0e,$0d ]
PAUSE 1000
GOTO main

' Display temp
temp:
SEROUT 2,240,[noparse][[/noparse]$10,$20,$9,$1D,"TEMPERATURER"]
SEROUT 3,16624,[noparse][[/noparse]"0105",13]
GOSUB hexkonv
SEROUT 2,240,[noparse][[/noparse]$10,$1,$15,$1D,$0a,"KYLARTEMP: ",DEC value-40,$0d]
SEROUT 2,240,[noparse][[/noparse]$10,$70,$15,$1d,$0a,$95,"C",$0d ]
PAUSE 1000
SEROUT 3,16624,[noparse][[/noparse]"010f",13]
GOSUB hexkonv
SEROUT 2,240,[noparse][[/noparse]$10,$1,$22,$1D,$0a,"LUFTTEMP:· ",DEC value-40,$0e,$0d]
SEROUT 2,240,[noparse][[/noparse]$10,$70,$22,$1d,$0a,$95,"C" ]
PAUSE 1000
GOTO main

'Display engine
motor:
SEROUT 2,240,[noparse][[/noparse]$10,$1,$8,$1D,$0a,"···· MOTOR········· ",$0d]
SEROUT 3,16624,[noparse][[/noparse]"0110",13]
GOSUB hexkonv2
SEROUT 2,240,[noparse][[/noparse]$10,$1,$15,$1D,$0a,"LUFTFLÖDE:··· ",DEC value/100," Gm/s"]
PAUSE 1000
SEROUT 3,16624,[noparse][[/noparse]"010e",13]
GOSUB hexkonv
SEROUT 2,240,[noparse][[/noparse]$10,$1,$22,$1D,$0a,"TÄNDNINGSTID: ",DEC value/2," ",$95]
PAUSE 1000
SEROUT 3,16624,[noparse][[/noparse]"0104",13]
GOSUB hexkonv
SEROUT 2,240,[noparse][[/noparse]$10,$1,$30,$1D,$0a,"BERÄK.BELAST: ",DEC value*100/255," %" ]
PAUSE 1000
SEROUT 3,16624,[noparse][[/noparse]"010B",13]
GOSUB hexkonv
SEROUT 2,240,[noparse][[/noparse]$10,$1,$38,$1D,$0a,"INKOM. LUFTTRYCK: ",DEC value," %" ]
PAUSE 1000
GOTO main

'Display ECU voltage
volt:
SEROUT 2,240,[noparse][[/noparse]$10,$1,$9,$1D,$0a,"···· VOLT - LJUS······ ",$0d]
SEROUT 3,16624,[noparse][[/noparse]"ate1",13]
PAUSE 1000
SEROUT 3,16624,[noparse][[/noparse]"atrv",13]
SERIN 4,16624,[noparse][[/noparse]STR hexstr\9]
FOR i=1 TO 4
SEROUT 2,240,[noparse][[/noparse]$10,$1,$15,$1d,$0a,"ECU SPÄNNING: ", hexstr(i)," V···· "]
SEROUT 2,240,[noparse][[/noparse]$10,$1,$22,$1d,$0a,"LJUSSTYRKA: ", DEC LUX," LUX···· "]
DEBUG HEXstr(i)
SEROUT 2,240,[noparse][[/noparse]$10,$1,$40,$0e ]
NEXT
SEROUT 3,16624,[noparse][[/noparse]"ate0",13]
PAUSE 1000
GOTO main

'Display fuel trim
FUELTRIM:
SEROUT 2,240,[noparse][[/noparse]$10,$1,$8,$1D,$0a,"···· FUEL TRIM········· ",$0d]
SEROUT 3,16624,[noparse][[/noparse]"0106",13]
GOSUB HEXKONV
SEROUT 2,240,[noparse][[/noparse]$10,$1,$18,$1D,$0a,"· SH.BK 1: ",DEC VALUE/128*100-100," %"]
PAUSE 1000
SEROUT 3,16624,[noparse][[/noparse]"0107",13]
GOSUB HEXKONV
SEROUT 2,240,[noparse][[/noparse]$10,$1,$22,$1D,$0a,"· LG.BK 1: ",DEC VALUE/128*100-100," %"]
PAUSE 1000
GOTO main
'Reserv
reserv:
GOTO main
' READ TROUBLE CODES
Felkoder:
SEROUT 2,240,[noparse][[/noparse]$10,$1,$8,$1D,$0a,"···· FELKODER········· ",$0d]
SEROUT 3,16624,[noparse][[/noparse]"0101",13]
GOSUB HEXKONV
SEROUT 2,240,[noparse][[/noparse]$10,$1,$18,$1D,$0a,"· ANTAL FELKODER: ",DEC VALUE-128, "ST"]
PAUSE 1000
GOTO main

' Convert 1 byte Hex
hexkonv:
SERIN 4,16624,[noparse][[/noparse]STR hexstr\10]
FOR i= 6 TO 7
IF hexstr(i) < "0" OR hexstr(i) > "9" THEN skip1x
·· hexstr(i) = hexstr(i) - "0"
skip1x:
IF hexstr(i) < "a" OR hexstr(i) > "f" THEN skip2x
·· hexstr(i) = hexstr(i) - "a" + 10
skip2x:
IF hexstr(i)<"A" OR hexstr(i)>"F" THEN skip3x
·· hexstr(i)=hexstr(i)-"A" +10
SKIP3x:
NEXT
·' calculate value
·value =(hexstr(6) << 4) + hexstr(7)
RETURN
' Convert 2 byte hex
hexkonv2:
SERIN 4,16624,[noparse][[/noparse]STR hexstr\13]
FOR i= 6 TO 7
IF hexstr(i) < "0" OR hexstr(i) > "9" THEN skip4x
·· hexstr(i) = hexstr(i) - "0"
skip4x:
IF hexstr(i) < "a" OR hexstr(i) > "f" THEN skip5x
·· hexstr(i) = hexstr(i) - "a" + 10
skip5x:
IF hexstr(i)<"A" OR hexstr(i)>"F" THEN skip6x
·· hexstr(i)=hexstr(i)-"A" +10
SKIP6x:
NEXT
FOR i = 9 TO 10
IF hexstr(i) < "0" OR hexstr(i) > "9" THEN skip7x
·· hexstr(i) = hexstr(i) - "0"
skip7x:
IF hexstr(i) < "a" OR hexstr(i) > "f" THEN skip8x
·· hexstr(i) = hexstr(i) - "a" + 10
skip8x:
IF hexstr(i)<"A" OR hexstr(i)>"F" THEN skip9x
·· hexstr(i)=hexstr(i)-"A" +10
SKIP9x:
NEXT
·' calculate value
value =(hexstr(6) << 12) + (hexstr(7) << 8) + (hexstr(9) << 4) + hexstr(10)
RETURN


does anybody has a clue on what´s wrong`?

regards
Robert

Comments

  • steve_bsteve_b Posts: 1,563
    edited 2008-01-23 19:54
    Not having worked with my VFD yet (still in the box), I'll assume a similar command set to other LCD's.

    It doesn't look like you are clearing the screen within MAIN. So after every function you are telling it to go back to MAIN where it starts all over.
    You have:
    ' clear display
    cleardisp:
    SEROUT 2,240,[noparse][[/noparse]$19]
    Main:

    Maybe do a goto cleardisp at the top of your temperatures function....

    BTW, how are you interfacing to your OBD (I assume OBD2?)?

    ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
    <FONT>Steve



    What's the best thing to do in a lightning storm? "take a one iron out the bag and hold it straight up above your head, even God cant hit a one iron!"
    Lee Travino after the second time being hit by lightning!
Sign In or Register to comment.