——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.
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.
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