Getting started with TouchGFX || STM32F750

Started by tha, May 10, 2023, 07:32:38 AM

Previous topic - Next topic

tha

                                                                                   The code

ก่อนอื่น, ใน the screen1View header file กำหนด the functions ที่เราได้ประกาศไว้ใน the interactions.



ฉันได้กำหนดตัวแปร, counter อีกด้วย, ซึ่งเราจะเก็บการบันทึกของการนับเมื่อ the UP and DOWN buttons ถูกกด.

เราจะเขียนฟังชั่นเหล่านี้ใน the screen1View source file



เมื่อ the UP button ถูกกด, the upclicked function จะถูกเรียก. ที่นี่เราจะเพิ่ม the counter value.

     •  ตอนนี้เราจำเป็นต้องแสดงค่านี้ใน textArea ที่เราสร้างขึ้น textArea สามารถแสดงได้เฉพาะ the Ascii characters, ดังนั้นเราจำเป็น
         ต้องแปลงค่าตัวนับให้เป็นอักขระที่เทียบเท่ากันของมัน.

     •  เราใช้ sprintf เพื่อทำการแปลง. The textArea1Buffer คือ the 5 bytes buffer ที่เราจัดสรรสำหรับ the textArea ในระหว่าง
         the design process.

     •  เพื่อที่จะพิมพ์ the data ที่เก็บใน the buffer, เราจำเป็นต้องทำให้ the textArea ใช้การไม่ได้.

ในทำนองเดียวกันเมื่อ the DOWN button ถูกคลิก, the downclicked function จะถูกเรียกใช้ และที่นี่เราจะลด the counter value.
ฉันไม่ต้องการให้ค่าเป็นลบ ดังนั้นฉันจึงจำกัดให้มีค่าไม่เกิน 0.
เราจะทำการแปลงอักขระแบบเดียวกัน จากนั้นทำให้ textArea เป็นโมฆะเพื่อพิมพ์ค่าบน textArea.

tha

                                                                                          Result

ด้านล่างนี้เป็น gif ที่แสดงการทำงานของตัวนับ



คุณจะเห็นว่า the counter จะเพิ่มขึ้นเมื่อ the UP button ถูกกดและลดลงด้วย the DOWN button. ปรดทราบว่าค่าของตัวนับจะต่ำกว่า 0 เนื่องจากนี่คือขีดจำกัดที่ฉันตั้งไว้ใน the code.



tha

https://controllerstech.com/touchgfx-3-sending-data-to-ui-mvp/

How to send data to UI || sample from GUI task

นี้คือ the 3rd tutorial ใน the STM32 Touch GFX series, และวันนี้เราจะมาดูวิธีการส่งข้อมูลจาก MCU ไปยัง UI ตามแนวทางของ ST มี 2 วิธีที่จะทำ เราสามารถสุ่มตัวอย่างข้อมูลจาก the GUI task เอง หรือสร้าง task อื่นเพื่อทำการสุ่มตัวอย่าง

บทช่วยสอนนี้จะครอบคลุมถึงวิธีแรก ซึ่งเราจะสุ่มตัวอย่างข้อมูลจาก GUI task, ในการทำเช่นนั้นฉันจะใช้ a physical button, และ the potentiometer ที่ต่อผ่านทาง ADC
เมื่อใดก็ตามที่ the button ถูกกด, จะมีการแสดงบน UI. นอกจากนี้ ฉันจะแสดงค่า ADC ในพื้นที่ข้อความที่แยกต่างหากบน UI.

เราจะใช้ 2 จุดสำคัญของข้อมูลที่จัดให้มีใน the TouchGFX documentation.
1.  The Model class มี a tick() function ซึ่งจะถูกเรียกทุกเฟรมและสามารถถูกนำมาใช้เพื่อมองหาสำหรับและการตอบโต้ต่อ events จาก
     โมดูลย่อยอื่น
2.  The Model class มี a pointer ถึง active Presenter ปัจจุบันของคุณ. เพื่อที่จะสามารถแจ้งให้ทราบต่อ UI ของ events ที่เข้ามา.

เราจะเห็นพวกมันใน tutorial นี้

tha

                                                                                    TouchGFX Setup



ดังที่แสดงไว้ด้านบน, ฉันได้เพิ่ม an image icon ที่แสดงว่า the light ปิด(OFF) อยู่. The image name ถูกเปลี่ยนเป็น lightOFF ด้วย. โปรดทราบว่า the visibility ถูกเปิดใช้งานสำหรับ image นี้ด้วย.



