My very simple working code:
Code:OSCCON=%01110000 ' SET TO 8 MHZ internal oscillator DEFINE OSC 08 ' 8MHZ clock speed DEFINE HSER_BAUD 9600 ' Set baud rate DEFINE HSER_RCSTA 90h DEFINE HSER_CLROERR 1 ' Clear overrun error upon DEFINE HSER_TXSTA 24h ' Set transmit status and control register DEFINE HSER_SPBRG 51 ' 9600 Bauds RPM var word SPEED var word TPS var byte volts var byte adc1 var word adc2 var word prefix1 var byte prefix2 var byte prefix3 var byte prefix4 var byte rpm = 3800 speed = 60 tps = 10 volts = 122 ADC1 = 512 ADC2 = 200 Prefix1 = 22 Prefix2 = 0 Prefix3 = 0 Prefix4 = 0 main: pause 500 hserout [Prefix1,Prefix2,Prefix3,Prefix4,dec5 rpm, dec3 speed, dec3 TPS, dec3 volts, dec4 adc1, dec4 adc2] goto main endCode:Sub Process_Globals Dim AStream As AsyncStreams Dim Incoming As String Dim RPM As Int Dim SPEED As Int Dim TPS As Double Dim VOLTS As Int Dim ADC1 As Int Dim ADC2 As Int End Sub Sub Activity_Create(FirstTime As Boolean) Activity.LoadLayout("2") If AStream.IsInitialized = False Then AStream.InitializePrefix(Main.Serial1.InputStream, False, Main.Serial1.OutputStream, "AStream") End If Update_Display End Sub Sub AStream_NewData (Buffer() As Byte) Log( BytesToString(Buffer, 0, Buffer.Length, "ISO8859_1")) Incoming = BytesToString(Buffer, 0, Buffer.Length, "ISO8859_1") RPM = (Incoming.SubString2(0,5)) SPEED = (Incoming.SubString2(5,8)) TPS = (Incoming.SubString2(8,11)) VOLTS = (Incoming.SubString2(11,14)) ADC1 = (Incoming.SubString2(14,18)) ADC2 = (Incoming.SubString2(18,22)) Update_Display End Sub
Shawn
Thanks for the working example. Can you explain the complete setup? That HSEROUT goes to what, an external bluetooth module?
This would make an excellent article with some narrative explaining what is going on, hardware/software requirements, etc.
Robert
The hserout goes to a RN42 bluetooth modem. Could be done with debug as shown in an earlier post. Once paired it isn't much different than any other serial connection, but the Android side of things takes some time to wrap your head around. The prefix is a pain, but works very well once working. It is basically just a 32 bit header detailing the number of bytes in the serial string.
Shawn
Can we control to what device we want to talk to via that header?
Let's say to transmit one thing to my cell phone and another to my daughter's?
No, what you transmit to is strictly set by pairing the 2 devices which is not part of this code. I don't think you can pair more than 2 devices. The header is just for validation of the data. The data received flag isn't raised until all data is received, without it the flag is raised as soon as data appears, and then you have to manually put the bytes into a string and wait until they all arrive.
Shawn
So let's say I have 2 garage door openers, I could pair with the phone, send that header and data defining if PIC should activate relay for left or right door button and then unpair phone?
Just making sure I can get 2 phones to be able to open either door (project #1).
Robert
Just thought I should bring this thread up to date... In the end I gave up on the alternatives, and I broke down and bought Basic4Android since it seems to be the most mature thing out there. If anybody is interested in a 50% off coupon code, you can use this " dqqshs " You go to their purchase page and hit the "Plimus" button, then enter the code.
I'm debating which version to get, Enterprise $99 at 50%?
Bang for buck looks good.
Which are you getting?
(Just checking so I can copy your code)
Robert
Bookmarks