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 ต้องเขียนโค้ดยังไงคะ