我想在Arduino上接收一个字节数组,这些字节是由Java发送的。我知道Java代码有效,因为我已经在另一个arduino项目中尝试过它,但是我为此失去了arduino代码,无法再次使用它。如果有帮助的话,我的董事会是Uno。即使不是一个完整的程序,任何提示也会有所帮助。
我已经尝试了几种方法对其进行编码。我知道我使用了SerialEvent()。
这是我的arduino程序的Java代码和最后一次迭代。问题在于SerialEvent似乎没有触发,因为黄色的LED从未按预期点亮。
public static void main(String[] args) throws IOException, InterruptedException{
SerialPort sp = SerialPort.getCommPort("COM3");
sp.setComPortParameters(9600, 8, 1, 0);
sp.setComPortTimeouts(SerialPort.TIMEOUT_WRITE_BLOCKING, 0, 0);
if(sp.openPort()) {
System.out.println("Port is open");
}else {
System.out.println("Port failed to open");
return;
}
byte[] message = {65, 66, 65};
sp.getOutputStream().write(125); //Triggers serialEvent on Arduino
sp.getOutputStream().flush();
Thread.sleep(2000); //Waits for serialEvent to Trigger
for(int i = 0; i < message.length; i++) {
sp.getOutputStream().write(message[i]); //Sends the message
sp.getOutputStream().flush();
Thread.sleep(100);
}
sp.getOutputStream().write(126); // Tells the Arduino the whole
message is sent
sp.getOutputStream().flush();
//I did everything needed to close the port etc, but didin't put it to
reduce the amount of code
// Arduino代码:
byte message[200];
int GREEN = 4;
int BLUE = 3;
int YELLOW = 2;
void setup() {
byte message[200];
Serial.begin(9600);
Serial.setTimeout(20000);
while(!Serial);
}
void loop() {
}
void SerialEvent(){
digitalWrite(YELLOW, HIGH);
int i = 0;
delay(2000);
while(Serial.available()){
byte tmpByte = (byte)Serial.read();
if(tmpByte != 126){
message[i] = tmpByte;
i++;
}else{
digitalWrite(YELLOW, LOW);
ExecuteAlg(message); //Function that works correctly
}
}
}
Arduino应该将接收到的数据放入字节数组中。
感谢您的帮助。 如果您需要更多信息,请问,这是我的第一个问题,我不知道确切输入什么
答案 0 :(得分:0)
您的代码无法正常工作的原因是您编写了如下的串行事件函数
void SerialEvent(){
代替
void serialEvent(){
具体来说,第一个字符应该是小写字母。 检查串行事件文档以获取更多信息 https://www.arduino.cc/en/Tutorial/SerialEvent