Smart Eye на аснове круглага экрана DWIN

——З форуму распрацоўшчыкаў DWIN

Праект з адкрытым зыходным кодам на форуме распрацоўшчыкаў DWIN, рэкамендаваны ўсім на гэты раз, - гэта вельмі цікавая праграма для мадэлявання руху чалавечых вачэй.Інжынер выкарыстаў некалькі малюнкаў чалавечага вока, каб рэалізаваць такія функцыі, як рух вочнага яблыка, мірганне, распазнаванне твару і сачэнне.

Уводзіны ў рашэнні з адкрытым зыходным кодам:

1. Матэрыял малюнка карыстацкага інтэрфейсу

Заўвага рэдактара: разумны экран DWIN заснаваны на малюнках для завяршэння распрацоўкі карыстацкага інтэрфейсу, які можа лёгка рэалізаваць розныя эфекты адлюстравання.

dytrgf (1)

2. Распрацоўка інтэрфейсу

Распрацаваць інтэрфейс з дапамогай праграмнага забеспячэння DGUS адносна проста, патрэбныя толькі два графічных элементы кіравання.У гэтай працэдуры інжынер абраў 2,1-цалевы круглы разумны экран.

dytrgf (2)

3. Рэалізуйце анімацыю мігцення

Няхай выявы стагоддзе адлюстроўваюцца па чарзе з інтэрваламі:

//Мірганне анімацыі

пустата blink_animat(пуста)

{

калі (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);

}

несапраўдны blink_run()

{

статычны u32 run_timer_cnt = 0;

run_timer_cnt++;

калі (run_timer_cnt >= 2000000)

{

run_timer_cnt = 0;

blink_animat();

Затрымка_мс(30);

blink_animat();

Затрымка_мс(30);

blink_animat();

Затрымка_мс(30);

blink_animat();

Затрымка_мс(30);

blink_animat();

Затрымка_мс(30);

blink_animat();

Затрымка_мс(30);

blink_animat();

Затрымка_мс(30);

blink_animat();

Затрымка_мс(30);

}

}

4. Зразумейце, што вочныя яблыкі глядзяць налева і направа натуральным чынам.

Гэта падобна на мірганне, але для кіравання рухам вачэй трэба параўноўваць час кварцавага генератара.Пасля шматразовай адладкі інжынер распрацаваў наступны набор кодаў.

//Анімацыя вочнага яблыка

пустата eyeball_animat(пустата)

{

eyeball_timer_cnt++;

if(yeyeball_timer_cnt < 50)

{

вочны яблык_cnt = 20;

}

інакш, калі (eyeball_timer_cnt < 51)

{

eyeball_cnt = 50;

}

інакш, калі (eyeball_timer_cnt < 52)

{

eyeball_cnt = 80;

}

інакш, калі (eyeball_timer_cnt < 53)

{

eyeball_cnt = 94;

}

інакш, калі (eyeball_timer_cnt < 103)

{

eyeball_cnt = 94;

}

інакш, калі (eyeball_timer_cnt < 104)

{

eyeball_cnt = 80;

}

інакш, калі (yeyeball_timer_cnt < 105)

{

eyeball_cnt = 50;

}

інакш, калі (eyeball_timer_cnt < 106)

{

вочны яблык_cnt = 20;

}

інакш, калі (eyeball_timer_cnt < 107)

{

eyeball_cnt = -10;

}

інакш, калі (yeyeball_timer_cnt < 108)

{

eyeball_cnt = -40;

}

інакш, калі (yeyeball_timer_cnt < 158)

{

eyeball_cnt = -54;

}

інакш, калі (eyeball_timer_cnt < 159)

{

eyeball_cnt = -40;

}

інакш, калі (eyeball_timer_cnt < 160)

{

eyeball_cnt = -10;

}

інакш, калі (eyeball_timer_cnt < 161)

{

вочны яблык_cnt = 20;

eyeball_timer_cnt = 0;

}

// Рух налева і направа

// калі (сцяг_вочнага яблыка == 0)

// {

// eyeball_cnt++;

// калі (eyeball_cnt >= 94)

// {

// eyeball_flag = 1;

//}

//}

// яшчэ

// {

// eyeball_cnt–;

// калі(eyeball_cnt <= -54)

// {

// 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 >= 20000)

{

run_timer_cnt = 0;

анімат_вочнага яблыка();

}

}

5. Дадайце функцыю распазнання твару ESP32, каб усвядоміць рух вачэй, якія сочаць за тварам.

Метад апрацоўкі тут заключаецца ў тым, што пры выяўленні твару вочы не рухаюцца самі па сабе, а зменная вызначаецца для павелічэння ў цыкле while.Калі прырост дасягне пэўнага значэння, вочныя яблыкі будуць рухацца самі.Калі паслядоўны порт атрымае дадзеныя, гэтая зменная будзе ачышчана, а затым толькі рухаць вачыма ў адпаведнасці з становішчам твару.Асноўны код выглядае наступным чынам:

калі (rec_data_timer_cnt < 1000000)

{

rec_data_timer_cnt++;

}

яшчэ

{

вочны_яблык_бег();

}

extern u32 rec_data_timer_cnt;

extern u16 eyeball_timer_cnt;

несапраўдны 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(Тып_сувязі==1)

Апісаць_8283(ст);

#elif(Тып_сувязі==2)

Апісаць_Modbus(st);

#endif

uart[st].Rx_F=0;

uart[st].Rx_Num=0;

}

}


Час публікацыі: 26 чэрвеня 2023 г