Arduino在获取串行数据时遇到麻烦

时间:2020-06-04 13:30:23

标签: java arduino serial-port

对于一个学校项目,我目前正在尝试构建自动售货机。手术的大脑是我的笔记本电脑,它使用arduino控制硬件。

我正在使用以下代码触发自动售货机:

public class App {
    public App() {

    }

    public static void main(String[] args) {
        System.out.println("Hoi!");
        SerialPort comPort = SerialPort.getCommPorts()[0];
        comPort.openPort();
        comPort.setComPortTimeouts(SerialPort.TIMEOUT_READ_SEMI_BLOCKING, 0, 0);
        InputStream in = comPort.getInputStream();
        OutputStream out = comPort.getOutputStream();

        try {
            out.write('g');
        } catch (Exception e) {
            e.printStackTrace();
        }
        try {
            Thread.sleep(100);
        } catch (InterruptedException ex) {
            Thread.currentThread().interrupt();
        }
    }
}

以及arduino中的以下代码:

#include <Stepper.h>

const int stepsPerRev = 2048;
Stepper motor1(stepsPerRev, 8, 9, 10, 11);
char derp;
void setup() {
 Serial.begin(9600);
 Serial.println("Start");
  motor1.setSpeed(6);
}

void loop() {
  if (Serial.available() > 0) {
    derp = Serial.read();
  }
  else {
    derp = 'k';
  }
  if(derp == 'g'){
    motor1.step(stepsPerRev);
  }
  delay(100);
}

不幸的是,这似乎不起作用。当我将out.write放置在while(true)块中时,它似乎确实起作用。但这会触发无限量的贩售。

有什么主意我可以做得更好吗?

1 个答案:

答案 0 :(得分:0)

我找到了自己的答案。

打开串行端口后,Arduino自动重置。这意味着Java程序需要等待几秒钟才能尝试写入串行端口。