ในร่าง Arduino มีวิธีที่จะทำให้ฟังก์ชั่นแบบอะซิงโครนัสเรียกภายในลูปหรือไม่? ชอบฟังคำขอผ่าน HTTP Server และประมวลผลพวกเขาในไม่ปิดกั้นทาง
ในร่าง Arduino มีวิธีที่จะทำให้ฟังก์ชั่นแบบอะซิงโครนัสเรียกภายในลูปหรือไม่? ชอบฟังคำขอผ่าน HTTP Server และประมวลผลพวกเขาในไม่ปิดกั้นทาง
คำตอบ:
ใช่และไม่. คุณค่อนข้างคลุมเครือกับสิ่งที่คุณต้องการจะทำ ฉันได้ทำสิ่งนี้ลงในบางส่วนที่แตกต่างกัน (ส่วนใหญ่เน้นที่การอ่านข้อมูลเซ็นเซอร์ ... มันใช้กับทุกอย่าง แต่นั่นคือบริบทที่ฉันใช้):
AFAIK ทุก Arduinos มีเพียงแกนเดียว (พวกเขาสามารถทำสิ่งหนึ่งได้ในครั้งเดียว) สำหรับบอร์ด Arduino ส่วนใหญ่ไม่รองรับมัลติเธรดฮาร์ดแวร์ แต่มีวิธีการที่จะใช้ซอฟต์แวร์แบบมัลติเธรด วิธีการโดย AsheeshR จะไม่ทำงานได้ดีสำหรับฟังก์ชั่นที่ใช้เวลานานในการทำให้เสร็จสมบูรณ์ (เช่นบางสิ่งในห้องสมุดที่ใช้เวลาสักครู่หรือล่าช้า) เพราะมันจะติดขัดโดยคำแนะนำเหล่านั้น แต่มันจะทำงานได้ดีในระยะสั้น pinMode()
ฟังก์ชั่นเช่น ห้องสมุด Protothreads ที่อยู่ในรายการอาจดีกว่านี้ แต่ฉันไม่รู้จริงๆ
มันยากที่จะประสานงานกับ HTTP โดยเฉพาะอย่างยิ่งเมื่อคุณต้องทำ
วิธีทั่วไปสำหรับการร่างภาพไปยังแผงลอยคือการใช้ความล่าช้า สิ่งนี้สามารถแก้ไขได้โดยใช้ในลูป main คำสั่ง if และmillis()
ฟังก์ชันที่ส่งคืนเวลา (ไม่ใช่เวลานาฬิกา แต่เป็นเวลานับตั้งแต่ Arduino เริ่มต้น) คุณสามารถทำลูปภายในลูปเพื่อสำรวจข้อมูลเซ็นเซอร์ได้
millis()
วิธีการจะทำงานได้ไม่ดีกับสิ่งที่ทำให้โปรแกรมทั้งคอก (เช่นเพิ่มเติมความล่าช้าหรือลูปที่ผ่านมาเป็นจำนวนเงินที่เห็นได้ชัดของเวลา) โปรดทราบว่า 100ms IIRC เป็นเวลาสูงสุดทั่วไปในการสร้าง UI ที่ไม่ล่าช้า
การขัดจังหวะเป็นวิธีที่ดีในการเก็บสิ่งต่าง ๆ เกือบไม่ตรงกัน พวกเขาเรียกใช้โค้ดสั้น ๆ (ที่คุณระบุ) ทุกครั้งที่มีการเปลี่ยนแปลงสถานะพิน มันแตกออกจากloop()
และกลับไปยังตำแหน่งเดิมเมื่อ " ISR " ถูกเรียกใช้ ฉันไม่มีเวลามากพอที่จะอธิบายวิธีการทำเช่นนี้ แต่การค้นหาโดย Google อย่างรวดเร็วจะให้ผลลัพธ์จำนวนมาก
เท่าที่คุณเป็นเช่นนั้นส่วนของเธรดจะเหมาะสมที่สุด หัวข้อนี้ค่อนข้างคลุมเครือดังนั้นคุณต้องทดลองกับบางสิ่งและค้นหาสิ่งที่ใช้ได้
ฉันเพิ่งโพสต์โค้ดสำหรับตัวจัดตารางงานบนสนามเด็กเล่นในวันอื่น ๆ คุณอาจต้องการแอบดูบางทีคุณอาจปรับให้เข้ากับความต้องการของคุณ
โปรเซสเซอร์ของ Arduino นั้นเป็นแบบเธรดเดียวและไม่สามารถทำงานหลายอย่างได้ ดังที่ได้กล่าวมาแล้วอย่างไรก็ตามมีวิธีในการสร้างภาพลวงตาของการทำงานหลายอย่าง Annonomus Penguin เป็นเกมที่ยอดเยี่ยมมาก
ตรวจสอบTimerOne ด้วย (น่าจะดีกว่า)