Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c585249c82 | ||
|
|
6f841cdabc | ||
|
|
1548cd4b9c | ||
|
|
f55133bc27 | ||
|
|
717b846846 | ||
|
|
96df6b18b2 | ||
|
|
c64162453a | ||
|
|
fa4ff3da22 |
@@ -20,5 +20,8 @@
|
||||
"grove.TM1637.set|block": "%strip|[Grove - 4桁ディスプレイ]|明るさを|%level|に変更する",
|
||||
"grove.TM1637.bit|block": "%strip|[Grove - 4桁ディスプレイ]|%dispData|を|%bitAddr|桁目に表示する",
|
||||
"grove.TM1637.point|block": "%strip|[Grove - 4桁ディスプレイ]|コロンの表示を|%point|に変更する",
|
||||
"grove.TM1637.clear|block": "%strip|[Grove - 4桁ディスプレイ]|表示を消す"
|
||||
}
|
||||
"grove.TM1637.clear|block": "%strip|[Grove - 4桁ディスプレイ]|表示を消す",
|
||||
"grove.aht20ReadTemperatureC|block": "[Grove - 温湿度センサー]|温度(℃)を読み取る",
|
||||
"grove.aht20ReadTemperatureF|block": "[Grove - 温湿度センサー]|温度(℉)を読み取る",
|
||||
"grove.aht20ReadHumidity|block": "[Grove - 温湿度センサー]|湿度を読み取る"
|
||||
}
|
||||
|
||||
71
blocks/GroveAHT20.ts
Normal file
71
blocks/GroveAHT20.ts
Normal file
@@ -0,0 +1,71 @@
|
||||
/**
|
||||
* Grove - AHT20 Custom Block
|
||||
*/
|
||||
//% groups=['AHT20']
|
||||
namespace grove
|
||||
{
|
||||
function Read(aht20: grove.sensors.AHT20): { Humidity: number, Temperature: number }
|
||||
{
|
||||
if (!aht20.GetState().Calibrated)
|
||||
{
|
||||
aht20.Initialization();
|
||||
if (!aht20.GetState().Calibrated) return null;
|
||||
}
|
||||
|
||||
aht20.TriggerMeasurement();
|
||||
for (let i = 0; ; ++i)
|
||||
{
|
||||
if (!aht20.GetState().Busy) break;
|
||||
if (i >= 500) return null;
|
||||
basic.pause(10);
|
||||
}
|
||||
|
||||
return aht20.Read();
|
||||
}
|
||||
|
||||
/**
|
||||
* Read the temperature(°C) from Grove-AHT20(SKU#101990644)
|
||||
*/
|
||||
//% group="AHT20"
|
||||
//% block="[Grove - Temp&Humi Sensor]|Read the temperature(°C))"
|
||||
//% weight=3
|
||||
export function aht20ReadTemperatureC(): number
|
||||
{
|
||||
const aht20 = new grove.sensors.AHT20();
|
||||
const val = Read(aht20);
|
||||
if (val == null) return null;
|
||||
|
||||
return val.Temperature;
|
||||
}
|
||||
|
||||
/**
|
||||
* Read the temperature(°F) from Grove-AHT20(SKU#101990644)
|
||||
*/
|
||||
//% group="AHT20"
|
||||
//% block="[Grove - Temp&Humi Sensor]|Read the temperature(°F))"
|
||||
//% weight=2
|
||||
export function aht20ReadTemperatureF(): number
|
||||
{
|
||||
const aht20 = new grove.sensors.AHT20();
|
||||
const val = Read(aht20);
|
||||
if (val == null) return null;
|
||||
|
||||
return val.Temperature * 9 / 5 + 32;
|
||||
}
|
||||
|
||||
/**
|
||||
* Read the humidity from Grove-AHT20(SKU#101990644)
|
||||
*/
|
||||
//% group="AHT20"
|
||||
//% block="[Grove - Temp&Humi Sensor]|Read the humidity"
|
||||
//% weight=1
|
||||
export function aht20ReadHumidity(): number
|
||||
{
|
||||
const aht20 = new grove.sensors.AHT20();
|
||||
const val = Read(aht20);
|
||||
if (val == null) return null;
|
||||
|
||||
return val.Humidity;
|
||||
}
|
||||
|
||||
}
|
||||
63
main.ts
63
main.ts
@@ -452,7 +452,68 @@ namespace grove {
|
||||
let joystick = new GroveJoystick();
|
||||
let paj7620 = new PAJ7620();
|
||||
// adapted to Calliope mini V2 Core by M.Klein 17.09.2020
|
||||
|
||||
/**
|
||||
* Create a new driver of Grove - Ultrasonic Sensor to measure distances in cm
|
||||
* @param pin signal pin of ultrasonic ranger module
|
||||
*/
|
||||
//% blockId=grove_ultrasonic_centimeters_v2 block="(V2)Ultrasonic Sensor (in cm) at|%pin"
|
||||
//% pin.fieldEditor="gridpicker" pin.fieldOptions.columns=4
|
||||
//% pin.fieldOptions.tooltips="false" pin.fieldOptions.width="250"
|
||||
//% group="Ultrasonic" pin.defl=DigitalPin.C16
|
||||
|
||||
export function measureInCentimetersV2(pin: DigitalPin): number
|
||||
{
|
||||
let duration = 0;
|
||||
let RangeInCentimeters = 0;
|
||||
|
||||
pins.digitalWritePin(pin, 0);
|
||||
control.waitMicros(2);
|
||||
pins.digitalWritePin(pin, 1);
|
||||
control.waitMicros(20);
|
||||
pins.digitalWritePin(pin, 0);
|
||||
duration = pins.pulseIn(pin, PulseValue.High, 50000); // Max duration 50 ms
|
||||
|
||||
RangeInCentimeters = duration * 153 / 44 / 2 / 100 ;
|
||||
|
||||
if(RangeInCentimeters > 0) distanceBackup = RangeInCentimeters;
|
||||
else RangeInCentimeters = distanceBackup;
|
||||
|
||||
basic.pause(50);
|
||||
|
||||
return RangeInCentimeters;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new driver Grove - Ultrasonic Sensor to measure distances in inch
|
||||
* @param pin signal pin of ultrasonic ranger module
|
||||
*/
|
||||
//% blockId=grove_ultrasonic_inches_v2 block="(V2)Ultrasonic Sensor (in inch) at|%pin"
|
||||
//% pin.fieldEditor="gridpicker" pin.fieldOptions.columns=4
|
||||
//% pin.fieldOptions.tooltips="false" pin.fieldOptions.width="250"
|
||||
//% group="Ultrasonic" pin.defl=DigitalPin.C16
|
||||
export function measureInInchesV2(pin: DigitalPin): number
|
||||
{
|
||||
let duration = 0;
|
||||
let RangeInInches = 0;
|
||||
|
||||
pins.digitalWritePin(pin, 0);
|
||||
control.waitMicros(2);
|
||||
pins.digitalWritePin(pin, 1);
|
||||
control.waitMicros(20);
|
||||
pins.digitalWritePin(pin, 0);
|
||||
duration = pins.pulseIn(pin, PulseValue.High, 100000); // Max duration 100 ms
|
||||
|
||||
RangeInInches = duration * 153 / 113 / 2 / 100;
|
||||
|
||||
if(RangeInInches > 0) distanceBackup = RangeInInches;
|
||||
else RangeInInches = distanceBackup;
|
||||
|
||||
basic.pause(50);
|
||||
|
||||
return RangeInInches;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new driver of Grove - Ultrasonic Sensor to measure distances in cm
|
||||
* @param pin signal pin of ultrasonic ranger module
|
||||
@@ -804,4 +865,4 @@ namespace grove {
|
||||
function sendAtCmd(cmd: string) {
|
||||
serial.writeString(cmd + "\u000D\u000A")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
6
pxt.json
6
pxt.json
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "Grove",
|
||||
"version": "0.3.0",
|
||||
"version": "0.5.0",
|
||||
"description": "A Microsoft MakeCode package for Seeed Studio Grove module",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
@@ -9,8 +9,10 @@
|
||||
"files": [
|
||||
"README.md",
|
||||
"main.ts",
|
||||
"blocks/GroveAHT20.ts",
|
||||
"_locales/ja/Grove-strings.json",
|
||||
"_locales/de/Grove-strings.json"
|
||||
"_locales/de/Grove-strings.json",
|
||||
"sensors/AHT20.ts"
|
||||
],
|
||||
"testFiles": [
|
||||
"test.ts"
|
||||
|
||||
87
sensors/AHT20.ts
Normal file
87
sensors/AHT20.ts
Normal file
@@ -0,0 +1,87 @@
|
||||
namespace grove
|
||||
{
|
||||
export namespace sensors
|
||||
{
|
||||
|
||||
export class AHT20
|
||||
{
|
||||
public constructor(address: number = 0x38)
|
||||
{
|
||||
this._Address = address;
|
||||
}
|
||||
|
||||
public Initialization(): AHT20
|
||||
{
|
||||
const buf = pins.createBuffer(3);
|
||||
buf[0] = 0xbe;
|
||||
buf[1] = 0x08;
|
||||
buf[2] = 0x00;
|
||||
pins.i2cWriteBuffer(this._Address, buf, false);
|
||||
basic.pause(10);
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
public TriggerMeasurement(): AHT20
|
||||
{
|
||||
const buf = pins.createBuffer(3);
|
||||
buf[0] = 0xac;
|
||||
buf[1] = 0x33;
|
||||
buf[2] = 0x00;
|
||||
pins.i2cWriteBuffer(this._Address, buf, false);
|
||||
basic.pause(80);
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
public GetState(): { Busy: boolean, Calibrated: boolean }
|
||||
{
|
||||
const buf = pins.i2cReadBuffer(this._Address, 1, false);
|
||||
const busy = buf[0] & 0x80 ? true : false;
|
||||
const calibrated = buf[0] & 0x08 ? true : false;
|
||||
|
||||
return { Busy: busy, Calibrated: calibrated };
|
||||
}
|
||||
|
||||
public Read(): { Humidity: number, Temperature: number }
|
||||
{
|
||||
const buf = pins.i2cReadBuffer(this._Address, 7, false);
|
||||
|
||||
const crc8 = AHT20.CalcCRC8(buf, 0, 6);
|
||||
if (buf[6] != crc8) return null;
|
||||
|
||||
const humidity = ((buf[1] << 12) + (buf[2] << 4) + (buf[3] >> 4)) * 100 / 1048576;
|
||||
const temperature = (((buf[3] & 0x0f) << 16) + (buf[4] << 8) + buf[5]) * 200 / 1048576 - 50;
|
||||
|
||||
return { Humidity: humidity, Temperature: temperature };
|
||||
}
|
||||
|
||||
private _Address: number;
|
||||
|
||||
private static CalcCRC8(buf: Buffer, offset: number, size: number): number
|
||||
{
|
||||
let crc8 = 0xff;
|
||||
for (let i = 0; i < size; ++i)
|
||||
{
|
||||
crc8 ^= buf[offset + i];
|
||||
for (let j = 0; j < 8; ++j)
|
||||
{
|
||||
if (crc8 & 0x80)
|
||||
{
|
||||
crc8 <<= 1;
|
||||
crc8 ^= 0x31;
|
||||
}
|
||||
else
|
||||
{
|
||||
crc8 <<= 1;
|
||||
}
|
||||
crc8 &= 0xff;
|
||||
}
|
||||
}
|
||||
|
||||
return crc8;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user