คอนไพล์ผ่านแต่ใช้งานไม่ได้ ESP32

ตอนนี้ เชื่อมได้หรือยังครับสรุปหน่อย มีข้อสงสัยก็ถามได้เลยครับ อาจจะตอบช้า บ้างเร็วบ้าง เพราะผมก็ทำงานประจำเหมือนกัน 5555

เป็นเหมือน task นั้นละครับ แต่มันจะทำงานบน core เดียวกัน ไม่ได้แยกอิสระเหมือนการใช้คำสั่ง Task ตัวเลขที่กำหนดอยู่ท้ายคำสั่งคือการ กำหนดให้ฟังก์ชันนั้นๆ ทำงานทุกๆ กี่วินาที

ต้องดูว่าปุ่ม v7 กำหนดเป็นอะไรครับ

ถ้าอยากให้ติดค้าง เลือกไปที่ sw ถ้าเป็น push ก็เหมือนกดติดปล่อยดับครับ ทำงานครั้งเดียว

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

ส่วนปัญหา sw V7 คือผมทำเป็น แบบ sw แล้วครับแต่มันกลับไม่ยอมติดค้างครับ ควรแก้ไขอย่างไรครับ


อยากรู้ว่าตอน LED มัน off มันส่งข้อความนี้เข้า line รึป่าวครับ

image

ถ้าไม่แน่ใจใส่คำสั่ง print ออกมาดูหน่อย

เท่าที่ดูแล้วน่าจะไม่เข้า แต่มันไปเข้าสอง task นี้แทน led มันเลย off

ส่วนเรื่องความเสถียรนั้นวัดกันที่ การทำงานจริงครับ ถ้าเอามันลองรันได้ยาวๆ ไม่รีเซตบ่อยๆ ทำงานได้ปกติ ก็โอเคแล้วครับ

อ้อเข้าใจแล้วครับ ขอบคุณครับ
ใช่ครับไม่มีการสั่งหยุดทำงานครับ ถ้าไม่ได้กดปิดครับ มันไปเข้าคำสั่งใน void task1 จริงๆครับ

ตอนนี้อยากเพิ่ม sw ภายนอกแบบกดเปิด กดปิด ควรเพิ่งฟังก์ชั่นไว้ส่วนไหนดีครับ

ก็ใส่ไว้ใน void loop เลยครับ

ถ้าเราจะเอาค่าในฟังก์ชั่น :point_down:t2:

image

ไปดักใน else if (…) ของฟังก์ชั่น :point_down:t2:

ต้องใช้ค่าตัวไหนไปดักไม่ให้มันสั่งดับครับ

เอาไปดักได้ครับ แต่มันจะเข้าไปกวนการทำงานของ task ให้ทำงานผิดจากเดิม เพราะมันเกิดจากฟังก์ชันอื่น

แนะนำให้เอาอัลกอลิทึมนี้ไปประยุกค์ใช้ครับ

เอาเฉพาะชุดนี้มาใส่ใน task

จากนั้นใน else { }

ให้เพิ่ม

 if (lock == true) {
LED.off();
lock = false;
}

เข้าไป ความหมายคือ ให้มันทำงานใน if บนก่อน เมื่อทำแล้ว ค่อยมาทำข้างล่าง มันจะล๊อกเฉพาะคำสั่งที่เราต้องการ เพราะจริงๆ ถ้ามันยังไม่ on มันก็ไม่จำเป็นต้องสั่งให้มัน off

นำมาใส่ใน task นี่คือ หมายถึง void task1 ที่ผมสร้างขึ้นมาใช่ไหมครับ

https://scontent.fbkk13-1.fna.fbcdn.net/v/t1.15752-9/74582178_3047327432160079_7307332541369810944_n.jpg?_nc_cat=108&_nc_oc=AQkywhbp-LwsfGMJZLnsORZkXtgL9lnhf-PmY7UBjinedTb9ZVRNxnfu2ds9w8URVfk&_nc_ht=scontent.fbkk13-1.fna&oh=93f56d582d593b03fbb9cbf9f0386345&oe=5E50F0EF

ทั้งสอง task เลยครับ น่าจะ หลุดทั้งสอง task เลย วิธีใส่ก็ นับจาก if else วงนอกสุดเป็นหลัก ดู ตย ที่ผมลงให้

