ฟังก์ชัน Serial.readBytesUntil() ในการเขียนโปรแกรม Arduino

Fangkchan Serial Readbytesuntil Ni Kar Kheiyn Porkaerm Arduino



เมื่อพูดถึงการเขียนโปรแกรมด้วย Arduino มีฟังก์ชันมากมายที่คุณสามารถใช้เพื่อจัดการอินพุตและเอาต์พุต ฟังก์ชันหลักอย่างหนึ่งของ Arduino คือ Serial.readBytesUntil() ซึ่งทำให้คุณสามารถอ่านข้อมูลจากสตรีมได้จนกว่าจะพบอักขระที่ต้องการ ฟังก์ชันนี้ช่วยอ่านข้อมูลจากอุปกรณ์ซีเรียลจนกว่าเราจะพบข้อมูลที่ต้องการ

บทความนี้รวบรวมฟังก์ชัน 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()