小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Micro:bit系列教程25:自定義Micro:bit軟件包

 SDNUC 2020-07-17


當(dāng)要使用Micro:bit驅(qū)動(dòng)非板載外設(shè)時(shí),制作專(zhuān)用軟件包并添加到項(xiàng)目,可提高程序的重復(fù)利用率,同時(shí)提高開(kāi)發(fā)效率。

本節(jié)將介紹如何制作Micro:bit擴(kuò)展軟件包:

  1.搭載環(huán)境

  1.1.安裝node.js

下載地址:https:///en/,根據(jù)32位或64位系統(tǒng)下載不同版本,并安裝,推薦安裝官方推薦版本:

檢查是否安裝成功:打開(kāi)Windows命令行,輸入node -v,輸出版本號(hào)則表明安裝成功:

若未正常顯示版本號(hào),請(qǐng)將安裝路徑添加到系統(tǒng)環(huán)境變量,或重新安裝node.js

1.2.安裝pxt命令行工具

  打開(kāi)Windows命令行,輸入:

    npm install -g pxt

 打若出現(xiàn)以下提示,則成功安裝:

1.3.安裝Visual Studio Code

下載地址:https://code./,根據(jù)32位或64位系統(tǒng)選擇不同的版本下載安裝,該工具為官方推薦工具,編輯TypeScript腳本時(shí)有語(yǔ)法提示,錯(cuò)誤檢查等,推薦使用。

檢查是否安裝成功:打開(kāi)Windows控制臺(tái),輸入code -v,輸出版本號(hào)則表明安裝成功:

若未正常顯示版本號(hào),請(qǐng)將安裝路徑添加到系統(tǒng)環(huán)境變量,或重新安裝Visual Studio Code。

1.4.安裝Git

下載地址:https:///根據(jù)32位或64位系統(tǒng)選擇不同的版本下載安裝,發(fā)布軟件包的時(shí)候需要用到該軟件。

1.5.加載工具鏈

新建文件夾,(注意:制作的軟件包也需放至該文件夾的子文件夾下,本次操作是在E:\Program\Project\MicroBit_Project\Server路徑建立microbit文件夾)
在microbit文件夾下加載Micro:bit工具鏈,打開(kāi)Windows命令行進(jìn)入該文件夾,輸入:
1pxt target microbit

該過(guò)程可能持續(xù)幾分鐘,如果出現(xiàn)如下提示,則表明Micro:bit工具鏈加載成功:

此時(shí)輸入:

可查看pxt的命令行幫助:

打開(kāi)microbit文件夾,可見(jiàn)該文件夾下新增如下文件:

  2.生成軟件包所需文件

在microbit文件夾下,建立projects文件夾,(注意,必須命名為projects,當(dāng)執(zhí)行pxt serve命令時(shí),將會(huì)尋找projects文件夾)。
進(jìn)入projects文件夾,新建文件夾,并以軟件包名稱(chēng)命名(最終會(huì)將該文件夾下所有文件上傳至Github,本次操作中,在projects文件夾下新建MCP23017文件夾),如下圖所示:

打開(kāi)Windows命令行,進(jìn)入到新建的以軟件包名稱(chēng)命名的文件夾 (本次進(jìn)入到MCP23017文件夾),執(zhí)行以下命令,生成軟件包所需的部分文件:

此操作需輸入相關(guān)信息,分別如下:

name:模塊名稱(chēng),為軟件包名稱(chēng),該名稱(chēng)將來(lái)也將顯示到makecode界面中。

description:對(duì)軟件包功能的描述,用makecode加載軟件包時(shí)將展示。

license: 軟件授權(quán)條款

輸入相關(guān)信息后,MCP23017文件夾下新增了如下文件:

其中pxt.json則記錄了模塊名稱(chēng),軟件包描述,軟件授權(quán)條款等信息,如下圖所示:

數(shù)據(jù)以json鍵值對(duì)的形式存儲(chǔ),如果需要修改數(shù)據(jù),修改鍵對(duì)應(yīng)的值即可。

3.設(shè)計(jì)驅(qū)動(dòng)代碼及圖形塊

打開(kāi)Windows命令行,進(jìn)入到新建的以軟件包名稱(chēng)命名的文件夾 (本次進(jìn)入到MCP23017文件夾),輸入以下命令,采用Visual Studio Code 打開(kāi)該項(xiàng)目:

code .

輸入回車(chē)后,VS Code打開(kāi)了該項(xiàng)目(pxt init命令生成的就是一個(gè)VS Code項(xiàng)目)

由于是制作軟件包,不需要main.ts文件,因此,將main.ts重命名為 mcp23017.ts,并在該文件下采用TypeScrip編寫(xiě)MCP23017的驅(qū)動(dòng)代碼,設(shè)計(jì)圖形塊(圖形塊與注釋相關(guān)聯(lián),圖形塊設(shè)計(jì)請(qǐng)參考:

https:///defining-blocks

),之后,將pxt.json文件中”file”:下的main.ts修改為MCP23017.ts,如下圖所示:

