我正在爲我的舊學校爲他們的學校鐘聲創建一份prorgram,並且我正在使用java。目前在我的arduino上,我有一個程序,當它從串行端口收到一個數字時,它會打開鈴聲,說明它的時間長短。此程序在串行監視器中工作,但不在Java中。這些是我的2個程序:Java沒有正確發送到串行端口
import java.io.OutputStream;
import gnu.io.SerialPort;
public class Main {
public static void main(String[] args) throws Exception {
SerialPort sP = Arduino.connect("COM3");
Thread.sleep(1500);
OutputStream out = sP.getOutputStream();
Thread.sleep(1500);
out.write("3000".getBytes());
out.flush();
Thread.sleep(1500);
out.close();
}
}
和我的Arduino conenct程序;
import gnu.io.*;
public class Arduino {
public static SerialPort connect(String portName) throws Exception {
CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier(portName);
if(portIdentifier.isCurrentlyOwned()) {
System.out.println("ERROR!!! -- Port already in use!");
}else{
CommPort commPort = portIdentifier.open("XBell", 0);
if(commPort instanceof SerialPort) {
SerialPort serialPort = (SerialPort) commPort;
serialPort.setSerialPortParams(38400, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
return serialPort;
}else{
System.out.println("wait wat");
}
}
return null;
}
}
下面是Arduino的代碼:
int Relay = 13;
//The pin that the relay is attached to
int time;
//Creates temp variable
void setup() {
//Initialize the Relay pin as an output:
pinMode(Relay, OUTPUT);
//Initialize the serial communication:
Serial.begin(9600);
}
void loop() {
while(true) {
//Check if data has been sent from the computer:
if (Serial.available()) {
//Assign serial value to temp
time = Serial.parseInt();
//Output value to relay
digitalWrite(Relay, HIGH);
delay(time);
digitalWrite(Relay, LOW);
}
}
}
如果你能告訴我什麼,我做錯了,這將是非常有益的。謝謝!
你確定這個數字是否被編碼爲* text *? –
我之前就是這麼做的,但是由於硬盤驅動器故障,我丟失了該程序。 – cheese5505
對於相同的輸入?這聽起來像是通過串口傳遞數字的一種奇怪的方式......此外,您沒有指出發生了什麼問題。據推測,它不工作,但以什麼方式*它不工作?鐘不響嗎?戒指太久了?戒指太短了? –