Mripat Smart Adhedhasar DWIN Circular Screen

——Saka DWIN Developer Forum

Proyek open source forum pangembang DWIN sing disaranake kanggo kabeh wong wektu iki minangka rutinitas sing menarik banget kanggo simulasi gerakan mata manungsa.Insinyur nggunakake sawetara bahan gambar mripat manungsa kanggo mujudake fungsi kayata gerakan bola mata, kedhip, pangenalan rai lan tindakake.

Pambuka kanggo solusi open source:

1. Materi gambar UI

Wigati editor: DWIN layar pinter adhedhasar gambar kanggo ngrampungake pembangunan UI, kang bisa gampang éling macem-macem efek tampilan.

dytrgf (1)

2. Pangembangan antarmuka

Iku relatif prasaja ngembangaken antarmuka liwat piranti lunak DGUS, lan mung loro kontrol grafis dibutuhake.Ing rutinitas iki, insinyur milih layar cerdas bunder 2,1 inci.

dytrgf (2)

3. Eling animasi blink

Ayo gambar kelopak mata ditampilake kanthi interval:

//Animasi kedhip

void blink_animat(void)

{

yen (blink_flag == 0)

{

blink_cnt++;

yen (blink_cnt >= 4)

{

blink_flag = 1;

}

}

liyane

{

blink_cnt–;

yen (blink_cnt <= 0)

{

blink_flag = 0;

}

}

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

}

batal blink_run()

{

statis u32 run_timer_cnt = 0;

run_timer_cnt++;

yen (run_timer_cnt>= 2000000)

{

run_timer_cnt = 0;

blink_animat();

Tundha_ms(30);

blink_animat();

Tundha_ms(30);

blink_animat();

Tundha_ms(30);

blink_animat();

Tundha_ms(30);

blink_animat();

Tundha_ms(30);

blink_animat();

Tundha_ms(30);

blink_animat();

Tundha_ms(30);

blink_animat();

Tundha_ms(30);

}

}

4. Sadar mripate katon ngiwa lan nengen kanthi alami.

Iki padha karo kedhip, nanging kudu mbandhingake wektu osilator kristal kanggo ngontrol gerakan mripat.Sawise kaping pirang-pirang debugging, insinyur ngrancang set kode ing ngisor iki.

//Animasi eyeball

void eyeball_animat(void)

{

eyeball_timer_cnt++;

yen (eyeball_timer_cnt < 50)

{

eyeball_cnt = 20;

}

liya yen (eyeball_timer_cnt < 51)

{

eyeball_cnt = 50;

}

liya yen (eyeball_timer_cnt < 52)

{

eyeball_cnt = 80;

}

liya yen (eyeball_timer_cnt < 53)

{

eyeball_cnt = 94;

}

else if(eyeball_timer_cnt < 103)

{

eyeball_cnt = 94;

}

liya yen (eyeball_timer_cnt < 104)

{

eyeball_cnt = 80;

}

else if(eyeball_timer_cnt < 105)

{

eyeball_cnt = 50;

}

liya yen (eyeball_timer_cnt < 106)

{

eyeball_cnt = 20;

}

liya yen (eyeball_timer_cnt < 107)

{

eyeball_cnt = -10;

}

liya yen (eyeball_timer_cnt < 108)

{

eyeball_cnt = -40;

}

liya yen (eyeball_timer_cnt < 158)

{

eyeball_cnt = -54;

}

liya yen (eyeball_timer_cnt < 159)

{

eyeball_cnt = -40;

}

liya yen (eyeball_timer_cnt < 160)

{

eyeball_cnt = -10;

}

liya yen (eyeball_timer_cnt < 161)

{

eyeball_cnt = 20;

eyeball_timer_cnt = 0;

}

//Ngalih ngiwa lan nengen

// yen (bendera_eyeball == 0)

// {

// eyeball_cnt++;

// yen (eyeball_cnt >= 94)

// {

// eyeball_flag = 1;

// }

// }

// liyane

// {

// eyeball_cnt–;

// yen (eyeball_cnt <= -54)

// {

// eyeball_flag = 0;

// }

// }

yen (eyeball_cnt >= 0)

{

eyeball_pos[0] = 0×00;

eyeball_pos[1] = eyeball_cnt;

}

liyane

{

eyeball_pos[0] = 0xFF;

eyeball_pos [1] = (eyeball_cnt & 0xFF);

}

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

}

void eyeball_run()

{

statis u32 run_timer_cnt = 0;

run_timer_cnt++;

yen (run_timer_cnt>= 20000)

{

run_timer_cnt = 0;

eyeball_animat();

}

}

5. Tambah pangenalan pasuryan ESP32 kanggo mujudake gerakan mata ngetutake pasuryan.

Cara pangolahan ing kene yaiku nalika pasuryan dideteksi, mripat ora obah dhewe, lan variabel ditetepake kanggo nambah ing loop nalika.Nalika increment tekan nilai tartamtu, eyeballs bakal pindhah dhewe.Nalika port serial nampa data, variabel iki bakal dibusak, banjur mung mindhah mata miturut posisi pasuryan.Kode utama kaya ing ngisor iki:

yen (rec_data_timer_cnt < 1000000)

{

rec_data_timer_cnt++;

}

liyane

{

eyeball_run();

}

njaba u32 rec_data_timer_cnt;

njaba u16 eyeball_timer_cnt;

void Komunikasi_CMD(u8 st)

{

yen((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(Tipe_Komunikasi==2)

Describe_Modbus(st);

#endif

uart[st].Rx_F=0;

uart[st].Rx_Num=0;

}

}


Wektu kirim: Jun-26-2023