主頁 >  其他 > 專案設計完結總結

專案設計完結總結

2021-02-23 10:40:21 其他

2018級西電通院微控制專案設計

  • 1. 簡要說明
  • 2.專案內容
    • 2.1專案要求
    • 2.2我的想法
    • 2.3電子設計
      • STM32
      • 傳感器
        • 光敏傳感器
        • 距離傳感器
        • 顏色傳感器
      • 身份識別(非接觸識別)
      • 維護模式

1. 簡要說明

專案設計是西電通院的特色課程,自從16級首次開始做這個,到我們18級現在已經是第三代了,
這個專案是以小組為單位的,一般是5-6人小組,全院打亂隨機分組(據說是會按成績區間分配),由于作業量特別大,所以是要給每個人分配作業,然后最后再完成成品(今年是交的報告和視頻成果),

2.專案內容

2.1專案要求

要求如下




剛開始看這個專案:wdnmd,這也太難了吧,爺要掛科了,
之后趕緊聯系了學長,學長大概和我解釋了下這個專案是如何云云,我稍微對專案該如何完成稍微有一點了解了,然后又仔細看了專案設計的設計指南好幾遍,總結出了一下幾個作業:
1.電子:STM32以及傳感器編程
2.數字電路設計:verilog,主要是驅動伺服電機
3.軟體設計:java語言,做程式的主界面以及里面的操作內容
4.文案:最終報告整合、專利申請書等文案作業
5.網頁設計:做一個靜態web介紹你的公司和產品
6.組裝:應該是所有人一起做,但是今年沒有
7.機械設計:畫機械圖,一共三個,作業大不大
總的來說,前三項任務是比較重的,其他的相對壓力較輕,在第一次會議時,我主動承擔了電子設計以及經理的任務,接下來組里其他同學也確認了自己的任務,

2.2我的想法

作為經理,我當時構思的產品,如下:
1.模塊化功能:即觸摸界面顯示幾個按鍵,表示不同的功能,

2.具體功能:(中英雙語)
2.1學科:語數外物化等,分為網課學習,教材查看,習題練習等
2.1.1網課學習:視頻(快取到本地,點開可以放)
2.1.2教材查看:內容意思一下
2.1.3習題練習(重點):全是選擇題,通過不同色塊代表選項,用RGB顏色檢測器探測,與真實答案比較,成功了發語音(互動),失敗了機械臂揮動
2.2外語:可添加口語功能(如果可實作):用戶可跟讀單詞
2.3學習監督:設定開啟和關閉,自主設定學習時長,若在規定時長內離開(激光測距儀檢測),則機器人揮手,發出警告
2.4智能護眼:設定開啟和關閉,超過限定學習時間,亮燈,發出休息提醒
3.維護模式:
3.1驗證管理員賬號
3.2驗證機器人的各部分是否可以正常作業
3.2.1指定部位機械臂轉動
3.2.2指定部位亮燈
3.2.3讀取激光測距儀資料
3.2.4讀取顏色傳感器資料

網頁設計相關:
1.總體框架按xxx的想法,基本是把內容都填充進去就好
2.需要美工,設計logo,海報,視頻剪輯

FPGA:
主要是舵機控制,即機械臂揮動
FPGA (XC7A35T-1CSG324C)

關于非接觸驗證:
使用多個光敏傳感器和卡插,卡插帶缺口,嵌到傳感器上,缺口可以將光遮擋住,從而輸出0,反之輸出1,由0,1的組合可以確定不同玩家或管理員,0000~1111
這個東西套件里沒有,但是必要,去年不少組都采用此種方式
(我已購買)
關于答題:
選項ABC對應RGB三種色塊,我不太清楚具體如何操作啊,選某個選項肯定是在上位機的螢屏上操作,那么直接在上位機上進行結果判定并反饋不就可了么?(最后壓根沒用這個)

關于互動:
1.stm32給fpga “go”指令,控制電機運行的模式(IO口電平控制)
相當于fpga作用是驅動電機做任意角度轉動(自定),在vivado中封裝好固定的運行狀態,通過stm32電平的組合控制選擇電機運行狀態
DigitalOut(選電機,選模式)
2.stm32給上位機反饋傳感器結果
上位機給stm32輸入指令(COM串口通訊)
3.顏色、距離傳感器都接I2C(I2C通訊)
4.光敏傳感器接AO(數字信號)
DigitalIn(判斷身份)
5.串口助手(USART)

而我技術部分負責的是電子設計,下面我來詳細說明這部分

2.3電子設計

電子設計分為兩部分,一個是STM32,另一個是傳感器設計

STM32

本次專案中使用的是STM32L476單片機,是一款低功耗型的單片機
其中介面如下

1.有兩類介面,一類是arduino配套的,一類是一般的,到時候需要哪個管腳就直接用杜邦線連接
2.所有管腳都有其相對應的功能,例如串口收發/AO/DO/電源等,按照要求連接即可
接著給出微控制器總體運行流程

