Чтобы помочь клиентам быстрее реализовать многоязычную функцию, DWIN Technology добавила многоязычный функциональный интерфейс в платформу разработки DGUS. После обновления пользователю нужно только завершить разработку проекта DGUS на одном языке, а си...
В ответ на потребности последовательного экрана в обучении, Sixiu Electronics Studio и Dwin предложили решение и совместно запустили набор интерактивных досок с последовательным экраном с интерфейсом VGA и соответствующие учебные пособия на основе T5L2 master (ASIC, разработанный Dwin). Обучающая плата состоит из горелки SX-DWIN-PG, основной платы SX-DWIN-VGA и платы разработки SX-DWIN-STC...
——С форума разработчиков DWIN
Рекомендуемый для всех на форуме разработчиков DWIN проект с открытым исходным кодом представляет собой очень интересную рутину для имитации движения человеческого глаза. Инженер использовал несколько материалов для изображения человеческого глаза для реализации таких функций, как движение глазного яблока, моргание, распознавание лиц и слеживание.
Введение в решение с открытым исходным кодом:
1. Материал изображения пользовательского интерфейса
Примечание редактора: интеллектуальный экран DWIN основан на изображениях для завершения разработки пользовательского интерфейса, который может легко реализовывать различные эффекты отображения.

2. Разработка интерфейса
Разработать интерфейс с помощью программного обеспечения DGUS относительно просто, и требуется всего два графических элемента управления. В этой рутине инженер выбрал 2,1-дюймовый круглый смарт-экран.
3. Реализуйте анимацию мигания
Пусть снимки век отображаются по очереди через определенные промежутки времени:
Анимация моргания
Пусть изображения век отображаются по очереди с интервалами:
//Blink animation
void blink_animat(void)
{
if(blink_flag == 0)
{
blink_cnt++;
if(blink_cnt >= 4)
{
blink_flag = 1;
}
}
else
{
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. Осознайте, что глазные яблоки естественно смотрят влево и вправо.
Это похоже на моргание, но для управления движением глаз необходимо сравнить время работы кварцевого генератора. После многократной отладки инженер разработал следующий набор кодов.
//Eyeball animation
void eyeball_animat(void)
{
eyeball_timer_cnt++;
if(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;
}
//Move left and right
// if(eyeball_flag == 0)
// {
// eyeball_cnt++;
// if(eyeball_cnt >= 94)
// {
// eyeball_flag = 1;
// }
// }
// else
// {
// eyeball_cnt–;
// if(eyeball_cnt <= -54)
// {
// eyeball_flag = 0;
// }
// }
if(eyeball_cnt >= 0)
{
eyeball_pos[0] = 0×00;
eyeball_pos[1] = eyeball_cnt;
}
else
{
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++;
}
else
{
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(Type_Communication==1)
Describe_8283(st);
#elif(Type_Communication==2)
Describe_Modbus(st);
#endif
uart[st].Rx_F=0;
uart[st].Rx_Num=0;
}
}
Время публикации: 26 июня 2023
Чтобы помочь клиентам быстрее реализовать многоязычную функцию, DWIN Technology добавила многоязычный функциональный интерфейс в платформу разработки DGUS. После обновления пользователю нужно только завершить разработку проекта DGUS на одном языке, а си...
- Комментарии