บทความนี้รวบรวมฟังก์ชัน Serial.readBytesUntil() ในเชิงลึก เราจะพูดถึงว่ามันคืออะไร ทำงานอย่างไร และครอบคลุมโค้ด Arduino ที่อธิบายวิธีการใช้งานในโค้ด Arduino
Serial.readBytesUntil()
ฟังก์ชัน Serial.readBytesUntil() เป็นส่วนหนึ่งของคลาส Arduino Serial ฟังก์ชันนี้อ่านข้อมูลจากสตรีมจนกว่าจะพบอักขระเฉพาะหรือจำนวนไบต์สูงสุด เมื่อพบอักขระหรือจำนวนไบต์สูงสุด ฟังก์ชันจะหยุดอ่านและส่งคืนข้อมูลที่อ่าน
ฟังก์ชัน Serial.readBytesUntil() จะสิ้นสุดลงเมื่อตรงตามเงื่อนไขต่อไปนี้:
- เมื่อฟังก์ชันตรวจพบอักขระเทอร์มิเนเตอร์
- ถึงความยาวบัฟเฟอร์ที่กำหนดแล้ว
- เวลาที่ตั้งไว้ผ่านไปแล้วหรือหมดเวลา
ฟังก์ชันนี้ไม่ส่งคืนอักขระเทอร์มิเนเตอร์ แต่จะส่งคืนข้อมูลจนถึงอักขระสุดท้ายก่อนเทอร์มิเนเตอร์เท่านั้น เมื่อฟังก์ชันนี้ส่งคืนค่า 0 หมายความว่าไม่พบข้อมูลที่ถูกต้อง
ไวยากรณ์
ฟังก์ชัน Serial.readBytesUntil() มีไวยากรณ์ดังต่อไปนี้:
อนุกรม. อ่านไบต์จนถึง ( ถ่าน เทอร์มิเนเตอร์, ถ่าน * กันชน, size_t ความยาว ) ;
พารามิเตอร์
ต่อไปนี้เป็นพารามิเตอร์ของฟังก์ชัน Serial.readBytesUntil():
- ตัวละครเทอร์มิเนเตอร์: อักขระที่ฟังก์ชันจะหยุดอ่าน
- กันชน: ในบัฟเฟอร์ ข้อมูลอนุกรมที่อ่านคือ ชนิดข้อมูลที่อนุญาตคืออาร์เรย์ของถ่านหรือไบต์
- ความยาว: จำนวนไบต์สูงสุดที่จะอ่าน ประเภทข้อมูลที่อนุญาตคือ นานาชาติ .
กลับ
จำนวนไบต์ที่อยู่ในบัฟเฟอร์
หมายเหตุ: ในการส่งคืนข้อมูล อักขระเทอร์มิเนเตอร์จะถูกยกเลิกโดยฟังก์ชัน Serial.readBytesUntil() จากสตรีมข้อมูล
ตัวอย่างรหัส Arduino
ต่อไปนี้รหัส Arduino อธิบายการใช้งาน Serial.readBytesUntil() การทำงาน:
เป็นโมฆะ ติดตั้ง ( ) {อนุกรม. เริ่ม ( 9600 ) ; // เริ่มต้นการเชื่อมต่อแบบอนุกรมด้วยอัตราบอด 9600
}
เป็นโมฆะ ห่วง ( ) {
บัฟเฟอร์ไบต์ [ 5 ] ; // กำหนดอาร์เรย์ไบต์เพื่อเก็บข้อมูลที่เข้ามา
นานาชาติ จำนวนไบต์ = อนุกรม. อ่านไบต์จนถึง ( ' \n ' , กันชน, 5 ) ; // อ่านข้อมูลขาเข้าจากการเชื่อมต่อแบบอนุกรมจนกว่าจะพบอักขระขึ้นบรรทัดใหม่
ถ้า ( จำนวนไบต์ > 0 ) { // ตรวจสอบว่ามีการอ่านไบต์ใดหรือไม่
อนุกรม. พิมพ์ ( 'ตัวละครที่ได้รับ: ' ) ;
อนุกรม. เขียน ( บัฟเฟอร์ numBytes ) ; // พิมพ์ข้อมูลที่ได้รับไปยังจอภาพอนุกรม
อนุกรม. พิมพ์ ( ) ;
}
}
ในฟังก์ชั่น setup() baud rate จะสร้างการสื่อสารแบบอนุกรม
ในฟังก์ชัน loop() ก่อนอื่นเราจะกำหนดอาร์เรย์แบบไบต์ที่เรียกว่า 'กันชน' . อาร์เรย์นี้จะใช้เพื่อเก็บข้อมูลขาเข้าที่อ่านจากการเชื่อมต่อแบบอนุกรม
ต่อไปเราเรียกว่า Serial.readBytesUntil() ฟังก์ชันซึ่งอ่านข้อมูลขาเข้าจากการเชื่อมต่อแบบอนุกรมจนกว่าจะพบอักขระขึ้นบรรทัดใหม่ ('\n') อาร์กิวเมนต์ถัดไปคือความยาวของบัฟเฟอร์ซึ่งจะรับข้อมูลได้สูงสุดครั้งละ 5 ไบต์
ไบต์ที่ส่งคืนจะถูกเก็บไว้ใน 'จำนวนไบต์' ตัวแปร. ในกรณีที่ข้อมูลที่ได้รับมากกว่าความยาวของบัฟเฟอร์ ข้อมูลจะถูกยกเลิกและจะถูกส่งไปในสตรีมข้อมูลถัดไป
เอาต์พุต
บทสรุป
เดอะ Serial.readBytesUntil() ฟังก์ชันในการเขียนโปรแกรม Arduino อ่านไบต์จากสตรีมอินพุตแบบอนุกรมจนกว่าจะได้รับอักขระเทอร์มิเนเตอร์ที่ระบุ ฟังก์ชันให้ไบต์ทั้งหมดที่อ่านและเก็บไว้ในบัฟเฟอร์ที่ให้มา อ่านบทความเพื่อรับข้อมูลเพิ่มเติมเกี่ยวกับฟังก์ชัน Serial.readBytesUntil()