มีอีกหนึ่ง image ที่แสดงให้เห็นว่า the light เปิดอยู่. image นี้ซ้อนทับกับภาพแรกเพื่อให้เกิดผลของ the light ที่กำลังถูกเปิดอยู่.
โปรดทราบว่า the visibility ของ image นี้ถูกปิดใช้งาน.
นี่คือสิ่งที่เราจะควบคุมโดยใช้ the button. เมื่อ the button ถูกกด, image นี้จะถูกตั้งค่าให้มองเห็นได้ซึ่งแสดงให้เห็นว่า the light ถูกเปิดแล้ว ในทำนองเดียวกัน, เมื่อ the button ถูกปล่อย, the image นี้จะมองไม่เห็น และเราจะเห็น the light OFF image.



ฉันได้เพิ่ม a text area เพื่อดูค่า ADC The text area ถูกตั้งค่าด้วย a wildcard. เนื่องจากฉันต้องการแสดงค่าระหว่าง 0 ถึง 100, ดังนั้น 3 ไบต์จึงเพียงพอที่จะเก็บค่าเหล่านี้ (1 byteต่ออักขระ) The wildcard buffer ต้องถูกกำหนดด้วย 1 ไบต์พิเศษ นั่นคือ 4 ไบต์

เราจำเป็นต้องตั้งค่า the wildcard range สำหรับค่าเหล่านี้ด้วย. The wildcard range ถูกตั้งค่าข้างล่าง.



ฉันได้ตั้งค่า the range จาก 0x20 ถึง 0x7E เนื่องจากสิ่งนี้รวม the useful characters ทั้งหมดใน the ascii table.

tha

                                                                                     CubeMX Setup

The F750 discovery board มี a user button, ซึ่งถูกต่อกับ the pin PI11. ฉันได้เปิดใช้งาน the pin PI11 เป็น the input pin.



The pin ถูกกำหนดค่าใน the input mode พร้อมกับ the pull down. เมื่อ the button ถูกกด pin นี้จะถูก pulled high.

tha

ฉันจะแสดง the potentiometer values บน the UI. This potentiometer ถูกต่อทาง the ADC.



The ADC3 channel 0 ได้รับการกำหนดค่าด้วยความละเอียด 12 บิต. ทุกสิ่งทุกอย่างจะถูกเก็บไว้เป็นค่าเริ่มต้นใน the ADC configuration. เราจะใช้ the poll method เพื่ออ่าน the ADC values.

tha

                                                                             Some Insight into the code

ดังที่ฉันได้กล่าวถึงในบทช่วยสอนนี้ เราจะสุ่มตัวอย่างจาก the GUI task ของมันเอง, ตัวอย่างเช่น การสุ่มตัวอย่างภายใน the Model::tick() function. The model source file ถูกแสดงไว้ข้างล่าง.



•   ฉันได้รวมบาง definition จาก line 2-11.
        •   The main.h บรรจุ the necessary headers ทั้งหมดสำหรับส่วนประกอบที่เราใช้ใน project นี้.
        •   ฉันได้กำหนด the ADC handler, ADC_HandleTypeDef hadc3, สำหรับให้ the ADC ทำงาน.
        •   นอกจากนี้ยังมี a map function (จาก Arduino source code), ดังนั้นเพื่อแมป the ADC values ภายในช่วงที่กำหนด.
•   Line no 13 เริ่มต้นตัวแปร Button_State และ ADC_VAL, ซึ่งถูกประกาศไว้ใน the model header file.
•   Lines 21-25 ถูกใช้เพื่ออ่าน the button state.
        •   ถ้า the button ถูกกด, ตัวแปรนี้จะถูกเซ็ตเป็น true และถ้า the button ถูกปล่อย, ตัวแปรนี้จะถูกเซ็ตเป็น false.
•   Lines 27-31 ถูกใช้เพื่ออ่าน  the ADC values จาก the potentiometer.
        •   ที่นี่ฉันใช้ the Poll method เพื่ออ่าน the values.
        •   จากนั้น The 12 bit ADC values จะถูกแม็ปกับช่วง 0 ถึง 100. ค่าที่ถูกแปลงเหล่านี้จะถูกเก็บไว้ใน the ADC_VAL variable.
•   Lines 34 and 35 ถูกใช้เพื่อส่ง the button state และ the ADC values ไปยัง the presenter.
        •   The modelListener คือ the pointer ไปยัง the active presenter และถูกใช้เพื่อส่ง the data ไปยัง the presenter