——DWIN డెవలపర్ ఫోరమ్ నుండి
ఈసారి అందరికీ సిఫార్సు చేయబడిన DWIN డెవలపర్ ఫోరమ్ ఓపెన్ సోర్స్ ప్రాజెక్ట్ మానవ కళ్ల కదలికను అనుకరించడం కోసం చాలా ఆసక్తికరమైన రొటీన్.ఇంజనీర్ ఐబాల్ కదలిక, బ్లింక్ చేయడం, ఫేస్ రికగ్నిషన్ మరియు ఫాలోయింగ్ వంటి ఫంక్షన్లను గ్రహించడానికి అనేక మానవ కంటి చిత్ర సామగ్రిని ఉపయోగించారు.
ఓపెన్ సోర్స్ సొల్యూషన్స్ పరిచయం:
1. UI ఇమేజ్ మెటీరియల్
ఎడిటర్ యొక్క గమనిక: DWIN స్మార్ట్ స్క్రీన్ UI అభివృద్ధిని పూర్తి చేయడానికి చిత్రాలపై ఆధారపడి ఉంటుంది, ఇది వివిధ ప్రదర్శన ప్రభావాలను సులభంగా గ్రహించగలదు.
2. ఇంటర్ఫేస్ అభివృద్ధి
DGUS సాఫ్ట్వేర్ ద్వారా ఇంటర్ఫేస్ను అభివృద్ధి చేయడం చాలా సులభం మరియు రెండు గ్రాఫిక్ నియంత్రణలు మాత్రమే అవసరం.ఈ రొటీన్లో, ఇంజనీర్ 2.1-అంగుళాల రౌండ్ స్మార్ట్ స్క్రీన్ని ఎంచుకున్నారు.
3. బ్లింక్ యానిమేషన్ను గ్రహించండి
కనురెప్పల చిత్రాలను విరామాలలో ప్రదర్శించబడనివ్వండి:
// బ్లింక్ యానిమేషన్
శూన్యం బ్లింక్_యానిమాట్(శూన్యం)
{
if(blink_flag == 0)
{
బ్లింక్_cnt++;
ఉంటే(blink_cnt >= 4)
{
బ్లింక్_ఫ్లాగ్ = 1;
}
}
లేకపోతే
{
బ్లింక్_cnt–;
if(blink_cnt <= 0)
{
బ్లింక్_ఫ్లాగ్ = 0;
}
}
write_dgus_vp(0×3000, (u8 *)&blink_cnt, 2);
}
శూన్యం బ్లింక్_రన్()
{
స్టాటిక్ u32 run_timer_cnt = 0;
రన్_టైమర్_cnt++;
if(run_timer_cnt >= 2000000)
{
run_timer_cnt = 0;
బ్లింక్_యానిమాట్();
ఆలస్యం_ms(30);
బ్లింక్_యానిమాట్();
ఆలస్యం_ms(30);
బ్లింక్_యానిమాట్();
ఆలస్యం_ms(30);
బ్లింక్_యానిమాట్();
ఆలస్యం_ms(30);
బ్లింక్_యానిమాట్();
ఆలస్యం_ms(30);
బ్లింక్_యానిమాట్();
ఆలస్యం_ms(30);
బ్లింక్_యానిమాట్();
ఆలస్యం_ms(30);
బ్లింక్_యానిమాట్();
ఆలస్యం_ms(30);
}
}
4. కనుబొమ్మలు సహజంగా ఎడమ మరియు కుడివైపు కనిపిస్తున్నాయని గ్రహించండి.
ఇది బ్లింక్ చేయడం లాంటిది, కానీ కంటి కదలికను నియంత్రించడానికి క్రిస్టల్ ఓసిలేటర్ యొక్క సమయాన్ని పోల్చడం అవసరం.అనేక సార్లు డీబగ్గింగ్ చేసిన తర్వాత, ఇంజనీర్ క్రింది కోడ్ల సెట్ను రూపొందించారు.
//ఐబాల్ యానిమేషన్
శూన్యం ఐబాల్_యానిమాట్(శూన్యం)
{
ఐబాల్_టైమర్_cnt++;
ఐబాల్_టైమర్_cnt < 50)
{
eyeball_cnt = 20;
}
లేకపోతే (ఐబాల్_టైమర్_cnt < 51)
{
eyeball_cnt = 50;
}
లేకపోతే (ఐబాల్_టైమర్_cnt < 52)
{
eyeball_cnt = 80;
}
లేకుంటే (ఐబాల్_టైమర్_cnt < 53)
{
eyeball_cnt = 94;
}
లేకుంటే (కంటి బాల్_టైమర్_cnt < 103)
{
eyeball_cnt = 94;
}
లేకపోతే (ఐబాల్_టైమర్_cnt < 104)
{
eyeball_cnt = 80;
}
లేకుంటే (ఐబాల్_టైమర్_cnt < 105)
{
eyeball_cnt = 50;
}
లేకుంటే (ఐబాల్_టైమర్_cnt < 106)
{
eyeball_cnt = 20;
}
లేకపోతే (ఐబాల్_టైమర్_cnt < 107)
{
eyeball_cnt = -10;
}
లేకపోతే (ఐబాల్_టైమర్_cnt < 108)
{
eyeball_cnt = -40;
}
లేకపోతే (ఐబాల్_టైమర్_cnt < 158)
{
eyeball_cnt = -54;
}
లేకపోతే (ఐబాల్_టైమర్_cnt < 159)
{
eyeball_cnt = -40;
}
లేకపోతే (ఐబాల్_టైమర్_cnt < 160)
{
eyeball_cnt = -10;
}
లేకపోతే (ఐబాల్_టైమర్_cnt < 161)
{
eyeball_cnt = 20;
ఐబాల్_టైమర్_cnt = 0;
}
//ఎడమ మరియు కుడికి తరలించండి
// if(కంటి బాల్_ఫ్లాగ్ == 0)
// {
// eyeball_cnt++;
// if(eyeball_cnt >= 94)
// {
// ఐబాల్_ఫ్లాగ్ = 1;
// }
// }
// లేకపోతే
// {
// ఐబాల్_cnt–;
// if(eyeball_cnt <= -54)
// {
// ఐబాల్_ఫ్లాగ్ = 0;
// }
// }
ఉంటే(కంటి చూపు_cnt >= 0)
{
ఐబాల్_పోస్[0] = 0×00;
eyeball_pos[1] = eyeball_cnt;
}
లేకపోతే
{
ఐబాల్_పోస్[0] = 0xFF;
eyeball_pos[1] = (eyeball_cnt & 0xFF);
}
write_dgus_vp(0×3111, (u8 *)&eyeball_pos, 2);
}
శూన్యం ఐబాల్_రన్()
{
స్టాటిక్ u32 run_timer_cnt = 0;
రన్_టైమర్_cnt++;
if(run_timer_cnt >= 20000)
{
run_timer_cnt = 0;
ఐబాల్_యానిమాట్();
}
}
5. ముఖాన్ని అనుసరించే కళ్ల కదలికను గ్రహించడానికి ESP32 ముఖ గుర్తింపును జోడించండి.
ఇక్కడ ప్రాసెసింగ్ పద్ధతి ఏమిటంటే, ముఖం గుర్తించబడినప్పుడు, కళ్ళు వాటంతట అవే కదలవు మరియు వేరియబుల్ వేరియబుల్ లూప్లో ఇంక్రిమెంట్గా నిర్వచించబడుతుంది.ఇంక్రిమెంట్ నిర్దిష్ట విలువకు చేరుకున్నప్పుడు, కనుబొమ్మలు వాటంతట అవే కదులుతాయి.సీరియల్ పోర్ట్ డేటాను స్వీకరించినప్పుడు, ఈ వేరియబుల్ క్లియర్ చేయబడుతుంది, ఆపై ముఖం యొక్క స్థానం ప్రకారం మాత్రమే కళ్లను కదిలిస్తుంది.ప్రధాన కోడ్ క్రింది విధంగా ఉంది:
if(rec_data_timer_cnt < 1000000)
{
rec_data_timer_cnt++;
}
లేకపోతే
{
ఐబాల్_రన్ ();
}
బాహ్య u32 rec_data_timer_cnt;
బాహ్య u16 ఐబాల్_టైమర్_cnt;
శూన్యం కమ్యూనికేషన్_CMD(u8 స్టంప్)
{
if((uart[st].Rx_F==1 )&&(uart[st].Rx_T==0))
{
rec_data_timer_cnt = 0;
ఐబాల్_టైమర్_cnt = 0;
#if(Type_Communication==1)
వివరించండి_8283(st);
#elif(Type_Communication==2)
వర్ణించండి_Modbus(st);
#ఎండిఫ్
uart[st].Rx_F=0;
uart[st].Rx_Num=0;
}
}
పోస్ట్ సమయం: జూన్-26-2023