Smart Eye DWIN pantaila zirkularrean oinarrituta

——DWIN Garatzaileen Forotik

Oraingo honetan guztientzako gomendatutako DWIN garatzaileen foroa kode irekiko proiektua giza begien mugimendua simulatzeko oso errutina interesgarria da.Ingeniariak hainbat giza begi-material erabili zituen begien mugimendua, keinua, aurpegia ezagutzea eta jarraitzea bezalako funtzioak gauzatzeko.

Kode irekiko soluzioen sarrera:

1. UI irudiaren materiala

Editorearen oharra: DWIN pantaila adimenduna irudietan oinarritzen da interfazearen garapena osatzeko, eta horrek hainbat pantaila-efektu erraz antzeman ditzake.

dytrgf (1)

2. Interfazearen garapena

DGUS softwarearen bidez interfazea garatzea nahiko erraza da, eta bi kontrol grafiko baino ez dira behar.Errutina honetan, ingeniariak 2,1 hazbeteko pantaila adimendun biribila aukeratu zuen.

dytrgf (2)

3. Konturatu keinu-animazioa

Utzi betazalen irudiak txandaka bistaratzen diren tarteka:

//Kinuka animazioa

void blink_animat(huts)

{

if(kliskatu_bandera == 0)

{

blink_cnt++;

if(blink_cnt >= 4)

{

blink_flag = 1;

}

}

bestela

{

blink_cnt–;

if(blink_cnt <= 0)

{

blink_flag = 0;

}

}

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

}

void blink_run()

{

static u32 run_timer_cnt = 0;

run_timer_cnt++;

if(run_timer_cnt >= 2000000)

{

run_timer_cnt = 0;

blink_animat();

Atzerapena_ms(30);

blink_animat();

Atzerapena_ms(30);

blink_animat();

Atzerapena_ms(30);

blink_animat();

Atzerapena_ms(30);

blink_animat();

Atzerapena_ms(30);

blink_animat();

Atzerapena_ms(30);

blink_animat();

Atzerapena_ms(30);

blink_animat();

Atzerapena_ms(30);

}

}

4. Konturatu begi-globoak ezkerrera eta eskuinera itxura naturalean.

Hau keinu egitearen antzekoa da, baina kristal-osziladorearen denbora alderatu behar da begien mugimendua kontrolatzeko.Hainbat aldiz arazketa egin ondoren, ingeniariak honako kode multzo hau diseinatu zuen.

//Begi-globo animazioa

void eyeball_animat(void)

{

eyeball_timer_cnt++;

if(eyeball_timer_cnt < 50)

{

eyeball_cnt = 20;

}

else if(eyeball_timer_cnt < 51)

{

eyeball_cnt = 50;

}

else if(eyeball_timer_cnt < 52)

{

eyeball_cnt = 80;

}

else if(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;

}

else if(eyeball_timer_cnt < 105)

{

eyeball_cnt = 50;

}

else if(eyeball_timer_cnt < 106)

{

eyeball_cnt = 20;

}

else if(eyeball_timer_cnt < 107)

{

eyeball_cnt = -10;

}

else if(eyeball_timer_cnt < 108)

{

eyeball_cnt = -40;

}

else if(eyeball_timer_cnt < 158)

{

eyeball_cnt = -54;

}

else if(eyeball_timer_cnt < 159)

{

eyeball_cnt = -40;

}

else if(eyeball_timer_cnt < 160)

{

eyeball_cnt = -10;

}

else if(eyeball_timer_cnt < 161)

{

eyeball_cnt = 20;

eyeball_timer_cnt = 0;

}

//Mugitu ezkerrera eta eskuinera

// bada (begi-globo_bandera == 0)

// {

// eyeball_cnt++;

// bada (begi_cnt >= 94)

// {

// begi-globo_bandera = 1;

//}

//}

// bestela

// {

// eyeball_cnt–;

// bada (begi-globo_cnt <= -54)

// {

// begi-globo_bandera = 0;

//}

//}

if(begi_cnt >= 0)

{

eyeball_pos[0] = 0×00;

eyeball_pos[1] = eyeball_cnt;

}

bestela

{

eyeball_pos[0] = 0xFF;

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

}

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

}

void eyeball_run()

{

static u32 run_timer_cnt = 0;

run_timer_cnt++;

if(run_timer_cnt >= 20000)

{

run_timer_cnt = 0;

eyeball_animat();

}

}

5. Gehitu ESP32 aurpegi-ezagutza, aurpegia jarraitzen duten begien mugimenduaz jabetzeko.

Hemen prozesatzeko metodoa aurpegia detektatzen denean, begiak ez dira berez mugitzen, eta aldagai bat definitzen da while begiztan gehitzeko.Gehikuntza balio jakin batera iristen denean, begi-globoak berez mugituko dira.Serieko atakak datuak jasotzen dituenean, aldagai hau garbituko da, eta, ondoren, begiak aurpegiaren posizioaren arabera bakarrik mugituko dira.Kode nagusia honako hau da:

if(rec_data_timer_cnt < 1000000)

{

rec_data_timer_cnt++;

}

bestela

{

begi-bola_run();

}

extern u32 rec_data_timer_cnt;

extern u16 eyeball_timer_cnt;

void Communication_CMD(u8 st)

{

bada((uart[st].Rx_F==1 )&&(uart[st].Rx_T==0))

{

rec_data_timer_cnt = 0;

eyeball_timer_cnt = 0;

#if(Komunikazio_mota==1)

Deskribatu_8283(st);

#elif(Komunikazio_mota==2)

Deskribatu_Modbus(st);

#endif

uart[st].Rx_F=0;

uart[st].Rx_Num=0;

}

}


Argitalpenaren ordua: 2023-06-26