ჭკვიანი თვალი, რომელიც დაფუძნებულია DWIN წრიულ ეკრანზე

——DWIN დეველოპერთა ფორუმიდან

ამჯერად ყველასთვის რეკომენდებული DWIN დეველოპერის ფორუმის ღია კოდის პროექტი არის ძალიან საინტერესო რუტინა ადამიანის თვალების მოძრაობის სიმულაციისთვის.ინჟინერმა გამოიყენა ადამიანის თვალის გამოსახულების რამდენიმე მასალა ისეთი ფუნქციების განსახორციელებლად, როგორიცაა თვალბუდის მოძრაობა, მოციმციმე, სახის ამოცნობა და თვალის მიდევნება.

ღია კოდის გადაწყვეტილებების შესავალი:

1. UI გამოსახულების მასალა

რედაქტორის შენიშვნა: DWIN ჭკვიანი ეკრანი ეფუძნება სურათებს ინტერფეისის განვითარების დასასრულებლად, რომელსაც შეუძლია ადვილად გააცნობიეროს სხვადასხვა ეკრანის ეფექტები.

dytrgf (1)

2. ინტერფეისის განვითარება

შედარებით მარტივია ინტერფეისის შემუშავება DGUS პროგრამული უზრუნველყოფის საშუალებით და საჭიროა მხოლოდ ორი გრაფიკული კონტროლი.ამ რუტინაში, ინჟინერმა აირჩია 2.1 დიუმიანი მრგვალი ჭკვიანი ეკრანი.

dytrgf (2)

3. გააცნობიერე მოციმციმე ანიმაცია

ქუთუთოების სურათები რიგრიგობით გამოჩნდეს ინტერვალებით:

//მოციმციმე ანიმაცია

void blink_animat(void)

{

თუ (მოციმციმე_დროშა == 0)

{

blink_cnt++;

if (blink_cnt >= 4)

{

მოციმციმე_დროშა = 1;

}

}

სხვა

{

blink_cnt–;

if(blink_cnt <= 0)

{

მოციმციმე_დროშა = 0;

}

}

write_dgus_vp(0×3000, (u8 *)&blink_cnt, 2);

}

void blink_run()

{

სტატიკური u32 run_timer_cnt = 0;

run_timer_cnt++;

if (run_timer_cnt >= 2000000)

{

run_timer_cnt = 0;

blink_animat();

დაგვიანებით_ms(30);

blink_animat();

დაგვიანებით_ms(30);

blink_animat();

დაგვიანებით_ms(30);

blink_animat();

დაგვიანებით_ms(30);

blink_animat();

დაგვიანებით_ms(30);

blink_animat();

დაგვიანებით_ms(30);

blink_animat();

დაგვიანებით_ms(30);

blink_animat();

დაგვიანებით_ms(30);

}

}

4. გააცნობიერე, რომ თვალის კაკლები ბუნებრივად გამოიყურება მარცხნივ და მარჯვნივ.

ეს მოციმციმეს ჰგავს, მაგრამ საჭიროა კრისტალური ოსცილატორის დროის შედარება თვალის მოძრაობის გასაკონტროლებლად.მრავალი გამართვის შემდეგ, ინჟინერმა შეიმუშავა კოდების შემდეგი ნაკრები.

//თვალის ანიმაცია

void eyeball_animat(void)

{

თვალის კაკლის_ტაიმერი_cnt++;

if(თვალის_ტაიმერი_cnt < 50)

{

თვალის კაკალი_cnt = 20;

}

else if(eyeball_timer_cnt < 51)

{

თვალის კაკალი_cnt = 50;

}

else if(eyeball_timer_cnt < 52)

{

თვალის კაკალი_cnt = 80;

}

else if(eyeball_timer_cnt < 53)

{

თვალის კაკალი_cnt = 94;

}

else if(eyeball_timer_cnt < 103)

{

თვალის კაკალი_cnt = 94;

}

else if(eyeball_timer_cnt < 104)

{

თვალის კაკალი_cnt = 80;

}

else if(eyeball_timer_cnt < 105)

{

თვალის კაკალი_cnt = 50;

}

else if(eyeball_timer_cnt < 106)

{

თვალის კაკალი_cnt = 20;

}

else if(eyeball_timer_cnt < 107)

{

თვალის კაკალი_cnt = -10;

}

else if(eyeball_timer_cnt < 108)

{

თვალის კაკალი_cnt = -40;

}

else if(eyeball_timer_cnt < 158)

{

თვალის კაკალი_cnt = -54;

}

else if(eyeball_timer_cnt < 159)

{

თვალის კაკალი_cnt = -40;

}

else if(eyeball_timer_cnt < 160)

{

თვალის კაკალი_cnt = -10;

}

else if(eyeball_timer_cnt < 161)

{

თვალის კაკალი_cnt = 20;

თვალის კაკლის_ტაიმერი_cnt = 0;

}

//მარცხნივ და მარჯვნივ გადაადგილება

// თუ (თვალის_დროშა == 0)

// {

// eyeball_cnt++;

// თუ (თვალის_კნტ >= 94)

// {

// თვალის_დროშა = 1;

//}

//}

// სხვა

// {

// eyeball_cnt–;

// თუ (თვალის_კნტ <= -54)

// {

// თვალის_დროშა = 0;

//}

//}

if(თვალის_cnt >= 0)

{

თვალის კაკალი_pos[0] = 0×00;

თვალის კაკალი_pos[1] = თვალის კაკალი_cnt;

}

სხვა

{

თვალის კაკალი_pos[0] = 0xFF;

თვალის კაკალი_pos[1] = (თვალის_cnt & 0xFF);

}

write_dgus_vp(0×3111, (u8 *)& eyeball_pos, 2);

}

void eyeball_run()

{

სტატიკური u32 run_timer_cnt = 0;

run_timer_cnt++;

if (run_timer_cnt >= 20000)

{

run_timer_cnt = 0;

თვალის კაკალი_animat();

}

}

5. დაამატეთ ESP32 სახის ამოცნობა, რათა გააცნობიეროთ თვალების მოძრაობა სახის შემდეგ.

დამუშავების მეთოდი აქ არის ის, რომ როდესაც სახის ამოცნობა ხდება, თვალები თავისთავად არ მოძრაობენ და ცვლადი განისაზღვრება while მარყუჟის ზრდაზე.როდესაც ზრდა გარკვეულ მნიშვნელობას მიაღწევს, თვალის კაკლები თავისთავად მოძრაობენ.როდესაც სერიული პორტი მიიღებს მონაცემებს, ეს ცვლადი გასუფთავდება და შემდეგ მხოლოდ თვალების გადაადგილება სახის პოზიციის მიხედვით.მთავარი კოდი ასეთია:

if (rec_data_timer_cnt < 1000000)

{

rec_data_timer_cnt++;

}

სხვა

{

თვალის კაკალი_გაშვება();

}

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;

თვალის კაკლის_ტაიმერი_cnt = 0;

#if(კომუნიკაციის_ტიპი==1)

აღწერა_8283(st);

#elif (კომუნიკაციის_ტიპი==2)

Describe_Modbus(st);

#დაასრულე თუ

uart[st].Rx_F=0;

uart[st].Rx_Num=0;

}

}


გამოქვეყნების დრო: ივნ-26-2023