主函式撰寫規范:
int main(){1
中斷
while(1){2
while(1){3
插卡檢測
if 失敗:回傳檢測
if 成功:繼續執行
while(1){4
if 學習模式 :
while(1){5
switch(各種功能)
5}
else if 維護模式:
while(1){6
switch(各種功能)
6}
else
4}
3}
2}
1}
呼叫函式:
顏色判斷函式
顏色回傳函式
距離回傳函式
選項判斷函式
插卡識別函式
電機控制函式

傳感器

傳感器分為三種,分別為:光敏、距離、顏色傳感器

光敏傳感器

光敏電阻是用硫化隔或硒化隔等半導體材料制成的電阻器,其作業原理是基于內光電效應,隨著光照強度的升高,電阻值迅速降低,由于光照產生的載流子都參與導電,在外加電場的作用下作漂移運動,電子奔向電源的正極,空穴奔向電源的負極,從而使光敏電阻器的阻值迅速下降,其在無光照時,幾乎呈高阻狀態,暗電阻很大,

用這個傳感器,主要是把它作為插卡來進行身份識別的

測驗結果如下:


注意:光敏傳感器輸出的是光強度數值,所以接支持模擬輸出的AO口

距離傳感器

VL6180是飛行時間測距傳感器,傳感器包含一個非常小的激光源和一個匹配的傳感器,VL6180X可以檢測飛行時間,或激光恢復傳感器所需的時間從而計算出距離,因此VL6180X的準確度高,由于傳感器模塊體積小,易于在任何機器人或互動式專案中使用,可以將它與任何3-5V電源或邏輯微控制器一起使用,

用它來檢測用戶距離機器人的距離,若距離適當且超過一定時間,則開啟身份識別界面

顏色傳感器

TCS34725芯片提供紅、綠、藍(RGB)以及明光感應的數字回傳值,TCS34725彩色傳感器有著廣泛的應用,包括RGB LED背光控制、固態照明、健康產品、工業程序控制和醫療診斷設備等,

傳感器回傳四個引數值,分別為顏色引數中的 R, G, B 以及 C 值,根據說明以及我們的測驗,由于距離,環境光線,測量物體的放反光程度等細微差異,輸出的資料會產生一定量的誤差或者偏差,因此在使用本傳感器的程序中,需要對使用環境和處理資料的程序進行一定的調整及優化,以保證最后識別的結果有較高的精度保證,

測驗結果如下:

身份識別(非接觸識別)


機器人擁有非接觸驗證身份功能,故身份識別全部采用硬體完成,

需要使用VL6180x距離傳感器、一個TCS34725顏色傳感器以及四個光敏傳感器組合完成,

我們使用專用的卡插和顏色擋板,光敏傳感器檢測到遮擋物時回傳為0,未檢測到時為1,從而不同卡插可以代表不同身份的用戶,為了驗證管理員身份,我們使用紅色擋板遮蓋顏色傳感器,否則其余時刻用藍色遮擋

進行身份驗證時,用戶首先將代表身份的卡插和顏色擋板插入機器人指定位置,然后等待距離傳感器判斷用戶是否在機器人面前,等待3s后,微控制器根據傳感器讀取的資料進行身份驗證,從而進入應用界面(學習界面/維護界面),

下面給出微控制器布線結果:

距離傳感器和顏色傳感器連線圖

光敏傳感器連線圖

維護模式

當成功驗證管理員身份后,用戶可以進入維護模式,檢驗各傳感器、led燈、伺服電機的運轉情況,對于fpga,是由微控制提供指令驅動的,故我們給出fpga不同功能對應的電平組合,

對應指令如下:
a:顏色傳感器讀取
b:距離傳感器讀取
c:光敏傳感器讀取
d:led閃爍
e:fpga“00”控制電平
f:fpga“01”控制電平
g:fpga“10”控制電平
h:fpga“11”控制電平

該部分代碼如下:

#include "mbed.h"
#include "stdint.h"
#include <VL6180x.h>
#define VL6180X_ADDRESS 0x29
VL6180xIdentification identification;
// mbed uses 8bit addresses shift address by 1 bit left
VL6180x sensor(A4, A5, VL6180X_ADDRESS<<1);//距離傳感器

Serial pc(SERIAL_TX, SERIAL_RX);
AnalogIn switch1(PA_0); //光敏傳感器

I2C i2c(I2C_SDA, I2C_SCL); //顏色傳感器
int sensor_addr = 41 << 1;
DigitalOut green(LED1);

