DWIN सर्कुलर स्क्रिनमा आधारित स्मार्ट आँखा

——DWIN विकासकर्ता फोरमबाट

यस पटक सबैका लागि सिफारिस गरिएको DWIN विकासकर्ता फोरम खुला स्रोत परियोजना मानव आँखाको गति अनुकरण गर्नको लागि एक धेरै रोचक दिनचर्या हो।इन्जिनियरले आँखाको बल चाल, झिम्काइ, अनुहार पहिचान र अनुसरण जस्ता कार्यहरू महसुस गर्न धेरै मानव आँखा चित्र सामग्रीहरू प्रयोग गरे।

खुला स्रोत समाधानहरूको परिचय:

1. UI छवि सामग्री

सम्पादकको नोट: DWIN स्मार्ट स्क्रिन UI विकास पूरा गर्न चित्रहरूमा आधारित छ, जसले सजिलैसँग विभिन्न प्रदर्शन प्रभावहरू महसुस गर्न सक्छ।

dytrgf (1)

2. इन्टरफेस विकास

यो DGUS सफ्टवेयर मार्फत इन्टरफेस विकास गर्न अपेक्षाकृत सरल छ, र केवल दुई ग्राफिक नियन्त्रण आवश्यक छ।यस दिनचर्यामा, इन्जिनियरले २.१ इन्चको राउन्ड स्मार्ट स्क्रिन रोजे।

dytrgf (2)

3. पलक एनिमेसन महसुस गर्नुहोस्

पलकका तस्बिरहरू अन्तरालहरूमा पालैपालो देखाउन दिनुहोस्:

// पलक एनिमेसन

void blink_animat(void)

{

यदि (blink_flag == 0)

{

blink_cnt++;

यदि (blink_cnt >= 4)

{

blink_flag = 1;

}

}

अरू

{

blink_cnt-;

यदि (blink_cnt <= 0)

{

blink_flag = 0;

}

}

write_dgus_vp(0×3000, (u8 *)&blink_cnt, 2);

}

void blink_run()

{

स्थिर u32 run_timer_cnt = 0;

run_timer_cnt++;

यदि (run_timer_cnt >= 2000000)

{

run_timer_cnt = 0;

blink_animat();

विलम्ब_ms(३०);

blink_animat();

विलम्ब_ms(३०);

blink_animat();

विलम्ब_ms(३०);

blink_animat();

विलम्ब_ms(३०);

blink_animat();

विलम्ब_ms(३०);

blink_animat();

विलम्ब_ms(३०);

blink_animat();

विलम्ब_ms(३०);

blink_animat();

विलम्ब_ms(३०);

}

}

4. आँखाको बलहरू प्राकृतिक रूपमा बायाँ र दायाँ देखिन्छन्।

यो झिम्काउने जस्तै हो, तर यसले आँखाको आन्दोलन नियन्त्रण गर्न क्रिस्टल ओसिलेटरको समय तुलना गर्न आवश्यक छ।धेरै पटक डिबगिङ पछि, इन्जिनियरले निम्न कोडहरूको सेट डिजाइन गरे।

//आँखाको बल एनिमेसन

void eyeball_animat(void)

{

eyeball_timer_cnt++;

यदि (आईबल_टाइमर_सीएनटी <५०)

{

eyeball_cnt = 20;

}

else if(eyeball_timer_cnt <51)

{

eyeball_cnt = 50;

}

else if(eyeball_timer_cnt <52)

{

eyeball_cnt = 80;

}

else if(eyeball_timer_cnt <53)

{

eyeball_cnt = 94;

}

else if(eyeball_timer_cnt <103)

{

eyeball_cnt = 94;

}

else if(eyeball_timer_cnt <104)

{

eyeball_cnt = 80;

}

else if(eyeball_timer_cnt <105)

{

eyeball_cnt = 50;

}

else if(eyeball_timer_cnt <106)

{

eyeball_cnt = 20;

}

else if(eyeball_timer_cnt <107)

{

eyeball_cnt = -10;

}

else if(eyeball_timer_cnt <108)

{

eyeball_cnt = -40;

}

else if(eyeball_timer_cnt <158)

{

eyeball_cnt = -54;

}

else if(eyeball_timer_cnt <159)

{

eyeball_cnt = -40;

}

else if(eyeball_timer_cnt <160)

{

eyeball_cnt = -10;

}

else if(eyeball_timer_cnt <161)

{

eyeball_cnt = 20;

eyeball_timer_cnt = 0;

}

//बायाँ र दायाँ सार्नुहोस्

// यदि (आँखाको_झण्डा == ०)

// {

// eyeball_cnt++;

// यदि (eyeball_cnt >= 94)

// {

// eyeball_flag = 1;

// }

// }

// अन्य

// {

// eyeball_cnt-;

// यदि (eyeball_cnt <= -54)

// {

// eyeball_flag = 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);

}

void eyeball_run()

{

स्थिर u32 run_timer_cnt = 0;

run_timer_cnt++;

यदि (run_timer_cnt >= 20000)

{

run_timer_cnt = 0;

eyeball_animat();

}

}

5. अनुहार पछ्याउने आँखाको चाल महसुस गर्न ESP32 अनुहार पहिचान थप्नुहोस्।

यहाँ प्रशोधन विधि यो हो कि जब अनुहार पत्ता लगाइन्छ, आँखाहरू आफैंमा सर्दैनन्, र एक चरलाई while लूपमा वृद्धि गर्न परिभाषित गरिएको छ।जब वृद्धि निश्चित मानमा पुग्छ, आँखाको बलहरू आफैं सर्नेछ।जब सीरियल पोर्ट डाटा प्राप्त गर्दछ, यो चर खाली हुनेछ, र त्यसपछि मात्र अनुहार को स्थिति अनुसार आँखा सार्न।मुख्य कोड निम्नानुसार छ:

यदि (rec_data_timer_cnt < 1000000)

{

rec_data_timer_cnt++;

}

अरू

{

eyeball_run();

}

extern u32 rec_data_timer_cnt;

बाह्य u16 eyeball_timer_cnt;

void 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)

वर्णन_8283(st);

#elif(Type_Communication==2)

Describe_Modbus(st);

#endif

uart[st]।Rx_F=0;

uart[st]।Rx_Num=0;

}

}


पोस्ट समय: जुन-26-2023