• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
UART, komunikacja pomiędzy dwoma Arduino.
#11
@Scislov bo to działa teraz tak, że gdy w miejscu ifa w buforze znajdują się 2 znaki, w czasie ich odczytu może doleci jeszcze jeden, odczytujesz te 3 i od razu drukujesz. Powinieneś zbierać te znaki aż uzbierasz tyle ile potrzebujesz i wydrukować je np. raz na 100ms lub po spełnieniu warunku ilości i zacząć zbierać od nowa.
Tu jest przykład jak używam SerialEvent: https://forum.arduinopolska.pl/watek-ser...nie-danych, kluczowy jest znak '\n' nowej linii, który oznacza zakończenie odbioru linii tekstu, po tym zabawa zaczyna się od nowa, wiadomo, że po tym będzie nowa linia, można zacząć zbierać od nowa.
@Agregacik raczej robiłem to na Serial1 Arduino Micro i Leonardo, być może na UART udawanym z USB to nie działa, ale zawsze można zostawić sobie taką funkcję i po prostu wrzucić ją do loop. Tak zrobiłem w ESP8266, który też nie wywołuje sam SerialEvent. Można to oczywiście zrobić inaczej, ale skoro już miałem gotową i była to kwestia dodania jednej linijki do loop to poszedłem na łatwiznę.
Dla pewności sprawdziłem, na Serial1 działa, na Serial (USB) musi być w loop:
Kod:
String inputString = "";         // a String to hold incoming data
bool stringComplete = false;  // whether the string is complete
String inputString1 = "";         // a String to hold incoming data
bool stringComplete1 = false;  // whether the string is complete

void setup() {
  // initialize serial:
  Serial.begin(115200);
  Serial1.begin(115200);
  // reserve 200 bytes for the inputString:
  inputString.reserve(200);
  inputString1.reserve(200);
}

void loop() {
   serialEvent();
  // print the string when a newline arrives:
  if (stringComplete) {
    Serial1.println(inputString);
    // clear the string:
    inputString = "";
    stringComplete = false;
  }

    if (stringComplete1) {
    Serial.println(inputString1);
    // clear the string:
    inputString1 = "";
    stringComplete1 = false;
  }
}

/*
  SerialEvent occurs whenever a new data comes in the hardware serial RX. This
  routine is run between each time loop() runs, so using delay inside loop can
  delay response. Multiple bytes of data may be available.
*/
void serialEvent1() {
  while (Serial1.available()) {
    // get the new byte:
    char inChar = (char)Serial1.read();
    // add it to the inputString:
    inputString1 += inChar;
    // if the incoming character is a newline, set a flag so the main loop can
    // do something about it:
    if (inChar == '\n') {
      stringComplete1 = true;
    }
  }
}

void serialEvent() {
  while (Serial.available()) {
    // get the new byte:
    char inChar = (char)Serial.read();
    // add it to the inputString:
    inputString += inChar;
    // if the incoming character is a newline, set a flag so the main loop can
    // do something about it:
    if (inChar == '\n') {
      stringComplete = true;
    }
  }
}
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
  


Wiadomości w tym wątku
RE: UART, komunikacja pomiędzy dwoma Arduino. - przez kaczakat - 20-08-2019, 23:12

Skocz do:


Przeglądający: 1 gości