From b502b1ef23595da08fc4886d19619b7656a1a5ca Mon Sep 17 00:00:00 2001 From: "ELECFREAKS.Admin" Date: Sun, 8 Oct 2023 14:40:01 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20pxt.json,=20basic.ts,=20?= =?UTF-8?q?=5Flocales/zh-CN/pxt-PlanetX-strings.json?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _locales/zh-CN/pxt-PlanetX-strings.json | 3 + basic.ts | 86 +++++++++++++++++++++++++ pxt.json | 2 +- 3 files changed, 90 insertions(+), 1 deletion(-) diff --git a/_locales/zh-CN/pxt-PlanetX-strings.json b/_locales/zh-CN/pxt-PlanetX-strings.json index 2e69236..7b54a93 100644 --- a/_locales/zh-CN/pxt-PlanetX-strings.json +++ b/_locales/zh-CN/pxt-PlanetX-strings.json @@ -136,6 +136,9 @@ "PlanetX_Basic.ultrasoundSensor|block": "超声波传感器 %Rjpin 距离 %distance_unit", "PlanetX_Basic.waterLevel|block": "水位传感器 %Rjpin 水位值(0~100)", "PlanetX_Basic.writeData|block": "RFID 传感器 IIC接口 将数据 %data 写入卡", + "PlanetX_Basic.ValType.DS18B20_temperature_C|block": "摄氏温度(℃)", + "PlanetX_Basic.ValType.DS18B20_temperature_F|block": "华氏温度(℉)", + "PlanetX_Basic.Ds18b20Temp|block": "DS18B20 温度传感器 %state 连接至 %Rjpin", "PlanetX_Basic|block": "行星X_基础", "PlanetX_Display.AnalogRJPin.J1|block": "J1", "PlanetX_Display.AnalogRJPin.J2|block": "J2", diff --git a/basic.ts b/basic.ts index d2ea327..016656a 100644 --- a/basic.ts +++ b/basic.ts @@ -2529,4 +2529,90 @@ namespace PlanetX_Basic { re_value = re_value * 4; return re_value } + + let sc_byte = 0 + let dat = 0 + let low = 0 + let high = 0 + let temp = 0 + let temperature = 0 + let ack = 0 + let lastTemp = 0 + + export enum ValType { + //% block="temperature(℃)" enumval=0 + DS18B20_temperature_C, + + //% block="temperature(℉)" enumval=1 + DS18B20_temperature_F + } + function init_18b20(mpin: DigitalPin) { + pins.digitalWritePin(mpin, 0) + control.waitMicros(600) + pins.digitalWritePin(mpin, 1) + control.waitMicros(30) + ack = pins.digitalReadPin(mpin) + control.waitMicros(600) + return ack + } + function write_18b20(mpin: DigitalPin, data: number) { + sc_byte = 0x01 + for (let index = 0; index < 8; index++) { + pins.digitalWritePin(mpin, 0) + if (data & sc_byte) { + pins.digitalWritePin(mpin, 1) + control.waitMicros(60) + } else { + pins.digitalWritePin(mpin, 0) + control.waitMicros(60) + } + pins.digitalWritePin(mpin, 1) + data = data >> 1 + } + } + function read_18b20(mpin: DigitalPin) { + dat = 0x00 + sc_byte = 0x01 + for (let index = 0; index < 8; index++) { + pins.digitalWritePin(mpin, 0) + pins.digitalWritePin(mpin, 1) + if (pins.digitalReadPin(mpin)) { + dat = dat + sc_byte + } + sc_byte = sc_byte << 1 + control.waitMicros(60) + } + return dat + } + + //% subcategory=Sensor group="Digital" color=#EA5532 + //% block="value of DS18B20 %state at pin %Rjpin" + export function Ds18b20Temp(Rjpin: DigitalRJPin, state: ValType): number { + let pin = RJpin_to_digital(Rjpin) + init_18b20(pin) + write_18b20(pin, 0xCC) + write_18b20(pin, 0x44) + basic.pause(10) + init_18b20(pin) + write_18b20(pin, 0xCC) + write_18b20(pin, 0xBE) + low = read_18b20(pin) + high = read_18b20(pin) + temperature = high << 8 | low + temperature = temperature / 16 + if (temperature > 130) { + temperature = lastTemp + } + lastTemp = temperature + switch (state) { + case ValType.DS18B20_temperature_C: + return temperature + case ValType.DS18B20_temperature_F: + temperature = (temperature * 1.8) + 32 + return temperature + default: + return 0 + } + + } } diff --git a/pxt.json b/pxt.json index e04e177..5fdb910 100644 --- a/pxt.json +++ b/pxt.json @@ -25,7 +25,7 @@ ], "public": false, "targetVersions": { - "target": "4.0.18", + "target": "6.0.18", "targetId": "microbit" }, "supportedTargets": [