控制与Java一个Arduino(Control an Arduino with Java)

2019-06-27 04:13发布

我期待把一个LED与Java程序和关闭。 我没有在C#项目中大约5分钟,但它似乎有一些在Java中更具挑战性。 我有Arduino的等待1或0被写入COM端口和将改变基础上的LED。 我使用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应用程序做到这一点?

Answer 1:

您可以使用JArduino(Java的Arduino的)库,它提供了Java API使用串行端口(使用USB电缆或无线设备表现为串行端口从软件的角度来看),UDP来控制你的Arduino(通过以太网屏蔽)。 所有涉及到Java和Arduino的之间的通信的代码是由库内部管理。

下面是一个Java样本闪烁的LED :

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



Answer 2:

为了用Java编写的通讯端口进行通信,你需要一些执行Java通信API 。 我可以证明RXTX ,我已经用它之前,有一个Arduino沟通。

一旦你有你的Java通信的实现,它变得相当简单用一个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网站上也有其他的例子 [ 2 ],它可能对您有用。



Answer 3:

您可以轻松地构建在Java中的Arduino程序,得益于出色的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
    }
}


文章来源: Control an Arduino with Java