Управление Arduino с помощью Java
Я хочу включить/выключить LED с помощью программы Java. Я сделал проект на С# примерно через 5 минут, но, похоже, это несколько сложнее в Java. У меня был Arduino, ожидающий 1 или 0, чтобы быть записанным на COM-порт и изменил бы светодиод на основе этого. Код, который я использую для Arduino, выглядит следующим образом.
int LedPin = 13;
char data;
void setup()
{
Serial.begin(9600);
pinMode( LedPin , OUTPUT );
}
void loop()
{
data = Serial.read();
if (Serial.available() > 0)
{
if(data == '1' )
{
digitalWrite(LedPin,HIGH);
}
else if(data == '0' )
{
digitalWrite(LedPin,LOW);
}
}
else
if (Serial.available()<0)
{
digitalWrite(LedPin,HIGH);
delay(500);
digitalWrite(LedPin,LOW);
delay(500);
}
}
Как я могу сделать это с помощью приложения Java?
Ответы
Ответ 1
Вы можете использовать библиотеку JArduino (Java-Arduino), которая предоставляет Java API для управления вашим Arduino с помощью последовательного порта (с использованием USB-кабеля или беспроводных устройств, ведущих себя как последовательные порты с точки зрения программного обеспечения), UDP ( через экран Ethernet). Весь код, связанный с коммуникацией между Java и Arduino, управляется внутри библиотеки.
Вот пример Java, чтобы мигать светодиод:
public class Blink extends JArduino {
public Blink(String port) {
super(port);
}
@Override
protected void setup() {
// initialize the digital pin as an output.
// Pin 13 has an LED connected on most Arduino boards:
pinMode(DigitalPin.PIN_12, PinMode.OUTPUT);
}
@Override
protected void loop() {
// set the LED on
digitalWrite(DigitalPin.PIN_12, DigitalState.HIGH);
delay(1000); // wait for a second
// set the LED off
digitalWrite(DigitalPin.PIN_12, DigitalState.LOW);
delay(1000); // wait for a second
}
public static void main(String[] args) {
String serialPort;
if (args.length == 1) {
serialPort = args[0];
} else {
serialPort = Serial4JArduino.selectSerialPort();
}
JArduino arduino = new Blink(serialPort);
arduino.runArduinoProcess();
}
}
JArduino доступен по адресу: JArduino
Ответ 2
Для связи с коммуникационным портом на Java вам потребуется некоторая реализация API Java Communications API. Я могу подтвердить RXTX, я использовал его раньше, чтобы связаться с Arduino.
Как только у вас будет реализация Java Communications, становится довольно просто связаться с Arduino:
CommPort arduino = getArduinoPort();
arduino.getOutputStream().write(1);
public CommPort getArduinoPort() {
Enumeration ports = CommPortIdentifier.getPortIdentifiers();
while(ports.hasMoreElements()) {
CommPortIdentifier identifier = (CommPortIdentifier) ports.nextElement();
if(isArduino(identifier)) {
return identifier.open(getClass().getName(), 2000); // 2 second timeout
}
}
return null;
}
public boolean isArduino(CommPortIdentifier identifier) {
// if you know the name of the port ahead of time you can
// compare it here with identifier.getName(), otherwise
// you can interface with the user like the Arduino IDE's
// serial monitor
}
На веб-сайте RXTX также есть другие examples [2], которые могут оказаться полезными.
Ответ 3
Вы можете легко создавать программы Arduino на Java, благодаря отличному HaikuVM.
Вот пример:
import static processing.hardware.arduino.cores.arduino.Arduino.*;
public class Blink {
static byte ledPin = 13; // LED connected to digital pin 13
public static void setup() {
pinMode(ledPin, OUTPUT); // sets the digital pin as output
}
public static void loop() // run over and over again
{
digitalWrite(ledPin, HIGH); // sets the LED on
delay(500); // waits for a second
digitalWrite(ledPin, LOW); // sets the LED off
delay(500); // waits for a second
}
}