Έξυπνο μάτι με βάση την κυκλική οθόνη DWIN

——Από το Φόρουμ προγραμματιστών DWIN

Το έργο ανοιχτού κώδικα του φόρουμ προγραμματιστών DWIN που προτείνεται για όλους αυτή τη φορά είναι μια πολύ ενδιαφέρουσα ρουτίνα για την προσομοίωση της κίνησης των ανθρώπινων ματιών.Ο μηχανικός χρησιμοποίησε πολλά υλικά απεικόνισης ανθρώπινων ματιών για να πραγματοποιήσει λειτουργίες όπως η κίνηση του βολβού του ματιού, το ανοιγοκλείσιμο, η αναγνώριση προσώπου και η παρακολούθηση.

Εισαγωγή στις λύσεις ανοιχτού κώδικα:

1. Υλικό εικόνας διεπαφής χρήστη

Σημείωση του συντάκτη: Η έξυπνη οθόνη DWIN βασίζεται σε εικόνες για την ολοκλήρωση της ανάπτυξης διεπαφής χρήστη, η οποία μπορεί εύκολα να πραγματοποιήσει διάφορα εφέ οθόνης.

dytrgf (1)

2. Ανάπτυξη διεπαφής

Η ανάπτυξη της διεπαφής μέσω του λογισμικού DGUS είναι σχετικά απλή και χρειάζονται μόνο δύο γραφικά χειριστήρια.Σε αυτή τη ρουτίνα, ο μηχανικός επέλεξε μια στρογγυλή έξυπνη οθόνη 2,1 ιντσών.

dytrgf (2)

3. Πραγματοποιήστε το animation που αναβοσβήνει

Αφήστε τις εικόνες των βλεφάρων να εμφανίζονται με τη σειρά κατά διαστήματα:

//Κινούμενη εικόνα αναβοσβήνει

void blink_animat(void)

{

if(blink_flag == 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()

{

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. Συνειδητοποιήστε ότι οι βολβοί των ματιών φαίνονται φυσικά αριστερά και δεξιά.

Αυτό είναι παρόμοιο με το να αναβοσβήνει, αλλά χρειάζεται να συγκρίνει το χρόνο του κρυσταλλικού ταλαντωτή για να ελέγξει την κίνηση των ματιών.Μετά από πολλές φορές εντοπισμού σφαλμάτων, ο μηχανικός σχεδίασε το ακόλουθο σύνολο κωδικών.

//Κινούμενα σχέδια για τα μάτια

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;

}

//Μετακίνηση αριστερά και δεξιά

// if(eyeball_flag == 0)

// {

// eyeball_cnt++;

// if(eyeball_cnt >= 94)

// {

// eyeball_flag = 1;

// }

// }

// άλλο

// {

// eyeball_cnt–;

// if(eyeball_cnt <= -54)

// {

// eyeball_flag = 0;

// }

// }

if(eyeball_cnt >= 0)

{

βολβός του ματιού_pos[0] = 0×00;

eyeball_pos[1] = eyeball_cnt;

}

αλλού

{

οφθαλμικός βολβός_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++;

}

αλλού

{

eyeball_run();

}

extern u32 rec_data_timer_cnt;

εξωτερικό 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(Τύπος_Επικοινωνίας==1)

Describe_8283(st);

#elif(Τύπος_Επικοινωνίας==2)

Describe_Modbus(st);

#τέλος εαν

uart[st].Rx_F=0;

uart[st].Rx_Num=0;

}

}


Ώρα δημοσίευσης: Ιουν-26-2023