סמאַרט אויג באזירט אויף DWIN סירקולאַר סקרין

——פון DWIN דעוועלאָפּער פאָרום

די DWIN דעוועלאָפּער פאָרום אָפֿן מקור פּרויעקט רעקאַמענדיד פֿאַר אַלעמען דעם מאָל איז אַ זייער טשיקאַווע רוטין פֿאַר סימיאַלייטינג די באַוועגונג פון מענטשלעך אויגן.דער ינזשעניר געניצט עטלעכע מענטש אויג בילד מאַטעריאַלס צו פאַרשטיין פאַנגקשאַנז אַזאַ ווי ייבאָל באַוועגונג, בלינקינג, פּנים דערקענונג און ווייַטערדיק.

הקדמה צו עפענען מקור סאַלושאַנז:

1. וי בילד מאַטעריאַל

רעדאַקטאָר ס באַמערקונג: DWIN סמאַרט פאַרשטעלן איז באזירט אויף בילדער צו פאַרענדיקן די UI אַנטוויקלונג, וואָס קענען לייכט פאַרשטיין פאַרשידן אַרויסווייַזן יפעקץ.

dytrgf (1)

2. צובינד אַנטוויקלונג

עס איז לעפיערעך פּשוט צו אַנטוויקלען די צובינד דורך DGUS ווייכווארג, און בלויז צוויי גראַפיק קאָנטראָלס זענען דארף.אין דעם רוטין, דער ינזשעניר אויסדערוויילט אַ 2.1-אינטש קייַלעכיק קלוג פאַרשטעלן.

dytrgf (2)

3. פאַרשטיין בלינק אַנאַמיישאַן

לאָזן די בילדער פון די יילידז זיין געוויזן אין קער מיט ינטערוואַלז:

// בלינק אַנאַמיישאַן

void blink_animat (void)

{

אויב (בלינק_פלאַג == 0)

{

בלינק_קנט++;

אויב (בלינק_קנט >= 4)

{

בלינק_פלאַג = 1;

}

}

אַנדערש

{

blink_cnt–;

אויב (בלינק_קנט <= 0)

{

בלינק_פלאַג = 0;

}

}

write_dgus_vp (0 × 3000, (ו8 *) & בלינק_קנט, 2);

}

void blink_run()

{

סטאַטיק ו32 רונ_טימער_קנט = 0;

run_timer_cnt++;

אויב (run_timer_cnt >= 2000000)

{

רונ_טימער_קנט = 0;

בלינק_אַנימאַט ();

Delay_ms (30);

בלינק_אַנימאַט ();

Delay_ms (30);

בלינק_אַנימאַט ();

Delay_ms (30);

בלינק_אַנימאַט ();

Delay_ms (30);

בלינק_אַנימאַט ();

Delay_ms (30);

בלינק_אַנימאַט ();

Delay_ms (30);

בלינק_אַנימאַט ();

Delay_ms (30);

בלינק_אַנימאַט ();

Delay_ms (30);

}

}

4. פאַרשטיין די ייבאָלז קוק לינקס און רעכט געוויינטלעך.

דאָס איז ענלעך צו בלינקינג, אָבער עס דאַרף צו פאַרגלייַכן די צייט פון די קריסטאַל אַסאַלייטער צו קאָנטראָלירן די אויג באַוועגונג.נאָך פילע מאָל פון דיבאַגינג, דער ינזשעניר דיזיינד די פאלגענדע גאַנג פון קאָודז.

// ייבאָל אַנאַמיישאַן

void eyeball_animat (void)

