The application was tested on OBD2 Simulator and Citroen C3 reading only current data and fault codes. The bluetooth obd2 plug and USB-OBD2 are from Ebay, it has ELM327 IC ver 2.1 and 1.5 that connects to all OBDII protocols. The computer's bluetooth pairs with the OBD-II plug and connects to the app via COM Port. On windows computer you can find the COM port number in 'device manager' and enter the port to the app. If you use OBD-II USB you can enter the port number of that.
The app takes bytes A and B and calculates the readable data. The app tests only the popular parameters and VID, no fault resets. In here https://en.wikipedia.org/wiki/OBD-II_PIDs#Bitwise_encoded_PIDs you can find the parameter IDs of data request.
	
	
	
	
	
	
	
		
			
			
			
			
			
		
	
	
	
		
	
	
		
	
			
			The app takes bytes A and B and calculates the readable data. The app tests only the popular parameters and VID, no fault resets. In here https://en.wikipedia.org/wiki/OBD-II_PIDs#Bitwise_encoded_PIDs you can find the parameter IDs of data request.
			
				B4X:
			
		
		
		Sub Process_Globals
    Private fx As JFX
    Private MainForm As Form
    Private xui As XUI
    Private sp As Serial
    Private astream As AsyncStreams
    Private cmb1 As ComboBox
    Private Label1 As Label
    Private text1 As TextArea
    Private btnClear As Button
    Private btnSend As Button
    Private bc As ByteConverter
    
    Private a, b , p=8 As Int
    Private del As Int =500
    Private cn, reply As String
    Private rate As Int = 38400
    Private cmbBaud As ComboBox
    Private txtTest As TextField
    Private btn01, btn02, btn03 As Button
    Private btn04, btn05, btn06 As Button
    Private btn07, btn0b, btn11 As Button
    Private btn0c, btn0e, btn0f As Button
    Private btn13, btn14, btn15 As Button
    Private btn1c, btn20, btn21 As Button
    
    Private text01, text04, text0b As TextField
    Private text05, text06, text07 As TextField
    Private text0c, text0d, text0e, text0f As TextField
    Private text11, text13, text14 As TextField
    Private text15, text20, text21 As TextField
    Private text1c, text02, text03 As TextField
    Private rb1, rb2 As RadioButton
    
End Sub
Sub AppStart (Form1 As Form, Args() As String)
    MainForm = Form1
    MainForm.RootPane.LoadLayout("Layout1")
    MainForm.Show
    sp.Initialize("")
    cmb1.Items.AddAll(sp.ListPorts)
    cmbBaud.Items.AddAll(Array As String("9600", "38400", "115200"))
    End Sub
Private Sub rb1_SelectedChange(Selected As Boolean)
    If rb1.Selected Then p=9
    If rb2.Selected Then p=8
End Sub
Sub cmb1_SelectedIndexChanged(Index As Int, Value As Object)
    Try
        sp.Open(cmb1.Value)
        sp.SetParams(rate,8,1,0)
        astream.Initialize(sp.GetInputStream, sp.GetOutputStream, "astream")
        Label1.Text = "Port Opened"
    Catch
        Label1.Text = "Port is busy"
        Log("Port error")
    End Try
End Sub
Sub cmbBaud_SelectedIndexChanged(Index As Int, Value As Object)
    rate=cmbBaud.Value
    cmb1.Enabled=True
End Sub
Sub AStream_NewData (Buffer() As Byte)
    reply = reply & BytesToString(Buffer, 0, Buffer.Length, "UTF8")
End Sub
Sub convert
    Dim aa(), bb() As Byte
    
    Try   
        aa=bc.HexToBytes(reply.SubString2(p+4,p+6))    '12,14
        bb=bc.HexToBytes(reply.SubString2(p+7,p+9))    '15,17
        a=Bit.And(0xFF,aa(0))        'convert byte to unsigned byte
        b=Bit.And(0xFF,bb(0))
        cn = reply.SubString2(p+1,p+3)    '9,11
        text1.Text = text1.Text & reply
    Catch
        text1.Text = text1.Text & "NO DATA"
    End Try
End Sub
Sub btnSend_Click
    Dim str As String = txtTest.Text &  Chr(13) & Chr(10)
    astream.Write(str.GetBytes("UTF8"))
    Sleep(del)
    text1.Text = text1.Text & reply
    reply = ""   
End Sub
Sub btn01_Click
    Dim str1 As String = "0101" &  Chr(13) & Chr(10)
    astream.Write(str1.GetBytes("UTF8"))
    Sleep(del)
    text01.Text = reply.SubString2(p+4,p+16)
    text1.Text = text1.Text & reply
    reply = ""
End Sub
Sub btn04_Click
    Dim str2 As String = "0104" &  Chr(13) & Chr(10)
    astream.Write(str2.GetBytes("UTF8"))
    Sleep(del)
    convert
    a = a*100/255
    text04.Text = a & " %  - " & cn
    reply = ""
End Sub
Sub btn05_Click
    Dim str3 As String  = "0105" &  Chr(13) & Chr(10)
    astream.Write(str3.GetBytes("UTF8"))
    Sleep(del)
    convert
    a = a-40
    text05.Text = a & " °C  - " & cn
    reply = ""
End Sub
Sub btn06_Click
    Dim str3 As String  = "0106" &  Chr(13) & Chr(10)
    astream.Write(str3.GetBytes("UTF8"))
    Sleep(del)
    convert
    a=a*100/128 - 100     '(a * 100) / 128) - 100 & " %"
    text06.Text = a & " %  - " & cn
    reply = ""
