——DWIN ಡೆವಲಪರ್ ಫೋರಮ್ನಿಂದ
ಈ ಬಾರಿ ಎಲ್ಲರಿಗೂ ಶಿಫಾರಸು ಮಾಡಲಾದ DWIN ಡೆವಲಪರ್ ಫೋರಮ್ ಓಪನ್ ಸೋರ್ಸ್ ಪ್ರಾಜೆಕ್ಟ್ ಮಾನವನ ಕಣ್ಣುಗಳ ಚಲನೆಯನ್ನು ಅನುಕರಿಸಲು ಬಹಳ ಆಸಕ್ತಿದಾಯಕ ದಿನಚರಿಯಾಗಿದೆ.ಇಂಜಿನಿಯರ್ ಕಣ್ಣುಗುಡ್ಡೆಯ ಚಲನೆ, ಮಿಟುಕಿಸುವುದು, ಮುಖ ಗುರುತಿಸುವಿಕೆ ಮತ್ತು ಅನುಸರಿಸುವಿಕೆಯಂತಹ ಕಾರ್ಯಗಳನ್ನು ಅರಿತುಕೊಳ್ಳಲು ಹಲವಾರು ಮಾನವ ಕಣ್ಣಿನ ಚಿತ್ರ ವಸ್ತುಗಳನ್ನು ಬಳಸಿದರು.
ತೆರೆದ ಮೂಲ ಪರಿಹಾರಗಳ ಪರಿಚಯ:
1. UI ಚಿತ್ರದ ವಸ್ತು
ಸಂಪಾದಕರ ಟಿಪ್ಪಣಿ: DWIN ಸ್ಮಾರ್ಟ್ ಪರದೆಯು UI ಅಭಿವೃದ್ಧಿಯನ್ನು ಪೂರ್ಣಗೊಳಿಸಲು ಚಿತ್ರಗಳನ್ನು ಆಧರಿಸಿದೆ, ಇದು ವಿವಿಧ ಪ್ರದರ್ಶನ ಪರಿಣಾಮಗಳನ್ನು ಸುಲಭವಾಗಿ ಅರಿತುಕೊಳ್ಳಬಹುದು.
2. ಇಂಟರ್ಫೇಸ್ ಅಭಿವೃದ್ಧಿ
DGUS ಸಾಫ್ಟ್ವೇರ್ ಮೂಲಕ ಇಂಟರ್ಫೇಸ್ ಅನ್ನು ಅಭಿವೃದ್ಧಿಪಡಿಸುವುದು ತುಲನಾತ್ಮಕವಾಗಿ ಸರಳವಾಗಿದೆ ಮತ್ತು ಕೇವಲ ಎರಡು ಗ್ರಾಫಿಕ್ ನಿಯಂತ್ರಣಗಳು ಅಗತ್ಯವಿದೆ.ಈ ದಿನಚರಿಯಲ್ಲಿ, ಎಂಜಿನಿಯರ್ 2.1-ಇಂಚಿನ ಸುತ್ತಿನ ಸ್ಮಾರ್ಟ್ ಪರದೆಯನ್ನು ಆಯ್ಕೆ ಮಾಡಿದರು.
3. ಬ್ಲಿಂಕ್ ಅನಿಮೇಷನ್ ಅನ್ನು ಅರಿತುಕೊಳ್ಳಿ
ಕಣ್ಣುರೆಪ್ಪೆಗಳ ಚಿತ್ರಗಳನ್ನು ಮಧ್ಯಂತರದಲ್ಲಿ ಪ್ರದರ್ಶಿಸಲಿ:
//ಬ್ಲಿಂಕ್ ಅನಿಮೇಷನ್
ನಿರರ್ಥಕ ಬ್ಲಿಂಕ್_ಅನಿಮ್ಯಾಟ್(ಶೂನ್ಯ)
{
if(blink_flag == 0)
{
blink_cnt++;
ವೇಳೆ(blink_cnt >= 4)
{
blink_flag = 1;
}
}
ಬೇರೆ
{
blink_cnt–;
if(blink_cnt <= 0)
{
blink_flag = 0;
}
}
write_dgus_vp(0×3000, (u8 *)&blink_cnt, 2);
}
ಶೂನ್ಯ ಬ್ಲಿಂಕ್_ರನ್()
{
ಸ್ಥಿರ u32 run_timer_cnt = 0;
ರನ್_ಟೈಮರ್_ಸಿಎನ್ಟಿ++;
if(run_timer_cnt >= 2000000)
{
ರನ್_ಟೈಮರ್_ಸಿಎನ್ಟಿ = 0;
blink_animat();
ವಿಳಂಬ_ms(30);
blink_animat();
ವಿಳಂಬ_ms(30);
blink_animat();
ವಿಳಂಬ_ms(30);
blink_animat();
ವಿಳಂಬ_ms(30);
blink_animat();
ವಿಳಂಬ_ms(30);
blink_animat();
ವಿಳಂಬ_ms(30);
blink_animat();
ವಿಳಂಬ_ms(30);
blink_animat();
ವಿಳಂಬ_ms(30);
}
}
4. ಕಣ್ಣುಗುಡ್ಡೆಗಳು ಎಡ ಮತ್ತು ಬಲಕ್ಕೆ ನೈಸರ್ಗಿಕವಾಗಿ ಕಾಣುತ್ತವೆ ಎಂಬುದನ್ನು ಅರಿತುಕೊಳ್ಳಿ.
ಇದು ಮಿಟುಕಿಸುವಿಕೆಯಂತೆಯೇ ಇರುತ್ತದೆ, ಆದರೆ ಇದು ಕಣ್ಣಿನ ಚಲನೆಯನ್ನು ನಿಯಂತ್ರಿಸಲು ಸ್ಫಟಿಕ ಆಂದೋಲಕದ ಸಮಯವನ್ನು ಹೋಲಿಸುವ ಅಗತ್ಯವಿದೆ.ಹಲವು ಬಾರಿ ಡೀಬಗ್ ಮಾಡಿದ ನಂತರ, ಇಂಜಿನಿಯರ್ ಈ ಕೆಳಗಿನ ಕೋಡ್ಗಳನ್ನು ವಿನ್ಯಾಸಗೊಳಿಸಿದರು.
//ಐಬಾಲ್ ಅನಿಮೇಷನ್
ಅನೂರ್ಜಿತ ಕಣ್ಣುಗುಡ್ಡೆ_ಅನಿಮಾಟ್(ಶೂನ್ಯ)
{
ಐಬಾಲ್_ಟೈಮರ್_ಸಿಎನ್ಟಿ++;
ವೇಳೆ(ಐಬಾಲ್_ಟೈಮರ್_ಸಿಎನ್ಟಿ < 50)
{
ಐಬಾಲ್_ಸಿಎನ್ಟಿ = 20;
}
ಇಲ್ಲದಿದ್ದರೆ (ಐಬಾಲ್_ಟೈಮರ್_ಸಿಎನ್ಟಿ < 51)
{
ಐಬಾಲ್_ಸಿಎನ್ಟಿ = 50;
}
ಇಲ್ಲದಿದ್ದರೆ (ಐಬಾಲ್_ಟೈಮರ್_ಸಿಎನ್ಟಿ < 52)
{
ಐಬಾಲ್_ಸಿಎನ್ಟಿ = 80;
}
ಇಲ್ಲದಿದ್ದರೆ (ಕಣ್ಣುಗುಡ್ಡೆ_ಟೈಮರ್_ಸಿಎನ್ಟಿ < 53)
{
ಐಬಾಲ್_ಸಿಎನ್ಟಿ = 94;
}
ಇಲ್ಲದಿದ್ದರೆ (ಕಣ್ಣುಗುಡ್ಡೆ_ಟೈಮರ್_ಸಿಎನ್ಟಿ < 103)
{
ಐಬಾಲ್_ಸಿಎನ್ಟಿ = 94;
}
ಇಲ್ಲದಿದ್ದರೆ (ಐಬಾಲ್_ಟೈಮರ್_ಸಿಎನ್ಟಿ < 104)
{
ಐಬಾಲ್_ಸಿಎನ್ಟಿ = 80;
}
ಇಲ್ಲದಿದ್ದರೆ (ಕಣ್ಣುಗುಡ್ಡೆ_ಟೈಮರ್_ಸಿಎನ್ಟಿ < 105)
{
ಐಬಾಲ್_ಸಿಎನ್ಟಿ = 50;
}
ಇಲ್ಲದಿದ್ದರೆ (ಕಣ್ಣುಗುಡ್ಡೆ_ಟೈಮರ್_ಸಿಎನ್ಟಿ < 106)
{
ಐಬಾಲ್_ಸಿಎನ್ಟಿ = 20;
}
ಇಲ್ಲದಿದ್ದರೆ (ಕಣ್ಣುಗುಡ್ಡೆ_ಟೈಮರ್_ಸಿಎನ್ಟಿ < 107)
{
eyeball_cnt = -10;
}
ಇಲ್ಲದಿದ್ದರೆ (ಕಣ್ಣುಗುಡ್ಡೆ_ಟೈಮರ್_ಸಿಎನ್ಟಿ < 108)
{
eyeball_cnt = -40;
}
ಇಲ್ಲದಿದ್ದರೆ (ಐಬಾಲ್_ಟೈಮರ್_ಸಿಎನ್ಟಿ < 158)
{
eyeball_cnt = -54;
}
ಇಲ್ಲದಿದ್ದರೆ (ಐಬಾಲ್_ಟೈಮರ್_ಸಿಎನ್ಟಿ < 159)
{
eyeball_cnt = -40;
}
ಇಲ್ಲದಿದ್ದರೆ (ಕಣ್ಣುಗುಡ್ಡೆ_ಟೈಮರ್_ಸಿಎನ್ಟಿ < 160)
{
eyeball_cnt = -10;
}
ಇಲ್ಲದಿದ್ದರೆ (ಕಣ್ಣುಗುಡ್ಡೆ_ಟೈಮರ್_ಸಿಎನ್ಟಿ < 161)
{
ಐಬಾಲ್_ಸಿಎನ್ಟಿ = 20;
ಐಬಾಲ್_ಟೈಮರ್_ಸಿಎನ್ಟಿ = 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;
}
ಬೇರೆ
{
eyeball_pos[0] = 0xFF;
eyeball_pos[1] = (eyeball_cnt & 0xFF);
}
write_dgus_vp(0×3111, (u8 *)&eyeball_pos, 2);
}
ಅನೂರ್ಜಿತ ಐಬಾಲ್_ರನ್()
{
ಸ್ಥಿರ u32 run_timer_cnt = 0;
ರನ್_ಟೈಮರ್_ಸಿಎನ್ಟಿ++;
if(run_timer_cnt >= 20000)
{
ರನ್_ಟೈಮರ್_ಸಿಎನ್ಟಿ = 0;
ಕಣ್ಣುಗುಡ್ಡೆ_ಅನಿಮಾಟ್ ();
}
}
5. ಮುಖದ ನಂತರ ಕಣ್ಣುಗಳ ಚಲನೆಯನ್ನು ಅರಿತುಕೊಳ್ಳಲು ESP32 ಮುಖ ಗುರುತಿಸುವಿಕೆಯನ್ನು ಸೇರಿಸಿ.
ಇಲ್ಲಿ ಸಂಸ್ಕರಣಾ ವಿಧಾನವೆಂದರೆ ಮುಖವನ್ನು ಪತ್ತೆಹಚ್ಚಿದಾಗ, ಕಣ್ಣುಗಳು ತಾನಾಗಿಯೇ ಚಲಿಸುವುದಿಲ್ಲ, ಮತ್ತು ವೇರಿಯಬಲ್ ಅನ್ನು ಲೂಪ್ನಲ್ಲಿ ಹೆಚ್ಚಳಕ್ಕೆ ವ್ಯಾಖ್ಯಾನಿಸಲಾಗುತ್ತದೆ.ಹೆಚ್ಚಳವು ಒಂದು ನಿರ್ದಿಷ್ಟ ಮೌಲ್ಯವನ್ನು ತಲುಪಿದಾಗ, ಕಣ್ಣುಗುಡ್ಡೆಗಳು ಸ್ವತಃ ಚಲಿಸುತ್ತವೆ.ಸೀರಿಯಲ್ ಪೋರ್ಟ್ ಡೇಟಾವನ್ನು ಸ್ವೀಕರಿಸಿದಾಗ, ಈ ವೇರಿಯಬಲ್ ಅನ್ನು ತೆರವುಗೊಳಿಸಲಾಗುತ್ತದೆ ಮತ್ತು ನಂತರ ಮುಖದ ಸ್ಥಾನಕ್ಕೆ ಅನುಗುಣವಾಗಿ ಕಣ್ಣುಗಳನ್ನು ಮಾತ್ರ ಸರಿಸಿ.ಮುಖ್ಯ ಕೋಡ್ ಈ ಕೆಳಗಿನಂತಿರುತ್ತದೆ:
if(rec_data_timer_cnt < 1000000)
{
rec_data_timer_cnt++;
}
ಬೇರೆ
{
ಐಬಾಲ್_ರನ್ ();
}
ಬಾಹ್ಯ u32 rec_data_timer_cnt;
ಬಾಹ್ಯ u16 ಐಬಾಲ್_ಟೈಮರ್_ಸಿಎನ್ಟಿ;
ಅನೂರ್ಜಿತ ಸಂವಹನ_CMD(u8 ಸ್ಟ)
{
if((uart[st].Rx_F==1 )&&(uart[st].Rx_T==0))
{
rec_data_timer_cnt = 0;
ಐಬಾಲ್_ಟೈಮರ್_ಸಿಎನ್ಟಿ = 0;
# ವೇಳೆ(ಪ್ರಕಾರ_ಸಂವಹನ==1)
ವಿವರಿಸಿ_8283(ಸ್ಟ);
#elif(ಟೈಪ್_ಕಮ್ಯುನಿಕೇಶನ್==2)
Modbus (st) ಅನ್ನು ವಿವರಿಸಿ;
#ಎಂಡಿಫ್
uart[st].Rx_F=0;
uart[st].Rx_Num=0;
}
}
ಪೋಸ್ಟ್ ಸಮಯ: ಜೂನ್-26-2023