Serial írása, ovasása, konverziók

Az UNO, NANO és MINI board-okon egy-egy, a MEGA-n négy serial kommunikációs lehetőség található. A board-ok közötti legeygszerűbb kommunikációs megoldást a serial kínálja, hiszen egyszerűen keresztbe kell kötni ezeket a portokat (Tx - Rx, Rx - Tx), és már mrhet is a kommunikáció:

Arduino - Arduino UART kommunikáció

Az olyan board-okon, ahol csak egy serial csatorna van (UNO, NANO, MINI), ezt a kommunikációt letöltés előtt le kell kötni, mivel a PC-board kommunikáció is ezt a csatornát használja.
A serial UART kommunikáció, gyakorlatilag az összes tartalmat byte (illetve char) formában továbbítja. Ezt a tartalmat először össze kell rendezni és át kell konvertálni, hogy ismét - mondjuk - szöveges tartalomhoz jussunk. Ezekhez a konvertálásokhoz gyüjtöttem ide pár példaprogramot.

A mérés küldéséhez a numerikus változót először érdemes átkonvertálni char_array-be, majd azt küldeni, itt a példaprogramban egy int-et:

char str[4];
 
void setup() {
  Serial.begin(9600);
}
 
void loop() {
  int value=1234;        // a mérés eredménye
 
  itoa(value, str, 10);  // char_array-ba átkonvertálva
  Serial.write(str, 4);  // küldés
}

A konverziókhoz segítséget adhat a konverziós fejezet.

A lenti program MEGA-ra íródott, egyidejűleg több serial-t is használ.

void setup() {
  Serial.begin(9600);      // serial.monitor
  Serial1.begin(9600);     // arduino-arduino serial
}
 
void loop() {
                           // főprogram
 
  delay(100);
}
 
void serialEvent1() {           // a funkció meghívásra kerül, ha valami érkezik a serial1-en (a másik Arduino-tól)
 
  int i;                
  char data[20];
  delay(10);                    // kis idő, míg az egész telegramm bekerül a pufferbe
  i = Serial1.available();      // a pufferelt telegramm hossza 
  Serial.print("hossza: ");
  Serial.println(i);            // a telegramm hossza
  Serial1.readBytes(data, i);   // a char_array-be teljes terjedelmében beolvasásra kerül
  Serial.print("char_array: ");
  Serial.println(data);         // mehet a monitorra
 
  String eredmeny(data);        // mehet a String-be  
  Serial.print("String: ");     // monitor
  Serial.println(eredmeny); 
}