Smart Eye Baséiert op DWIN kreesfërmeg Écran

——Vum DWIN Entwéckler Forum

Den DWIN Entwéckler Forum Open Source Projet recommandéiert fir jiddereen dës Kéier ass eng ganz interessant Routine fir d'Bewegung vu mënschlechen Aen ze simuléieren.Den Ingenieur huet verschidde mënschlech Auge Bildmaterial benotzt fir Funktiounen ze realiséieren wéi Augeballbewegung, Blénken, Gesiichtserkennung a folgend.

Aféierung zu Open Source Léisungen:

1. UI Bildmaterial

Redakter Notiz: DWIN Smart Écran baséiert op Biller fir d'UI Entwécklung ze kompletéieren, wat einfach verschidde Displayeffekter realiséiere kann.

dytrgf (1)

2. Interface Entwécklung

Et ass relativ einfach d'Interface duerch DGUS Software z'entwéckelen, an nëmmen zwee grafesch Kontrollen sinn néideg.An dëser Routine huet den Ingenieur en 2.1-Zoll ronnen Smart Écran gewielt.

dytrgf (2)

3. Realiséieren Blëtz Animatioun

Loosst d'Biller vun den Aelidden am Tour an Intervalle ugewise ginn:

// Blink Animatioun

void blink_animat(void)

{

wann (blink_flag == 0)

{

blink_cnt++;

wann (blink_cnt >= 4)

{

blink_flag = 1;

}

}

soss

{

blink_cnt–;

wann (blink_cnt <= 0)

{

blink_flag = 0;

}

}

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

}

void blink_run()

{

statesch 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. Realiséieren d'Aebäll kucken lénks a riets natierlech.

Dëst ass ähnlech wéi ze blénken, awer et muss d'Zäit vum Kristalloszillator vergläichen fir d'Aebewegung ze kontrolléieren.No ville Mol vun Debugging huet den Ingenieur de folgende Set vu Coden entworf.

// Eyeball Animatioun

void eyeball_animat(void)

{

eyeball_timer_cnt++;

if(eyeball_timer_cnt < 50)

{

eyeball_cnt = 20;

}

soss wann (eyeball_timer_cnt < 51)

{

eyeball_cnt = 50;

}

soss wann (eyeball_timer_cnt < 52)

{

eyeball_cnt = 80;

}

soss wann (eyeball_timer_cnt < 53)

{

eyeball_cnt = 94;

}

soss wann (eyeball_timer_cnt < 103)

{

eyeball_cnt = 94;

}

soss wann (eyeball_timer_cnt < 104)

{

eyeball_cnt = 80;

}

soss wann (eyeball_timer_cnt < 105)

{

eyeball_cnt = 50;

}

soss wann (eyeball_timer_cnt < 106)

{

eyeball_cnt = 20;

}

soss wann (eyeball_timer_cnt < 107)

{

eyeball_cnt = -10;

}

soss wann (eyeball_timer_cnt < 108)

{

eyeball_cnt = -40;

}

soss wann (eyeball_timer_cnt < 158)

{

eyeball_cnt = -54;

}

soss wann (eyeball_timer_cnt < 159)

{

eyeball_cnt = -40;

}

soss wann (eyeball_timer_cnt < 160)

{

eyeball_cnt = -10;

}

soss wann (eyeball_timer_cnt < 161)

{

eyeball_cnt = 20;

eyeball_timer_cnt = 0;

}

// Beweegt lénks a riets

// if(eyeball_flag == 0)

// {

// eyeball_cnt++;

// if(eyeball_cnt >= 94)

// {

// eyeball_flag = 1;

// }

// }

// aner

// {

// eyeball_cnt–;

// if(eyeball_cnt <= -54)

// {

// eyeball_flag = 0;

// }

// }

if(eyeball_cnt >= 0)

{

eyeball_pos[0] = 0×00;

eyeball_pos[1] = eyeball_cnt;

}

soss

{

eyeball_pos[0] = 0xFF;

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

}

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

}

void eyeball_run()

{

statesch u32 run_timer_cnt = 0;

run_timer_cnt++;

if(run_timer_cnt >= 20000)

{

run_timer_cnt = 0;

eyeball_animat();

}

}

5. Füügt ESP32 Gesiichtserkennung derbäi fir d'Bewegung vun den Aen no dem Gesiicht ze realiséieren.

D'Veraarbechtungsmethod hei ass datt wann d'Gesiicht erkannt gëtt, d'Aen net eleng beweegen, an eng Variabel ass definéiert fir an der iwwerdeems Loop eropzegoen.Wann d'Inkrement e bestëmmte Wäert erreecht, beweegen d'Aeballs sech selwer.Wann de Serien Hafen Daten kritt, gëtt dës Variabel geläscht, an dann nëmmen d'Aen no der Positioun vum Gesiicht bewegen.Den Haaptcode ass wéi follegt:

if(rec_data_timer_cnt < 1000000)

{

rec_data_timer_cnt++;

}

soss

{

eyeball_run();

}

extern u32 rec_data_timer_cnt;

extern 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(Typ_Communication==1)

Beschreiwung_8283(st);

#elif(Type_Communication==2)

Beschreiwung_Modbus(st);

#endif

uart[st].Rx_F=0;

uart[st].Rx_Num=0;

}

}


Post Zäit: Jun-26-2023