Showing posts with label Arduino. Show all posts
Showing posts with label Arduino. Show all posts

Tuesday, September 15, 2015

Java + JavaFX + jSSC communicate with Arduino Board, run on Windows 10 and Raspberry Pi

It's a series of examples to program Java + JavaFX + jSSC(java-simple-serial-connector) on Windows 10 with NetBeans IDE. Run on Windows 10, to communicate with Arduino Board. And finally show how to remote deploy on Raspberry Pi using NetBeans IDE Remote Java SE Platform.

- Prepare jSSC - download and add library to NetBeans, and create project using it
- Example of using jSSC, communicate between JavaFX and Arduino Uno via USB Serial port
- JavaFX + jSSC - read byte from Arduino Uno, read from Analog Input

- JavaFX + jSSC - read byte from Arduino Uno, display in LineChart

- Bi-direction communication between Arduino and PC using Java + jSSC


- Java + JavaFX + jSSC run on Raspberry Pi, control Arduino Uno
(with setup Remote Java SE Platform on Netbeans/Windows 10, remote deploy to Raspberry Pi)



Monday, March 3, 2014

Sunday, January 26, 2014

JavaFX/Swing + RxTx to communicate with Arduino, as ColorPicker

Here is examples from arduino-er.blogspot.com to demonstrate how to use RxTx Java Library in JavaFX/Swing application to communicate with Arduino Esplora via USB serial. javafx.scene.control.ColorPicker/javax.swing.JColorChooser are used to choice color, then send to Arduino via USB serial with RxTx Java Library, then to set the color of LCD screen/LED in Arduino side.

JavaFX version:
package javafxcolorpicker;
import gnu.io.CommPortIdentifier;
import gnu.io.SerialPort;
import gnu.io.SerialPortEvent;
import gnu.io.SerialPortEventListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.util.Enumeration;
import javafx.application.Application;
import javafx.event.Event;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.ColorPicker;
import javafx.scene.layout.HBox;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
public class JavaFXColorPicker extends Application {
 MyRxTx myRxTx;
 @Override
 public void start(Stage primaryStage) {
 primaryStage.setTitle("ColorPicker");
 final Scene scene = new Scene(new HBox(20), 400, 100);
 HBox box = (HBox) scene.getRoot();
 box.setPadding(new Insets(5, 5, 5, 5));
 final ColorPicker colorPicker = new ColorPicker();
 //colorPicker.setValue(Color.CORAL);
 colorPicker.setOnAction(new EventHandler() {
 public void handle(Event t) {
 scene.setFill(colorPicker.getValue());
 
 Color color = colorPicker.getValue();
 byte byteR = (byte)(color.getRed() * 255);
 byte byteG = (byte)(color.getGreen() * 255);
 byte byteB = (byte)(color.getBlue() * 255);
 
 try {
 byte[] bytesToSent = 
 new byte[]{byteB, byteG, byteR};
 myRxTx.output.write(bytesToSent);
 
 } catch (IOException ex) {
 System.out.println(ex.toString());
 }
 }
 });
 box.getChildren().add(colorPicker);
 primaryStage.setScene(scene);
 primaryStage.show();
 
 myRxTx = new MyRxTx();
 myRxTx.initialize();
 }
 public static void main(String[] args) {
 launch(args);
 }
 class MyRxTx implements SerialPortEventListener {
 SerialPort serialPort;
 /**
 * The port we're normally going to use.
 */
 private final String PORT_NAMES[] = {
 "/dev/ttyACM0", //for Ubuntu
 "/dev/tty.usbserial-A9007UX1", // Mac OS X
 "/dev/ttyUSB0", // Linux
 "COM3", // Windows
 };
 private BufferedReader input;
 private OutputStream output;
 private static final int TIME_OUT = 2000;
 private static final int DATA_RATE = 9600;
 public void initialize() {
 CommPortIdentifier portId = null;
 Enumeration portEnum = CommPortIdentifier.getPortIdentifiers();
 //First, Find an instance of serial port as set in PORT_NAMES.
 while (portEnum.hasMoreElements()) {
 CommPortIdentifier currPortId
 = (CommPortIdentifier) portEnum.nextElement();
 for (String portName : PORT_NAMES) {
 if (currPortId.getName().equals(portName)) {
 portId = currPortId;
 break;
 }
 }
 }
 if (portId == null) {
 System.out.println("Could not find COM port.");
 return;
 } else {
 System.out.println("Port Name: " + portId.getName() + "\n"
 + "Current Owner: " + portId.getCurrentOwner() + "\n"
 + "Port Type: " + portId.getPortType());
 }
 try {
 // open serial port, and use class name for the appName.
 serialPort = (SerialPort) portId.open(this.getClass().getName(),
 TIME_OUT);
 // set port parameters
 serialPort.setSerialPortParams(DATA_RATE,
 SerialPort.DATABITS_8,
 SerialPort.STOPBITS_1,
 SerialPort.PARITY_NONE);
 // open the streams
 input = new BufferedReader(
 new InputStreamReader(serialPort.getInputStream()));
 output = serialPort.getOutputStream();
 // add event listeners
 serialPort.addEventListener(this);
 serialPort.notifyOnDataAvailable(true);
 } catch (Exception e) {
 System.err.println(e.toString());
 }
 }
 @Override
 public void serialEvent(SerialPortEvent spe) {
 if (spe.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
 try {
 final String inputLine = input.readLine();
 System.out.println(inputLine);
 } catch (Exception e) {
 System.err.println(e.toString());
 }
 }
 }
 /**
 * This should be called when you stop using the port. This will prevent
 * port locking on platforms like Linux.
 */
 public synchronized void close() {
 if (serialPort != null) {
 serialPort.removeEventListener();
 serialPort.close();
 }
 }
 }
}



