@mixly/arduino-avr
Version:
适用于mixly的arduino avr模块
400 lines (377 loc) • 15.8 kB
JavaScript
import * as Blockly from 'blockly/core';
import { Profile } from 'mixly';
const BASE_HUE = 20;//'#ae3838';//40;
export const inout_highlow = {
init: function () {
this.setColour(BASE_HUE);
this.appendDummyInput("")
.appendField(new Blockly.FieldDropdown([
[Blockly.Msg.MIXLY_HIGH, "HIGH"],
[Blockly.Msg.MIXLY_LOW, "LOW"]
]), 'BOOL')
this.setOutput(true, Boolean);
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_INOUT_HIGHLOW);
}
};
export const inout_pinMode = {
init: function () {
this.setColour(BASE_HUE);
this.appendValueInput("PIN", Number)
.appendField(Blockly.Msg.MIXLY_PINMODE)
.setCheck(Number);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_STAT)
.appendField(new Blockly.FieldDropdown([
[Blockly.Msg.MIXLY_PINMODEIN, "INPUT"],
[Blockly.Msg.MIXLY_PINMODEOUT, "OUTPUT"],
[Blockly.Msg.MIXLY_PINMODEPULLUP, "INPUT_PULLUP"]
]), "MODE")
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setInputsInline(true);
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_INOUT_pinMode);
}
};
export const inout_digital_write2 = {
init: function () {
this.setColour(BASE_HUE);
this.appendValueInput("PIN", Number)
.appendField(Blockly.Msg.MIXLY_DIGITALWRITE_PIN)
.setCheck(Number);
this.appendValueInput("STAT")
.appendField(Blockly.Msg.MIXLY_STAT)
.setCheck([Number, Boolean]);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setInputsInline(true);
this.setTooltip(Blockly.Msg.LANG_INOUT_DIGITAL_WRITE_TOOLTIP);
this.setHelpUrl("https://mixly.readthedocs.io/zh_CN/latest/arduino/02.Input-Output.html#id2");
}
};
export const inout_digital_read = {
init: function () {
this.setColour(BASE_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_DIGITALREAD_PIN)
.appendField(new Blockly.FieldDropdown(Profile.default.digital), "PIN");
this.setOutput(true, [Boolean, Number]);
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_INOUT_DIGITAL_READ);
this.setHelpUrl("https://mixly.readthedocs.io/zh_CN/latest/arduino/02.Input-Output.html#id7");
}
};
export const inout_digital_read2 = {
init: function () {
this.setColour(BASE_HUE);
this.appendValueInput("PIN", Number)
.appendField(Blockly.Msg.MIXLY_DIGITALREAD_PIN)
.setCheck(Number);
this.setInputsInline(true);
this.setOutput(true, [Boolean, Number]);
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_INOUT_DIGITAL_READ);
this.setHelpUrl("https://mixly.readthedocs.io/zh_CN/latest/arduino/02.Input-Output.html#id19");
}
};
export const inout_analog_write = {
init: function () {
this.setColour(BASE_HUE);
this.appendValueInput("PIN", Number)
.appendField(Blockly.Msg.MIXLY_ANALOGWRITE_PIN)
.setCheck(Number);
this.appendValueInput("NUM", Number)
.appendField(Blockly.Msg.MIXLY_VALUE2)
.setCheck(Number);
this.setInputsInline(true);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_INOUT_ANALOG_WRITE);
this.setHelpUrl("https://mixly.readthedocs.io/zh_CN/latest/arduino/02.Input-Output.html#id13");
}
};
export const inout_analog_read = {
init: function () {
this.setColour(BASE_HUE);
this.appendValueInput("PIN", Number)
.appendField(Blockly.Msg.MIXLY_ANALOGREAD_PIN)
.setCheck(Number);
this.setInputsInline(true);
this.setOutput(true, Number);
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_INOUT_ANALOG_READ);
this.setHelpUrl("https://mixly.readthedocs.io/zh_CN/latest/arduino/02.Input-Output.html#id13");
}
};
export const inout_buildin_led = {
init: function () {
this.setColour(BASE_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_BUILDIN_LED)
.appendField(Blockly.Msg.MIXLY_STAT)
.appendField(new Blockly.FieldDropdown([
[Blockly.Msg.MIXLY_ON, "HIGH"],
[Blockly.Msg.MIXLY_OFF, "LOW"]
]), "STAT");
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setTooltip('light or off the build-in LED');
}
};
export const OneButton_interrupt = {
init: function () {
this.setColour(BASE_HUE);
this.appendValueInput("PIN", Number)
.appendField(Blockly.Msg.ONEBUTTON + " " + Blockly.Msg.MIXLY_PIN)
.setCheck(Number);
this.appendDummyInput("")
.appendField(new Blockly.FieldDropdown([
[Blockly.Msg.MIXLY_CLICK, "attachClick"],
[Blockly.Msg.MIXLY_DOUBLE_CLICK, "attachDoubleClick"],
[Blockly.Msg.MIXLY_LONG_PRESS_START, "attachLongPressStart"],
[Blockly.Msg.MIXLY_DURING_LONG_PRESS, "attachDuringLongPress"],
[Blockly.Msg.MIXLY_LONG_PRESS_END, "attachLongPressStop"]
]), "mode");
this.appendValueInput("STAT")
.appendField(Blockly.Msg.MIXLY_ELECLEVEL);
this.appendStatementInput('DO')
.appendField(Blockly.Msg.MIXLY_DO);
this.setInputsInline(true);
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_INOUT_ATTACHINTERRUPT);
this.setHelpUrl();
}
};
export const controls_attachInterrupt = {
init: function () {
this.setColour(BASE_HUE);
this.appendValueInput("PIN", Number)
.appendField(Blockly.Msg.MIXLY_ATTACHINTERRUPT_PIN)
.setCheck(Number);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_MODE)
.appendField(new Blockly.FieldDropdown([
[Blockly.Msg.MIXLY_RISING, "RISING"],
[Blockly.Msg.MIXLY_FALLING, "FALLING"],
[Blockly.Msg.MIXLY_CHANGE, "CHANGE"]
]), "mode");
this.appendStatementInput('DO')
.appendField(Blockly.Msg.MIXLY_DO);
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_INOUT_ATTACHINTERRUPT);
this.setHelpUrl("https://mixly.readthedocs.io/zh_CN/latest/arduino/02.Input-Output.html#id25");
}
};
export const controls_detachInterrupt = {
init: function () {
this.setColour(BASE_HUE);
this.appendValueInput("PIN", Number)
.appendField(Blockly.Msg.MIXLY_DETACHINTERRUPT_PIN)
.setCheck(Number);
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setInputsInline(true);
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_INOUT_DETACHINTERRUPT);
this.setHelpUrl("https://mixly.readthedocs.io/zh_CN/latest/arduino/02.Input-Output.html#id30");
}
};
export const controls_attachPinInterrupt = {
init: function () {
this.setColour(BASE_HUE);
this.appendValueInput("PIN", Number)
.appendField(Blockly.Msg.MIXLY_ATTACHPININTERRUPT_PIN)
.setCheck(Number);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_MODE)
.appendField(new Blockly.FieldDropdown([
[Blockly.Msg.MIXLY_RISING, "RISING"],
[Blockly.Msg.MIXLY_FALLING, "FALLING"],
[Blockly.Msg.MIXLY_CHANGE, "CHANGE"]
]), "mode");
this.appendStatementInput('DO')
.appendField(Blockly.Msg.MIXLY_DO);
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_INOUT_ATTACHINTERRUPT);
}
};
export const controls_detachPinInterrupt = {
init: function () {
this.setColour(BASE_HUE);
this.appendValueInput("PIN", Number)
.appendField(Blockly.Msg.MIXLY_DETACHPININTERRUPT_PIN)
.setCheck(Number);
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_INOUT_DETACHINTERRUPT);
}
};
export const inout_pulseIn = {
init: function () {
this.setColour(BASE_HUE);
this.appendValueInput("PIN", Number)
.appendField(Blockly.Msg.MIXLY_PULSEIN)
.setCheck(Number);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_PULSEIN_STAT)
.appendField(new Blockly.FieldDropdown([
[Blockly.Msg.MIXLY_HIGH, "HIGH"],
[Blockly.Msg.MIXLY_LOW, "LOW"]
]), "STAT");
this.setOutput(true, Number);
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_INOUT_pulseIn);
this.setHelpUrl("https://mixly.readthedocs.io/zh_CN/latest/arduino/02.Input-Output.html#id33");
}
};
export const inout_pulseIn2 = {
init: function () {
this.setColour(BASE_HUE);
this.appendValueInput("PIN", Number)
.appendField(Blockly.Msg.MIXLY_PULSEIN)
.setCheck(Number);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_PULSEIN_STAT)
.appendField(new Blockly.FieldDropdown([
[Blockly.Msg.MIXLY_HIGH, "HIGH"],
[Blockly.Msg.MIXLY_LOW, "LOW"]
]), "STAT");
this.appendValueInput("TIMEOUT", Number)
.appendField(Blockly.Msg.MIXLY_PULSEIN_TIMEOUT)
.setCheck(Number);
this.setInputsInline(true);
this.setOutput(true, Number);
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_INOUT_pulseIn2);
this.setHelpUrl("https://mixly.readthedocs.io/zh_CN/latest/arduino/02.Input-Output.html#id33");
}
};
export const inout_shiftout = {
init: function () {
this.setColour(BASE_HUE);
this.appendDummyInput("")
.appendField("ShiftOut");
this.appendValueInput("PIN1", Number)
.appendField(Blockly.Msg.MIXLY_DATAPIN)
.setCheck(Number);
this.appendValueInput("PIN2", Number)
.appendField(Blockly.Msg.MIXLY_CLOCKPIN)
.setCheck(Number);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_BITORDER)
.appendField(new Blockly.FieldDropdown([
[Blockly.Msg.MIXLY_MSBFIRST, "MSBFIRST"],
[Blockly.Msg.MIXLY_LSBFIRST, "LSBFIRST"]
]), "ORDER");
this.appendValueInput("DATA", Number)
.appendField(Blockly.Msg.MIXLY_DATA)
.setCheck(Number);
this.setInputsInline(true);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_INOUT_shiftout);
this.setHelpUrl("https://mixly.readthedocs.io/zh_CN/latest/arduino/02.Input-Output.html#shiftout");
}
};
export const ESP32touchButton = {
init: function () {
this.setColour(BASE_HUE);
this.appendValueInput("PIN", Number)
.appendField("ESP32" + Blockly.Msg.MIXLY_ESP32_TOUCH + Blockly.Msg.ONEBUTTON + " " + Blockly.Msg.MIXLY_PIN)
.setCheck(Number);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_MODE)
.appendField(new Blockly.FieldDropdown([
[Blockly.Msg.MIXLY_CLICK, "attachClick"],
[Blockly.Msg.MIXLY_DOUBLE_CLICK, "attachDoubleClick"],
[Blockly.Msg.MIXLY_LONG_PRESS_START, "attachLongPressStart"],
[Blockly.Msg.MIXLY_DURING_LONG_PRESS, "attachDuringLongPress"],
[Blockly.Msg.MIXLY_LONG_PRESS_END, "attachLongPressStop"]
]), "mode");
this.appendStatementInput('DO')
.appendField(Blockly.Msg.MIXLY_DO);
this.setTooltip();
this.setHelpUrl();
}
};
export const inout_soft_analog_write = {
init: function () {
this.setColour(BASE_HUE);
this.appendValueInput("PIN", Number)
.appendField(Blockly.Msg.MIXLY_SOFT_ANALOGWRITE_PIN)
.setCheck(Number);
this.appendValueInput("NUM", Number)
.appendField(Blockly.Msg.MIXLY_VALUE2)
.setCheck(Number);
this.setInputsInline(true);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_INOUT_ANALOG_WRITE);
this.setHelpUrl("");
}
};
export const inout_cancel_soft_analog_write = {
init: function () {
this.setColour(BASE_HUE);
this.appendValueInput("PIN", Number)
.appendField(Blockly.Msg.MIXLY_CANCEL_SOFT_ANALOGWRITE_PIN)
.setCheck(Number);
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setInputsInline(true);
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_CANCEL_SOFT_ANALOGWRITE_PIN);
this.setHelpUrl("");
}
};
//ADS1015模拟数字转换模块-增益设置
export const ADS1015_setGain = {
init: function () {
this.setColour(BASE_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_SETTING)
.appendField(Blockly.Msg.ADS1015_setGain);
this.appendDummyInput("")
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(new Blockly.FieldDropdown(ADS1015_setGain.GAIN_TYPE), "ADS1015_setGain");
this.setInputsInline(true);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setTooltip();
},
GAIN_TYPE: [
["±6.144V 3mv/bit", "GAIN_TWOTHIRDS"],
["±4.096V 2mv/bit", "GAIN_ONE"],
["±2.048V 1mv/bit", "GAIN_TWO"],
["±1.024V 0.5mv/bit", "GAIN_FOUR"],
["±0.512V 0.25mv/bit", "GAIN_EIGHT"],
["±0.256V 0.125mv/bit", "GAIN_SIXTEEN"],
]
};
//ADS1015模拟数字转换模块 数值获取
export const ADS1015_Get_Value = {
init: function () {
this.setColour(BASE_HUE);
this.appendDummyInput("")
.appendField("ADS1015" + Blockly.Msg.ADS1015_Get_Value);
this.appendDummyInput("")
.appendField(new Blockly.FieldDropdown([
["AIN0", "ads.readADC_SingleEnded(0)"],
["AIN1", "ads.readADC_SingleEnded(1)"],
["AIN2", "ads.readADC_SingleEnded(2)"],
["AIN3", "ads.readADC_SingleEnded(3)"]
]), "ADS1015_AIN");
this.setInputsInline(true);
this.setOutput(true);
}
};
//PCF8591T模拟数字转换模块 数值获取
export const PCF8591T = {
init: function () {
this.setColour(BASE_HUE);
this.appendDummyInput("")
.appendField("PCF8591T" + Blockly.Msg.ADS1015_Get_Value);
this.appendDummyInput("")
.appendField(new Blockly.FieldDropdown([
["AIN0", "pcf8591.analogRead(AIN0)"],
["AIN1", "pcf8591.analogRead(AIN1)"],
["AIN2", "pcf8591.analogRead(AIN2)"],
["AIN3", "pcf8591.analogRead(AIN3)"]
]), "PCF8591T_AIN");
this.setInputsInline(true);
this.setOutput(true);
}
};