hu:arduino:serial_conv

Differences

This shows you the differences between two versions of the page.

hu:arduino:serial_conv [2019/11/28 20:47]
hu:arduino:serial_conv [2022/04/21 15:02] ()
 1:  1:
 +====== 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ó: 
  
 +{{:hu:arduino:arduino_arduino_serial.png?400|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.
 +
 +===== Mérés küldése =====
 +
 +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:
 +<code c>
 +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
 +}
 +</code>
 +A konverziókhoz segítséget adhat a [[hu:arduino:var_conv|konverziós fejezet]].
 +
 +===== Telegramm fogadása =====
 +A lenti program MEGA-ra íródott, egyidejűleg több serial-t is használ.
 +<code c>
 +
 +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); 
 +}
 +</code>