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() { }
แล้วถ้าจะแปลงกลับจาก byte เป็น float ต้องเขียนโค้ดยังไงคะ