ฟังก์ชั่นแบบอะซิงโครนัสเรียกใช้ในร่าง Arduino


14

ในร่าง Arduino มีวิธีที่จะทำให้ฟังก์ชั่นแบบอะซิงโครนัสเรียกภายในลูปหรือไม่? ชอบฟังคำขอผ่าน HTTP Server และประมวลผลพวกเขาในไม่ปิดกั้นทาง


1
หากคุณไม่ใช่ผู้เริ่มต้นใช้งาน C ++ คุณสามารถดู Cosa library ( github.com/mikaelpatel/Cosa ) มันเป็นการเขียนที่สมบูรณ์ของไลบรารี Arduino เพื่อทำให้ดีขึ้น: OOP และขับเคลื่อนโดยขัดจังหวะโดยทั่วไป ฉันคิดว่าพวกเขาสนับสนุน HTTP แต่ฉันยังไม่ได้ตรวจสอบส่วนนั้น
jfpoilpret

คำตอบ:


11

ใช่และไม่. คุณค่อนข้างคลุมเครือกับสิ่งที่คุณต้องการจะทำ ฉันได้ทำสิ่งนี้ลงในบางส่วนที่แตกต่างกัน (ส่วนใหญ่เน้นที่การอ่านข้อมูลเซ็นเซอร์ ... มันใช้กับทุกอย่าง แต่นั่นคือบริบทที่ฉันใช้):

หัวข้อ

AFAIK ทุก Arduinos มีเพียงแกนเดียว (พวกเขาสามารถทำสิ่งหนึ่งได้ในครั้งเดียว) สำหรับบอร์ด Arduino ส่วนใหญ่ไม่รองรับมัลติเธรดฮาร์ดแวร์ แต่มีวิธีการที่จะใช้ซอฟต์แวร์แบบมัลติเธรด วิธีการโดย AsheeshR จะไม่ทำงานได้ดีสำหรับฟังก์ชั่นที่ใช้เวลานานในการทำให้เสร็จสมบูรณ์ (เช่นบางสิ่งในห้องสมุดที่ใช้เวลาสักครู่หรือล่าช้า) เพราะมันจะติดขัดโดยคำแนะนำเหล่านั้น แต่มันจะทำงานได้ดีในระยะสั้น pinMode()ฟังก์ชั่นเช่น ห้องสมุด Protothreads ที่อยู่ในรายการอาจดีกว่านี้ แต่ฉันไม่รู้จริงๆ

มันยากที่จะประสานงานกับ HTTP โดยเฉพาะอย่างยิ่งเมื่อคุณต้องทำ

ความล่าช้า

วิธีทั่วไปสำหรับการร่างภาพไปยังแผงลอยคือการใช้ความล่าช้า สิ่งนี้สามารถแก้ไขได้โดยใช้ในลูป main คำสั่ง if และmillis()ฟังก์ชันที่ส่งคืนเวลา (ไม่ใช่เวลานาฬิกา แต่เป็นเวลานับตั้งแต่ Arduino เริ่มต้น) คุณสามารถทำลูปภายในลูปเพื่อสำรวจข้อมูลเซ็นเซอร์ได้

millis()วิธีการจะทำงานได้ไม่ดีกับสิ่งที่ทำให้โปรแกรมทั้งคอก (เช่นเพิ่มเติมความล่าช้าหรือลูปที่ผ่านมาเป็นจำนวนเงินที่เห็นได้ชัดของเวลา) โปรดทราบว่า 100ms IIRC เป็นเวลาสูงสุดทั่วไปในการสร้าง UI ที่ไม่ล่าช้า

ขัดจังหวะ

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


เท่าที่คุณเป็นเช่นนั้นส่วนของเธรดจะเหมาะสมที่สุด หัวข้อนี้ค่อนข้างคลุมเครือดังนั้นคุณต้องทดลองกับบางสิ่งและค้นหาสิ่งที่ใช้ได้


3

ฉันเพิ่งโพสต์โค้ดสำหรับตัวจัดตารางงานบนสนามเด็กเล่นในวันอื่น ๆ คุณอาจต้องการแอบดูบางทีคุณอาจปรับให้เข้ากับความต้องการของคุณ

โปรเซสเซอร์ของ Arduino นั้นเป็นแบบเธรดเดียวและไม่สามารถทำงานหลายอย่างได้ ดังที่ได้กล่าวมาแล้วอย่างไรก็ตามมีวิธีในการสร้างภาพลวงตาของการทำงานหลายอย่าง Annonomus Penguin เป็นเกมที่ยอดเยี่ยมมาก

ตรวจสอบTimerOne ด้วย (น่าจะดีกว่า)


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