Java Swing version:
package javaswingcolorpicker;
import gnu.io.CommPortIdentifier;
import gnu.io.SerialPort;
import gnu.io.SerialPortEvent;
import gnu.io.SerialPortEventListener;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.util.Enumeration;
import javax.swing.JButton;
import javax.swing.JColorChooser;
import javax.swing.JFrame;
public class JavaSwingColorPicker extends JFrame {
 
 MyRxTx myRxTx;
 public JavaSwingColorPicker() {
 super("JColorChooser Test Frame");
 setSize(200, 100);
 final Container contentPane = getContentPane();
 final JButton go = new JButton("Show JColorChooser");
 go.addActionListener(new ActionListener() {
 public void actionPerformed(ActionEvent e) {
 Color c;
 c = JColorChooser.showDialog(
 ((Component) e.getSource()).getParent(),
 "Demo", Color.blue);
 contentPane.setBackground(c);
 byte byteR = (byte)(c.getRed());
 byte byteG = (byte)(c.getGreen());
 byte byteB = (byte)(c.getBlue() );
 
 try {
 byte[] bytesToSent = 
 new byte[]{byteB, byteG, byteR};
 myRxTx.output.write(bytesToSent);
 
 } catch (IOException ex) {
 System.out.println(ex.toString());
 }
 }
 });
 contentPane.add(go, BorderLayout.SOUTH);
 setDefaultCloseOperation(EXIT_ON_CLOSE);
 
 myRxTx = new MyRxTx();
 myRxTx.initialize();
 }
 public static void main(String[] args) {
 JavaSwingColorPicker myColorPicker = new JavaSwingColorPicker();
 myColorPicker.setVisible(true);
 
 }
 class MyRxTx implements SerialPortEventListener {
 SerialPort serialPort;
 /**
 * The port we're normally going to use.
 */
 private final String PORT_NAMES[] = {
 "/dev/ttyACM0", //for Ubuntu
 "/dev/tty.usbserial-A9007UX1", // Mac OS X
 "/dev/ttyUSB0", // Linux
 "COM3", // Windows
 };
 private BufferedReader input;
 private OutputStream output;
 private static final int TIME_OUT = 2000;
 private static final int DATA_RATE = 9600;
 public void initialize() {
 CommPortIdentifier portId = null;
 Enumeration portEnum = CommPortIdentifier.getPortIdentifiers();
 //First, Find an instance of serial port as set in PORT_NAMES.
 while (portEnum.hasMoreElements()) {
 CommPortIdentifier currPortId
 = (CommPortIdentifier) portEnum.nextElement();
 for (String portName : PORT_NAMES) {
 if (currPortId.getName().equals(portName)) {
 portId = currPortId;
 break;
 }
 }
 }
 if (portId == null) {
 System.out.println("Could not find COM port.");
 return;
 } else {
 System.out.println("Port Name: " + portId.getName() + "\n"
 + "Current Owner: " + portId.getCurrentOwner() + "\n"
 + "Port Type: " + portId.getPortType());
 }
 try {
 // open serial port, and use class name for the appName.
 serialPort = (SerialPort) portId.open(this.getClass().getName(),
 TIME_OUT);
 // set port parameters
 serialPort.setSerialPortParams(DATA_RATE,
 SerialPort.DATABITS_8,
 SerialPort.STOPBITS_1,
 SerialPort.PARITY_NONE);
 // open the streams
 input = new BufferedReader(
 new InputStreamReader(serialPort.getInputStream()));
 output = serialPort.getOutputStream();
 // add event listeners
 serialPort.addEventListener(this);
 serialPort.notifyOnDataAvailable(true);
 } catch (Exception e) {
 System.err.println(e.toString());
 }
 }
 @Override
 public void serialEvent(SerialPortEvent spe) {
 if (spe.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
 try {
 final String inputLine = input.readLine();
 System.out.println(inputLine);
 } catch (Exception e) {
 System.err.println(e.toString());
 }
 }
 }
 /**
 * This should be called when you stop using the port. This will prevent
 * port locking on platforms like Linux.
 */
 public synchronized void close() {
 if (serialPort != null) {
 serialPort.removeEventListener();
 serialPort.close();
 }
 }
 }
}



For the code in Arduino side, refer: http://arduino-er.blogspot.com/2014/01/send-array-of-byte-from-pc-to-arduino.html

Subscribe to: Comments (Atom)

AltStyle によって変換されたページ (->オリジナル) /