DWIN سرکلر اسکرین پر مبنی اسمارٹ آئی

—— DWIN ڈویلپر فورم سے

اس بار سب کے لیے تجویز کردہ DWIN ڈویلپر فورم اوپن سورس پروجیکٹ انسانی آنکھوں کی نقل و حرکت کا ایک بہت ہی دلچسپ معمول ہے۔انجینئر نے آنکھوں کی گولیوں کی حرکت، پلک جھپکنے، چہرے کی شناخت اور پیروی جیسے افعال کو محسوس کرنے کے لیے انسانی آنکھوں کی تصویر کے متعدد مواد کا استعمال کیا۔

اوپن سورس حل کا تعارف:

1. UI تصویری مواد

ایڈیٹر کا نوٹ: DWIN سمارٹ اسکرین UI کی ترقی کو مکمل کرنے کے لیے تصاویر پر مبنی ہے، جو مختلف ڈسپلے اثرات کو آسانی سے محسوس کر سکتی ہے۔

dytrgf (1)

2. انٹرفیس کی ترقی

DGUS سافٹ ویئر کے ذریعے انٹرفیس تیار کرنا نسبتاً آسان ہے، اور صرف دو گرافک کنٹرولز کی ضرورت ہے۔اس روٹین میں انجینئر نے 2.1 انچ کی گول سمارٹ اسکرین کا انتخاب کیا۔

dytrgf (2)

3. پلک جھپکنے والی حرکت پذیری کا احساس کریں۔

پلکوں کی تصویروں کو وقفے وقفے سے ظاہر ہونے دیں:

// پلک جھپکنے والی حرکت پذیری۔

void blink_animat(void)

{

اگر (پلک جھپکنے کا جھنڈا == 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++;

if(run_timer_cnt >= 2000000)

{

run_timer_cnt = 0;

blink_animat();

Delay_ms(30);

blink_animat();

Delay_ms(30);

blink_animat();

Delay_ms(30);

blink_animat();

Delay_ms(30);

blink_animat();

Delay_ms(30);

blink_animat();

Delay_ms(30);

blink_animat();

Delay_ms(30);

blink_animat();

Delay_ms(30);

}

}

4. محسوس کریں کہ آنکھوں کی گولیاں قدرتی طور پر بائیں اور دائیں نظر آتی ہیں۔

یہ پلک جھپکنے کے مترادف ہے، لیکن آنکھوں کی حرکت کو کنٹرول کرنے کے لیے اسے کرسٹل آسکیلیٹر کے وقت کا موازنہ کرنے کی ضرورت ہے۔کئی بار ڈیبگ کرنے کے بعد، انجینئر نے درج ذیل کوڈز کو ڈیزائن کیا۔

// آئی بال اینیمیشن

void eyeball_animat(باطل)

{

eyeball_timer_cnt++;

اگر (آئی بال_ٹائمر_سی این ٹی <50)

{

eyeball_cnt = 20;

}

ورنہ اگر (eyeball_timer_cnt <51)

{

eyeball_cnt = 50;

}

ورنہ اگر (eyeball_timer_cnt <52)

{

eyeball_cnt = 80;

}

ورنہ اگر (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;

}

ورنہ اگر (eyeball_timer_cnt <105)

{

eyeball_cnt = 50;

}

ورنہ اگر (eyeball_timer_cnt <106)

{

eyeball_cnt = 20;

}

ورنہ اگر (eyeball_timer_cnt <107)

{

eyeball_cnt = -10;

}

ورنہ اگر (eyeball_timer_cnt <108)

{

eyeball_cnt = -40;

}

ورنہ اگر (eyeball_timer_cnt <158)

{

eyeball_cnt = -54;

}

else if(eyeball_timer_cnt <159)

{

eyeball_cnt = -40;

}

ورنہ اگر (eyeball_timer_cnt <160)

{

eyeball_cnt = -10;

}

ورنہ اگر (eyeball_timer_cnt <161)

{

eyeball_cnt = 20;

eyeball_timer_cnt = 0;

}

// بائیں اور دائیں منتقل کریں۔

// اگر (آئی بال_پرچم == 0)

// {

// eyeball_cnt++;

// if(eyeball_cnt >= 94)

// {

// eyeball_flag = 1;

// }

// }

// اور

// {

// eyeball_cnt–;

// if(eyeball_cnt <= -54)

// {

// eyeball_flag = 0;

// }

// }

اگر (eyeball_cnt >= 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;

eyeball_animat();

}

}

5. چہرے کے بعد آنکھوں کی حرکت کا احساس کرنے کے لیے ESP32 چہرے کی شناخت شامل کریں۔

یہاں پروسیسنگ کا طریقہ یہ ہے کہ جب چہرے کا پتہ چل جاتا ہے، تو آنکھیں خود سے حرکت نہیں کرتی ہیں، اور ایک متغیر کو جبکہ لوپ میں اضافے کے لیے بیان کیا جاتا ہے۔جب انکریمنٹ ایک خاص قدر تک پہنچ جائے گا، تو آنکھوں کی گولیاں خود ہی حرکت کریں گی۔جب سیریل پورٹ ڈیٹا وصول کرتا ہے، تو یہ متغیر صاف ہو جائے گا، اور پھر صرف چہرے کی پوزیشن کے مطابق آنکھوں کو حرکت دیں۔مرکزی کوڈ مندرجہ ذیل ہے:

if(rec_data_timer_cnt <1000000)

{

rec_data_timer_cnt++;

}

اور

{

eyeball_run();

}

extern u32 rec_data_timer_cnt؛

extern 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);

#ختم کرو اگر

uart[st].Rx_F=0;

uart[st].Rx_Num=0;

}

}


پوسٹ ٹائم: جون-26-2023