Паметно око засновано на ДВИН кружном екрану

——Са ДВИН форума за програмере

Пројекат отвореног кода за програмере ДВИН који се овог пута препоручује свима је веома занимљива рутина за симулацију кретања људских очију.Инжењер је користио неколико материјала за слике људског ока да би реализовао функције као што су кретање очне јабучице, трептање, препознавање лица и праћење.

Увод у решења отвореног кода:

1. УИ сликовни материјал

Напомена уредника: ДВИН паметни екран је заснован на сликама за комплетан развој корисничког интерфејса, који може лако да реализује различите ефекте приказа.

дитргф (1)

2. Развој интерфејса

Релативно је једноставно развити интерфејс преко ДГУС софтвера, а потребне су само две графичке контроле.У овој рутини, инжењер је изабрао округли паметни екран од 2,1 инча.

дитргф (2)

3. Реализујте анимацију трептаја

Нека се слике очних капака приказују редом у интервалима:

//Анимација трептаја

воид блинк_аним(воид)

{

иф(блинк_флаг == 0)

{

блинк_цнт++;

иф(блинк_цнт >= 4)

{

блинк_флаг = 1;

}

}

друго

{

блинк_цнт–;

иф(блинк_цнт <= 0)

{

блинк_флаг = 0;

}

}

врите_дгус_вп(0×3000, (у8 *)&блинк_цнт, 2);

}

воид блинк_рун()

{

статички у32 рун_тимер_цнт = 0;

рун_тимер_цнт++;

иф(рун_тимер_цнт >= 2000000)

{

рун_тимер_цнт = 0;

блинк_анимат();

Делаи_мс(30);

блинк_анимат();

Делаи_мс(30);

блинк_анимат();

Делаи_мс(30);

блинк_анимат();

Делаи_мс(30);

блинк_анимат();

Делаи_мс(30);

блинк_анимат();

Делаи_мс(30);

блинк_анимат();

Делаи_мс(30);

блинк_анимат();

Делаи_мс(30);

}

}

4. Схватите да очне јабучице природно изгледају лево и десно.

Ово је слично трептању, али треба да упореди време кристалног осцилатора да би се контролисало кретање очију.Након много отклањања грешака, инжењер је дизајнирао следећи скуп кодова.

//Анимација очне јабучице

воид очна јабучица_анимат(празнина)

{

еиебалл_тимер_цнт++;

иф(еиебалл_тимер_цнт < 50)

{

еиебалл_цнт = 20;

}

елсе иф(еиебалл_тимер_цнт < 51)

{

еиебалл_цнт = 50;

}

елсе иф(еиебалл_тимер_цнт < 52)

{

еиебалл_цнт = 80;

}

елсе иф(еиебалл_тимер_цнт < 53)

{

еиебалл_цнт = 94;

}

елсе иф(еиебалл_тимер_цнт < 103)

{

еиебалл_цнт = 94;

}

елсе иф(еиебалл_тимер_цнт < 104)

{

еиебалл_цнт = 80;

}

елсе иф(еиебалл_тимер_цнт < 105)

{

еиебалл_цнт = 50;

}

елсе иф(еиебалл_тимер_цнт < 106)

{

еиебалл_цнт = 20;

}

елсе иф(еиебалл_тимер_цнт < 107)

{

еиебалл_цнт = -10;

}

елсе иф(еиебалл_тимер_цнт < 108)

{

еиебалл_цнт = -40;

}

елсе иф(еиебалл_тимер_цнт < 158)

{

еиебалл_цнт = -54;

}

елсе иф(еиебалл_тимер_цнт < 159)

{

еиебалл_цнт = -40;

}

елсе иф(еиебалл_тимер_цнт < 160)

{

еиебалл_цнт = -10;

}

елсе иф(еиебалл_тимер_цнт < 161)

{

еиебалл_цнт = 20;

еиебалл_тимер_цнт = 0;

}

//Померајте се лево и десно

// иф(еиебалл_флаг == 0)

// {

// еиебалл_цнт++;

// иф(еиебалл_цнт >= 94)

// {

// еиебалл_флаг = 1;

// }

// }

// елсе

// {

// еиебалл_цнт–;

// иф(еиебалл_цнт <= -54)

// {

// еиебалл_флаг = 0;

// }

// }

иф(еиебалл_цнт >= 0)

{

еиебалл_пос[0] = 0×00;

еиебалл_пос[1] = еиебалл_цнт;

}

друго

{

еиебалл_пос[0] = 0кФФ;

еиебалл_пос[1] = (еиебалл_цнт & 0кФФ);

}

врите_дгус_вп(0×3111, (у8 *)&еиебалл_пос, 2);

}

воид еиебалл_рун()

{

статички у32 рун_тимер_цнт = 0;

рун_тимер_цнт++;

иф(рун_тимер_цнт >= 20000)

{

рун_тимер_цнт = 0;

еиебалл_анимат();

}

}

5. Додајте ЕСП32 препознавање лица да бисте остварили кретање очију које прате лице.

Метод обраде овде је да када се лице детектује, очи се не померају саме, а променљива је дефинисана за повећање у вхиле петљи.Када прираст достигне одређену вредност, очне јабучице ће се померати саме.Када серијски порт прими податке, ова варијабла ће бити обрисана, а затим ће се очи померати само према положају лица.Главни код је следећи:

иф(рец_дата_тимер_цнт < 1000000)

{

рец_дата_тимер_цнт++;

}

друго

{

еиебалл_рун();

}

ектерн у32 рец_дата_тимер_цнт;

ектерн у16 еиебалл_тимер_цнт;

воид Цоммуницатион_ЦМД(у8 ст)

{

иф((уарт[ст].Рк_Ф==1 )&&(уарт[ст].Рк_Т==0))

{

рец_дата_тимер_цнт = 0;

еиебалл_тимер_цнт = 0;

#иф(Типе_Цоммуницатион==1)

Десцрибе_8283(ст);

#елиф(Типе_Цоммуницатион==2)

Десцрибе_Модбус(ст);

#ендиф

уарт[ст].Рк_Ф=0;

уарт[ст].Рк_Нум=0;

}

}


Време поста: 26.06.2023