ฉันมีบอร์ด Arduino ที่เชื่อมต่อกับเซ็นเซอร์ จากมอนิเตอร์อนุกรม Arduino IDE ฉันเห็นค่าที่อ่านได้เป็นส่วนใหญ่ 160, 150 เป็นต้น Arduino มี ADC 10 บิต ดังนั้นฉันจึงถือว่าช่วงการอ่านมีค่าตั้งแต่ 0 ถึง 1024
ฉันต้องการดึงข้อมูลการอ่านนั้นไปยังคอมพิวเตอร์ของฉันเพื่อที่ฉันจะได้ดำเนินการต่อไปได้ ต้องทำถึงขั้นนี้ ตอนนี้ ฉันเขียนโปรแกรม c++ เพื่ออ่านบัฟเฟอร์พอร์ตอนุกรมด้วย Windows API (DCB) ความเร็วในการถ่ายโอนของพอร์ตอนุกรมถูกตั้งค่าเป็น 115200 บนทั้ง Arduino IDE และโปรแกรม c++
ฉันจะอธิบายปัญหาของฉันก่อน: เนื่องจากฉันต้องการส่งการอ่านไปยังคอมพิวเตอร์ของฉัน ฉันคาดว่าข้อมูลจะมีลักษณะดังนี้:
124
154
342
232
...
แต่ตอนนี้ดูเหมือน
321
43
5
2
123
...
ดังที่แสดง ข้อมูลจะถูกต่อกัน ฉันรู้เพราะฉันพยายามแสดงมันด้วย[]
และข้อมูลก็ยุ่งเหยิงจริงๆ
ส่วนของรหัสที่ทำการอ่านพอร์ตอนุกรมบนคอมพิวเตอร์มีดังนี้:
// Read
int n = 10;
char szBuff[10 + 1] = {0};
DWORD dwBytesRead = 0;
int i;
for (i = 0; i < 200; i++){
{
if(!ReadFile(hSerial, szBuff, n, &dwBytesRead, NULL)){
//error occurred. Report to user.
printf("Cannot read.\n");
}
else{
printf("%s\n" , szBuff);
}
}
}
รหัส Arduino ที่ทำการส่งพอร์ตอนุกรมคือ:
char buffer [10] = { 0 };
int analogIn = 0;
int A0_val = 0;
void setup() {
Serial.begin(115200);
}
void loop() {
A0_val = analogRead(analogIn);
sprintf(buffer, "%d", A0_val);
Serial.println(buffer);
}
ฉันสงสัยว่าความยุ่งเหยิงของข้อมูลเกิดจากขนาดบัฟเฟอร์ที่แตกต่างกันที่ใช้ในการส่งและรับข้อมูลในพอร์ตอนุกรม ข้อเสนอแนะที่ดีสำหรับขนาดของบัฟเฟอร์และวิธีที่ดียิ่งขึ้นในการรับประกันการส่งข้อมูลที่ถูกต้องสำเร็จคืออะไร?
ขอบคุณมาก ๆ!