20

Java プログラムでLEDのオンとオフを切り替えたいと考えています。このプロジェクトは C# で約 5 分で完了しましたが、Java ではやや難しいようです。COMポートに1または0が書き込まれるのをArduinoに待機させ、それに基づいて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 アプリケーションでこれを行うにはどうすればよいでしょうか。

4

3 に答える 3

17

JArduino (Java-Arduino) ライブラリを使用して、シリアル ポート (USB ケーブル、またはソフトウェアの観点からシリアル ポートとして動作するワイヤレス デバイスを使用)、UDP (イーサネット経由) を使用して Arduino を制御するための Java API を提供します。シールド)。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 は次の場所で入手できます

于 2013-04-28T11:26:41.670 に答える
8

Java で通信ポートと通信するには、 Java Communications 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 Web サイトには、役に立つと思われる他の[ 2 ] もあります。

于 2012-08-19T02:14:44.377 に答える