แบบนีหรอครับ ขอโทษนะครับ ผมงง
ปล. ในความคิดผมที่ไม่อยากให้ V9 กับ V13 ( LED ใน Blynk ) ดับหลังกดสวิชเปิด เพราะว่ากลัว relay ที่สั่งให้ทำงานพร้อมกันหลังกดให้มีค่าเป็น 1 จะดับไปด้วยนะครับ พี่เข้าใจผมนะครับ

https://scontent.fbkk12-4.fna.fbcdn.net/v/t1.15752-9/73425126_461271977825897_9109349300915142656_n.jpg?_nc_cat=103&_nc_oc=AQm5hM2fsGYG3xnofryBSdAfh305GP4rNbrZ_qh1hjx_t-MhYpHppf7_h917XxW56vQ&_nc_ht=scontent.fbkk12-4.fna&oh=b0fdf4fc14d394442a91f8ea40236935&oe=5E5DE6AB
https://scontent.fbkk12-1.fna.fbcdn.net/v/t1.15752-9/74958171_682209445635216_4520405160089878528_n.jpg?_nc_cat=101&_nc_oc=AQnL7qp0OeElRNAij1tmC7NhE0AYkCd37WZTmcmHfr-bMy2m0cnFK4-oUPjWbK8vbS0&_nc_ht=scontent.fbkk12-1.fna&oh=f38b3c3cba1cdb3922b26cbb5c68a455&oe=5E646AF0

ที่กำลังทำกันอยู่นี้ก็เป็นการไม่ให้ led ดับตอนกดเปิดไงครับ เพราะ ใน task ทั้งสองมีสถานะเป็น false อยู่มันเลยวิ่งเข้าไปที่ else{ } ซึ่ง else มีคำสั่ง ให้ led off อยู่ แล้วมันก็วิ่งผ่านคำสั่ง led off อยู่ตลอดเวลา

วิธีที่การที่จะให้ทำคือ การ lock ไม้ให้ คำสั่ง led off ทำงานตลอด ให้ครอบ if เฉพาะ คำสั่ง led off เท่านั้นครับ คำสั่งอื่นเราไม่ได้สนใจ ลองไล่ ลอจิกดูเอาให้เข้าใจก่อนว่าใส่ไปทำไม

แต่ว่ามีปัญหาใหม่ครับพี่ ขอรบกวนอีกหน่อยนะครับ

คือเมื่อ ความชื้น หรือ อุณหภูมิ สูงเกินตามที่กำหนด relay จะทำงาน และเมื่อความชื้น หรือ อุณหภูมิ ลดลงถึงตามที่กำหนด LED ยังติดต่อไปไม่ยอมหยุดครับ ต้องกด sw ปิดเอง ถึงจะดับครับ

ได้แล้วครับ ขอบคุณครับ

แก้ไขด้วยวิธีไหนแชร์ไอเดียร์ หน่อยนะครับ จะได้เคลียร์ ปัญหาขั้นสุด และปิดประเด็นกระทู้นี้ ครับ

แก้ไขตามที่พี่บอกเลยครับ เอา lock ไปใส่ครับ ได้ผลตามที่บอกเลยครับ led ไม่ดับถ้าเราไม่กดครับ
ส่วนเรื่องที่ผมบอกว่า

"แต่ว่ามีปัญหาใหม่ครับพี่ ขอรบกวนอีกหน่อยนะครับ คือเมื่อ ความชื้น หรือ อุณหภูมิ สูงเกินตามที่กำหนด relay จะทำงาน และเมื่อความชื้น หรือ อุณหภูมิ ลดลงถึงตามที่กำหนด LED ยังติดต่อไปไม่ยอมหยุดครับ ต้องกด sw ปิดเอง ถึงจะดับครับ"

เนื่องจากตอนแรกผมเอา bool lock = false; ไปไว้ในฟังก์ชั่นของ viod task1() ครับ ระบบจึงน่าจะเข้าใจผิด ผมเลยย้ายไปไว้ใน void setup() ครับ ตอนนี้ระบบทำงานได้ปกติเลยครับ ถึง ความชื้น หรือ อุณหภูมิ ตามที่กำหนด relay ก็หยุดการทำงานครับ ขอบคุณมากครับ

1 Likes

เยี่ยมครับ ไหวพริบดีมาก พื้นฐานดีก็คุยกันง่ายหน่อย มีความรู้หรือเทคนิกดีๆ ก็เอามาแชร์กันนะครับ

1 Likes