我正在創建一個獲取串行輸入的程序,將其轉換爲int,然後將引腳設置爲HIGH,但輸入時間長,例如,如果我向Arduino打印「9000」串口將引腳13設置爲高電平9000毫秒。但是,它在連接開始時將引腳設置爲高電平以進行初始「握手」。有什麼方法可以消除這種情況,或者反擊它?消除Arduino串行噪聲
這裏是我當前的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
delay(4000);
digitalWrite(Relay, HIGH);
delay(time);
digitalWrite(Relay, LOW);
}
}
}
如果有什麼辦法可以讓我知道我怎麼能這樣做呢?
謝謝:)
編輯1:
int Relay = 13;
//The pin that the relay is attached to
int time;
byte byte_1;
byte byte_2;
//Creates temp variable
void setup() {
pinMode(Relay, OUTPUT);
//Initialize the serial communication:
Serial.begin(9600);
digitalWrite(Relay, LOW);
delay(250);
}
void loop() {
//Check if data has been sent from the computer:
if (Serial.available() == 2) {
byte_1 = Serial.read();
delay(100);
byte_2 = Serial.read();
}
if(byte_1 == 16) {
digitalWrite(Relay, HIGH);
delay(byte_2);
digitalWrite(Relay, LOW);
}
byte_1 = 0;
byte_2 = 0;
}
編輯3:
package net.arduino;
import java.io.OutputStream;
import gnu.io.CommPort;
import gnu.io.CommPortIdentifier;
import gnu.io.SerialPort;
public class Main {
public static void main(String[] args) throws Exception {
CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier("COM3");
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(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
OutputStream out = serialPort.getOutputStream();
byte[] buffer = new byte[2];
buffer[0] = (byte) 16;
buffer[1] = (byte) 1000;
out.write(buffer);
out.flush();
Thread.sleep(10000);
out.close();
}else{
System.out.println("ERROR!!! -- This is not normal");
}
}
}
}
你應該能夠公正'digitalWrite(繼電器,LOW);'你的設置()。在將它設置爲輸出之前,甚至可能會這樣做。通過主機操作系統配置(空閒時控制線的狀態),通過禁用串行命令復位,更改引導加載程序立即將信號驅動爲低電平,或者甚至通過禁用復位線保險絲(儘管這會使你的程序變得很難並且很難解開)。如果信號的錯誤設置具有負面現實世界的後果,您可能需要更安全的設計。 –