A comprehensive Java library for interfacing with Arduino boards through serial, Bluetooth, and Ethernet connections
Swing-based graphical components for interactive Arduino control with visual pin layouts, control panels, and real-time monitoring capabilities. The GUI module provides complete desktop applications for Arduino interaction with visual representation of different Arduino board types.
Main controller class providing high-level Arduino commands through a simplified interface, designed for GUI integration.
class InteractiveJArduinoDataControllerClientAdvanced implements JArduinoObserver, JArduinoClientSubject {
// Arduino command methods (simplified interface)
void sendpinMode(PinMode mode, DigitalPin pin);
void senddigitalRead(DigitalPin pin);
void senddigitalWrite(DigitalPin pin, DigitalState value);
void sendanalogReference(AnalogReference type);
void sendanalogRead(AnalogPin pin);
void sendanalogWrite(PWMPin pin, byte value);
void sendtone(DigitalPin pin, int freq, int dur);
void sendnoTone(DigitalPin pin);
void sendping();
void sendattachInterrupt(InterruptPin interrupt, InterruptTrigger mode);
void senddetachInterrupt(InterruptPin interrupt);
void sendeeprom_read(Short address);
void sendeeprom_sync_write(Short address, Byte value);
void sendeeprom_write(Short address, Byte value);
// Observer pattern methods
void receiveMsg(byte[] msg);
void register(JArduinoClientObserver observer);
void unregister(JArduinoClientObserver observer);
void unregisterAll();
}Main GUI application class providing interactive Arduino control with logging, command history, and visual feedback.
class InteractiveJArduinoDataGUIClientAdvanced {
InteractiveJArduinoDataGUIClientAdvanced(InteractiveJArduinoDataControllerClientAdvanced controller, String card);
void writeToLog(String string);
void enable();
void disable();
void addToRepeat(APanel panel, String input, short i, short j, byte k);
}Visual representations of different Arduino board types with interactive pin controls.
class MainPanelUno extends JComponent;
class MainPanelDiecimila extends JComponent;
class MainPanelDuemilanove extends JComponent;
class MainPanelLilypad extends JComponent;Specialized panel classes for different types of Arduino pin controls and functionality.
abstract class APanel extends JPanel;
class DigitalPanel extends APanel;
class AnalogPanel extends DigitalPanel;
class PWMPanel extends DigitalPanel;
class InterruptPanel1 extends DigitalPanel;
class InterruptPanel2 extends PWMPanel;
class AREFPanel extends APanel;
class EEPROMPanel extends JPanel;
class LogPanel extends JPanel;
class ReuseLogPanel extends JPanel;
class CommandExecuter extends Thread;Interactive dialog boxes for configuration and input.
class CardChooserDialog extends JFrame;
class AnalogWriteDialog extends JFrame;
class ToneDialog extends JFrame;
class DelayDialog extends JFrame;
class LogicalTestDialog extends JFrame;Components for generating Java code from GUI interactions.
class CodeGenerator;
class GennerationHandler;Additional GUI utilities for enhanced user experience.
class ColorLegend extends JFrame;
class HintTextField extends JTextField implements FocusListener;
class LogObject;import org.sintef.jarduino.gui.*;
import org.sintef.jarduino.serial.Serial4JArduino;
import javax.swing.*;
public class ArduinoGUIExample {
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
// Create controller
InteractiveJArduinoDataControllerClientAdvanced controller =
new InteractiveJArduinoDataControllerClientAdvanced();
// Setup serial communication
Serial4JArduino arduino = new Serial4JArduino("COM3");
arduino.register(controller);
controller.register(arduino);
// Create and show GUI
InteractiveJArduinoDataGUIClientAdvanced gui =
new InteractiveJArduinoDataGUIClientAdvanced(controller, "Uno");
// Enable GUI after connection
gui.enable();
});
}
}import org.sintef.jarduino.gui.dialogs.CardChooserDialog;
public class BoardSelectionExample {
public void showBoardSelector() {
CardChooserDialog dialog = new CardChooserDialog();
dialog.setVisible(true);
// User selects board type, then create appropriate GUI
String selectedBoard = dialog.getSelectedBoard(); // "Uno", "Diecimila", etc.
InteractiveJArduinoDataGUIClientAdvanced gui =
new InteractiveJArduinoDataGUIClientAdvanced(controller, selectedBoard);
}
}import org.sintef.jarduino.gui.panels.*;
import javax.swing.*;
public class CustomControlPanel extends JFrame {
private InteractiveJArduinoDataControllerClientAdvanced controller;
public CustomControlPanel(InteractiveJArduinoDataControllerClientAdvanced controller) {
this.controller = controller;
setupGUI();
}
private void setupGUI() {
setLayout(new GridLayout(2, 3));
// Add different types of control panels
add(new DigitalPanel(controller, DigitalPin.PIN_13)); // LED control
add(new AnalogPanel(controller, AnalogPin.A_0)); // Sensor reading
add(new PWMPanel(controller, PWMPin.PWM_PIN_9)); // PWM output
add(new InterruptPanel1(controller, InterruptPin.PIN_2_INT0)); // Interrupt
add(new AREFPanel(controller)); // Analog reference
add(new EEPROMPanel(controller)); // EEPROM control
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setVisible(true);
}
}import org.sintef.jarduino.gui.panels.LogPanel;
import org.sintef.jarduino.observer.JArduinoClientObserver;
public class ArduinoMonitor implements JArduinoClientObserver {
private LogPanel logPanel;
private InteractiveJArduinoDataGUIClientAdvanced gui;
public ArduinoMonitor(InteractiveJArduinoDataGUIClientAdvanced gui) {
this.gui = gui;
this.logPanel = new LogPanel();
}
@Override
public void receiveMsg(byte[] msg) {
FixedSizePacket packet = JArduinoProtocol.createMessageFromPacket(msg);
String message = "Received: " + packet.toString();
// Log to GUI
gui.writeToLog(message);
// Handle specific responses
if (packet instanceof AnalogReadResultMsg) {
AnalogReadResultMsg result = (AnalogReadResultMsg) packet;
gui.writeToLog("Sensor Value: " + result.getValue());
} else if (packet instanceof DigitalReadResultMsg) {
DigitalReadResultMsg result = (DigitalReadResultMsg) packet;
gui.writeToLog("Digital State: " + result.getValue());
}
}
}import org.sintef.jarduino.gui.dialogs.*;
public class InteractiveDialogs {
public void showToneDialog() {
ToneDialog dialog = new ToneDialog();
dialog.setVisible(true);
if (dialog.isConfirmed()) {
int frequency = dialog.getFrequency();
int duration = dialog.getDuration();
DigitalPin pin = dialog.getSelectedPin();
controller.sendtone(pin, frequency, duration);
}
}
public void showAnalogWriteDialog() {
AnalogWriteDialog dialog = new AnalogWriteDialog();
dialog.setVisible(true);
if (dialog.isConfirmed()) {
PWMPin pin = dialog.getSelectedPin();
byte value = dialog.getPWMValue(); // 0-255
controller.sendanalogWrite(pin, value);
}
}
public void showDelayDialog() {
DelayDialog dialog = new DelayDialog();
dialog.setVisible(true);
if (dialog.isConfirmed()) {
int delayMs = dialog.getDelayValue();
// Apply delay to command execution
}
}
}import org.sintef.jarduino.gui.generators.*;
public class CodeGenerationExample {
private CodeGenerator generator;
private GennerationHandler handler;
public void generateJavaCode() {
generator = new CodeGenerator();
handler = new GennerationHandler();
// Record GUI actions
generator.recordAction("pinMode", DigitalPin.PIN_13, PinMode.OUTPUT);
generator.recordAction("digitalWrite", DigitalPin.PIN_13, DigitalState.HIGH);
generator.recordAction("analogRead", AnalogPin.A_0);
// Generate Java code
String generatedCode = generator.generateJavaCode();
System.out.println("Generated Code:");
System.out.println(generatedCode);
// Save to file
handler.saveCodeToFile(generatedCode, "GeneratedArduinoCode.java");
}
}The GUI provides visual representations of popular Arduino boards:
Each board panel shows:
Specialized control panels for different Arduino functions:
org.sintef.jarduino.core for protocol and message classesorg.sintef.jarduino.serial for serial communicationjavax.swing.* for GUI componentsjava.awt.* for graphics and event handlingorg.kevoree.extra.osgi.rxtx for serial port supportInstall with Tessl CLI
npx tessl i tessl/maven-org-sintef-jarduino--org-sintef-jarduino