อะไรคือความแตกต่างระหว่าง Software Serial Libraries ทั้งหมด? Arduino Nano ตัวไหนที่เข้ากันได้?


11

มี Software Serial Libraries มากมายมีความแตกต่างกันอย่างไร และอันไหนที่ฉันสามารถใช้ได้กับ Arduino Nano ของฉัน สำหรับ Arduino Nano Nano ของฉันฉันต้องการฮาร์ดแวร์พอร์ตอนุกรมหนึ่งพอร์ตและพอร์ตอนุกรมซอฟต์แวร์หนึ่งพอร์ตที่อัตรารับส่งข้อมูล 115200

ฉันสามารถใช้หมุดซีเรียลของ Arduino Nano ตัวใดได้บ้าง?


ฉันใช้ neoswserial กับปุ่มกด I2C แต่เมื่อฉันเพิ่มkey=getKey();GSM ของฉัน (โดยใช้พิน 2 และ 3 Arduino Uno) ไม่ได้รับ SMS ช่วยฉันด้วย.
NguyễnTrườngHải

คำตอบ:


16

คำตอบนี้แสดง 4 ตัวเลือกพื้นฐาน:

  • HardwareSerialดีที่สุดเสมอ เพียงใช้Serialตัวแปรที่กำหนดไว้ล่วงหน้า ในบาง Arduinos มีพอร์ต HardwareSerial พิเศษที่เรียกว่าSerial1, Serial2ฯลฯ Serialนาโนมีเพียง

  • AltSoftSerialที่สุดของไลบรารี่อนุกรมของซอฟต์แวร์ อนุญาตเพียงหนึ่งอินสแตนซ์และจะต้องใช้กับหนึ่งในพินจับการป้อนข้อมูล (พิน 8 & 9 สำหรับนาโน)

  • ของฉันNeoSWSerialดีที่สุดต่อไป มันทำงานได้กับสองพินใด ๆ แต่ที่อัตราบอด 9600, 19200 และ 38400

  • SoftwareSerialเป็นตัวเลือกที่แย่ที่สุด มันใช้งานได้กับสองพินใด ๆ แต่มันไม่มีประสิทธิภาพมาก มันปิดการใช้งานอินเตอร์รัปต์ตลอดเวลาที่อักขระถูกส่งหรือรับและไม่สามารถทำทั้งสองอย่างในเวลาเดียวกัน (ต่างจากตัวเลือกอนุกรมอื่น ๆ ทั้งหมด) สิ่งนี้สามารถรบกวนส่วนอื่น ๆ ของร่างของคุณการสื่อสารอุปกรณ์อื่น ๆ หรือไลบรารี

หากคุณสามารถใช้อัตราการส่งข้อมูลช้ากว่าที่คุณสามารถเก็บลายนิ้วมือของคุณในการแก้ปัญหาSerialและการใช้อย่างใดอย่างหนึ่งAltSoftSerialหรือNeoSWSerialสำหรับอุปกรณ์ของคุณ

แต่ถ้าคุณมีการใช้ 115200 Serialทางเลือกที่มีความน่าเชื่อถือเพียงอย่างเดียวคือ แม้ว่าAltSoftSerialและSoftwareSerialอนุญาตอัตรา baud เหล่านั้นพวกเขาอาจไม่สามารถส่ง / รับข้อมูลได้อย่างถูกต้อง

ในกรณีนี้ฉันขอแนะนำให้ใช้Serialสำหรับอุปกรณ์ 115200 หากคุณไม่ได้ใช้ ISP คุณจะต้องตัดการเชื่อมต่ออุปกรณ์เพื่ออัปโหลดแบบร่างใหม่ผ่าน USB

จากนั้นใช้AltSoftSerialหรือNeoSWSerialสำหรับคำสั่งการดีบักของคุณ คุณจะต้องใช้อะแดปเตอร์ TTL Serial-to-USB (aka FTDI) บนพินที่เลือกเพื่อเชื่อมต่อกับพีซี Serial Monitorหรืออื่น ๆ ที่โปรแกรมจำลอง terminalจะอ่านจากพอร์ต USB COM


AltSoftSerial เหมือนกันในด้านประสิทธิภาพและคุณสมบัติเฉพาะที่ NeoICSerial จะเพิ่มฟังก์ชันการทำงานของอะไร ฉันไม่เข้าใจอย่างถ่องแท้ github.com/SlashDevin/NeoICSerial
William Roy

2
@WilliamRoy, NeoICSerialเพียงแค่เพิ่มวิธีการในการattachInterrupt AltSoftSerialคุณอาจไม่จำเป็นต้องจัดการกับตัวละครแต่ละตัวในการขัดจังหวะ เพียงแค่ใช้AltSoftSerialและโทรavailable()และจากนั้นread()ถ้าถ่านพร้อม ในทำนองเดียวกันNeoHWSerialเพิ่มเดียวกันคุณลักษณะหลักattachInterrupt HardwareSerialอย่างไรก็ตามNeoSWSerialเป็นคลาสที่แตกต่างอย่างสิ้นเชิง (นอกจากนี้ยังมีattachInterruptคุณสมบัติ)
slash-dev

-2

ซอฟต์แวร์แบบอนุกรมเลียนแบบพอร์ตอนุกรมซึ่งแตกต่างจากพอร์ตดั้งเดิมที่มีการลงทะเบียนเพื่อบันทึกบิตทั้งหมดตามลำดับและพวกเขาตั้งค่าสถานะเพื่อเรียกลูปหลักซึ่งเป็นอนุกรมซอฟต์แวร์ไม่มีอะไรที่ ซอฟต์แวร์อนุกรมจะต้องรับบิตทั้งหมดทีละตัวดังนั้นคุณต้องอ่านพอร์ตดิจิตอลรอเวลาเฉพาะและอ่านพินดิจิตอลอีกครั้ง คุณต้องทำให้เป็น 10 เท่า (1 บิตเริ่มต้นบิตข้อมูล 8 บิตและบิตปลาย 1) เวลามีความสำคัญมาก สำหรับการใช้ซอฟต์แวร์อนุกรมคุณจำเป็นต้องกังวลเกี่ยวกับประสิทธิภาพ

คุณสามารถใช้หมุดอินเตอร์รัปต์แบบดิจิตอลสำหรับหมุด RX ได้ดังนั้นคุณจึง "เรียกว่า" ในขอบล่าง (บิตเริ่มต้น) และบิตที่ได้รับ 8 บิต


1
สิ่งนี้ไม่แม้แต่จะพยายามตอบคำถามเดิม
Edgar Bonet

1
ใช่นี่ไม่ได้พยายามตอบเควสติโอดั้งเดิมเพราะชุมชน Arduino ไม่รู้รหัสตัวเอง
rodrigo
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.