Smart Eye basearre op DWIN Circular Screen

——Fan DWIN Developer Forum

It DWIN-ûntwikkelderforum iepen boarne-projekt oanrikkemandearre foar elkenien dizze kear is in heul ynteressante routine foar it simulearjen fan 'e beweging fan minsklike eagen.De yngenieur brûkte ferskate ôfbyldingsmaterialen foar minsklike eagen om funksjes te realisearjen lykas eyeballbeweging, knipperjen, gesichtsherkenning en folgjen.

Ynlieding ta iepen boarne oplossingen:

1. UI byldmateriaal

Notysje fan bewurker: DWIN-smart skerm is basearre op ôfbyldings om UI-ûntwikkeling te foltôgjen, dy't ferskate display-effekten maklik kinne realisearje.

dytrgf (1)

2. Interface ûntwikkeling

It is relatyf ienfâldich om de ynterface te ûntwikkeljen fia DGUS-software, en mar twa grafyske kontrôles binne nedich.Yn dizze routine keas de yngenieur in 2.1-inch rûn smart skerm.

dytrgf (2)

3. Realisearje blink animaasje

Lit de foto's fan 'e oogleden beurtelings werjûn wurde mei yntervallen:

// Blink animaasje

void blink_animat (void)

{

if(blink_flag == 0)

{

blink_cnt++;

if(blink_cnt >= 4)

{

blink_flag = 1;

}

}

oars

{

blink_cnt–;

if(blink_cnt <= 0)

{

blink_flag = 0;

}

}

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

}

void blink_run()

{

statyske 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. Realisearje de eyeballs sjogge lofts en rjochts natuerlik.

Dit is fergelykber mei knipperjen, mar it moat de tiid fan 'e kristaloscillator fergelykje om de eagenbeweging te kontrolearjen.Nei in protte kearen fan debuggen ûntwurp de yngenieur de folgjende set koades.

// Eyeball animaasje

void eyeball_animat (void)

{

eyeball_timer_cnt++;

if(eyeball_timer_cnt < 50)

{

eyeball_cnt = 20;

}

oars as (eyeball_timer_cnt < 51)

{

eyeball_cnt = 50;

}

oars as (eyeball_timer_cnt < 52)

{

eyeball_cnt = 80;

}

oars as (eyeball_timer_cnt < 53)

{

eyeball_cnt = 94;

}

oars as (eyeball_timer_cnt < 103)

{

eyeball_cnt = 94;

}

oars as (eyeball_timer_cnt < 104)

{

eyeball_cnt = 80;

}

oars as (eyeball_timer_cnt < 105)

{

eyeball_cnt = 50;

}

oars as (eyeball_timer_cnt < 106)

{

eyeball_cnt = 20;

}

oars as (eyeball_timer_cnt < 107)

{

eyeball_cnt = -10;

}

oars as (eyeball_timer_cnt < 108)

{

eyeball_cnt = -40;

}

oars as (eyeball_timer_cnt < 158)

{

eyeball_cnt = -54;

}

oars as (eyeball_timer_cnt < 159)

{

eyeball_cnt = -40;

}

oars as (eyeball_timer_cnt < 160)

{

eyeball_cnt = -10;

}

oars as (eyeball_timer_cnt < 161)

{

eyeball_cnt = 20;

eyeball_timer_cnt = 0;

}

// Ferpleats nei lofts en rjochts

// if(eyeball_flag == 0)

// {

// eyeball_cnt++;

// if(eyeball_cnt >= 94)

// {

// eyeball_flag = 1;

// }

// }

// oar

// {

// eyeball_cnt–;

// if(eyeball_cnt <= -54)

// {

// eyeball_flag = 0;

// }

// }

if(eyeball_cnt >= 0)

{

eyeball_pos[0] = 0×00;

eyeball_pos[1] = eyeball_cnt;

}

oars

{

eyeball_pos[0] = 0xFF;

eyeball_pos[1] = (eyeball_cnt & 0xFF);

}

write_dgus_vp(0×3111, (u8 *) & eyeball_pos, 2);

}

void eyeball_run()

{

statyske u32 run_timer_cnt = 0;

run_timer_cnt++;

if(run_timer_cnt >= 20000)

{

run_timer_cnt = 0;

eyeball_animat();

}

}

5. Foegje ESP32 gesichtsherkenning ta om de beweging fan eagen nei it gesicht te realisearjen.

De ferwurkingsmetoade hjir is dat as it gesicht wurdt ûntdutsen, de eagen net fan harsels bewege, en in fariabele wurdt definieare om te ferheegjen yn 'e while-loop.As de tanimming in bepaalde wearde berikt, sille de eyeballs fan harsels bewege.As de seriële poarte ûntfangt gegevens, dizze fariabele wurdt wiske, en dan allinne ferpleatse de eagen neffens de posysje fan it gesicht.De haadkoade is as folget:

if(rec_data_timer_cnt < 1000000)

{

rec_data_timer_cnt++;

}

oars

{

eyeball_run();

}

eksterne u32 rec_data_timer_cnt;

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

Beskriuw_8283(st);

#elif(Type_Communication==2)

Beskriuwe_Modbus(st);

#ophalde as

uart[st].Rx_F=0;

uart[st].Rx_Num=0;

}

}


Post tiid: Jun-26-2023