MCP23017驅(qū)動(dòng)及圖形塊代碼如下圖所示:

  cpp代碼:

001/**
002 * 使用此文件來(lái)定義自定義函數(shù)和圖形塊。
003 * 想了解更詳細(xì)的信息,請(qǐng)前往 https://makecode./blocks/custom
004 */
005 
006/**
007 * 自定義圖形塊
008 */
009 
010enum REGISTER {
011    IODIRA = 0x00,
012    IODIRB = 0x01,
013    IPOLA = 0x02,
014    IPOLB = 0x03,
015    GPINTENA = 0x04,
016    GPINTENB = 0x05,
017    DEFVALA = 0x06,
018    DEFVALB = 0x07,
019    INTCONA = 0x08,
020    INTCONB = 0x09,
021    IOCONA = 0x0A,
022    IOCONB = 0x0B,
023    GPPUA = 0x0C,
024    GPPUB = 0x0D,
025    INTFA = 0x0E,
026    INTFB = 0x0F,
027    INTCAPA = 0x10,
028    INTCAPB = 0x11,
029    GPIOA = 0x12,
030    GPIOB = 0x13,
031    OLATA = 0x14,
032    OLATB = 0x15
033}
034 
035enum PIN {
036    A = 0,
037    B = 1
038}
039 
040//% weight=5 color=#9900CC icon="\uf53b"
041namespace MCP23017 {
042    const MCP23017_ADDRESS = 0x20
043 
044    const MCP23017_IODIRA = 0x00
045    const MCP23017_IPOLA = 0x02
046    const MCP23017_GPINTENA = 0x04
047    const MCP23017_DEFVALA = 0x06
048    const MCP23017_INTCONA = 0x08
049    const MCP23017_IOCONA = 0x0A
050    const MCP23017_GPPUA = 0x0C
051    const MCP23017_INTFA = 0x0E
052    const MCP23017_INTCAPA = 0x10
053    const MCP23017_GPIOA = 0x12
054    const MCP23017_OLATA = 0x14
055 
056    const MCP23017_IODIRB = 0x01
057    const MCP23017_IPOLB = 0x03
058    const MCP23017_GPINTENB = 0x05
059    const MCP23017_DEFVALB = 0x07
060    const MCP23017_INTCONB = 0x09
061    const MCP23017_IOCONB = 0x0B
062    const MCP23017_GPPUB = 0x0D
063    const MCP23017_INTFB = 0x0F
064    const MCP23017_INTCAPB = 0x11
065    const MCP23017_GPIOB = 0x13
066    const MCP23017_OLATB = 0x15
067 
068    let initialized = false
069 
070    function i2cwrite(addr: number, reg: number, value: number): void {
071        let buf = pins.createBuffer(2);
072        buf[0] = reg;
073        buf[1] = value;
074        pins.i2cWriteBuffer(addr, buf);
075    }
076 
077    function i2cread(addr: number, reg: number): number {
078        pins.i2cWriteNumber(addr, reg, NumberFormat.UInt8BE);
079        let val = pins.i2cReadNumber(addr, NumberFormat.UInt8BE);
080        return val;
081    }
082 
083    function initMCP23017(): void {
084        for (let regAddr = 0; regAddr < 22; regAddr++) {
085            if (regAddr == 0 || regAddr == 1) {
086                i2cwrite(MCP23017_ADDRESS, regAddr, 0xFF);
087            }
088            else {
089                i2cwrite(MCP23017_ADDRESS, regAddr, 0x00);
090            }
091        }
092 
093        //configue all PinA output
094        i2cwrite(MCP23017_ADDRESS, MCP23017_IODIRA, 0x00);
095 
096        //configue all PinB input
097        i2cwrite(MCP23017_ADDRESS, MCP23017_IODIRB, 0xFF);
098        //configue all PinB pullUP
099        i2cwrite(MCP23017_ADDRESS, MCP23017_GPPUB, 0xFF);
100 
101        initialized = true;
102    }
103 
104 
105    /**
106     *Read data from the register
107     * @param reg [0-21] register of mcp23017; eg: 0, 15, 23
108    */
109    //% blockId=ReadReg block="Read register |%reg| data"
110    //% weight=65
111    export function ReadReg(reg: REGISTER): number {
112        let val = i2cread(MCP23017_ADDRESS, reg);
113        return val;
114    }
115 
116 
117    /**
118     * WriteData to PinA or PinB
119     * @param pin [0-1] choose PinA or PinB; eg: 0, 1
120     * @param value [0-255] pulse of servo; eg: 128, 0, 255
121    */
122    //% blockId=WritePin block="Set P |%pin| value |%value|"
123    //% weight=75
124    //% value.min=0 value.max=255
125    export function WritePin(pin: PIN, value: number): void {
126        if (!initialized) {
127            initMCP23017();
128        }
129        if (pin == 0) {
130            i2cwrite(MCP23017_ADDRESS, MCP23017_GPIOA, value);
131        }
132        else {
133            i2cwrite(MCP23017_ADDRESS, MCP23017_GPIOB, value);
134        }
135    }
136 
137    /**
138     *ReadData From PinA or PinB
139     * @param pin [0-1] choose PinA or PinB; eg: 0, 1
140    */
141    //% blockId=ReadPin block="Read data from |%pin|"
142    //% weight=85
143    export function ReadPin(pin: PIN): number {
144        if (!initialized) {
145            initMCP23017();
146        }
147        if (pin == 0) {
148            let val = i2cread(MCP23017_ADDRESS, MCP23017_GPIOA);
149            return val;
150        }
151        else {
152            let val = i2cread(MCP23017_ADDRESS, MCP23017_GPIOB);
153            return val;
154        }
155    }
156}

