将字符串从Java发送到Arduino(简单示例)

将字符串从Java发送到Arduino(简单示例),java,serial-port,arduino,Java,Serial Port,Arduino,问题解决了。我放了一个线程。sleep(4000)在java代码中打开端口后,现在可以工作了。问题是每次打开端口时arduino都会重置。当我发送数据时,arduino没有准备好倾听 char inputBuffer[10]; void setup() { Serial.begin(9600); } void loop() { while (true) { if (Serial.available()

问题解决了。我放了一个
线程。sleep(4000)在java代码中打开端口后,现在可以工作了。问题是每次打开端口时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("<-");
          }
     }
}
我对arduino和Java还不熟悉,但我做了一个非常简单的程序,我不明白为什么它不工作

我向与arduino(COM5)对应的串行端口发送一个字符串:

以及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("<-");
      }
    }
}
char输入缓冲区[10];
无效设置(){
Serial.begin(9600);
}
void循环(){
while(true)
{
如果(Serial.available()>0){
Serial.readBytes(inputBuffer,Serial.available());
延迟(5000);
Serial.print(“我得到了这个->”;
串行打印(输入缓冲区);

Serial.println(“问题解决了。在java代码中打开端口后,我放了一个
线程.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("<-");
          }
     }
}
char输入缓冲区[10];
无效设置()
{                
Serial.begin(9600);
}
void循环()
{
while(true)
{
如果(Serial.available()>0)
{
串行读取字节(inputBuffer,10);
延迟(5000);
Serial.print(“我得到了这个->”;
串行打印(输入缓冲区);

Serial.println(“您可以使用Java Arduino通信库。它可以在这里找到:。(请确保下载两个JAR)然后您的代码将如下所示:

import arduino.*;
class JavaArduinoComm {
        public static void main(String[] args) {
        Arduino obj = new Arduino('PortDescription', BAUD_RATE);
        obj.openConnection();
    }
}
然后,您可以使用以下任一方法:

  • String serialRead(int limit)-返回一个字符串,该字符串包含与limit值一样多的读数。建议读取
  • void serialWrite(String s)-一次将整个字符串的内容写入序列。作为字符串写入序列
  • void serialWrite(String s,int noOfChars,int delay)-将字符串的内容逐渐写入序列。它以递增的方式写入字符串,每次使用“noOfChars”字符,每次写入之间有一个“delay”毫秒的暂停。作为字符串写入序列。建议写入字符串
  • void serialWrite(char c)-将单个字符写入数据类型char中的序列
  • void serialWrite(char c,int delay)-将单个字符写入数据类型char中的串行,并在之后将线程暂停延迟毫秒。建议写入字符

  • 你能告诉我们哪个库(及其版本)吗您正在用于串行I/O?您确定要打开COM5吗?您确定在获取outputstream后可以更改serialPort参数吗?我使用RXTXcomm.jar。版本:RXTX-2.2-20081207。我放置了跟踪,我确定它打开了COM5,并且它更改了serialPort参数。我发现了这个示例,可能有助于在获取数据之前放置serialPort参数输出流。仍然不工作。但是感谢您的支持observation@takluiper将您在问题中编辑的解决方案作为答案发布,并接受它,这样这个问题就不会显示为未回答。谢谢,干杯!