{

eyeball_timer_cnt++;

אויב (eyeball_timer_cnt <50)

{

ייבאָל_קנט = 20;

}

אַנדערש אויב (eyeball_timer_cnt <51)

{

ייבאָל_קנט = 50;

}

אַנדערש אויב (eyeball_timer_cnt <52)

{

ייבאָל_קנט = 80;

}

אַנדערש אויב (eyeball_timer_cnt <53)

{

ייבאָל_קנט = 94;

}

אַנדערש אויב (eyeball_timer_cnt <103)

{

ייבאָל_קנט = 94;

}

אַנדערש אויב (eyeball_timer_cnt <104)

{

ייבאָל_קנט = 80;

}

אַנדערש אויב (eyeball_timer_cnt <105)

{

ייבאָל_קנט = 50;

}

אַנדערש אויב (eyeball_timer_cnt <106)

{

ייבאָל_קנט = 20;

}

אַנדערש אויב (eyeball_timer_cnt <107)

{

ייבאָל_קנט = -10;

}

אַנדערש אויב (eyeball_timer_cnt <108)

{

ייבאָל_קנט = -40;

}

אַנדערש אויב (eyeball_timer_cnt <158)

{

ייבאָל_קנט = -54;

}

אַנדערש אויב (eyeball_timer_cnt <159)

{

ייבאָל_קנט = -40;

}

אַנדערש אויב (eyeball_timer_cnt <160)

{

ייבאָל_קנט = -10;

}

אַנדערש אויב (eyeball_timer_cnt <161)

{

ייבאָל_קנט = 20;

ייבאָל_טימער_קנט = 0;

}

// מאַך לינקס און רעכט

// אויב (ייעבאַלל_פלאַג == 0)

// {

// ייבאָל_קנט++;

// אויב (ייעבאַלל_קנט >= 94)

// {

// ייבאָל_פלאַג = 1;

// }

// }

// אַנדערש

// {

// ייבאָל_קנט–;

// אויב (ייעבאַלל_קנט <= -54)

// {

// ייבאָל_פלאַג = 0;

// }

// }

אויב (eyeball_cnt >= 0)

{

ייבאָל_פּאָס[0] = 0×00;

ייבאָל_פּאָס[1] = ייבאָל_קנט;

}

אַנדערש

{

ייבאָל_פּאָס [0] = 0xFF;

ייבאָל_פּאָס[1] = (ייעבאַלל_קנט & 0קספף);

}

write_dgus_vp (0 × 3111, (ו8 *) & ייבאָל_פּאָס, 2);

}

void eyeball_run ()

{

סטאַטיק ו32 רונ_טימער_קנט = 0;

run_timer_cnt++;

אויב (run_timer_cnt >= 20000)

{

רונ_טימער_קנט = 0;

ייבאָל_אַנימאַט ();

}

}

5. לייג ESP32 פּנים דערקענונג צו פאַרשטיין די באַוועגונג פון אויגן נאָך די פּנים.

די פּראַסעסינג אופֿן דאָ איז אַז ווען די פּנים איז דיטעקטאַד, די אויגן טאָן ניט רירן זיך, און אַ בייַטעוודיק איז דיפיינד צו ינקראַמאַנט אין די בשעת שלייף.ווען די ינקראַמאַנט ריטשאַז אַ זיכער ווערט, די ייבאָלז וועט מאַך דורך זיך.ווען די סיריאַל פּאָרט נעמט דאַטן, די וועריאַבאַלז וועט זיין קלירד, און נאָר מאַך די אויגן לויט די שטעלע פון ​​די פּנים.דער הויפּט קאָד איז ווי גייט:

אויב (רעק_דאַטאַ_טימער_קנט <1000000)

{

rec_data_timer_cnt++;

}

אַנדערש

{

ייבאָל_ראַן ();

}

עקסטערן ו32 רעק_דאַטאַ_טימער_קנט;

עקסטערן ו16 ייבאָל_טימער_קנט;

void Communication_CMD(u8 st)

{

אויב ((ואַרט[סט].רקס_ף==1) &&(ואַרט[סט].רקס_ט==0))

{

רעק_דאַטאַ_טימער_קנט = 0;

ייבאָל_טימער_קנט = 0;

#if(טיפּ_קאָמוניקאַציע==1)

דיסקרייב_8283 (סט);

#elif(טיפּ_קאָממוניקאַטיאָן==2)

דיסקרייב_מאָדבוס (סט);

#ענדיף

ואַרט[סט].רקס_ף=0;

ואַרט[סט].רקס_נום=0;

}

}


פּאָסטן צייט: יוני 26-2023