4.編寫(xiě)測(cè)試代碼

  在采用pxt init 生成的文件中,test.ts文件為測(cè)試文件,當(dāng)作為軟件包添加到其它項(xiàng)目中時(shí),該文件不會(huì)被編譯,而作為開(kāi)發(fā)流程中的功能測(cè)試時(shí),該文件將會(huì)被編譯,且單獨(dú)執(zhí)行。

  現(xiàn)編寫(xiě)測(cè)試代碼,對(duì)輸出功能進(jìn)行測(cè)試:

  在該測(cè)試代碼中,其操作為對(duì)MCP23017A引腳的輸出寄存器寫(xiě)入十進(jìn)制數(shù)值:85,其二進(jìn)制為:01010101,對(duì)應(yīng)PA0PA7的電平狀態(tài)分別為:高低高低高低高低。

  此次測(cè)試代碼為:

  cpp代碼:

1/* tests go here; this will not be compiled when this package is used as a library*/
2basic.forever(() => {
3    MCP23017.WritePin(0,85);
4})

5.編譯檢查,測(cè)試

  先進(jìn)行語(yǔ)法檢查,如果有語(yǔ)法出錯(cuò),VS code 會(huì)進(jìn)行提示,及時(shí)在VS Code中改正即可:

  打開(kāi)Windows命令行,進(jìn)入到新建的以軟件包名稱(chēng)命名的文件夾 (本次進(jìn)入到MCP23017文件夾),進(jìn)行以下操作:

  編譯:(可選) 在命令行輸入:pxt build,該步驟主要方便檢查語(yǔ)法錯(cuò)誤,實(shí)際中,VS Code能夠提示語(yǔ)法錯(cuò)誤,可先在VS Code中修改語(yǔ)法錯(cuò)誤。

  編譯并下載:(可選)在命令行輸入:pxt deploy,該步驟為先編譯,編譯成功后直接下載,實(shí)際中,通過(guò)makecode進(jìn)行下載更便捷。

打開(kāi)makecode進(jìn)行編輯并下載:(推薦)

  在命令行進(jìn)入到microbit路徑(該路徑下包含projects文件夾,運(yùn)行pxt serve將尋找projects文件夾,若找不到,則將自動(dòng)創(chuàng)建新項(xiàng)目,因此必須先進(jìn)入到含有projects子文件夾的microbit文件夾),如下所示:

  在此基礎(chǔ)上,在命令行輸入:pxt serve,運(yùn)行makecode 服務(wù)器,自動(dòng)打開(kāi)makecode網(wǎng)頁(yè):

此時(shí),軟件包已經(jīng)加載到左側(cè),可預(yù)覽軟件包的顏色及圖標(biāo),并可對(duì)圖形塊進(jìn)行移動(dòng),如下圖所示:

但是,在test.ts文件中,僅能以JavaScript代碼的形式進(jìn)行顯示。

連接microbit,點(diǎn)擊左下角的download,程序?qū)⑾螺d到microbit中,運(yùn)行的是test.ts文件中的代碼。

下載后,將MCP23017PA0-PA7連接至8個(gè)LED(低電平亮),觀察得,PA0-PA7連接的LED分別為滅亮滅亮滅亮滅亮,軟件包測(cè)試通過(guò)。

6.發(fā)布

    軟件包測(cè)試通過(guò)后,將其發(fā)布到Github,此次發(fā)布的本地倉(cāng)庫(kù)為MCP23017文件夾,具體發(fā)布流程請(qǐng)參考廖雪峰的Git教程:

https://www./

最后,打開(kāi)Windows命令行進(jìn)入到MCP23017文件夾,輸入pxt bump命令,修改版本號(hào)(修改pxt.json文件中version鍵對(duì)應(yīng)的值)。

    將軟件包發(fā)布后,即可根據(jù)Github倉(cāng)庫(kù)鏈接找到軟件包,可在makecode中自由擴(kuò)展該軟件包到項(xiàng)目中了。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多