久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

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

 SDNUC 2020-07-17


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

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

  1.搭載環(huán)境

  1.1.安裝node.js

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

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

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

1.2.安裝pxt命令行工具

  打開Windows命令行,,輸入:

    npm install -g pxt

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

1.3.安裝Visual Studio Code

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

檢查是否安裝成功:打開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工具鏈,,打開Windows命令行進(jìn)入該文件夾,輸入:
1pxt target microbit

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

此時(shí)輸入:

可查看pxt的命令行幫助:

打開microbit文件夾,可見該文件夾下新增如下文件:

  2.生成軟件包所需文件

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

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

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

name:模塊名稱,,為軟件包名稱,,該名稱將來也將顯示到makecode界面中。

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

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

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

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

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

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

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

code .

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

由于是制作軟件包,,不需要main.ts文件,,因此,將main.ts重命名為 mcp23017.ts,,并在該文件下采用TypeScrip編寫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 * 使用此文件來定義自定義函數(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.編寫測(cè)試代碼

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

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

  在該測(cè)試代碼中,,其操作為對(duì)MCP23017A引腳的輸出寄存器寫入十進(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)行語法檢查,如果有語法出錯(cuò),,VS code 會(huì)進(jìn)行提示,,及時(shí)在VS Code中改正即可:

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

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

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

打開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)打開makecode網(wǎng)頁:

此時(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è)試通過,。

6.發(fā)布

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

https://www./

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

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

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(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)遵守用戶 評(píng)論公約

    類似文章 更多