—— DWIN ଡେଭଲପର୍ ଫୋରମ୍ ରୁ |
ମାନବ ଆଖିର ଗତିବିଧିକୁ ଅନୁକରଣ କରିବା ପାଇଁ DWIN ଡେଭଲପର୍ ଫୋରମ୍ ଓପନ୍ ସୋର୍ସ ପ୍ରୋଜେକ୍ଟ ସମସ୍ତଙ୍କ ପାଇଁ ଏଥର ସୁପାରିଶ କରାଯାଇଛି |ଇଞ୍ଜିନିୟର୍ ଅନେକ ମାନବ ଚକ୍ଷୁ ଚିତ୍ର ସାମଗ୍ରୀ ବ୍ୟବହାର କରିଥିଲେ ଯେପରିକି ଆଇବଲ୍ ଗତି, ink ଲସି ଉଠିବା, ଚେହେରା ଚିହ୍ନିବା ଏବଂ ଅନୁସରଣ କରିବା |
ମୁକ୍ତ ଉତ୍ସ ସମାଧାନର ପରିଚୟ:
1. UI ପ୍ରତିଛବି ସାମଗ୍ରୀ |
ସଂପାଦକଙ୍କ ଟିପ୍ପଣୀ: UI ବିକାଶ ସଂପୂର୍ଣ୍ଣ କରିବାକୁ DWIN ସ୍ମାର୍ଟ ସ୍କ୍ରିନ ଚିତ୍ର ଉପରେ ଆଧାରିତ, ଯାହା ବିଭିନ୍ନ ପ୍ରଦର୍ଶନ ପ୍ରଭାବକୁ ସହଜରେ ହୃଦୟଙ୍ଗମ କରିପାରିବ |
2. ଇଣ୍ଟରଫେସ୍ ବିକାଶ
DGUS ସଫ୍ଟୱେର୍ ମାଧ୍ୟମରେ ଇଣ୍ଟରଫେସ୍ ବିକାଶ କରିବା ଅପେକ୍ଷାକୃତ ସରଳ, ଏବଂ କେବଳ ଦୁଇଟି ଗ୍ରାଫିକ୍ କଣ୍ଟ୍ରୋଲ୍ ଆବଶ୍ୟକ |ଏହି ରୁଟିନ୍ରେ, ଇଞ୍ଜିନିୟର 2.1-ଇଞ୍ଚ ରାଉଣ୍ଡ ସ୍ମାର୍ଟ ସ୍କ୍ରିନ୍ ବାଛିଲେ |
3. ink ଲକ ଆନିମେସନ୍ ହୃଦୟଙ୍ଗମ କରନ୍ତୁ |
ଆଖିପତାଗୁଡ଼ିକର ଚିତ୍ରଗୁଡ଼ିକ ବ୍ୟବଧାନରେ ପରବର୍ତ୍ତୀ ସମୟରେ ପ୍ରଦର୍ଶିତ ହେବାକୁ ଦିଅନ୍ତୁ:
// ବ୍ଲିକ୍ ଆନିମେସନ୍ |
ଶୂନ୍ୟ blink_animat (ଶୂନ୍ୟ)
{
ଯଦି (blink_flag == 0)
{
blink_cnt ++;
ଯଦି (blink_cnt> = 4)
{
blink_flag = 1;
}
}
ଅନ୍ୟ
{
blink_cnt–;
ଯଦି (blink_cnt <= 0)
{
blink_flag = 0;
}
}
write_dgus_vp (0 × 3000, (u8 *) & blink_cnt, 2);
}
void blink_run ()
{
static u32 run_timer_cnt = 0;
run_timer_cnt ++;
ଯଦି (run_timer_cnt> = 2000000)
{
run_timer_cnt = 0;
blink_animat ();
ବିଳମ୍ବ_ମସ୍ (30);
blink_animat ();
ବିଳମ୍ବ_ମସ୍ (30);
blink_animat ();
ବିଳମ୍ବ_ମସ୍ (30);
blink_animat ();
ବିଳମ୍ବ_ମସ୍ (30);
blink_animat ();
ବିଳମ୍ବ_ମସ୍ (30);
blink_animat ();
ବିଳମ୍ବ_ମସ୍ (30);
blink_animat ();
ବିଳମ୍ବ_ମସ୍ (30);
blink_animat ();
ବିଳମ୍ବ_ମସ୍ (30);
}
}
4. ଆଖିପତା ପ୍ରାକୃତିକ ଭାବରେ ବାମ ଏବଂ ଡାହାଣ ଦେଖାଯାଏ |
ଏହା ink ଲସି ଉଠିବା ସହିତ ସମାନ, କିନ୍ତୁ ଆଖିର ଗତିକୁ ନିୟନ୍ତ୍ରଣ କରିବା ପାଇଁ ଏହା ସ୍ଫଟିକ୍ ଓସିଲେଟରର ସମୟ ତୁଳନା କରିବା ଆବଶ୍ୟକ |ଅନେକ ଥର ତ୍ରୁଟି ନିବାରଣ ପରେ, ଇଞ୍ଜିନିୟର ନିମ୍ନ କୋଡ୍ ସେଟ୍ ଡିଜାଇନ୍ କଲେ |
// ଆଇବଲ୍ ଆନିମେସନ୍ |
ଶୂନ୍ୟ ଚକ୍ଷୁ_ନିମାଟ୍ (ଶୂନ୍ୟ)
{
eyeball_timer_cnt ++;
ଯଦି (eyeball_timer_cnt <50)
{
eyeball_cnt = 20;
}
ଅନ୍ୟଥା ଯଦି (eyeball_timer_cnt <51)
{
eyeball_cnt = 50;
}
ଅନ୍ୟଥା ଯଦି (eyeball_timer_cnt <52)
{
eyeball_cnt = 80;
}
ଅନ୍ୟଥା ଯଦି (eyeball_timer_cnt <53)
{
eyeball_cnt = 94;
}
ଅନ୍ୟଥା ଯଦି (eyeball_timer_cnt <103)
{
eyeball_cnt = 94;
}
ଅନ୍ୟଥା ଯଦି (eyeball_timer_cnt <104)
{
eyeball_cnt = 80;
}
ଅନ୍ୟଥା ଯଦି (eyeball_timer_cnt <105)
{
eyeball_cnt = 50;
}
ଅନ୍ୟଥା ଯଦି (eyeball_timer_cnt <106)
{
eyeball_cnt = 20;
}
ଅନ୍ୟଥା ଯଦି (eyeball_timer_cnt <107)
{
eyeball_cnt = -10;
}
ଅନ୍ୟଥା ଯଦି (eyeball_timer_cnt <108)
{
eyeball_cnt = -40;
}
ଅନ୍ୟଥା ଯଦି (eyeball_timer_cnt <158)
{
eyeball_cnt = -54;
}
ଅନ୍ୟଥା ଯଦି (eyeball_timer_cnt <159)
{
eyeball_cnt = -40;
}
ଅନ୍ୟଥା ଯଦି (eyeball_timer_cnt <160)
{
eyeball_cnt = -10;
}
ଅନ୍ୟଥା ଯଦି (eyeball_timer_cnt <161)
{
eyeball_cnt = 20;
eyeball_timer_cnt = 0;
}
// ବାମ ଏବଂ ଡାହାଣକୁ ଘୁଞ୍ଚାନ୍ତୁ |
// ଯଦି (eyeball_flag == 0)
// {
// eyeball_cnt ++;
// ଯଦି (eyeball_cnt> = 94)
// {
// eyeball_flag = 1;
//}
//}
// ଅନ୍ୟ
// {
// eyeball_cnt–;
// ଯଦି (eyeball_cnt <= -54)
// {
// eyeball_flag = 0;
//}
//}
ଯଦି (eyeball_cnt> = 0)
{
eyeball_pos [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);
}
void eyeball_run ()
{
static u32 run_timer_cnt = 0;
run_timer_cnt ++;
ଯଦି (run_timer_cnt> = 20000)
{
run_timer_cnt = 0;
eyeball_animat ();
}
}
5. ଚେହେରାକୁ ଅନୁସରଣ କରୁଥିବା ଆଖିର ଗତିକୁ ହୃଦୟଙ୍ଗମ କରିବାକୁ ESP32 ଚେହେରା ଚିହ୍ନିବା ଯୋଗ କରନ୍ତୁ |
ଏଠାରେ ପ୍ରକ୍ରିୟାକରଣ ପ୍ରଣାଳୀ ହେଉଛି ଯେ ଯେତେବେଳେ ଚେହେରା ଚିହ୍ନଟ ହୁଏ, ଆଖି ନିଜେ ଗତି କରେ ନାହିଁ, ଏବଂ ଏକ ଭେରିଏବଲ୍ ସମୟ ଲୁପ୍ ରେ ବୃଦ୍ଧି ପାଇଁ ବ୍ୟାଖ୍ୟା କରାଯାଇଥାଏ |ଯେତେବେଳେ ବୃଦ୍ଧି ଏକ ନିର୍ଦ୍ଦିଷ୍ଟ ମୂଲ୍ୟରେ ପହଞ୍ଚେ, ଆଇବଲ୍ ଗୁଡିକ ନିଜେ ଗତି କରିବେ |ଯେତେବେଳେ କ୍ରମିକ ପୋର୍ଟ ତଥ୍ୟ ଗ୍ରହଣ କରେ, ଏହି ଭେରିଏବଲ୍ ସଫା ହୋଇଯିବ, ଏବଂ ତା’ପରେ କେବଳ ମୁହଁର ସ୍ଥିତି ଅନୁଯାୟୀ ଆଖିକୁ ଘୁଞ୍ଚାଇବ |ମୁଖ୍ୟ କୋଡ୍ ନିମ୍ନଲିଖିତ ଅଟେ:
ଯଦି (rec_data_timer_cnt <1000000)
{
rec_data_timer_cnt ++;
}
ଅନ୍ୟ
{
eyeball_run ();
}
ବାହ୍ୟ u32 rec_data_timer_cnt;
ବାହ୍ୟ u16 eyeball_timer_cnt;
ଶୂନ୍ୟ ଯୋଗାଯୋଗ_ CMD (u8 st)
{
ଯଦି ((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);
# ଏଣ୍ଡିଫ୍ |
uart [st] .Rx_F = 0;
uart [st] .Rx_Num = 0;
}
}
ପୋଷ୍ଟ ସମୟ: ଜୁନ୍ -26-2023 |