——DWIN ಡೆವಲಪರ್ ಫೋರಮ್ನಿಂದ
ಈ ಬಾರಿ ಎಲ್ಲರಿಗೂ ಶಿಫಾರಸು ಮಾಡಲಾದ DWIN ಡೆವಲಪರ್ ಫೋರಮ್ ಓಪನ್ ಸೋರ್ಸ್ ಯೋಜನೆಯು ಮಾನವ ಕಣ್ಣುಗಳ ಚಲನೆಯನ್ನು ಅನುಕರಿಸಲು ಬಹಳ ಆಸಕ್ತಿದಾಯಕ ದಿನಚರಿಯಾಗಿದೆ. ಕಣ್ಣುಗುಡ್ಡೆಯ ಚಲನೆ, ಮಿಟುಕಿಸುವುದು, ಮುಖ ಗುರುತಿಸುವಿಕೆ ಮತ್ತು ಅನುಸರಿಸುವಿಕೆಯಂತಹ ಕಾರ್ಯಗಳನ್ನು ಅರಿತುಕೊಳ್ಳಲು ಎಂಜಿನಿಯರ್ ಹಲವಾರು ಮಾನವ ಕಣ್ಣಿನ ಚಿತ್ರ ಸಾಮಗ್ರಿಗಳನ್ನು ಬಳಸಿದರು.
ಮುಕ್ತ ಮೂಲ ಪರಿಹಾರಗಳ ಪರಿಚಯ:
1. UI ಇಮೇಜ್ ವಸ್ತು
ಸಂಪಾದಕರ ಟಿಪ್ಪಣಿ: DWIN ಸ್ಮಾರ್ಟ್ ಸ್ಕ್ರೀನ್ UI ಅಭಿವೃದ್ಧಿಯನ್ನು ಪೂರ್ಣಗೊಳಿಸಲು ಚಿತ್ರಗಳನ್ನು ಆಧರಿಸಿದೆ, ಇದು ವಿವಿಧ ಪ್ರದರ್ಶನ ಪರಿಣಾಮಗಳನ್ನು ಸುಲಭವಾಗಿ ಅರಿತುಕೊಳ್ಳಬಹುದು.
2. ಇಂಟರ್ಫೇಸ್ ಅಭಿವೃದ್ಧಿ
DGUS ಸಾಫ್ಟ್ವೇರ್ ಮೂಲಕ ಇಂಟರ್ಫೇಸ್ ಅನ್ನು ಅಭಿವೃದ್ಧಿಪಡಿಸುವುದು ತುಲನಾತ್ಮಕವಾಗಿ ಸರಳವಾಗಿದೆ ಮತ್ತು ಕೇವಲ ಎರಡು ಗ್ರಾಫಿಕ್ ನಿಯಂತ್ರಣಗಳು ಬೇಕಾಗುತ್ತವೆ. ಈ ದಿನಚರಿಯಲ್ಲಿ, ಎಂಜಿನಿಯರ್ 2.1-ಇಂಚಿನ ಸುತ್ತಿನ ಸ್ಮಾರ್ಟ್ ಪರದೆಯನ್ನು ಆರಿಸಿಕೊಂಡರು.
3. ಬ್ಲಿಂಕ್ ಅನಿಮೇಷನ್ ಅನ್ನು ಅರಿತುಕೊಳ್ಳಿ
ಕಣ್ಣುರೆಪ್ಪೆಗಳ ಚಿತ್ರಗಳನ್ನು ಮಧ್ಯಂತರಗಳಲ್ಲಿ ಪ್ರದರ್ಶಿಸಲಿ:
//ಮಿಟುಕಿಸುವ ಅನಿಮೇಷನ್
blink_animat (ಶೂನ್ಯ)
{(
(blink_flag == 0) ಆಗಿದ್ದರೆ
{(
ಬ್ಲಿಂಕ್_ಸಿಎನ್ಟಿ++;
(blink_cnt >= 4) ಆಗಿದ್ದರೆ
{(
ಬ್ಲಿಂಕ್_ಫ್ಲ್ಯಾಗ್ = 1;
}
}
ಬೇರೆ
{(
ಬ್ಲಿಂಕ್_ಸಿಎನ್ಟಿ–;
(blink_cnt
{(
ಬ್ಲಿಂಕ್_ಫ್ಲ್ಯಾಗ್ = 0;
}
}
write_dgus_vp(0×3000, (u8 *)&blink_cnt, 2);
}
blink_run() ಅನ್ನು ರದ್ದುಗೊಳಿಸಿ
{(
ಸ್ಥಿರ u32 ರನ್_ಟೈಮರ್_ಸಿಎನ್ಟಿ = 0;
ರನ್_ಟೈಮರ್_ಸಿಎನ್ಟಿ++;
(run_timer_cnt >= 2000000) ಆಗಿದ್ದರೆ
{(
ರನ್_ಟೈಮರ್_ಸಿಎನ್ಟಿ = 0;
ಬ್ಲಿಂಕ್_ಅನಿಮೇಟ್();
ವಿಳಂಬ_ಎಂಎಸ್(30);
ಬ್ಲಿಂಕ್_ಅನಿಮೇಟ್();
ವಿಳಂಬ_ಎಂಎಸ್(30);
ಬ್ಲಿಂಕ್_ಅನಿಮೇಟ್();
ವಿಳಂಬ_ಎಂಎಸ್(30);
ಬ್ಲಿಂಕ್_ಅನಿಮೇಟ್();
ವಿಳಂಬ_ಎಂಎಸ್(30);
ಬ್ಲಿಂಕ್_ಅನಿಮೇಟ್();
ವಿಳಂಬ_ಎಂಎಸ್(30);
ಬ್ಲಿಂಕ್_ಅನಿಮೇಟ್();
ವಿಳಂಬ_ಎಂಎಸ್(30);
ಬ್ಲಿಂಕ್_ಅನಿಮೇಟ್();
ವಿಳಂಬ_ಎಂಎಸ್(30);
ಬ್ಲಿಂಕ್_ಅನಿಮೇಟ್();
ವಿಳಂಬ_ಎಂಎಸ್(30);
}
}
4. ಕಣ್ಣುಗುಡ್ಡೆಗಳು ಸ್ವಾಭಾವಿಕವಾಗಿ ಎಡ ಮತ್ತು ಬಲಕ್ಕೆ ಕಾಣುತ್ತವೆ ಎಂಬುದನ್ನು ಅರಿತುಕೊಳ್ಳಿ.
ಇದು ಮಿಟುಕಿಸುವುದಕ್ಕೆ ಹೋಲುತ್ತದೆ, ಆದರೆ ಕಣ್ಣಿನ ಚಲನೆಯನ್ನು ನಿಯಂತ್ರಿಸಲು ಸ್ಫಟಿಕ ಆಂದೋಲಕದ ಸಮಯವನ್ನು ಹೋಲಿಸಬೇಕಾಗುತ್ತದೆ. ಹಲವು ಬಾರಿ ಡೀಬಗ್ ಮಾಡಿದ ನಂತರ, ಎಂಜಿನಿಯರ್ ಈ ಕೆಳಗಿನ ಕೋಡ್ಗಳ ಗುಂಪನ್ನು ವಿನ್ಯಾಸಗೊಳಿಸಿದರು.
//ಕಣ್ಣುಗುಡ್ಡೆ ಅನಿಮೇಷನ್
ಅನೂರ್ಜಿತ ಕಣ್ಣುಗುಡ್ಡೆ_ಅನಿಮ್ಯಾಟ್(ಶೂನ್ಯ)
{(
ಕಣ್ಣುಗುಡ್ಡೆ_ಟೈಮರ್_ಸಿಎನ್ಟಿ++;
(ಐಬಾಲ್_ಟೈಮರ್_ಸಿಎನ್ಟಿ
{(
ಕಣ್ಣುಗುಡ್ಡೆ_ಸಿಎನ್ಟಿ = 20;
}
ಇಲ್ಲದಿದ್ದರೆ (ಕಣ್ಣಿನ ಚೆಂಡು_ಟೈಮರ್_ಸಿಎನ್ಟಿ
{(
ಕಣ್ಣುಗುಡ್ಡೆ_ಸಿಎನ್ಟಿ = 50;
}
ಇಲ್ಲದಿದ್ದರೆ (ಕಣ್ಣಿನ ಚೆಂಡು_ಟೈಮರ್_ಸಿಎನ್ಟಿ
{(
ಕಣ್ಣುಗುಡ್ಡೆ_ಸಿಎನ್ಟಿ = 80;
}
ಇಲ್ಲದಿದ್ದರೆ (ಕಣ್ಣಿನ ಚೆಂಡು_ಟೈಮರ್_ಸಿಎನ್ಟಿ
{(
ಕಣ್ಣುಗುಡ್ಡೆ_ಸಿಎನ್ಟಿ = 94;
}
ಇಲ್ಲದಿದ್ದರೆ (ಕಣ್ಣಿನ ಚೆಂಡು_ಟೈಮರ್_ಸಿಎನ್ಟಿ
{(
ಕಣ್ಣುಗುಡ್ಡೆ_ಸಿಎನ್ಟಿ = 94;
}
ಇಲ್ಲದಿದ್ದರೆ (ಕಣ್ಣಿನ ಚೆಂಡು_ಟೈಮರ್_ಸಿಎನ್ಟಿ
{(
ಕಣ್ಣುಗುಡ್ಡೆ_ಸಿಎನ್ಟಿ = 80;
}
ಇಲ್ಲದಿದ್ದರೆ (ಕಣ್ಣಿನ ಚೆಂಡು_ಟೈಮರ್_ಸಿಎನ್ಟಿ
{(
ಕಣ್ಣುಗುಡ್ಡೆ_ಸಿಎನ್ಟಿ = 50;
}
ಇಲ್ಲದಿದ್ದರೆ (ಕಣ್ಣಿನ ಚೆಂಡು_ಟೈಮರ್_ಸಿಎನ್ಟಿ
{(
ಕಣ್ಣುಗುಡ್ಡೆ_ಸಿಎನ್ಟಿ = 20;
}
ಇಲ್ಲದಿದ್ದರೆ (ಕಣ್ಣಿನ ಚೆಂಡು_ಟೈಮರ್_ಸಿಎನ್ಟಿ
{(
ಕಣ್ಣುಗುಡ್ಡೆ_ಸಿಎನ್ಟಿ = -10;
}
ಇಲ್ಲದಿದ್ದರೆ (ಕಣ್ಣಿನ ಚೆಂಡು_ಟೈಮರ್_ಸಿಎನ್ಟಿ
{(
ಕಣ್ಣುಗುಡ್ಡೆ_ಸಿಎನ್ಟಿ = -40;
}
ಇಲ್ಲದಿದ್ದರೆ (ಕಣ್ಣಿನ ಚೆಂಡು_ಟೈಮರ್_ಸಿಎನ್ಟಿ
{(
ಕಣ್ಣುಗುಡ್ಡೆ_ಸಿಎನ್ಟಿ = -54;
}
ಇಲ್ಲದಿದ್ದರೆ (ಕಣ್ಣಿನ ಚೆಂಡು_ಟೈಮರ್_ಸಿಎನ್ಟಿ
{(
ಕಣ್ಣುಗುಡ್ಡೆ_ಸಿಎನ್ಟಿ = -40;
}
ಇಲ್ಲದಿದ್ದರೆ (ಕಣ್ಣಿನ ಚೆಂಡು_ಟೈಮರ್_ಸಿಎನ್ಟಿ
{(
ಕಣ್ಣುಗುಡ್ಡೆ_ಸಿಎನ್ಟಿ = -10;
}
ಇಲ್ಲದಿದ್ದರೆ (ಕಣ್ಣಿನ ಚೆಂಡು_ಟೈಮರ್_ಸಿಎನ್ಟಿ
{(
ಕಣ್ಣುಗುಡ್ಡೆ_ಸಿಎನ್ಟಿ = 20;
ಕಣ್ಣುಗುಡ್ಡೆ_ಟೈಮರ್_ಸಿಎನ್ಟಿ = 0;
}
//ಎಡ ಮತ್ತು ಬಲಕ್ಕೆ ಸರಿಸಿ
// (ಕಣ್ಣುಗುಡ್ಡೆ_ಧ್ವಜ == 0) ಆಗಿದ್ದರೆ
// {
// ಕಣ್ಣುಗುಡ್ಡೆ_ಸಿಎನ್ಟಿ++;
// (ಕಣ್ಣುಗುಡ್ಡೆ_ಸಿಎನ್ಟಿ >= 94) ಆಗಿದ್ದರೆ
// {
// ಕಣ್ಣುಗುಡ್ಡೆ_ಧ್ವಜ = 1;
// }
// }
// ಬೇರೆ
// {
// ಕಣ್ಣುಗುಡ್ಡೆ_ಸಿಎನ್ಟಿ–;
// (ಕಣ್ಣುಗುಡ್ಡೆ_ಸಿಎನ್ಟಿ
// {
// ಕಣ್ಣುಗುಡ್ಡೆ_ಧ್ವಜ = 0;
// }
// }
(ಕಣ್ಣುಗುಡ್ಡೆ_ಸಿಎನ್ಟಿ >= 0) ಇದ್ದರೆ
{(
ಕಣ್ಣುಗುಡ್ಡೆ_ಪೋಸ್[0] = 0×00;
ಕಣ್ಣುಗುಡ್ಡೆ_ಪೋಸ್[1] = ಕಣ್ಣುಗುಡ್ಡೆ_ಸಿಎನ್ಟಿ;
}
ಬೇರೆ
{(
ಕಣ್ಣುಗುಡ್ಡೆ_ಪೋಸ್[0] = 0xFF;
ಕಣ್ಣುಗುಡ್ಡೆ_ಪೋಸ್[1] = (ಕಣ್ಣುಗುಡ್ಡೆ_ಸಿಎನ್ಟಿ & 0xFF);
}
write_dgus_vp(0×3111, (u8 *)&eyeball_pos, 2);
}
ಶೂನ್ಯ ಕಣ್ಣುಗುಡ್ಡೆ_ರನ್()
{(
ಸ್ಥಿರ u32 ರನ್_ಟೈಮರ್_ಸಿಎನ್ಟಿ = 0;
ರನ್_ಟೈಮರ್_ಸಿಎನ್ಟಿ++;
(run_timer_cnt >= 20000) ಆಗಿದ್ದರೆ
{(
ರನ್_ಟೈಮರ್_ಸಿಎನ್ಟಿ = 0;
ಕಣ್ಣುಗುಡ್ಡೆ_ಅನಿಮ್ಯಾಟ್();
}
}
5. ಮುಖವನ್ನು ಅನುಸರಿಸುವ ಕಣ್ಣುಗಳ ಚಲನೆಯನ್ನು ಅರಿತುಕೊಳ್ಳಲು ESP32 ಮುಖ ಗುರುತಿಸುವಿಕೆಯನ್ನು ಸೇರಿಸಿ.
ಇಲ್ಲಿ ಸಂಸ್ಕರಣಾ ವಿಧಾನವೆಂದರೆ ಮುಖ ಪತ್ತೆಯಾದಾಗ, ಕಣ್ಣುಗಳು ತಾವಾಗಿಯೇ ಚಲಿಸುವುದಿಲ್ಲ, ಮತ್ತು while ಲೂಪ್ನಲ್ಲಿ ವೇರಿಯೇಬಲ್ ಅನ್ನು ಹೆಚ್ಚಿಸಲು ವ್ಯಾಖ್ಯಾನಿಸಲಾಗಿದೆ. ಇನ್ಕ್ರಿಮೆಂಟ್ ಒಂದು ನಿರ್ದಿಷ್ಟ ಮೌಲ್ಯವನ್ನು ತಲುಪಿದಾಗ, ಕಣ್ಣುಗುಡ್ಡೆಗಳು ತಾವಾಗಿಯೇ ಚಲಿಸುತ್ತವೆ. ಸೀರಿಯಲ್ ಪೋರ್ಟ್ ಡೇಟಾವನ್ನು ಸ್ವೀಕರಿಸಿದಾಗ, ಈ ವೇರಿಯೇಬಲ್ ಅನ್ನು ತೆರವುಗೊಳಿಸಲಾಗುತ್ತದೆ ಮತ್ತು ನಂತರ ಮುಖದ ಸ್ಥಾನಕ್ಕೆ ಅನುಗುಣವಾಗಿ ಕಣ್ಣುಗಳನ್ನು ಮಾತ್ರ ಚಲಿಸುತ್ತದೆ. ಮುಖ್ಯ ಕೋಡ್ ಈ ಕೆಳಗಿನಂತಿರುತ್ತದೆ:
(rec_data_timer_cnt
{(
ರೆಕ್_ಡೇಟಾ_ಟೈಮರ್_ಸಿಎನ್ಟಿ++;
}
ಬೇರೆ
{(
ಕಣ್ಣುಗುಡ್ಡೆ_ರನ್();
}
ಬಾಹ್ಯ u32 rec_data_timer_cnt;
ಬಾಹ್ಯ u16 ಕಣ್ಣುಗುಡ್ಡೆ_ಟೈಮರ್_ಸಿಎನ್ಟಿ;
ಶೂನ್ಯ ಸಂವಹನ_CMD(u8 ಸ್ಟ)
{(
((uart[st].Rx_F==1 )&&(uart[st].Rx_T==0)) ಆಗಿದ್ದರೆ
{(
rec_data_timer_cnt = 0;
ಕಣ್ಣುಗುಡ್ಡೆ_ಟೈಮರ್_ಸಿಎನ್ಟಿ = 0;
#ಒಂದು ವೇಳೆ(ಟೈಪ್_ಸಂವಹನ==1)
ವಿವರಿಸಿ_8283(st);
#elif(ಪ್ರಕಾರ_ಸಂವಹನ==2)
ಮಾಡ್ಬಸ್ ಅನ್ನು ವಿವರಿಸಿ(st);
#ಎಂಡಿಫ್
ಆರ್ಟ್[ಸ್ಟ].ಆರ್x_ಎಫ್=0;
ಆರ್ಟ್[ಸ್ಟ].ಆರ್ಎಕ್ಸ್_ಸಂಖ್ಯೆ=0;
}
}
ಪೋಸ್ಟ್ ಸಮಯ: ಜೂನ್-26-2023





