CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-com-panamahitek--panama-hitek-arduino

Java library for serial communication between Java applications and Arduino boards with data visualization and export capabilities

Overview
Eval results
Files

serial-communication.mddocs/

Serial Communication

The PanamaHitek_Arduino class provides comprehensive serial communication functionality for connecting Java applications to Arduino devices. It supports configurable connection parameters, multiple communication modes, and port management utilities.

Core Communication Class

public class PanamaHitek_Arduino {
    public PanamaHitek_Arduino();
}

Creates a new Arduino communication object and displays library credits.

Connection Configuration

Configure serial port parameters before establishing a connection:

public void setParity(int input_Parity);
public void setByteSize(int Bytes);
public void setStopBits(int Bits);
public void setTimeOut(int time);

Parameters:

  • setParity(int) - Sets parity: 0=None, 1=Odd, 2=Even, 3=Mark, 4=Space
  • setByteSize(int) - Sets byte size: 5-8 bits
  • setStopBits(int) - Sets stop bits: 1-3
  • setTimeOut(int) - Sets timeout in milliseconds

Usage Example:

PanamaHitek_Arduino arduino = new PanamaHitek_Arduino();
arduino.setParity(0);      // No parity
arduino.setByteSize(8);    // 8 data bits
arduino.setStopBits(1);    // 1 stop bit
arduino.setTimeOut(2000);  // 2 second timeout

Connection Modes

TX-Only (Send Data Only)

Establishes a transmit-only connection for sending data to Arduino:

public void arduinoTX(String PORT_NAME, int DATA_RATE) throws ArduinoException;

Parameters:

  • PORT_NAME - Serial port name (e.g., "COM3", "/dev/ttyUSB0")
  • DATA_RATE - Baud rate (e.g., 9600, 115200)

Usage Example:

try {
    arduino.arduinoTX("COM3", 9600);
    arduino.sendData("Hello Arduino");
} catch (ArduinoException ex) {
    System.err.println("Connection failed: " + ex.getMessage());
}

RX-Only (Receive Data Only)

Establishes a receive-only connection with event-driven data reception:

public void arduinoRX(String PORT_NAME, int DATA_RATE, SerialPortEventListener events)
    throws ArduinoException, SerialPortException;

Parameters:

  • PORT_NAME - Serial port name
  • DATA_RATE - Baud rate
  • events - SerialPortEventListener for handling incoming data

Usage Example:

import jssc.SerialPortEvent;
import jssc.SerialPortEventListener;
import jssc.SerialPortException;

SerialPortEventListener listener = new SerialPortEventListener() {
    @Override
    public void serialEvent(SerialPortEvent event) {
        try {
            if (arduino.isMessageAvailable()) {
                String message = arduino.printMessage();
                System.out.println("Received: " + message);
            }
        } catch (SerialPortException | ArduinoException ex) {
            ex.printStackTrace();
        }
    }
};

arduino.arduinoRX("COM3", 9600, listener);

Bidirectional (Send and Receive)

Establishes a full-duplex connection for both sending and receiving data:

public void arduinoRXTX(String PORT_NAME, int DATA_RATE, SerialPortEventListener events)
    throws ArduinoException;

Parameters:

  • PORT_NAME - Serial port name
  • DATA_RATE - Baud rate
  • events - SerialPortEventListener for handling incoming data

Usage Example:

arduino.arduinoRXTX("COM3", 9600, listener);

// Send data
arduino.sendData("GET_SENSOR_DATA");

// Receive data handled by event listener

Data Transmission

Send String Data

public void sendData(String data) throws ArduinoException, SerialPortException;

Sends string data to the Arduino. Can only be used with arduinoTX() or arduinoRXTX() connections.

Usage Example:

arduino.sendData("LED_ON");
arduino.sendData("SERVO_90");
arduino.sendData("SENSOR_READ");

Send Byte Data

public void sendByte(int data) throws ArduinoException, SerialPortException;

Sends a single byte value (0-255) to Arduino.

Usage Example:

arduino.sendByte(255);  // Send maximum byte value
arduino.sendByte(0);    // Send minimum byte value
arduino.sendByte(127);  // Send middle value

Data Reception

Receive Raw Data

public byte[] receiveData() throws ArduinoException, SerialPortException;

Receives raw byte data from Arduino. Can only be used with arduinoRX() or arduinoRXTX() connections.

Check Message Availability

public boolean isMessageAvailable() throws SerialPortException, ArduinoException;

Checks if a complete message is available for reading.

Get Message as String

public String printMessage() throws SerialPortException, ArduinoException;

Retrieves the received message as a string.

Usage Example:

if (arduino.isMessageAvailable()) {
    String message = arduino.printMessage();
    System.out.println("Arduino says: " + message);
}

Port Management

Get Available Ports

public int getPortsAvailable();
public List<String> getSerialPorts();

Usage Example:

int portCount = arduino.getPortsAvailable();
List<String> ports = arduino.getSerialPorts();

System.out.println("Available ports: " + portCount);
for (String port : ports) {
    System.out.println("- " + port);
}

Buffer Management

public int getInputBytesAvailable() throws SerialPortException;
public void flushSerialPort() throws SerialPortException;

Usage Example:

// Check buffer status
int bytesAvailable = arduino.getInputBytesAvailable();
System.out.println("Bytes in buffer: " + bytesAvailable);

// Clear buffers
arduino.flushSerialPort();

Event Listener Management

public SerialPortEventListener getEventListener() throws ArduinoException;

Retrieves the currently registered event listener.

Connection Termination

public void killArduinoConnection() throws ArduinoException;

Properly terminates the Arduino connection and releases system resources.

Usage Example:

try {
    arduino.killArduinoConnection();
    System.out.println("Connection terminated successfully");
} catch (ArduinoException ex) {
    System.err.println("Error terminating connection: " + ex.getMessage());
}

Complete Example

import com.panamahitek.PanamaHitek_Arduino;
import com.panamahitek.ArduinoException;
import jssc.*;

public class ArduinoSerialExample {
    private PanamaHitek_Arduino arduino;

    public void setup() {
        arduino = new PanamaHitek_Arduino();

        // Configure connection parameters
        arduino.setParity(0);
        arduino.setByteSize(8);
        arduino.setStopBits(1);
        arduino.setTimeOut(2000);

        try {
            // Establish bidirectional connection
            arduino.arduinoRXTX("COM3", 9600, new SerialPortEventListener() {
                @Override
                public void serialEvent(SerialPortEvent event) {
                    if (event.isRXCHAR() && event.getEventValue() > 0) {
                        try {
                            if (arduino.isMessageAvailable()) {
                                String message = arduino.printMessage();
                                System.out.println("Received: " + message);

                                // Echo back to Arduino
                                arduino.sendData("ECHO: " + message);
                            }
                        } catch (SerialPortException | ArduinoException ex) {
                            ex.printStackTrace();
                        }
                    }
                }
            });

            // Send initial command
            arduino.sendData("START");

        } catch (ArduinoException ex) {
            System.err.println("Setup failed: " + ex.getMessage());
        }
    }

    public void cleanup() {
        try {
            arduino.killArduinoConnection();
        } catch (ArduinoException ex) {
            System.err.println("Cleanup error: " + ex.getMessage());
        }
    }
}

Install with Tessl CLI

npx tessl i tessl/maven-com-panamahitek--panama-hitek-arduino

docs

data-management.md

exception-handling.md

index.md

multi-message.md

serial-communication.md

visualization.md

tile.json