使用 Java 控制 Arduino

2022-09-02 09:36:08

我希望使用Java程序打开和关闭LED。我在大约5分钟内用C#完成了这个项目,但在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 应用程序执行此操作?


答案 1

您可以使用JArduino(Java-Arduino)库,它提供了一个Java API来控制您的Arduino,使用串行端口(使用USB电缆,或从软件角度充当串行端口的无线设备),UDP(通过以太网防护板)。与Java和Arduino之间的通信相关的所有代码都由库在内部管理。

下面是一个用于闪烁 LED 的 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构建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
    }
}

推荐