解決しました。 Javaコードでポートを開いた後、
Thread.sleep(4000);
を入れて、動作するようになりました。問題は、ポートを開くたびにarduinoがリセットされることでした。送信していたときデータ、arduinoは聞く準備ができていませんでした。
私はarduinoとJavaに不慣れですが、プログラムを非常に単純にしたので、なぜ機能しないのかわかりません。
Arduino(COM5)に対応するシリアルポートに文字列を送信します。
import Java.io.*;
import Java.util.*;
import gnu.io.*;
public class SimpleWrite {
static Enumeration portList;
static CommPortIdentifier portId;
static String messageString = "color FF00FFEND";
static SerialPort serialPort;
static OutputStream outputStream;
public static void main(String[] args) {
portList = CommPortIdentifier.getPortIdentifiers();
while (portList.hasMoreElements()) {
portId = (CommPortIdentifier) portList.nextElement();
if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
if (portId.getName().equals("COM5")) {
try {
serialPort = (SerialPort)
portId.open("SimpleWriteApp", 2000);
outputStream = serialPort.getOutputStream();
serialPort.setSerialPortParams(9600,
SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);
outputStream.write(messageString.getBytes());
System.out.println(messageString);
outputStream.close();
serialPort.close();
}
catch (IOException e) {System.out.println("err3");}
catch (PortInUseException e) {System.out.println("err");}
catch (IOException e) {System.out.println("err1");}
catch (UnsupportedCommOperationException e) {System.out.println("err2");}
}
}
}
}
}
そしてその文字列を取得するためのarduinoのコード:
char inputBuffer[10];
void setup() {
Serial.begin(9600);
}
void loop() {
while (true)
{
if (Serial.available() > 0) {
Serial.readBytes(inputBuffer, Serial.available());
delay(5000);
Serial.print("I got this ->");
Serial.print(inputBuffer);
Serial.println("<-");
}
}
}
while(true)はテスト用です。何も印刷されず、どこに問題があるのかわかりません。私はarduinoとJavaここにあるすべての投稿を見てきましたが、役立つものは何も見つかりません。助けてくれてありがとう、そしてそれが愚かな質問なら申し訳ありません、これの初心者です
RXTXcomm.jarを使用しています。バージョン:RXTX-2.2-20081207
解決しました。 Javaコードでポートを開いた後、Thread.sleep(4000)
を入れて、動作するようになりました。問題は、ポートを開くたびにArduinoがリセットされるため、送信していましたArduinoが聞く準備ができていなかったときのデータ。
char inputBuffer[10];
void setup()
{
Serial.begin(9600);
}
void loop()
{
while (true)
{
if (Serial.available() > 0)
{
Serial.readBytes(inputBuffer, 10);
delay(5000);
Serial.print("I got this ->");
Serial.print(inputBuffer);
Serial.println("<-");
}
}
}
Java-Arduino通信ライブラリを使用できます。ここで見つけることができます: https://sourceforge.net/projects/javaarduinolibrary/ 。 (必ず両方のjarファイルをダウンロードしてください)すると、コードは次のようになります。
import arduino.*;
class JavaArduinoComm {
public static void main(String[] args) {
Arduino obj = new Arduino('PortDescription', BAUD_RATE);
obj.openConnection();
}
}
次に、次のいずれかの方法を使用できます。