void ret_rgb(int r,int g,int b) //該函式用于回傳顏色值
 {
 
 if (r > g*1.3 && r > b*1.3)
 {
 pc.printf("red\n");
 }
 else if (g > r*1.3 && g > b*1.3)
 {
 pc.printf("green\n");
 }
 else if (b > r*1.3 && b > g*1.3) 
 {
 pc.printf("blue\n");
 }
 else
 pc.printf("no\n");
 wait(0.1);
 }
 
 void color_read()
 {
  //打開顏色傳感器
    int r,g,b;
    green = 1; // off
    pc.baud(9600);
    // Connect to the Color sensor and verify whether we connected to the correct sensor. 
    
    i2c.frequency(100000);
    
    char id_regval[1] = {146};
    char data[1] = {0};
    i2c.write(sensor_addr,id_regval,1, true);
    i2c.read(sensor_addr,data,1,false);
    
    if (data[0]==68) {
        green = 0;
        wait (2); 
        green = 1;
        } else {
        green = 1; 
    }
    
    // Initialize color sensor
    
    char timing_register[2] = {129,0};
    i2c.write(sensor_addr,timing_register,2,false);
    
    char control_register[2] = {143,0};
    i2c.write(sensor_addr,control_register,2,false);
    
    char enable_register[2] = {128,3};
    i2c.write(sensor_addr,enable_register,2,false);
    
    // Read data from color sensor (Clear/Red/Green/Blue)
    
    while (true) { 
        char clear_reg[1] = {148};
        char clear_data[2] = {0,0};
        i2c.write(sensor_addr,clear_reg,1, true);
        i2c.read(sensor_addr,clear_data,2, false);
        
        int clear_value = ((int)clear_data[1] << 8) | clear_data[0];
        
        char red_reg[1] = {150};
        char red_data[2] = {0,0};
        i2c.write(sensor_addr,red_reg,1, true);
        i2c.read(sensor_addr,red_data,2, false);
        
        int red_value = ((int)red_data[1] << 8) | red_data[0];
        
        char green_reg[1] = {152};
        char green_data[2] = {0,0};
        i2c.write(sensor_addr,green_reg,1, true);
        i2c.read(sensor_addr,green_data,2, false);
        
        int green_value = ((int)green_data[1] << 8) | green_data[0];
        
        char blue_reg[1] = {154};
        char blue_data[2] = {0,0};
        i2c.write(sensor_addr,blue_reg,1, true);
        i2c.read(sensor_addr,blue_data,2, false);
        
        int blue_value = ((int)blue_data[1] << 8) | blue_data[0];
        
        // print sensor readings
        
        //pc.printf("Clear (%d), Red (%d), Green (%d), Blue (%d)\n", clear_value, red_value, green_value, blue_value);
        wait(0.5);
    
         //顏色傳感器顯示資料
         r = red_value;
         g = green_value;
         b = blue_value;
         pc.printf("R %d G %d B %d\n ",r,g,b);
         //ret_rgb(r,g,b);
   }   
     }

void light_read(){
    float s1; 
    pc.baud(9600);   
    while(1) 
    {
        
        s1 = switch1.read(); 
        s1 = s1*5000;       
        pc.printf("measure = %.0f\n",s1);        
        wait(0.3);
            
    }
    }
    
void distance_read(){
  uint8_t retaddr;
  pc.baud(9600);
  wait_ms(100); // delay .1s
  sensor.getIdentification(&identification); // Retrieve manufacture info from device memory
    if(sensor.VL6180xInit() != 0) {
        printf("FAILED TO INITALIZE\n"); //Initialize device and check for errors
    };

    sensor.VL6180xDefautSettings(); //Load default settings to get started.

    wait(1);
    retaddr=sensor.changeAddress(0x29,0x27);
    sensor.getIdentification(&identification); // Retrieve manufacture info from device memory

    wait(1);
    retaddr=sensor.changeAddress(0x27,0x29);
    sensor.getIdentification(&identification); // Retrieve manufacture info from device memory

    while(1) {

 
  //Get Distance and report in mm
      printf("Distance measured (mm) = ");
      printf("%d\n", sensor.getDistance() ); 
 
      wait_ms(500); 
 
    }
    
    }

int main(){
char order = pc.getc();
    printf("welcome to the matainance system :\n");
    switch(order){
        case 'a'://顏色傳感器
        color_read();
        break;
        
        case 'b'://距離傳感器
        distance_read();
        break;
        
        case 'c'://光敏傳感器
        light_read();
        break;
        
        case 'd'://led閃爍
        for(int p=0;p<10;p++){
            green = ~green;
            }
        break;
        
        case 'e':
        pc.printf("00\n");
        break;
        
        case 'f':
        pc.printf("01\n");    
        break;
        
        case 'g':
        pc.printf("10\n");
        break;
        
        case 'h':
        pc.printf("11\n");    
        break;
        
        }
}

代碼思路比較簡單,主要是定義幾個傳感器如何讀取,并將資料顯示(print)出來,然后主函式用case呼叫即可,FPGA與的stm32互動是用電平控制的,而我們是線上完成,所以無法與FPGA連接,用輸出電平代替給的指令,

當然驅動傳感器這方面有一些麻煩的驅動函式,不過網上都有庫,如看懂函式輸入輸出,直接呼叫即可,自己寫應該不太可能,,,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/262459.html

標籤:其他

上一篇:ESP32開發 2.添加.c.h并修改CMakeLists,來定制自己的工程

下一篇:《拖延心理學》讀后感

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more