——จากฟอรัมนักพัฒนา DWIN
โครงการโอเพ่นซอร์สฟอรัมนักพัฒนา DWIN ที่แนะนำสำหรับทุกคนในครั้งนี้เป็นกิจวัตรที่น่าสนใจมากในการจำลองการเคลื่อนไหวของดวงตามนุษย์ วิศวกรใช้วัสดุสร้างภาพดวงตาของมนุษย์หลายอย่างเพื่อสร้างฟังก์ชั่นต่างๆ เช่น การเคลื่อนไหวของลูกตา การกระพริบตา การจดจำใบหน้า และการติดตาม
ข้อมูลเบื้องต้นเกี่ยวกับโซลูชันโอเพ่นซอร์ส:
1. วัสดุรูปภาพ UI
หมายเหตุบรรณาธิการ: หน้าจออัจฉริยะ DWIN ใช้รูปภาพเพื่อพัฒนา UI ให้สมบูรณ์ ซึ่งสามารถรับรู้เอฟเฟกต์การแสดงผลต่างๆ ได้อย่างง่ายดาย
2. การพัฒนาส่วนต่อประสาน
การพัฒนาอินเทอร์เฟซผ่านซอฟต์แวร์ DGUS นั้นค่อนข้างง่าย และจำเป็นต้องมีการควบคุมกราฟิกเพียงสองตัวเท่านั้น ในกิจวัตรนี้ วิศวกรเลือกหน้าจออัจฉริยะทรงกลมขนาด 2.1 นิ้ว
3. ตระหนักถึงภาพเคลื่อนไหวแบบกะพริบ
ให้แสดงภาพเปลือกตาตามลำดับ:
//ภาพเคลื่อนไหวแบบกะพริบตา
เป็นโมฆะ Blink_animat (เป็นโมฆะ)
-
ถ้า (blink_flag == 0)
-
Blink_cnt++;
ถ้า(blink_cnt >= 4)
-
flash_flag = 1;
-
-
อื่น
-
Blink_cnt–;
ถ้า (blink_cnt
-
กะพริบตา_ธง = 0;
-
-
write_dgus_vp(0×3000, (u8 *)&blink_cnt, 2);
-
เป็นโมฆะblink_run()
-
คงที่ u32 run_timer_cnt = 0;
run_timer_cnt++;
ถ้า (run_timer_cnt >= 2000000)
-
run_timer_cnt = 0;
Blink_animated();
ดีเลย์_ms(30);
Blink_animated();
ดีเลย์_ms(30);
Blink_animated();
ดีเลย์_ms(30);
Blink_animated();
ดีเลย์_ms(30);
Blink_animated();
ดีเลย์_ms(30);
Blink_animated();
ดีเลย์_ms(30);
Blink_animated();
ดีเลย์_ms(30);
Blink_animated();
ดีเลย์_ms(30);
-
-
4. ตระหนักว่าลูกตามองไปทางซ้ายและขวาอย่างเป็นธรรมชาติ
ซึ่งคล้ายกับการกะพริบ แต่ต้องเปรียบเทียบเวลาของคริสตัลออสซิลเลเตอร์เพื่อควบคุมการเคลื่อนไหวของดวงตา หลังจากการดีบักหลายครั้ง วิศวกรได้ออกแบบชุดโค้ดต่อไปนี้
//แอนิเมชั่นลูกตา
เป็นโมฆะ eyeball_animat (เป็นโมฆะ)
-
eyeball_timer_cnt++;
ถ้า (eyeball_timer_cnt
-
ลูกตา_cnt = 20;
-
อย่างอื่นถ้า (eyeball_timer_cnt
-
ลูกตา_cnt = 50;
-
อย่างอื่นถ้า (eyeball_timer_cnt
-
ลูกตา_cnt = 80;
-
อย่างอื่นถ้า (eyeball_timer_cnt
-
ลูกตา_cnt = 94;
-
อย่างอื่นถ้า (eyeball_timer_cnt
-
ลูกตา_cnt = 94;
-
อย่างอื่นถ้า (eyeball_timer_cnt
-
ลูกตา_cnt = 80;
-
อย่างอื่นถ้า (eyeball_timer_cnt
-
ลูกตา_cnt = 50;
-
อย่างอื่นถ้า (eyeball_timer_cnt
-
ลูกตา_cnt = 20;
-
อย่างอื่นถ้า (eyeball_timer_cnt
-
ลูกตา_cnt = -10;
-
อย่างอื่นถ้า (eyeball_timer_cnt
-
ลูกตา_cnt = -40;
-
อย่างอื่นถ้า (eyeball_timer_cnt
-
ลูกตา_cnt = -54;
-
อย่างอื่นถ้า (eyeball_timer_cnt
-
ลูกตา_cnt = -40;
-
อย่างอื่นถ้า (eyeball_timer_cnt
-
ลูกตา_cnt = -10;
-
อย่างอื่นถ้า (eyeball_timer_cnt
-
ลูกตา_cnt = 20;
eyeball_timer_cnt = 0;
-
//เลื่อนไปทางซ้ายและขวา
// ถ้า (eyeball_flag == 0)
-
// eyeball_cnt++;
// ถ้า (eyeball_cnt >= 94)
-
// eyeball_flag = 1;
-
-
// อื่น
-
// eyeball_cnt–;
// ถ้า (eyeball_cnt
-
// eyeball_flag = 0;
-
-
ถ้า (eyeball_cnt >= 0)
-
eyeball_pos[0] = 0×00;
eyeball_pos[1] = eyeball_cnt;
-
อื่น
-
eyeball_pos[0] = 0xFF;
eyeball_pos[1] = (eyeball_cnt & 0xFF);
-
write_dgus_vp(0×3111, (u8 *)&eyeball_pos, 2);
-
เป็นโมฆะ eyeball_run()
-
คงที่ u32 run_timer_cnt = 0;
run_timer_cnt++;
ถ้า (run_timer_cnt >= 20,000)
-
run_timer_cnt = 0;
Animated_ลูกตา();
-
-
5. เพิ่มการจดจำใบหน้า ESP32 เพื่อรับรู้การเคลื่อนไหวของดวงตาตามใบหน้า
วิธีการประมวลผลที่นี่คือเมื่อตรวจพบใบหน้า ดวงตาจะไม่ขยับด้วยตัวเอง และมีการกำหนดตัวแปรให้เพิ่มขึ้นในลูป while เมื่อเพิ่มขึ้นถึงค่าที่กำหนด ลูกตาจะเคลื่อนไปเอง เมื่อพอร์ตอนุกรมได้รับข้อมูล ตัวแปรนี้จะถูกล้าง จากนั้นจึงขยับดวงตาตามตำแหน่งของใบหน้าเท่านั้น รหัสหลักมีดังนี้:
ถ้า (rec_data_timer_cnt
-
rec_data_timer_cnt++;
-
อื่น
-
ลูกตา_run();
-
ภายนอก u32 rec_data_timer_cnt;
ภายนอก u16 eyeball_timer_cnt;
โมฆะ Communication_CMD (u8 st)
-
ถ้า((uart[st].Rx_F==1 )&&(uart[st].Rx_T==0))
-
rec_data_timer_cnt = 0;
eyeball_timer_cnt = 0;
#if(Type_Communication==1)
Description_8283(st);
#elif(Type_Communication==2)
Description_Modbus(st);
#เอ็นดิฟ
uart[st].Rx_F=0;
uart[st].Rx_Num=0;
-
-
เวลาโพสต์: 26 มิ.ย.-2023