Smart Eye дар асоси экрани даврии DWIN

——Аз форуми таҳиягарони DWIN

Лоиҳаи кушодаи форуми таҳиягарони DWIN, ки ин дафъа барои ҳама тавсия шудааст, як реҷаи хеле ҷолиб барои тақлид кардани ҳаракати чашмони инсон аст.Муҳандис якчанд маводҳои тасвирии чашми инсонро барои амалӣ кардани вазифаҳо ба монанди ҳаракати гавҳараки чашм, мижа задан, шинохти чеҳра ва пайравӣ истифода бурд.

Муқаддима ба ҳалли манбаи кушода:

1. Маводи тасвири UI

Эзоҳ аз муҳаррир: Экрани интеллектуалии DWIN ба тасвирҳо барои анҷом додани таҳияи UI асос ёфтааст, ки ба осонӣ эффектҳои гуногуни намоишро амалӣ карда метавонад.

dytrgf (1)

2. Таҳияи интерфейс

Таҳияи интерфейс тавассути нармафзори DGUS нисбатан содда аст ва танҳо ду назорати графикӣ лозим аст.Дар ин реҷа, муҳандис экрани интеллектуалии мудаввари 2,1 дюймиро интихоб кард.

dytrgf (2)

3. Аниматсияи мижаро амалӣ кунед

Бигзор расмҳои пилкҳо бо навбат бо фосилаҳо намоиш дода шаванд:

// Аниматсияи мижа

void blink_animat(беэътибор)

{

агар (мижкан_парчам == 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();

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. Дарк кунед, ки чашмҳо ба таври табиӣ ба чап ва рост нигоҳ мекунанд.

Ин ба чашмак задан монанд аст, аммо барои назорат кардани ҳаракати чашм вақти осциллятори кристаллро муқоиса кардан лозим аст.Пас аз чанд маротиба ислоҳ кардани хатогиҳо, муҳандис маҷмӯи рамзҳои зеринро таҳия кард.

// Аниматсияи чашм

ботил eyeball_animate(беэътибор)

{

eyeball_timer_cnt++;

агар(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;

}

дигаре агар (eyeball_timer_cnt < 103)

{

eyeball_cnt = 94;

}

дигаре агар (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;

}

дигаре агар (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++;

// агар (eyeball_cnt >= 94)

// {

// чашми_парчам = 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;

eyeball_animat();

}

}

5. Шинохти чеҳраи ESP32-ро илова кунед, то ҳаракати чашмҳоро аз рӯи чеҳра дарк кунед.

Усули коркард дар ин ҷо ин аст, ки ҳангоми ошкор шудани чеҳра, чашмҳо худ ба худ ҳаракат намекунанд ва тағирёбанда барои афзоиш дар ҳалқаи while муайян карда мешавад.Вақте ки афзоиш ба арзиши муайян мерасад, чашмҳо худ аз худ ҳаракат мекунанд.Вақте ки бандари силсилавӣ маълумот қабул мекунад, ин тағирёбанда тоза карда мешавад ва пас танҳо чашмҳоро мувофиқи мавқеи чеҳра ҳаракат кунед.Рамзи асосӣ чунин аст:

агар (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)

{

агар((уарт[ст].Rx_F==1 )&&(уарт[ст].Rx_T==0))

{

rec_data_timer_cnt = 0;

eyeball_timer_cnt = 0;

#агар(Намуди_Муошират==1)

Тавсиф_8283(ст);

#elif(Намуди_Муошират==2)

Тавсифи_Модбус(ст);

#endif

uart[st].Rx_F=0;

uart[st].Rx_Num=0;

}

}


Вақти фиристодан: июн-26-2023