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

Posted by | May 21, 2014 | Arduino, Tutorial | No Comments
float data type

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() {

}

About chang

ชื่อ “ช้าง” ส่วนมากเขาจะเรียกว่า “พี่ช้าง” แล้ว มีความสนใจทางเทคโนโลยีทางคอมพิวเตอร์ อิเล็กทรอนิกส์ และ หุ่นยนต์ เป็นทั้งนักคิด นักประดิษฐ์ ชอบทดลองเล่น จนเดี่ยวนี้รู้สึกว่าจะเล่นมากกว่ามืออาชีพไปสักแล้ว