如何在arduino表单java上接收许多字节

时间:2019-04-02 23:31:50

标签: java arduino serial-port

我想在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应该将接收到的数据放入字节数组中。

感谢您的帮助。 如果您需要更多信息,请问,这是我的第一个问题,我不知道确切输入什么

1 个答案:

答案 0 :(得分:0)

您的代码无法正常工作的原因是您编写了如下的串行事件函数

void SerialEvent(){

代替

void serialEvent(){

具体来说,第一个字符应该是小写字母。 检查串行事件文档以获取更多信息 https://www.arduino.cc/en/Tutorial/SerialEvent