——DWIN ਡਿਵੈਲਪਰ ਫੋਰਮ ਤੋਂ
DWIN ਡਿਵੈਲਪਰ ਫੋਰਮ ਓਪਨ ਸੋਰਸ ਪ੍ਰੋਜੈਕਟ ਇਸ ਵਾਰ ਹਰ ਕਿਸੇ ਲਈ ਸਿਫ਼ਾਰਸ਼ ਕੀਤਾ ਗਿਆ ਹੈ, ਮਨੁੱਖੀ ਅੱਖਾਂ ਦੀ ਗਤੀ ਦੀ ਨਕਲ ਕਰਨ ਲਈ ਇੱਕ ਬਹੁਤ ਹੀ ਦਿਲਚਸਪ ਰੁਟੀਨ ਹੈ। ਇੰਜੀਨੀਅਰ ਨੇ ਅੱਖਾਂ ਦੀ ਰੋਸ਼ਨੀ, ਝਪਕਣਾ, ਚਿਹਰਾ ਪਛਾਣਨਾ ਅਤੇ ਪਾਲਣਾ ਵਰਗੇ ਕਾਰਜਾਂ ਨੂੰ ਸਮਝਣ ਲਈ ਕਈ ਮਨੁੱਖੀ ਅੱਖਾਂ ਦੀ ਤਸਵੀਰ ਸਮੱਗਰੀ ਦੀ ਵਰਤੋਂ ਕੀਤੀ।
ਓਪਨ ਸੋਰਸ ਹੱਲਾਂ ਦੀ ਜਾਣ-ਪਛਾਣ:
1. UI ਚਿੱਤਰ ਸਮੱਗਰੀ
ਸੰਪਾਦਕ ਦਾ ਨੋਟ: DWIN ਸਮਾਰਟ ਸਕ੍ਰੀਨ UI ਵਿਕਾਸ ਨੂੰ ਪੂਰਾ ਕਰਨ ਲਈ ਤਸਵੀਰਾਂ 'ਤੇ ਅਧਾਰਤ ਹੈ, ਜੋ ਵੱਖ-ਵੱਖ ਡਿਸਪਲੇ ਪ੍ਰਭਾਵਾਂ ਨੂੰ ਆਸਾਨੀ ਨਾਲ ਮਹਿਸੂਸ ਕਰ ਸਕਦੀ ਹੈ।
2. ਇੰਟਰਫੇਸ ਵਿਕਾਸ
ਡੀਜੀਯੂਐਸ ਸੌਫਟਵੇਅਰ ਦੁਆਰਾ ਇੰਟਰਫੇਸ ਨੂੰ ਵਿਕਸਤ ਕਰਨਾ ਮੁਕਾਬਲਤਨ ਸਧਾਰਨ ਹੈ, ਅਤੇ ਸਿਰਫ ਦੋ ਗ੍ਰਾਫਿਕ ਨਿਯੰਤਰਣਾਂ ਦੀ ਲੋੜ ਹੈ। ਇਸ ਰੁਟੀਨ ਵਿੱਚ, ਇੰਜੀਨੀਅਰ ਨੇ 2.1-ਇੰਚ ਦੀ ਗੋਲ ਸਮਾਰਟ ਸਕ੍ਰੀਨ ਦੀ ਚੋਣ ਕੀਤੀ।
3. ਬਲਿੰਕ ਐਨੀਮੇਸ਼ਨ ਦਾ ਅਹਿਸਾਸ ਕਰੋ
ਪਲਕਾਂ ਦੀਆਂ ਤਸਵੀਰਾਂ ਨੂੰ ਅੰਤਰਾਲਾਂ 'ਤੇ ਵਾਰੀ-ਵਾਰੀ ਪ੍ਰਦਰਸ਼ਿਤ ਕਰਨ ਦਿਓ:
// ਬਲਿੰਕ ਐਨੀਮੇਸ਼ਨ
void blink_animat(void)
{
ਜੇਕਰ (ਝਲਕਦਾ_ਝੰਡਾ == 0)
{
blink_cnt++;
if(blink_cnt >= 4)
{
blink_flag = 1;
}
}
ਹੋਰ
{
blink_cnt–;
if(blink_cnt
{
blink_flag = 0;
}
}
write_dgus_vp(0×3000, (u8 *)&blink_cnt, 2);
}
void blink_run()
{
ਸਥਿਰ u32 run_timer_cnt = 0;
run_timer_cnt++;
if(run_timer_cnt >= 2000000)
{
run_timer_cnt = 0;
blink_animated();
Delay_ms(30);
blink_animated();
Delay_ms(30);
blink_animated();
Delay_ms(30);
blink_animated();
Delay_ms(30);
blink_animated();
Delay_ms(30);
blink_animated();
Delay_ms(30);
blink_animated();
Delay_ms(30);
blink_animated();
Delay_ms(30);
}
}
4. ਅਹਿਸਾਸ ਕਰੋ ਕਿ ਅੱਖਾਂ ਦੀਆਂ ਗੇਂਦਾਂ ਕੁਦਰਤੀ ਤੌਰ 'ਤੇ ਖੱਬੇ ਅਤੇ ਸੱਜੇ ਦਿਖਾਈ ਦਿੰਦੀਆਂ ਹਨ।
ਇਹ ਝਪਕਣ ਦੇ ਸਮਾਨ ਹੈ, ਪਰ ਇਸਨੂੰ ਅੱਖਾਂ ਦੀ ਗਤੀ ਨੂੰ ਨਿਯੰਤਰਿਤ ਕਰਨ ਲਈ ਕ੍ਰਿਸਟਲ ਔਸਿਲੇਟਰ ਦੇ ਸਮੇਂ ਦੀ ਤੁਲਨਾ ਕਰਨ ਦੀ ਲੋੜ ਹੈ। ਕਈ ਵਾਰ ਡੀਬੱਗ ਕਰਨ ਤੋਂ ਬਾਅਦ, ਇੰਜੀਨੀਅਰ ਨੇ ਕੋਡਾਂ ਦੇ ਹੇਠਾਂ ਦਿੱਤੇ ਸੈੱਟ ਨੂੰ ਡਿਜ਼ਾਈਨ ਕੀਤਾ।
// ਆਈਬਾਲ ਐਨੀਮੇਸ਼ਨ
void eyeball_animat(void)
{
eyeball_timer_cnt++;
ਜੇਕਰ (ਆਈਬਾਲ_ਟਾਈਮਰ_ਸੀਐਨਟੀ
{
eyeball_cnt = 20;
}
else if(eyeball_timer_cnt
{
eyeball_cnt = 50;
}
else if(eyeball_timer_cnt
{
eyeball_cnt = 80;
}
else if(eyeball_timer_cnt
{
eyeball_cnt = 94;
}
else if(eyeball_timer_cnt
{
eyeball_cnt = 94;
}
else if(eyeball_timer_cnt
{
eyeball_cnt = 80;
}
else if(eyeball_timer_cnt
{
eyeball_cnt = 50;
}
else if(eyeball_timer_cnt
{
eyeball_cnt = 20;
}
else if(eyeball_timer_cnt
{
eyeball_cnt = -10;
}
else if(eyeball_timer_cnt
{
eyeball_cnt = -40;
}
else if(eyeball_timer_cnt
{
eyeball_cnt = -54;
}
else if(eyeball_timer_cnt
{
eyeball_cnt = -40;
}
else if(eyeball_timer_cnt
{
eyeball_cnt = -10;
}
else if(eyeball_timer_cnt
{
eyeball_cnt = 20;
eyeball_timer_cnt = 0;
}
//ਖੱਬੇ ਅਤੇ ਸੱਜੇ ਹਿਲਾਓ
// ਜੇਕਰ (ਆਈਬਾਲ_ਫਲੈਗ == 0)
// {
// eyeball_cnt++;
// if(eyeball_cnt >= 94)
// {
// eyeball_flag = 1;
// }
// }
// ਹੋਰ
// {
// eyeball_cnt–;
// if(eyeball_cnt
// {
// eyeball_flag = 0;
// }
// }
ਜੇਕਰ (ਆਈਬਾਲ_ਸੀਐਨਟੀ >= 0)
{
ਆਈਬਾਲ_ਪੋਜ਼[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++;
if(run_timer_cnt >= 20000)
{
run_timer_cnt = 0;
ਐਨੀਮੇਟਡ_ਆਈਬਾਲ();
}
}
5. ਚਿਹਰੇ ਤੋਂ ਬਾਅਦ ਅੱਖਾਂ ਦੀ ਗਤੀ ਦਾ ਅਹਿਸਾਸ ਕਰਨ ਲਈ ESP32 ਚਿਹਰੇ ਦੀ ਪਛਾਣ ਸ਼ਾਮਲ ਕਰੋ।
ਇੱਥੇ ਪ੍ਰੋਸੈਸਿੰਗ ਵਿਧੀ ਇਹ ਹੈ ਕਿ ਜਦੋਂ ਚਿਹਰੇ ਦਾ ਪਤਾ ਲਗਾਇਆ ਜਾਂਦਾ ਹੈ, ਤਾਂ ਅੱਖਾਂ ਆਪਣੇ ਆਪ ਨਹੀਂ ਚਲਦੀਆਂ, ਅਤੇ ਇੱਕ ਵੇਰੀਏਬਲ ਨੂੰ ਵਾਇਲ ਲੂਪ ਵਿੱਚ ਵਾਧੇ ਲਈ ਪਰਿਭਾਸ਼ਿਤ ਕੀਤਾ ਜਾਂਦਾ ਹੈ। ਜਦੋਂ ਵਾਧਾ ਇੱਕ ਨਿਸ਼ਚਿਤ ਮੁੱਲ 'ਤੇ ਪਹੁੰਚ ਜਾਂਦਾ ਹੈ, ਤਾਂ ਅੱਖਾਂ ਦੀਆਂ ਗੇਂਦਾਂ ਆਪਣੇ ਆਪ ਹਿੱਲ ਜਾਣਗੀਆਂ। ਜਦੋਂ ਸੀਰੀਅਲ ਪੋਰਟ ਡੇਟਾ ਪ੍ਰਾਪਤ ਕਰਦਾ ਹੈ, ਤਾਂ ਇਹ ਵੇਰੀਏਬਲ ਸਾਫ਼ ਹੋ ਜਾਵੇਗਾ, ਅਤੇ ਫਿਰ ਸਿਰਫ ਚਿਹਰੇ ਦੀ ਸਥਿਤੀ ਦੇ ਅਨੁਸਾਰ ਅੱਖਾਂ ਨੂੰ ਹਿਲਾਓ. ਮੁੱਖ ਕੋਡ ਹੇਠ ਲਿਖੇ ਅਨੁਸਾਰ ਹੈ:
if(rec_data_timer_cnt
{
rec_data_timer_cnt++;
}
ਹੋਰ
{
eyeball_run();
}
extern u32 rec_data_timer_cnt;
extern u16 eyeball_timer_cnt;
void Communication_CMD(u8 st)
{
if((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)
ਵਰਣਨ_ਮੋਡਬਸ(st);
#endif
uart[st].Rx_F=0;
uart[st].Rx_Num=0;
}
}
ਪੋਸਟ ਟਾਈਮ: ਜੂਨ-26-2023