A comprehensive Java library for interfacing with Arduino boards through serial, Bluetooth, and Ethernet connections
The foundation of JArduino's Arduino communication system, providing hardware abstraction through enums and a protocol factory for creating Arduino command messages. This module defines the complete Arduino hardware model and protocol constants.
Strongly-typed enums for all Arduino hardware components providing type safety and easy pin identification.
enum DigitalPin {
PIN_0, PIN_1, PIN_2, PIN_3, PIN_4, PIN_5, PIN_6, PIN_7,
PIN_8, PIN_9, PIN_10, PIN_11, PIN_12, PIN_13,
A_0, A_1, A_2, A_3, A_4, A_5;
byte getValue();
static DigitalPin fromValue(byte b);
}
enum AnalogPin {
A_0, A_1, A_2, A_3, A_4, A_5;
byte getValue();
static AnalogPin fromValue(byte b);
}
enum PWMPin {
PWM_PIN_3, PWM_PIN_5, PWM_PIN_6, PWM_PIN_9, PWM_PIN_10, PWM_PIN_11;
byte getValue();
static PWMPin fromValue(byte b);
}
enum InterruptPin {
PIN_2_INT0, PIN_3_INT1;
byte getValue();
static InterruptPin fromValue(byte b);
}Configuration enums for Arduino pin modes, states, and settings.
enum PinMode {
INPUT, OUTPUT
}
enum DigitalState {
LOW, HIGH
}
enum AnalogReference {
DEFAULT, INTERNAL, EXTERNAL
}
enum InterruptTrigger {
CHANGE, RISING, FALLING, LOW
}
enum JArduinoCom {
Ethernet, Serial, AndroidBluetooth
}The main factory class for creating Arduino command messages. All Arduino operations are created through static methods that return FixedSizePacket objects.
abstract class JArduinoProtocol {
// Protocol constants
static final byte PIN_MODE = 2;
static final byte DIGITAL_READ = 4;
static final byte DIGITAL_WRITE = 3;
static final byte ANALOG_REFERENCE = 6;
static final byte ANALOG_READ = 7;
static final byte ANALOG_WRITE = 9;
static final byte TONE = 10;
static final byte NO_TONE = 11;
static final byte PULSE_IN = 12;
static final byte PING = 66;
static final byte ATTACH_INTERRUPT = 21;
static final byte DETACH_INTERRUPT = 22;
static final byte EEPROM_READ = 31;
static final byte EEPROM_SYNC_WRITE = 34;
static final byte EEPROM_WRITE = 33;
// Digital I/O commands
static FixedSizePacket createPinMode(DigitalPin pin, PinMode mode);
static FixedSizePacket createDigitalRead(DigitalPin pin);
static FixedSizePacket createDigitalWrite(DigitalPin pin, DigitalState value);
// Analog I/O commands
static FixedSizePacket createAnalogReference(AnalogReference type);
static FixedSizePacket createAnalogRead(AnalogPin pin);
static FixedSizePacket createAnalogWrite(PWMPin pin, byte value);
// Audio commands
static FixedSizePacket createTone(DigitalPin pin, short frequency, short duration);
static FixedSizePacket createNoTone(DigitalPin pin);
// Timing commands
static FixedSizePacket createPulseIn(DigitalPin pin, DigitalState state);
// Communication commands
static FixedSizePacket createPing();
// Interrupt commands
static FixedSizePacket createAttachInterrupt(InterruptPin interrupt, InterruptTrigger mode);
static FixedSizePacket createDetachInterrupt(InterruptPin interrupt);
// EEPROM commands
static FixedSizePacket createEeprom_read(short address);
static FixedSizePacket createEeprom_sync_write(short address, byte value);
static FixedSizePacket createEeprom_write(short address, byte value);
// Result factory methods
static FixedSizePacket createDigitalReadResult(DigitalState value);
static FixedSizePacket createAnalogReadResult(short value);
static FixedSizePacket createPulseInResult(int value);
static FixedSizePacket createPong();
static FixedSizePacket createInterruptNotification(InterruptPin interrupt);
static FixedSizePacket createEeprom_value(byte value);
static FixedSizePacket createEeprom_write_ack();
// Message parsing
static FixedSizePacket createMessageFromPacket(byte[] packet);
}Abstract base class for all protocol messages providing common functionality for message handling and serialization.
abstract class FixedSizePacket {
byte[] getPacket();
String toString();
static String toString(byte[] msg);
void setSourceAddress(byte address);
byte getSourceAddress();
void setTargetAddress(byte address);
byte getTargetAddress();
void setFrameNumber(byte frame);
byte getFrameNumber();
void setLength(byte length);
byte getLength();
byte[] getRawData();
void setRawData(byte[] ndata);
}Strongly-typed message classes for each Arduino operation, all extending JArduinoProtocolPacket which extends FixedSizePacket:
// Command message classes
class PinModeMsg extends JArduinoProtocolPacket;
class DigitalReadMsg extends JArduinoProtocolPacket;
class DigitalWriteMsg extends JArduinoProtocolPacket;
class AnalogReadMsg extends JArduinoProtocolPacket;
class AnalogWriteMsg extends JArduinoProtocolPacket;
class AnalogReferenceMsg extends JArduinoProtocolPacket;
class ToneMsg extends JArduinoProtocolPacket;
class NoToneMsg extends JArduinoProtocolPacket;
class PulseInMsg extends JArduinoProtocolPacket;
class AttachInterruptMsg extends JArduinoProtocolPacket;
class DetachInterruptMsg extends JArduinoProtocolPacket;
class Eeprom_readMsg extends JArduinoProtocolPacket;
class Eeprom_writeMsg extends JArduinoProtocolPacket;
class Eeprom_sync_writeMsg extends JArduinoProtocolPacket;
class PingMsg extends JArduinoProtocolPacket;
// Result message classes
class DigitalReadResultMsg extends JArduinoProtocolPacket;
class AnalogReadResultMsg extends JArduinoProtocolPacket;
class PulseInResultMsg extends JArduinoProtocolPacket;
class PongMsg extends JArduinoProtocolPacket;
class InterruptNotificationMsg extends JArduinoProtocolPacket;
class Eeprom_valueMsg extends JArduinoProtocolPacket;
class Eeprom_write_ackMsg extends JArduinoProtocolPacket;
abstract class JArduinoProtocolPacket extends FixedSizePacket;// Set pin 13 as output
FixedSizePacket pinMode = JArduinoProtocol.createPinMode(DigitalPin.PIN_13, PinMode.OUTPUT);
// Turn on LED (write HIGH to pin 13)
FixedSizePacket digitalWrite = JArduinoProtocol.createDigitalWrite(DigitalPin.PIN_13, DigitalState.HIGH);
// Read digital value from pin 2
FixedSizePacket digitalRead = JArduinoProtocol.createDigitalRead(DigitalPin.PIN_2);// Set external analog reference
FixedSizePacket analogRef = JArduinoProtocol.createAnalogReference(AnalogReference.EXTERNAL);
// Read analog value from A0
FixedSizePacket analogRead = JArduinoProtocol.createAnalogRead(AnalogPin.A_0);
// Write PWM value (0-255) to pin 9
FixedSizePacket analogWrite = JArduinoProtocol.createAnalogWrite(PWMPin.PWM_PIN_9, (byte) 128);// Parse incoming message from Arduino
byte[] incomingData = // ... received from communication layer
FixedSizePacket parsedMessage = JArduinoProtocol.createMessageFromPacket(incomingData);
System.out.println("Received: " + parsedMessage.toString());Install with Tessl CLI
npx tessl i tessl/maven-org-sintef-jarduino--org-sintef-jarduino