DWIN സർക്കുലർ സ്ക്രീനിനെ അടിസ്ഥാനമാക്കിയുള്ള സ്മാർട്ട് ഐ

——DWIN ഡവലപ്പർ ഫോറത്തിൽ നിന്ന്

ഇത്തവണ എല്ലാവർക്കും ശുപാർശ ചെയ്യുന്ന DWIN ഡവലപ്പർ ഫോറം ഓപ്പൺ സോഴ്‌സ് പ്രോജക്റ്റ് മനുഷ്യൻ്റെ കണ്ണുകളുടെ ചലനത്തെ അനുകരിക്കുന്നതിനുള്ള വളരെ രസകരമായ ഒരു ദിനചര്യയാണ്. ഐബോൾ ചലനം, മിന്നൽ, മുഖം തിരിച്ചറിയൽ, പിന്തുടരൽ തുടങ്ങിയ പ്രവർത്തനങ്ങൾ തിരിച്ചറിയാൻ എഞ്ചിനീയർ നിരവധി മനുഷ്യ നേത്ര ചിത്ര സാമഗ്രികൾ ഉപയോഗിച്ചു.

ഓപ്പൺ സോഴ്സ് സൊല്യൂഷനുകളുടെ ആമുഖം:

1. UI ഇമേജ് മെറ്റീരിയൽ

എഡിറ്ററുടെ കുറിപ്പ്: DWIN സ്മാർട്ട് സ്‌ക്രീൻ UI വികസനം പൂർത്തിയാക്കുന്നതിനുള്ള ചിത്രങ്ങളെ അടിസ്ഥാനമാക്കിയുള്ളതാണ്, ഇത് വിവിധ ഡിസ്‌പ്ലേ ഇഫക്‌റ്റുകൾ എളുപ്പത്തിൽ മനസ്സിലാക്കാൻ കഴിയും.

dytrgf (1)

2. ഇൻ്റർഫേസ് വികസനം

DGUS സോഫ്റ്റ്‌വെയർ വഴി ഇൻ്റർഫേസ് വികസിപ്പിക്കുന്നത് താരതമ്യേന ലളിതമാണ്, രണ്ട് ഗ്രാഫിക് നിയന്ത്രണങ്ങൾ മാത്രമേ ആവശ്യമുള്ളൂ. ഈ ദിനചര്യയിൽ, എഞ്ചിനീയർ 2.1 ഇഞ്ച് റൗണ്ട് സ്മാർട്ട് സ്‌ക്രീൻ തിരഞ്ഞെടുത്തു.

dytrgf (2)

3. ബ്ലിങ്ക് ആനിമേഷൻ തിരിച്ചറിയുക

കണ്പോളകളുടെ ചിത്രങ്ങൾ ഇടവേളകളിൽ പ്രദർശിപ്പിക്കട്ടെ:

//ബ്ലിങ്ക് ആനിമേഷൻ

ശൂന്യമായ ബ്ലിങ്ക്_ആനിമാറ്റ്(ശൂന്യം)

