ArduinoTutorial

ส่งข้อมูล Float ผ่าน Serial เขาทำอย่างไง

By May 21, 2014 May 12th, 2015 One Comment

Update เทคนิดการส่งข้อมูล (แบบเบาๆ) สักนิดหนึ่ง ผมจะพยายามส่งค่าอุณหภูมิ และ ค่าความชื้น แบบ floating ผ่านทาง Serial  ไปยังไมโคร คอนโทรเลอร์ อีกตัวหนึ่ง ผมคิดว่าคงมีใครเจอปัญหาแบบนี้บ้างล่ะ และ วิธีที่เขานิยมทำแบบไหนดี

ก่อนอื่นต้องทำความเข้าใจก่อน ค่าตัวแปร float จะมีขนาด 4  byte แต่ส่งข้อมูลส่งได้ที่  byte ทั้งนั้น จึงมีเทคนิค  การ unpack ค่า float เป็น char และ อีกฝ่าย ต้อง  pack  char ให้กลับมา เป็น float

อันนี้เป็น หนึ่งในตัวอย่างที่เขา นิยมใช้กันนะครับ คือประกาศตัวแปร แบบ union ขึ้นมา ให้มีทั้ง uint8_t  4 byte  และ มี float จากนั้น วิธีการแปลง ก็ง่าย แค่เอาค่า float ใส่ ดึงค่า uint8 มาใช้เลย อะไรจะง่ายขนาดนั้น เอาไปลองใช้กันดู

// union to convert float to byte string
union Data {
   uint8_t b[4];
   float fval;
};

void setup() {
   union Data x,y;
   Serial.begin(9600);

   float h = 1.1;

   Serial.print(h);
   Serial.println();

   x.fval = h;
   for (int i=0;i<4;i++){
      y.b[i]=x.b[i];
      Serial.print(x.b[i],DEC);
      Serial.print(",");
   }

   Serial.println();
   Serial.println(y.fval);

}

void loop() {

}

One Comment

Leave a Reply