Smart Eye DWIN тегерек экранына негизделген

——DWIN иштеп чыгуучулар форумунан

Бул жолу бардыгына сунушталган DWIN иштеп чыгуучу форумунун ачык булак долбоору адамдын көзүнүн кыймылын имитациялоо үчүн абдан кызыктуу программа.Инженер көз алмасынын кыймылы, ирмөө, жүзүн таануу жана артынан ээрчүү сыяктуу функцияларды ишке ашыруу үчүн бир нече адамдын көзүнүн сүрөт материалдарын колдонгон.

Ачык булак чечимдерине киришүү:

1. UI сүрөт материалы

Редактордун эскертүүсү: DWIN акылдуу экраны ар кандай дисплей эффекттерин оңой ишке ашыра турган UI иштеп чыгууну аяктоо үчүн сүрөттөргө негизделген.

dytrgf (1)

2. Интерфейсти өнүктүрүү

DGUS программасы аркылуу интерфейсти иштеп чыгуу салыштырмалуу жөнөкөй жана эки гана графикалык башкаруу керек.Бул режимде инженер 2,1 дюймдук тегерек акылдуу экранды тандап алган.

dytrgf (2)

3. Көз ирмемдик анимацияны ишке ашыруу

Кабактардын сүрөттөрү кезек-кезеги менен көрсөтүлсүн:

//Blink анимация

void blink_animat(жараксыз)

{

if(blink_flag == 0)

{

blink_cnt++;

if(blink_cnt >= 4)

{

blink_flag = 1;

}

}

башка

{

blink_cnt–;

if(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++;

if(run_timer_cnt >= 2000000)

{

run_timer_cnt = 0;

blink_animat();

Delay_ms(30);

blink_animat();

Delay_ms(30);

blink_animat();

Delay_ms(30);

blink_animat();

Delay_ms(30);

blink_animat();

Delay_ms(30);

blink_animat();

Delay_ms(30);

blink_animat();

Delay_ms(30);

blink_animat();

Delay_ms(30);

}

}

4. Көз алмалары табигый түрдө оңго жана солго карай турганын түшүнүңүз.

Бул көздүн кыймылын көзөмөлдөө үчүн кристаллдык осциллятордун убактысын салыштыруу керек.Көп жолу мүчүлүштүктөрдү оңдоодон кийин инженер төмөнкү коддордун топтомун иштеп чыкты.

//Көз алмасынын анимациясы

void eyeball_animat(void)

{

eyeball_timer_cnt++;

эгерде(eyeball_timer_cnt <50)

{

eyeball_cnt = 20;

}

else if(eyeball_timer_cnt < 51)

{

eyeball_cnt = 50;

}

else if(eyeball_timer_cnt < 52)

{

eyeball_cnt = 80;

}

else if(eyeball_timer_cnt < 53)

{

eyeball_cnt = 94;

}

else if(eyeball_timer_cnt < 103)

{

eyeball_cnt = 94;

}

else if(eyeball_timer_cnt < 104)

{

eyeball_cnt = 80;

}

else if(eyeball_timer_cnt < 105)

{

eyeball_cnt = 50;

}

else if(eyeball_timer_cnt < 106)

{

eyeball_cnt = 20;

}

else if(eyeball_timer_cnt < 107)

{

eyeball_cnt = -10;

}

else if(eyeball_timer_cnt < 108)

{

eyeball_cnt = -40;

}

else if(eyeball_timer_cnt < 158)

{

eyeball_cnt = -54;

}

else if(eyeball_timer_cnt < 159)

{

eyeball_cnt = -40;

}

else if(eyeball_timer_cnt < 160)

{

eyeball_cnt = -10;

}

else if(eyeball_timer_cnt < 161)

{

eyeball_cnt = 20;

eyeball_timer_cnt = 0;

}

//Солго жана оңго жылдыруу

// эгерде(көз алмасынын_желек == 0)

// {

// eyeball_cnt++;

// if(eyeball_cnt >= 94)

// {

// eyeball_flag = 1;

// }

// }

// башка

// {

// eyeball_cnt–;

// if(eyeball_cnt <= -54)

// {

// eyeball_flag = 0;

// }

// }

if(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++;

if(run_timer_cnt >= 20000)

{

run_timer_cnt = 0;

eyeball_animat();

}

}

5. Бетти ээрчиген көздөрдүн кыймылын ишке ашыруу үчүн ESP32 жүзүн таанууну кошуңуз.

Бул жерде иштетүү ыкмасы жүзү аныкталганда, көздөр өзүнөн өзү кыймылдабайт, ал эми while циклин көбөйтүү үчүн өзгөрмө аныкталат.Көбөйүү белгилүү бир мааниге жеткенде, көз алмалары өзүнөн өзү кыймылдайт.Сериялык порт маалыматтарды кабыл алганда, бул өзгөрмө тазаланат, андан кийин гана беттин абалына жараша көздөрдү жылдырат.Негизги код төмөнкүдөй:

if(rec_data_timer_cnt < 1000000)

{

rec_data_timer_cnt++;

}

башка

{

eyeball_run();

}

extern u32 rec_data_timer_cnt;

extern u16 eyeball_timer_cnt;

void Communication_CMD(u8 st)

{

if((uart[st].Rx_F==1 )&&(uart[st].Rx_T==0))

{

rec_data_timer_cnt = 0;

eyeball_timer_cnt = 0;

#if(Түрү_байланыш==1)

Describe_8283(st);

#elif(Түрү_байланыш==2)

Describe_Modbus(st);

#endif

uart[st].Rx_F=0;

uart[st].Rx_Num=0;

}

}


Посттун убактысы: 26-июнь-2023