End Sub
Sub btn07_Click
    Dim str2 As String = "0107" &  Chr(13) & Chr(10)
    astream.Write(str2.GetBytes("UTF8"))
    Sleep(del)
    convert
    a=a*100/128 - 100
    text07.Text = a & " %  - " & cn
    reply = ""
End Sub
Sub btn0b_Click
    Dim str3 As String  = "010B" &  Chr(13) & Chr(10)
    astream.Write(str3.GetBytes("UTF8"))
    Sleep(del)
    convert
    text0b.Text = a & " kPa  - " & cn
    reply = ""
End Sub
Sub btn0c_Click
    Dim c As Int
    Dim str3 As String  = "010C" &  Chr(13) & Chr(10)
    astream.Write(str3.GetBytes("UTF8"))
    Sleep(del)
    convert    '(a * 256 + b) / 4 & " RPM"
    c = (a * 256 + b) / 4
    text0c.Text = c & " RPM  - " & cn
    reply = ""
End Sub
Sub btn0d_Click
    Dim str2 As String = "010D" &  Chr(13) & Chr(10)
    astream.Write(str2.GetBytes("UTF8"))
    Sleep(del)
    convert
    text0d.Text = a & " km/h  - " & cn
    reply = ""
End Sub
Sub btn0e_Click
    Dim str3 As String  = "010E" &  Chr(13) & Chr(10)
    astream.Write(str3.GetBytes("UTF8"))
    Sleep(del)
    convert
    a = (a/2)-64
    text0e.Text = a & " °  - " & cn
    reply = ""
End Sub
Sub btn0f_Click
    Dim str3 As String  = "010F" &  Chr(13) & Chr(10)
    astream.Write(str3.GetBytes("UTF8"))
    Sleep(del)
    convert
    a = a-40
    text0f.Text = a & " °C  - " & cn
    reply = ""
End Sub
Sub btn11_Click
    Dim str2 As String = "0111" &  Chr(13) & Chr(10)
    astream.Write(str2.GetBytes("UTF8"))
    Sleep(del)
    convert
    a = a*100/255
    text11.Text = a & " %  - " & cn
    reply = ""
End Sub
Sub btn13_Click
    Dim str3 As String  = "0113" &  Chr(13) & Chr(10)
    astream.Write(str3.GetBytes("UTF8"))
    Sleep(del)
    text13.Text = reply.SubString2(p+4,p+6)
    text1.Text = text1.Text & reply
    reply = ""
End Sub
Sub btn14_Click
    Dim str3 As String  = "0114" &  Chr(13) & Chr(10)
    astream.Write(str3.GetBytes("UTF8"))
    Sleep(del)
    convert
    a = a/200
    b = b*100/128 - 100
    text14.Text = a & " V,  " & b & " %  - " & cn
    reply = ""
End Sub
Sub btn15_Click
    Dim str2 As String = "0115" &  Chr(13) & Chr(10)
    astream.Write(str2.GetBytes("UTF8"))
    Sleep(del)
    convert
    a = a/200
    b = b*100/128 - 100
    text15.Text = a & " V,  " & b & " %  - " & cn
    reply = ""
End Sub
Sub btn1c_Click
    Dim str3 As String  = "011C" &  Chr(13) & Chr(10)
    astream.Write(str3.GetBytes("UTF8"))
    Sleep(del)
    text1c.Text = reply.SubString2(p+4,p+6)
    text1.Text = text1.Text & reply
    reply = ""
End Sub
Sub btn20_Click
    Dim str3 As String  = "0120" &  Chr(13) & Chr(10)
    astream.Write(str3.GetBytes("UTF8"))
    Sleep(del)
    text20.Text = reply.SubString2(p+4,p+16)
    text1.Text = text1.Text & reply
    reply = ""
End Sub
Sub btn21_Click
    Dim dis As Int
    Dim str2 As String = "0121" &  Chr(13) & Chr(10)
    astream.Write(str2.GetBytes("UTF8"))
    Sleep(del)
    convert
    dis=a*256+b
    text21.Text = dis & " km  - " & cn
    reply = ""
End Sub
Sub btn03_Click
    Dim dtc As String = ""
    Dim i As Byte
    Dim str3 As String  = "0301" &  Chr(13) & Chr(10)
    astream.Write(str3.GetBytes("UTF8"))
    Sleep(del)
    For i=0 To 3
        dtc = dtc & reply.SubString2(19+i*3,21+i*3)
    Next
    For i=0 To 5
        dtc = dtc & reply.SubString2(36+i*3,38+i*3)
    Next
    text03.Text = dtc
    text1.Text = text1.Text & reply
    reply = ""
End Sub
Sub btn02_Click
    Dim vin As String
    Dim i,c() As Byte
    Dim str3 As String  = "0902" &  Chr(13) & Chr(10)
    astream.Write(str3.GetBytes("UTF8"))
    Sleep(del)
    For i=0 To 3
        c=bc.HexToBytes(reply.SubString2(19+i*3,21+i*3))
        vin = vin & BytesToString(c,0,c.Length,"UTF8")
    Next
    For i=0 To 7
        c=bc.HexToBytes(reply.SubString2(36+i*3,38+i*3))
        vin = vin & BytesToString(c,0,c.Length,"UTF8")
    Next
    For i=0 To 6
        c=bc.HexToBytes(reply.SubString2(65+i*3,67+i*3))
        vin = vin & BytesToString(c,0,c.Length,"UTF8")
    Next
    text02.Text = vin
    text1.Text = text1.Text & reply
    reply = ""
End Sub
Sub btnClear_Click
    text1.Text=""
End SubAttachments
			
				Last edited: