对于一个学校项目,我目前正在尝试构建自动售货机。手术的大脑是我的笔记本电脑,它使用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)块中时,它似乎确实起作用。但这会触发无限量的贩售。
有什么主意我可以做得更好吗?
答案 0 :(得分:0)
我找到了自己的答案。
打开串行端口后,Arduino自动重置。这意味着Java程序需要等待几秒钟才能尝试写入串行端口。