feat(boards): 为mp下外接ws2812添加 跑马灯彩虹 效果模块

This commit is contained in:
王立帮
2025-05-14 00:27:13 +08:00
parent bf55307f86
commit 2b20933053
10 changed files with 318 additions and 59 deletions

View File

@@ -398,7 +398,7 @@ export const actuator_neopixel_init = {
init: function () {
this.setColour(ACTUATOR_EXTERN_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_RGB)
.appendField(Blockly.Msg.MIXLY_RGB);
this.appendValueInput('SUB')
.appendField(Blockly.Msg.MIXLY_SETUP)
.setCheck("var");
@@ -421,7 +421,7 @@ export const actuator_neopixel_rgb = {
init: function () {
this.setColour(ACTUATOR_EXTERN_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_RGB)
.appendField(Blockly.Msg.MIXLY_RGB);
this.appendValueInput('SUB')
.setCheck("var");
// .appendField(Blockly.Msg.MIXLY_SETUP)
@@ -453,7 +453,7 @@ export const actuator_neopixel_rgb_all = {
init: function () {
this.setColour(ACTUATOR_EXTERN_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_RGB)
.appendField(Blockly.Msg.MIXLY_RGB);
this.appendValueInput('SUB')
.setCheck("var");
this.appendValueInput("RVALUE")
@@ -480,11 +480,7 @@ export const actuator_neopixel_write = {
init: function () {
this.setColour(ACTUATOR_EXTERN_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_RGB)
// this.appendValueInput("PIN", Number)
// .setCheck(Number)
// .setAlign(Blockly.inputs.Align.RIGHT)
// .appendField(Blockly.Msg.MIXLY_PIN);
.appendField(Blockly.Msg.MIXLY_RGB);
this.appendValueInput('SUB')
.setCheck("var");
this.appendDummyInput()
@@ -497,6 +493,58 @@ export const actuator_neopixel_write = {
}
};
export const actuator_neopixel_rgb_show_all_rainbow = {
init: function () {
this.setColour(ACTUATOR_EXTERN_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_RGB);
this.appendValueInput('SUB')
.setCheck("var");
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_RAINBOW);
this.appendValueInput('time')
.setCheck(Number)
.appendField(Blockly.Msg.MIXLY_DURATION)
.appendField(Blockly.Msg.MIXLY_MILLIS);
this.setInputsInline(true);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setTooltip('');
}
};
export const actuator_neopixel_rgb_show_all_chase = {
init: function () {
this.setColour(ACTUATOR_EXTERN_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_RGB);
this.appendValueInput('SUB')
.setCheck("var");
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_CHASE);
this.appendValueInput("RVALUE")
.setCheck(Number)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.MIXLY_RGB_R);
this.appendValueInput("GVALUE")
.setCheck(Number)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.MIXLY_RGB_G);
this.appendValueInput("BVALUE")
.setCheck(Number)
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg.MIXLY_RGB_B);
this.appendValueInput('time')
.setCheck(Number)
.appendField(Blockly.Msg.PYTHON_RANGE_STEP)
.appendField(Blockly.Msg.MIXLY_MILLIS);
this.setInputsInline(true);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setTooltip('');
}
};
export const actuator_use_uart_init = {
init: function () {
this.setColour(ACTUATOR_EXTERN_HUE);

View File

@@ -178,41 +178,54 @@ export const actuator_extern_led_brightness = function (_, generator) {
}
export const actuator_neopixel_init = function (_, generator) {
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
var dropdown_rgbpin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
var value_ledcount = generator.valueToCode(this, 'LEDCOUNT', generator.ORDER_ATOMIC);
const v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
const dropdown_rgbpin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
const value_ledcount = generator.valueToCode(this, 'LEDCOUNT', generator.ORDER_ATOMIC);
generator.definitions_['import_machine'] = 'import machine';
generator.definitions_['import_neopixel'] = 'import neopixel';
var code = v + ' = neopixel.NeoPixel(machine.Pin(' + dropdown_rgbpin + '), ' + value_ledcount + ')\n';
generator.definitions_['import_ws2812_Neopixel'] = 'from ws2812 import NeoPixel';
const code = `${v} = NeoPixel(machine.Pin(${dropdown_rgbpin}), ${value_ledcount})\n`;
return code;
}
export const actuator_neopixel_rgb_all = function (_, generator) {
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
var value_rvalue = generator.valueToCode(this, 'RVALUE', generator.ORDER_ATOMIC);
var value_gvalue = generator.valueToCode(this, 'GVALUE', generator.ORDER_ATOMIC);
var value_bvalue = generator.valueToCode(this, 'BVALUE', generator.ORDER_ATOMIC);
var code = v + '.fill((' + value_rvalue + ', ' + value_gvalue + ', ' + value_bvalue + '))\n';
const v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
const value_rvalue = generator.valueToCode(this, 'RVALUE', generator.ORDER_ATOMIC);
const value_gvalue = generator.valueToCode(this, 'GVALUE', generator.ORDER_ATOMIC);
const value_bvalue = generator.valueToCode(this, 'BVALUE', generator.ORDER_ATOMIC);
const code = `${v}.fill((${value_rvalue}, ${value_gvalue}, ${value_bvalue}))\n`;
return code;
}
export const actuator_neopixel_write = function (_, generator) {
generator.definitions_['import_machine'] = 'import machine';
generator.definitions_['import_neopixel'] = 'import neopixel';
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
var code = v + '.write()\n';
const v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
const code = `${v}.write()\n`;
return code;
}
export const actuator_neopixel_rgb = function (_, generator) {
generator.definitions_['import_machine'] = 'import machine';
generator.definitions_['import_neopixel'] = 'import neopixel';
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
var value_led = generator.valueToCode(this, '_LED_', generator.ORDER_ATOMIC);
var value_rvalue = generator.valueToCode(this, 'RVALUE', generator.ORDER_ATOMIC);
var value_gvalue = generator.valueToCode(this, 'GVALUE', generator.ORDER_ATOMIC);
var value_bvalue = generator.valueToCode(this, 'BVALUE', generator.ORDER_ATOMIC);
var code = v + '[' + value_led + '] = (' + value_rvalue + ', ' + value_gvalue + ', ' + value_bvalue + ')\n';
const v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
const value_led = generator.valueToCode(this, '_LED_', generator.ORDER_ATOMIC);
const value_rvalue = generator.valueToCode(this, 'RVALUE', generator.ORDER_ATOMIC);
const value_gvalue = generator.valueToCode(this, 'GVALUE', generator.ORDER_ATOMIC);
const value_bvalue = generator.valueToCode(this, 'BVALUE', generator.ORDER_ATOMIC);
const code = `${v}[${value_led}] = (${value_rvalue}, ${value_gvalue}, ${value_bvalue})\n`;
return code;
}
export const actuator_neopixel_rgb_show_all_chase = function (_, generator) {
const v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
const value_rvalue = generator.valueToCode(this, 'RVALUE', generator.ORDER_ATOMIC);
const value_gvalue = generator.valueToCode(this, 'GVALUE', generator.ORDER_ATOMIC);
const value_bvalue = generator.valueToCode(this, 'BVALUE', generator.ORDER_ATOMIC);
const number_time = generator.valueToCode(this, 'time', generator.ORDER_ATOMIC);
const code = `${v}.color_chase(${value_rvalue}, ${value_gvalue}, ${value_bvalue}, ${number_time})\n`;
return code;
}
export const actuator_neopixel_rgb_show_all_rainbow = function (_, generator) {
const v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
const number_time = generator.valueToCode(this, 'time', generator.ORDER_ATOMIC);
const code = `${v}.rainbow_cycle(${number_time})\n`;
return code;
}

View File

@@ -203,49 +203,49 @@ export const rm_actuator_led_brightness = function (_, generator) {
}
export const actuator_onboard_neopixel_write = function (_, generator) {
var version = Boards.getSelectedBoardKey().split(':')[2]
generator.definitions_['import_' + version + '_onboard_rgb'] = 'from ' + version + ' import onboard_rgb';
var code = 'onboard_rgb.write()\n';
const version = Boards.getSelectedBoardKey().split(':')[2];
generator.definitions_[`import_${version}_onboard_rgb`] = `from ${version} import onboard_rgb`;
const code = 'onboard_rgb.write()\n';
return code;
}
export const actuator_onboard_neopixel_rgb = function (_, generator) {
var version = Boards.getSelectedBoardKey().split(':')[2]
generator.definitions_['import_' + version + '_onboard_rgb'] = 'from ' + version + ' import onboard_rgb';
var value_led = generator.valueToCode(this, '_LED_', generator.ORDER_ATOMIC);
var value_rvalue = generator.valueToCode(this, 'RVALUE', generator.ORDER_ATOMIC);
var value_gvalue = generator.valueToCode(this, 'GVALUE', generator.ORDER_ATOMIC);
var value_bvalue = generator.valueToCode(this, 'BVALUE', generator.ORDER_ATOMIC);
var code = 'onboard_rgb[' + value_led + '] = (' + value_rvalue + ', ' + value_gvalue + ', ' + value_bvalue + ')\n';
const version = Boards.getSelectedBoardKey().split(':')[2];
generator.definitions_[`import_${version}_onboard_rgb`] = `from ${version} import onboard_rgb`;
const value_led = generator.valueToCode(this, '_LED_', generator.ORDER_ATOMIC);
const value_rvalue = generator.valueToCode(this, 'RVALUE', generator.ORDER_ATOMIC);
const value_gvalue = generator.valueToCode(this, 'GVALUE', generator.ORDER_ATOMIC);
const value_bvalue = generator.valueToCode(this, 'BVALUE', generator.ORDER_ATOMIC);
const code = `onboard_rgb[${value_led}] = (${value_rvalue}, ${value_gvalue}, ${value_bvalue})\n`;
return code;
}
export const actuator_onboard_neopixel_rgb_all = function (_, generator) {
var version = Boards.getSelectedBoardKey().split(':')[2]
generator.definitions_['import_' + version + '_onboard_rgb'] = 'from ' + version + ' import onboard_rgb';
var value_rvalue = generator.valueToCode(this, 'RVALUE', generator.ORDER_ATOMIC);
var value_gvalue = generator.valueToCode(this, 'GVALUE', generator.ORDER_ATOMIC);
var value_bvalue = generator.valueToCode(this, 'BVALUE', generator.ORDER_ATOMIC);
var code = 'onboard_rgb.fill((' + value_rvalue + ', ' + value_gvalue + ', ' + value_bvalue + '))\n';
const version = Boards.getSelectedBoardKey().split(':')[2];
generator.definitions_[`import_${version}_onboard_rgb`] = `from ${version} import onboard_rgb`;
const value_rvalue = generator.valueToCode(this, 'RVALUE', generator.ORDER_ATOMIC);
const value_gvalue = generator.valueToCode(this, 'GVALUE', generator.ORDER_ATOMIC);
const value_bvalue = generator.valueToCode(this, 'BVALUE', generator.ORDER_ATOMIC);
const code = `onboard_rgb.fill((${value_rvalue}, ${value_gvalue}, ${value_bvalue}))\n`;
return code;
}
export const actuator_onboard_neopixel_rgb_show_all_chase = function (_, generator) {
var version = Boards.getSelectedBoardKey().split(':')[2]
generator.definitions_['import_' + version + '_onboard_rgb'] = 'from ' + version + ' import onboard_rgb';
var value_rvalue = generator.valueToCode(this, 'RVALUE', generator.ORDER_ATOMIC);
var value_gvalue = generator.valueToCode(this, 'GVALUE', generator.ORDER_ATOMIC);
var value_bvalue = generator.valueToCode(this, 'BVALUE', generator.ORDER_ATOMIC);
var number_time = generator.valueToCode(this, 'time', generator.ORDER_ATOMIC);
var code = 'onboard_rgb.color_chase(' + value_rvalue + ', ' + value_gvalue + ', ' + value_bvalue + ', ' + number_time + ')\n';
const version = Boards.getSelectedBoardKey().split(':')[2];
generator.definitions_[`import_${version}_onboard_rgb`] = `from ${version} import onboard_rgb`;
const value_rvalue = generator.valueToCode(this, 'RVALUE', generator.ORDER_ATOMIC);
const value_gvalue = generator.valueToCode(this, 'GVALUE', generator.ORDER_ATOMIC);
const value_bvalue = generator.valueToCode(this, 'BVALUE', generator.ORDER_ATOMIC);
const number_time = generator.valueToCode(this, 'time', generator.ORDER_ATOMIC);
const code = `onboard_rgb.color_chase(${value_rvalue}, ${value_gvalue}, ${value_bvalue}, ${number_time})\n`;
return code;
}
export const actuator_onboard_neopixel_rgb_show_all_rainbow = function (_, generator) {
var version = Boards.getSelectedBoardKey().split(':')[2]
generator.definitions_['import_' + version + '_onboard_rgb'] = 'from ' + version + ' import onboard_rgb';
var number_time = generator.valueToCode(this, 'time', generator.ORDER_ATOMIC);
var code = 'onboard_rgb.rainbow_cycle(' + number_time + ')\n';
const version = Boards.getSelectedBoardKey().split(':')[2];
generator.definitions_[`import_${version}_onboard_rgb`] = `from ${version} import onboard_rgb`;
const number_time = generator.valueToCode(this, 'time', generator.ORDER_ATOMIC);
const code = `onboard_rgb.rainbow_cycle(${number_time})\n`;
return code;
}

View File

@@ -1704,8 +1704,7 @@
</shadow>
</value>
</block>
<block type="actuator_onboard_neopixel_write">
</block>
<block type="actuator_onboard_neopixel_write"></block>
<block type="rm_motor" m-show='micropython:esp32:rm_e1'>
<value name="speed">
<shadow type="math_number">
@@ -4482,6 +4481,45 @@
</shadow>
</value>
</block>
<block type="actuator_neopixel_rgb_show_all_chase">
<value name="SUB">
<shadow type="variables_get">
<field name="VAR">rgb</field>
</shadow>
</value>
<value name="RVALUE">
<shadow type="math_number">
<field name="NUM">0</field>
</shadow>
</value>
<value name="GVALUE">
<shadow type="math_number">
<field name="NUM">0</field>
</shadow>
</value>
<value name="BVALUE">
<shadow type="math_number">
<field name="NUM">0</field>
</shadow>
</value>
<value name="time">
<shadow type="math_number">
<field name="NUM">1000</field>
</shadow>
</value>
</block>
<block type="actuator_neopixel_rgb_show_all_rainbow">
<value name="SUB">
<shadow type="variables_get">
<field name="VAR">rgb</field>
</shadow>
</value>
<value name="time">
<shadow type="math_number">
<field name="NUM">1000</field>
</shadow>
</value>
</block>
<block type="actuator_neopixel_write">
<value name="SUB">
<shadow type="variables_get">

View File

@@ -3,6 +3,7 @@ import * as MicropythonESP32C2InoutBlocks from './blocks/inout';
import * as MicropythonESP32C2MiniG2Blocks from './blocks/mini_g2';
import * as MicropythonESP32C2MEGOBlocks from './blocks/me_go';
import * as MicropythonESP32C2PinsBlocks from './blocks/pins';
import * as MicropythonESP32C2ActuatorExternGenerators from './generators/actuator_extern';
import * as MicropythonESP32C2InoutGenerators from './generators/inout';
import * as MicropythonESP32C2MiniG2Generators from './generators/mini_g2';
import * as MicropythonESP32C2MEGOGenerators from './generators/me_go';
@@ -14,6 +15,7 @@ export {
MicropythonESP32C2MiniG2Blocks,
MicropythonESP32C2MEGOBlocks,
MicropythonESP32C2PinsBlocks,
MicropythonESP32C2ActuatorExternGenerators,
MicropythonESP32C2InoutGenerators,
MicropythonESP32C2MiniG2Generators,
MicropythonESP32C2MEGOGenerators,

View File

@@ -80,6 +80,7 @@ import {
MicropythonESP32C2MiniG2Blocks,
MicropythonESP32C2MEGOBlocks,
MicropythonESP32C2PinsBlocks,
MicropythonESP32C2ActuatorExternGenerators,
MicropythonESP32C2InoutGenerators,
MicropythonESP32C2MiniG2Generators,
MicropythonESP32C2MEGOGenerators,
@@ -171,6 +172,7 @@ Object.assign(
MicroPythonBlynkGenerators,
MicroPythonCCG1Generators,
MicroPythonCEGOGenerators,
MicropythonESP32C2ActuatorExternGenerators,
MicropythonESP32C2InoutGenerators,
MicropythonESP32C2MiniG2Generators,
MicropythonESP32C2MEGOGenerators,

View File

@@ -4385,6 +4385,45 @@
</shadow>
</value>
</block>
<block type="actuator_neopixel_rgb_show_all_chase">
<value name="SUB">
<shadow type="variables_get">
<field name="VAR">rgb</field>
</shadow>
</value>
<value name="RVALUE">
<shadow type="math_number">
<field name="NUM">0</field>
</shadow>
</value>
<value name="GVALUE">
<shadow type="math_number">
<field name="NUM">0</field>
</shadow>
</value>
<value name="BVALUE">
<shadow type="math_number">
<field name="NUM">0</field>
</shadow>
</value>
<value name="time">
<shadow type="math_number">
<field name="NUM">1000</field>
</shadow>
</value>
</block>
<block type="actuator_neopixel_rgb_show_all_rainbow">
<value name="SUB">
<shadow type="variables_get">
<field name="VAR">rgb</field>
</shadow>
</value>
<value name="time">
<shadow type="math_number">
<field name="NUM">1000</field>
</shadow>
</value>
</block>
<block type="actuator_neopixel_write">
<value name="SUB">
<shadow type="variables_get">

View File

@@ -4287,6 +4287,45 @@
</shadow>
</value>
</block>
<block type="actuator_neopixel_rgb_show_all_chase" m-hide='micropython:esp32c3:mixgocar_c3'>
<value name="SUB">
<shadow type="variables_get">
<field name="VAR">rgb</field>
</shadow>
</value>
<value name="RVALUE">
<shadow type="math_number">
<field name="NUM">0</field>
</shadow>
</value>
<value name="GVALUE">
<shadow type="math_number">
<field name="NUM">0</field>
</shadow>
</value>
<value name="BVALUE">
<shadow type="math_number">
<field name="NUM">0</field>
</shadow>
</value>
<value name="time">
<shadow type="math_number">
<field name="NUM">1000</field>
</shadow>
</value>
</block>
<block type="actuator_neopixel_rgb_show_all_rainbow" m-hide='micropython:esp32c3:mixgocar_c3'>
<value name="SUB">
<shadow type="variables_get">
<field name="VAR">rgb</field>
</shadow>
</value>
<value name="time">
<shadow type="math_number">
<field name="NUM">1000</field>
</shadow>
</value>
</block>
<block type="actuator_neopixel_write" m-hide='micropython:esp32c3:mixgocar_c3'>
<value name="SUB">
<shadow type="variables_get">

View File

@@ -4018,6 +4018,45 @@
</shadow>
</value>
</block>
<block type="actuator_neopixel_rgb_show_all_chase">
<value name="SUB">
<shadow type="variables_get">
<field name="VAR">rgb</field>
</shadow>
</value>
<value name="RVALUE">
<shadow type="math_number">
<field name="NUM">0</field>
</shadow>
</value>
<value name="GVALUE">
<shadow type="math_number">
<field name="NUM">0</field>
</shadow>
</value>
<value name="BVALUE">
<shadow type="math_number">
<field name="NUM">0</field>
</shadow>
</value>
<value name="time">
<shadow type="math_number">
<field name="NUM">1000</field>
</shadow>
</value>
</block>
<block type="actuator_neopixel_rgb_show_all_rainbow">
<value name="SUB">
<shadow type="variables_get">
<field name="VAR">rgb</field>
</shadow>
</value>
<value name="time">
<shadow type="math_number">
<field name="NUM">1000</field>
</shadow>
</value>
</block>
<block type="actuator_neopixel_write">
<value name="SUB">
<shadow type="variables_get">

View File

@@ -4645,6 +4645,45 @@
</shadow>
</value>
</block>
<block type="actuator_neopixel_rgb_show_all_chase">
<value name="SUB">
<shadow type="variables_get">
<field name="VAR">rgb</field>
</shadow>
</value>
<value name="RVALUE">
<shadow type="math_number">
<field name="NUM">0</field>
</shadow>
</value>
<value name="GVALUE">
<shadow type="math_number">
<field name="NUM">0</field>
</shadow>
</value>
<value name="BVALUE">
<shadow type="math_number">
<field name="NUM">0</field>
</shadow>
</value>
<value name="time">
<shadow type="math_number">
<field name="NUM">1000</field>
</shadow>
</value>
</block>
<block type="actuator_neopixel_rgb_show_all_rainbow">
<value name="SUB">
<shadow type="variables_get">
<field name="VAR">rgb</field>
</shadow>
</value>
<value name="time">
<shadow type="math_number">
<field name="NUM">1000</field>
</shadow>
</value>
</block>
<block type="actuator_neopixel_write">
<value name="SUB">
<shadow type="variables_get">