Как отправить серийные данные с событиями? - PullRequest
0 голосов
/ 04 апреля 2019

Я заставляю двух arduino общаться через Serial. Это работает, но есть структурная проблема: когда я посылаю данные из одного arduino, другой не знает, что она получает ...

Можно ли добавить «заголовок» к каждому сообщению; способ правильно общаться с событиями, как вы бы сделали с сокетами или HTTP. Есть ли библиотека для этого?

Я думаю, что сериализовать и десериализовать JSON, чтобы добавить «заголовок» в данные, но это излишне ..

1 Ответ

0 голосов
/ 05 апреля 2019

Вы можете использовать что-то похожее на serial.parseint (), чтобы разбить ваши последовательные передачи, а затем искать заголовок. Если вы разделите все запятые через запятую, то вы будете знать, что первым разобранным будет заголовок. Пример arduino для разбора запятых показан ниже:

void loop() {
  // if there's any serial available, read it:
  while (Serial.available() > 0) {

    // look for the next valid integer in the incoming serial stream:
    int red = Serial.parseInt();
    // do it again:
    int green = Serial.parseInt();
    // do it again:
    int blue = Serial.parseInt();

    // look for the newline. That's the end of your sentence:
    if (Serial.read() == '\n') {
      // constrain the values to 0 - 255 and invert
      // if you're using a common-cathode LED, just use "constrain(color, 0, 255);"
      red = 255 - constrain(red, 0, 255);
      green = 255 - constrain(green, 0, 255);
      blue = 255 - constrain(blue, 0, 255);

      // fade the red, green, and blue legs of the LED:
      analogWrite(redPin, red);
      analogWrite(greenPin, green);
      analogWrite(bluePin, blue);

      // print the three numbers in one string as hexadecimal:
      Serial.print(red, HEX);
      Serial.print(green, HEX);
      Serial.println(blue, HEX);
    }
  }
}

После получения заголовка вы можете выполнить оператор switch (), чтобы проверить регистр: например,

while (Serial.available() > 0) {
     int header = Serial.parseInt();
     ...
     switch (header){
         case header1:
           code here...
           break;
         case header2:
           code here...
           break;
         default:
           break;
    }



...