Here's a really simple demonstration of connecting an Arduino Uno to an app written in B4J.
You will need to modify the code around line 25 to reflect the correct COM Port that your Arduino is connected to. You can test the Arduino code using the Arduino IDE Serial Monitor - by entering the commands "HIGH" or "LOW" (sans quotes) to cycle your Arduino LED on. Set the Serial Monitor to NEWLINE and 9600 Baud.
After you get a successfull test, you should close the Arduino IDE as it may try to maintain the connection with your Arduino - which ties up your COM port and will prevent the B4J app from connecting.It's also possible that without running the Arduino IDE Serial Monitor prior to using the B4J app you will have problems connecting to the Arduino and may have to specify the serial port connection properties in your B4J Project.
Update (02/13/2014):
I added the SetParams function to the AppStart Subroutine below - this will enable the connection from the Java App to the Arduino without requiring the initial connection by the Arduino IDE / Serial Monitor. Contents of the Zip File were updated to reflect the change also.
B4J Program:
Arduino Program:
There's a simple JavaFX Form included in the attached zip file that is used to send the instruction(s) to the Arduino and display the response received from the Arduino.
Here's a link to a short video of the program turning an LED on.
Gaver
You will need to modify the code around line 25 to reflect the correct COM Port that your Arduino is connected to. You can test the Arduino code using the Arduino IDE Serial Monitor - by entering the commands "HIGH" or "LOW" (sans quotes) to cycle your Arduino LED on. Set the Serial Monitor to NEWLINE and 9600 Baud.
After you get a successfull test, you should close the Arduino IDE as it may try to maintain the connection with your Arduino - which ties up your COM port and will prevent the B4J app from connecting.
Update (02/13/2014):
I added the SetParams function to the AppStart Subroutine below - this will enable the connection from the Java App to the Arduino without requiring the initial connection by the Arduino IDE / Serial Monitor. Contents of the Zip File were updated to reflect the change also.
B4J Program:
B4X:
#Region Project Attributes
#MainFormWidth: 330
#MainFormHeight: 200
#End Region
Sub Process_Globals
Private fx As JFX
Private MainForm As Form
Private txtFromArduino As TextField
Private btnLEDOn As Button
Private btnLEDOff As Button
Private sp As Serial
Private astream As AsyncStreams
End Sub
Sub AppStart (Form1 As Form, Args() As String)
MainForm = Form1
sp.Initialize("")
MainForm.RootPane.LoadLayout("test1") 'Load the layout file.
MainForm.Show
MainForm.Title = "B4J Arduino Demo"
' SET TO YOUR COM PORT VALUE
sp.Open("COM3")
' CONFIGURE PORT (ADDED 2/13/2014)
Dim BaudRate As Int = 9600
Dim DataBits As Int = 8
Dim StopBits As Int = 1
Dim Parity As Int = 0
sp.SetParams (BaudRate , DataBits , StopBits , Parity )
astream.Initialize(sp.GetInputStream, sp.GetOutputStream, "astream")
txtFromArduino.Text = "Awaiting Selection"
End Sub
Sub AStream_NewData (Buffer() As Byte)
Dim s As String = BytesToString(Buffer, 0, Buffer.Length, "UTF8")
Log(s)
If s = "0" Then
txtFromArduino.Text = "Arduino Replied with a 0 (zero) LED=OFF"
Else If s = "1" Then
txtFromArduino.Text = "Arduino Replied with a 1 (one) LED=ON"
End If
End Sub
Sub Send_To_Arduino(cmd As String)
Dim bytes() As Byte = (cmd & CRLF).GetBytes("UTF8")
astream.Write(bytes)
End Sub
Sub btnLEDOff_Action
Send_To_Arduino("LOW")
End Sub
Sub btnLEDOn_Action
Send_To_Arduino("HIGH")
End Sub
Sub MainForm_Closed
sp.Close
astream.Close
End Sub
Sub AStream_Error
Log("Error: " & LastException)
astream.Close
End Sub
Arduino Program:
B4X:
int LED = 13; // define pin 13 as led;
void setup() // run once, when the sketch starts
{
Serial.begin(9600); // set up Serial library at 9600 bps
pinMode(LED,OUTPUT); // define pin 13 as output (led);
Serial.print("Awaiting Input... \n"); // display initial message in Serial Monitor;
}
String txtMsg = "";
char s;
void loop() {
while (Serial.available() > 0) {
s=(char)Serial.read();
if (s == '\n') {
if(txtMsg=="HIGH") { digitalWrite(LED, HIGH);
Serial.write("1");
}
if(txtMsg=="LOW") { digitalWrite(LED, LOW);
Serial.write("0");
}
txtMsg = "";
} else {
txtMsg +=s;
}
}
}
There's a simple JavaFX Form included in the attached zip file that is used to send the instruction(s) to the Arduino and display the response received from the Arduino.
Here's a link to a short video of the program turning an LED on.
Gaver
Attachments
Last edited: