CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-org-sintef-jarduino--org-sintef-jarduino

A comprehensive Java library for interfacing with Arduino boards through serial, Bluetooth, and Ethernet connections

Overview
Eval results
Files

gui-components.mddocs/

GUI Components

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.

Capabilities

Advanced GUI Controller

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();
}

Advanced GUI Client

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);
}

Arduino Board Visual Panels

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;

Control Panel Components

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;

Dialog Components

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;

Code Generation

Components for generating Java code from GUI interactions.

class CodeGenerator;
class GennerationHandler;

Utility GUI Components

Additional GUI utilities for enhanced user experience.

class ColorLegend extends JFrame;
class HintTextField extends JTextField implements FocusListener;
class LogObject;

Usage Examples

Basic GUI Application Setup

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();
        });
    }
}

Arduino Board Selection Dialog

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);
    }
}

Custom Arduino Control Panel

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);
    }
}

Real-time Arduino Monitoring

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());
        }
    }
}

Interactive Dialogs

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
        }
    }
}

Code Generation from GUI Actions

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");
    }
}

GUI Features

Visual Arduino Boards

The GUI provides visual representations of popular Arduino boards:

  • Arduino Uno: Standard USB Arduino with 14 digital pins, 6 analog pins
  • Arduino Diecimila: Classic Arduino with USB connection
  • Arduino Duemilanove: Arduino with improved power management
  • Arduino LilyPad: Wearable Arduino with circular design

Each board panel shows:

  • Pin layout matching physical Arduino
  • Color-coded pins (digital, analog, PWM, power)
  • Interactive click controls for each pin
  • Real-time state indicators

Control Panels

Specialized control panels for different Arduino functions:

  • Digital Panels: Control digital pins (INPUT/OUTPUT, HIGH/LOW)
  • Analog Panels: Read analog sensors and control analog reference
  • PWM Panels: Control PWM output with sliders (0-255 values)
  • Interrupt Panels: Configure external interrupts with trigger modes
  • EEPROM Panel: Read/write EEPROM memory addresses

Logging and Monitoring

  • Real-time command logging: All sent/received messages displayed
  • Command history: Previous commands available for repeat
  • Error reporting: Clear indication of communication issues
  • Response monitoring: Arduino responses automatically parsed and displayed

Command Building

  • Visual command construction: Click pins to build commands
  • Parameter dialogs: Input-specific dialogs for complex commands (tone frequency, PWM values)
  • Command validation: GUI prevents invalid operations
  • Batch execution: Queue multiple commands for execution

Dependencies

  • JArduino Core: org.sintef.jarduino.core for protocol and message classes
  • JArduino Serial: org.sintef.jarduino.serial for serial communication
  • Swing: javax.swing.* for GUI components
  • AWT: java.awt.* for graphics and event handling
  • RXTX Library: org.kevoree.extra.osgi.rxtx for serial port support

Install with Tessl CLI

npx tessl i tessl/maven-org-sintef-jarduino--org-sintef-jarduino

docs

advanced-features.md

bluetooth-communication.md

core-protocol.md

gui-components.md

index.md

message-handling.md

serial-communication.md

tile.json