{

എങ്കിൽ(blink_flag == 0)

{

blink_cnt++;

എങ്കിൽ(blink_cnt >= 4)

{

blink_flag = 1;

}

}

വേറെ

{

blink_cnt–;

എങ്കിൽ(blink_cnt

{

blink_flag = 0;

}

}

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

}

ശൂന്യമായ ബ്ലിങ്ക്_റൺ()

{

സ്റ്റാറ്റിക് u32 run_timer_cnt = 0;

run_timer_cnt++;

if(run_timer_cnt >= 2000000)

{

run_timer_cnt = 0;

blink_animated();

Delay_ms(30);

blink_animated();

Delay_ms(30);

blink_animated();

Delay_ms(30);

blink_animated();

Delay_ms(30);

blink_animated();

Delay_ms(30);

blink_animated();

Delay_ms(30);

blink_animated();

Delay_ms(30);

blink_animated();

Delay_ms(30);

}

}

4. നേത്രഗോളങ്ങൾ സ്വാഭാവികമായും ഇടത്തോട്ടും വലത്തോട്ടും കാണപ്പെടുന്നുവെന്ന് മനസ്സിലാക്കുക.

ഇത് മിന്നിമറയുന്നതിന് സമാനമാണ്, പക്ഷേ കണ്ണിൻ്റെ ചലനം നിയന്ത്രിക്കുന്നതിന് ക്രിസ്റ്റൽ ഓസിലേറ്ററിൻ്റെ സമയം താരതമ്യം ചെയ്യേണ്ടതുണ്ട്. നിരവധി തവണ ഡീബഗ്ഗിംഗിന് ശേഷം, എഞ്ചിനീയർ ഇനിപ്പറയുന്ന കോഡുകൾ രൂപകൽപ്പന ചെയ്‌തു.

//ഐബോൾ ആനിമേഷൻ

അസാധുവായ ഐബോൾ_ആനിമാറ്റ്(ശൂന്യം)

{

ഐബോൾ_ടൈമർ_cnt++;

if(eyeball_timer_cnt

{

eyeball_cnt = 20;

}

അല്ലെങ്കിൽ (ഐബോൾ_ടൈമർ_cnt

{

eyeball_cnt = 50;

}

അല്ലാത്തപക്ഷം (eyeball_timer_cnt

{

eyeball_cnt = 80;

}

ഇല്ലെങ്കിൽ (eyeball_timer_cnt

{

eyeball_cnt = 94;

}

അല്ലാത്തപക്ഷം (eyeball_timer_cnt

{

eyeball_cnt = 94;

}

അല്ലാത്തപക്ഷം (eyeball_timer_cnt

{

eyeball_cnt = 80;

}

അല്ലാത്തപക്ഷം (eyeball_timer_cnt

{

eyeball_cnt = 50;

}

അല്ലാത്തപക്ഷം (eyeball_timer_cnt

{

eyeball_cnt = 20;

}

അല്ലാത്തപക്ഷം (eyeball_timer_cnt

{

eyeball_cnt = -10;

}

അല്ലെങ്കിൽ (ഐബോൾ_ടൈമർ_cnt

{

eyeball_cnt = -40;

}

അല്ലെങ്കിൽ (ഐബോൾ_ടൈമർ_cnt

{

eyeball_cnt = -54;

}

അല്ലാത്തപക്ഷം (eyeball_timer_cnt

{

eyeball_cnt = -40;

}

അല്ലാത്തപക്ഷം (eyeball_timer_cnt

{

eyeball_cnt = -10;

}

ഇല്ലെങ്കിൽ (ഐബോൾ_ടൈമർ_cnt

{

eyeball_cnt = 20;

eyeball_timer_cnt = 0;

}

//ഇടത്തോട്ടും വലത്തോട്ടും നീങ്ങുക

// if(eyeball_flag == 0)

// {

// eyeball_cnt++;

// if(eyeball_cnt >= 94)

// {

// eyeball_flag = 1;

// }

// }

// വേറെ

// {

// eyeball_cnt–;

// if(eyeball_cnt

// {

// eyeball_flag = 0;

// }

// }

എങ്കിൽ(eyeball_cnt >= 0)

{

ഐബോൾ_പോസ്[0] = 0×00;

eyeball_pos[1] = eyeball_cnt;

}

വേറെ

{

eyeball_pos[0] = 0xFF;

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

}

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

}

ശൂന്യമായ ഐബോൾ_റൺ()

{

സ്റ്റാറ്റിക് u32 run_timer_cnt = 0;

run_timer_cnt++;

if(run_timer_cnt >= 20000)

{

run_timer_cnt = 0;

animated_eyeball();

}

}

5. മുഖത്തെ പിന്തുടരുന്ന കണ്ണുകളുടെ ചലനം തിരിച്ചറിയാൻ ESP32 മുഖം തിരിച്ചറിയൽ ചേർക്കുക.

ഇവിടെയുള്ള പ്രോസസ്സിംഗ് രീതി, മുഖം കണ്ടുപിടിക്കുമ്പോൾ, കണ്ണുകൾ സ്വയം ചലിക്കുന്നില്ല, ഒപ്പം വേരിയബിൾ ലൂപ്പിൽ ഇൻക്രിമെൻ്റായി നിർവചിക്കപ്പെടുന്നു എന്നതാണ്. ഇൻക്രിമെൻ്റ് ഒരു നിശ്ചിത മൂല്യത്തിൽ എത്തുമ്പോൾ, കണ്പോളകൾ സ്വയം നീങ്ങും. സീരിയൽ പോർട്ടിന് ഡാറ്റ ലഭിക്കുമ്പോൾ, ഈ വേരിയബിൾ മായ്‌ക്കും, തുടർന്ന് മുഖത്തിൻ്റെ സ്ഥാനത്തിനനുസരിച്ച് മാത്രം കണ്ണുകൾ നീക്കുക. പ്രധാന കോഡ് ഇപ്രകാരമാണ്:

if(rec_data_timer_cnt

{

rec_data_timer_cnt++;

}

വേറെ

{

ഐബോൾ_റൺ();

}

extern u32 rec_data_timer_cnt;

എക്‌സ്‌റ്റേൺ u16 eyeball_timer_cnt;

അസാധുവായ ആശയവിനിമയം_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)

വിവരിക്കുക_8283(st);

#elif(Type_Communication==2)

വിവരിക്കുക_മോഡ്ബസ്(st);

#endif

uart[st].Rx_F=0;

uart[st].Rx_Num=0;

}

}


പോസ്റ്റ് സമയം: ജൂൺ-26-2023