Как получить много байтов на Arduino форме Java - PullRequest
1 голос
/ 03 апреля 2019

Я хотел бы получить массив байтов на моем Arduino, отправляемых Java. Я знаю, что код Java работает, потому что я уже пробовал его с другим проектом Arduino, но я потерял код Arduino для этого и не могу заставить его работать снова. Моя доска - Uno, если это поможет. Любой совет поможет, даже если это не полностью рабочая программа.

Я уже пробовал несколько способов его кодирования. Я знаю, что использовал SerialEvent ().

Вот код java и последняя итерация моей программы arduino. Проблема в том, что SerialEvent не срабатывает, потому что желтый светодиод никогда не включается, как должен.

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 голосов
/ 05 апреля 2019

Причина, по которой ваш код не работает, заключается в том, что вы записали функцию последовательного события следующим образом:

void SerialEvent(){

вместо

void serialEvent(){

Точнее говоря, первый символдолжен быть маленький случай.Для получения дополнительной информации обратитесь к документации по последовательным событиям https://www.arduino.cc/en/Tutorial/SerialEvent

...