feat: sync micropython esp32 family source configs
This commit is contained in:
3
mixly/boards/default_src/micropython_esp32c2/.npmignore
Normal file
3
mixly/boards/default_src/micropython_esp32c2/.npmignore
Normal file
@@ -0,0 +1,3 @@
|
||||
node_modules
|
||||
build
|
||||
origin
|
||||
@@ -0,0 +1,91 @@
|
||||
import { Profile } from 'mixly';
|
||||
|
||||
const pins = {};
|
||||
|
||||
pins["元控奋斗(MINI)"] = {
|
||||
description: "MicroPython[ESP32C3 MixGo MINI]",
|
||||
digital_pin: Profile.generate(['0-10', '18']),
|
||||
input_pin: Profile.generate(['0-10', '18']),
|
||||
output_pin: Profile.generate(['0-10', '18']),
|
||||
pwm_input: Profile.generate(['0-10', '18'], 'pwm', 'pwm'),
|
||||
analog_input: Profile.generate(['0-4'], 'adc', 'adc'),
|
||||
pwm_output: Profile.generate(['0-10', '18'], 'pwm', 'pwm'),
|
||||
analog_output: Profile.generate(['0-4'], 'adc', 'adc'),
|
||||
espnow_channel: Profile.generate(['1-13']),
|
||||
haskylens_model: Profile.generate(['0-4']),
|
||||
digital: Profile.generate(['0-10', '18'], 'pin', 'pin'),
|
||||
pwm_pin: Profile.generate(['0-10', '18']),
|
||||
pwm: Profile.generate(['0-10', '18'], 'pwm', 'pwm'),
|
||||
analog_pin: Profile.generate(['0-4']),
|
||||
analog: Profile.generate(['0-4'], 'adc', 'adc'),
|
||||
button: [["B1", "B1key"], ["B2", "B2key"], ["A1", "A1key"], ["A2", "A2key"], ["A3", "A3key"], ["A4", "A4key"]],
|
||||
buttonB: [["B1", "B1key"], ["B2", "B2key"]],
|
||||
axis: Profile.generate(['0-4']),
|
||||
exlcdh: Profile.generate(['0-11']),
|
||||
exlcdv: Profile.generate(['0-7']),
|
||||
brightness: Profile.generate(['0-9']),
|
||||
tts_voice: Profile.generate(['0-16']),
|
||||
tts_builtin_music: Profile.generate(['0-47']),
|
||||
tts_bgmusic: Profile.generate(['0-15']),
|
||||
//builtinimg: [["HEART", "matrix.Image.HEART"],["HEART_SMALL", "matrix.Image.HEART_SMALL"],["HAPPY", "matrix.Image.HAPPY"],["SAD", "matrix.Image.SAD"],["SMILE", "matrix.Image.SMILE"],["SILLY", "matrix.Image.SILLY"],["FABULOUS", "matrix.Image.FABULOUS"],["SURPRISED", "matrix.Image.SURPRISED"],["ASLEEP", "matrix.Image.ASLEEP"],["ANGRY", "matrix.Image.ANGRY"],["CONFUSED", "matrix.Image.CONFUSED"],["NO", "matrix.Image.NO"],["YES", "matrix.Image.YES"],["LEFT_ARROW", "matrix.Image.LEFT_ARROW"],["RIGHT_ARROW", "matrix.Image.RIGHT_ARROW"],["DRESS", "matrix.Image.DRESS"],["TRANSFORMERS", "matrix.Image.TRANSFORMERS"],["SCISSORS", "matrix.Image.SCISSORS"],["EXIT", "matrix.Image.EXIT"],["TREE", "matrix.Image.TREE"],["PACMAN", "matrix.Image.PACMAN"],["TARGET", "matrix.Image.TARGET"],["TSHIRT", "matrix.Image.TSHIRT"],["ROLLERSKATE", "matrix.Image.ROLLERSKATE"],["DUCK", "matrix.Image.DUCK"],["HOUSE", "matrix.Image.HOUSE"],["TORTOISE", "matrix.Image.TORTOISE"],["BUTTERFLY", "matrix.Image.BUTTERFLY"],["STICKFIGURE", "matrix.Image.STICKFIGURE"],["GHOST", "matrix.Image.GHOST"],["PITCHFORK", "matrix.Image.PITCHFORK"],["MUSIC_QUAVERS", "matrix.Image.MUSIC_QUAVERS"],["MUSIC_QUAVER", "matrix.Image.MUSIC_QUAVER"],["MUSIC_CROTCHET", "matrix.Image.MUSIC_CROTCHET"],["COW", "matrix.Image.COW"],["RABBIT", "matrix.Image.RABBIT"],["SQUARE_SMALL", "matrix.Image.SQUARE_SMALL"],["SQUARE", "matrix.Image.SQUARE"],["DIAMOND_SMALL", "matrix.Image.DIAMOND_SMALL"],["DIAMOND", "matrix.Image.DIAMOND"],["CHESSBOARD", "matrix.Image.CHESSBOARD"],["TRIANGLE_LEFT", "matrix.Image.TRIANGLE_LEFT"],["TRIANGLE", "matrix.Image.TRIANGLE"],["SNAKE", "matrix.Image.SNAKE"],["UMBRELLA", "matrix.Image.UMBRELLA"],["SKULL", "matrix.Image.SKULL"],["GIRAFFE", "matrix.Image.GIRAFFE"],["SWORD", "matrix.Image.SWORD"]],
|
||||
builtinimg: [["HEART", "onboard_matrix.HEART"], ["HEART_SMALL", "onboard_matrix.HEART_SMALL"], ["HAPPY", "onboard_matrix.HAPPY"], ["SAD", "onboard_matrix.SAD"], ["SMILE", "onboard_matrix.SMILE"], ["ANGRY", "onboard_matrix.ANGRY"], ["NO", "onboard_matrix.NO"], ["YES", "onboard_matrix.YES"], ["DOOR_OPEN", "onboard_matrix.DOOR_OPEN"], ["DOOR_OPENING", "onboard_matrix.DOOR_OPENING"], ["DOOR_CLOSE", "onboard_matrix.DOOR_CLOSE"]],
|
||||
builtinimg_extern: [["HEART", "matrix32x12.Matrix.HEART"], ["HEART_SMALL", "matrix32x12.Matrix.HEART_SMALL"], ["HAPPY", "matrix32x12.Matrix.HAPPY"], ["SAD", "matrix32x12.Matrix.SAD"], ["SMILE", "matrix32x12.Matrix.SMILE"], ["SILLY", "matrix32x12.Matrix.SILLY"], ["FABULOUS", "matrix32x12.Matrix.FABULOUS"], ["SURPRISED", "matrix32x12.Matrix.SURPRISED"], ["ASLEEP", "matrix32x12.Matrix.ASLEEP"], ["ANGRY", "matrix32x12.Matrix.ANGRY"], ["CONFUSED", "matrix32x12.Matrix.CONFUSED"], ["NO", "matrix32x12.Matrix.NO"], ["YES", "matrix32x12.Matrix.YES"], ["LEFT_ARROW", "matrix32x12.Matrix.LEFT_ARROW"], ["RIGHT_ARROW", "matrix32x12.Matrix.RIGHT_ARROW"], ["DRESS", "matrix32x12.Matrix.DRESS"], ["TRANSFORMERS", "matrix32x12.Matrix.TRANSFORMERS"], ["SCISSORS", "matrix32x12.Matrix.SCISSORS"], ["EXIT", "matrix32x12.Matrix.EXIT"], ["TREE", "matrix32x12.Matrix.TREE"], ["PACMAN", "matrix32x12.Matrix.PACMAN"], ["TARGET", "matrix32x12.Matrix.TARGET"], ["TSHIRT", "matrix32x12.Matrix.TSHIRT"], ["ROLLERSKATE", "matrix32x12.Matrix.ROLLERSKATE"], ["DUCK", "matrix32x12.Matrix.DUCK"], ["HOUSE", "matrix32x12.Matrix.HOUSE"], ["TORTOISE", "matrix32x12.Matrix.TORTOISE"], ["BUTTERFLY", "matrix32x12.Matrix.BUTTERFLY"], ["STICKFIGURE", "matrix32x12.Matrix.STICKFIGURE"], ["GHOST", "matrix32x12.Matrix.GHOST"], ["PITCHFORK", "matrix32x12.Matrix.PITCHFORK"], ["onboard_music_QUAVERS", "matrix32x12.Matrix.onboard_music_QUAVERS"], ["onboard_music_QUAVER", "matrix32x12.Matrix.onboard_music_QUAVER"], ["onboard_music_CROTCHET", "matrix32x12.Matrix.onboard_music_CROTCHET"], ["COW", "matrix32x12.Matrix.COW"], ["RABBIT", "matrix32x12.Matrix.RABBIT"], ["SQUARE_SMALL", "matrix32x12.Matrix.SQUARE_SMALL"], ["SQUARE", "matrix32x12.Matrix.SQUARE"], ["DIAMOND_SMALL", "matrix32x12.Matrix.DIAMOND_SMALL"], ["DIAMOND", "matrix32x12.Matrix.DIAMOND"], ["CHESSBOARD", "matrix32x12.Matrix.CHESSBOARD"], ["TRIANGLE_LEFT", "matrix32x12.Matrix.TRIANGLE_LEFT"], ["TRIANGLE", "matrix32x12.Matrix.TRIANGLE"], ["SNAKE", "matrix32x12.Matrix.SNAKE"], ["UMBRELLA", "matrix32x12.Matrix.UMBRELLA"], ["SKULL", "matrix32x12.Matrix.SKULL"], ["GIRAFFE", "matrix32x12.Matrix.GIRAFFE"], ["SWORD", "matrix32x12.Matrix.SWORD"]],
|
||||
imglist: [["ALL_CLOCKS", "matrix.Image.ALL_CLOCKS"], ["ALL_ARROWS", "matrix.Image.ALL_ARROWS"]],
|
||||
playlist: [["DADADADUM", "onboard_music.DADADADUM"], ["BIRTHDAY", "onboard_music.BIRTHDAY"], ["BA_DING", "onboard_music.BA_DING"], ["JUMP_UP", "onboard_music.JUMP_UP"], ["JUMP_DOWN", "onboard_music.JUMP_DOWN"], ["POWER_UP", "onboard_music.POWER_UP"], ["POWER_DOWN", "onboard_music.POWER_DOWN"]],
|
||||
playlist_extern: [["DADADADUM", "DADADADUM"], ["ENTERTAINER", "ENTERTAINER"], ["PRELUDE", "PRELUDE"], ["ODE", "ODE"], ["NYAN", "NYAN"], ["RINGTONE", "RINGTONE"], ["FUNK", "FUNK"], ["BLUES", "BLUES"], ["BIRTHDAY", "BIRTHDAY"], ["WEDDING", "WEDDING"], ["FUNERAL", "FUNERAL"], ["PUNCHLINE", "PUNCHLINE"], ["PYTHON", "PYTHON"], ["BADDY", "BADDY"], ["CHASE", "CHASE"], ["BA_DING", "BA_DING"], ["WAWAWAWAA", "WAWAWAWAA"], ["JUMP_UP", "JUMP_UP"], ["JUMP_DOWN", "JUMP_DOWN"], ["POWER_UP", "POWER_UP"], ["POWER_DOWN", "POWER_DOWN"]],
|
||||
tone_notes: [
|
||||
["NOTE_C3", "131"], ["NOTE_D3", "147"], ["NOTE_E3", "165"], ["NOTE_F3", "175"], ["NOTE_G3", "196"], ["NOTE_A3", "220"], ["NOTE_B3", "247"],
|
||||
["NOTE_C4", "262"], ["NOTE_D4", "294"], ["NOTE_E4", "330"], ["NOTE_F4", "349"], ["NOTE_G4", "392"], ["NOTE_A4", "440"], ["NOTE_B4", "494"],
|
||||
["NOTE_C5", "523"], ["NOTE_D5", "587"], ["NOTE_E5", "659"], ["NOTE_F5", "698"], ["NOTE_G5", "784"], ["NOTE_A5", "880"], ["NOTE_B5", "988"]
|
||||
],
|
||||
serial_pin: [["pin0", "0"], ["pin1", "1"], ["pin2", "2"], ["pin8", "8"], ["pin12", "12"], ["pin13", "13"], ["pin14", "14"], ["pin15", "15"], ["pin16", "16"]],
|
||||
radio_power: [['0', '0'], ['1', '1'], ['2', '2'], ['3', '3'], ['4', '4'], ['5', '5'], ['6', '6'], ['7', '7']],
|
||||
radio_datarate: [["1Mbit", "RATE_1MBIT"], ["250Kbit", "RATE_250KBIT"], ["2Mbit", "RATE_2MBIT"]],
|
||||
one_more: [["ONE_SHOT", "ONE_SHOT"], ["PERIODIC", "PERIODIC"]],
|
||||
digital_dot: [["0", "0"], ["1", "1"], ["2", "2"]]
|
||||
};
|
||||
|
||||
pins["ESP32C2 Generic(2M)"] = {
|
||||
description: "MicroPython[ESP32C3 MixGo CC]",
|
||||
digital_pin: Profile.generate(['0-11', '18-21']),
|
||||
input_pin: Profile.generate(['0-11', '18-21']),
|
||||
output_pin: Profile.generate(['0-11', '18-21']),
|
||||
pwm_input: Profile.generate(['0-11', '18-21'], 'pwm', 'pwm'),
|
||||
analog_input: Profile.generate(['0-5'], 'adc', 'adc'),
|
||||
pwm_output: Profile.generate(['0-11', '18-21'], 'pwm', 'pwm'),
|
||||
analog_output: Profile.generate(['0-5'], 'adc', 'adc'),
|
||||
espnow_channel: Profile.generate(['1-13']),
|
||||
haskylens_model: Profile.generate(['0-4']),
|
||||
digital: Profile.generate(['0-11', '18-21'], 'pin', 'pin'),
|
||||
pwm_pin: Profile.generate(['0-11', '18-21']),
|
||||
pwm: Profile.generate(['0-11', '18-21'], 'pwm', 'pwm'),
|
||||
analog_pin: Profile.generate(['0-5']),
|
||||
analog: Profile.generate(['0-5'], 'adc', 'adc'),
|
||||
button: [["B1", "B1key"], ["B2", "B2key"], ["A1", "A1key"], ["A2", "A2key"], ["A3", "A3key"], ["A4", "A4key"]],
|
||||
buttonB: [["B1", "B1key"], ["B2", "B2key"]],
|
||||
axis: Profile.generate(['0-4']),
|
||||
exlcdh: Profile.generate(['0-31']),
|
||||
exlcdv: Profile.generate(['0-11']),
|
||||
brightness: Profile.generate(['0-9']),
|
||||
tts_voice: Profile.generate(['0-16']),
|
||||
tts_builtin_music: Profile.generate(['0-47']),
|
||||
tts_bgmusic: Profile.generate(['0-15']),
|
||||
//builtinimg: [["HEART", "matrix.Image.HEART"],["HEART_SMALL", "matrix.Image.HEART_SMALL"],["HAPPY", "matrix.Image.HAPPY"],["SAD", "matrix.Image.SAD"],["SMILE", "matrix.Image.SMILE"],["SILLY", "matrix.Image.SILLY"],["FABULOUS", "matrix.Image.FABULOUS"],["SURPRISED", "matrix.Image.SURPRISED"],["ASLEEP", "matrix.Image.ASLEEP"],["ANGRY", "matrix.Image.ANGRY"],["CONFUSED", "matrix.Image.CONFUSED"],["NO", "matrix.Image.NO"],["YES", "matrix.Image.YES"],["LEFT_ARROW", "matrix.Image.LEFT_ARROW"],["RIGHT_ARROW", "matrix.Image.RIGHT_ARROW"],["DRESS", "matrix.Image.DRESS"],["TRANSFORMERS", "matrix.Image.TRANSFORMERS"],["SCISSORS", "matrix.Image.SCISSORS"],["EXIT", "matrix.Image.EXIT"],["TREE", "matrix.Image.TREE"],["PACMAN", "matrix.Image.PACMAN"],["TARGET", "matrix.Image.TARGET"],["TSHIRT", "matrix.Image.TSHIRT"],["ROLLERSKATE", "matrix.Image.ROLLERSKATE"],["DUCK", "matrix.Image.DUCK"],["HOUSE", "matrix.Image.HOUSE"],["TORTOISE", "matrix.Image.TORTOISE"],["BUTTERFLY", "matrix.Image.BUTTERFLY"],["STICKFIGURE", "matrix.Image.STICKFIGURE"],["GHOST", "matrix.Image.GHOST"],["PITCHFORK", "matrix.Image.PITCHFORK"],["MUSIC_QUAVERS", "matrix.Image.MUSIC_QUAVERS"],["MUSIC_QUAVER", "matrix.Image.MUSIC_QUAVER"],["MUSIC_CROTCHET", "matrix.Image.MUSIC_CROTCHET"],["COW", "matrix.Image.COW"],["RABBIT", "matrix.Image.RABBIT"],["SQUARE_SMALL", "matrix.Image.SQUARE_SMALL"],["SQUARE", "matrix.Image.SQUARE"],["DIAMOND_SMALL", "matrix.Image.DIAMOND_SMALL"],["DIAMOND", "matrix.Image.DIAMOND"],["CHESSBOARD", "matrix.Image.CHESSBOARD"],["TRIANGLE_LEFT", "matrix.Image.TRIANGLE_LEFT"],["TRIANGLE", "matrix.Image.TRIANGLE"],["SNAKE", "matrix.Image.SNAKE"],["UMBRELLA", "matrix.Image.UMBRELLA"],["SKULL", "matrix.Image.SKULL"],["GIRAFFE", "matrix.Image.GIRAFFE"],["SWORD", "matrix.Image.SWORD"]],
|
||||
builtinimg: [["HEART", "onboard_matrix.HEART"], ["HEART_SMALL", "onboard_matrix.HEART_SMALL"], ["HAPPY", "onboard_matrix.HAPPY"], ["SAD", "onboard_matrix.SAD"], ["SMILE", "onboard_matrix.SMILE"], ["SILLY", "onboard_matrix.SILLY"], ["FABULOUS", "onboard_matrix.FABULOUS"], ["SURPRISED", "onboard_matrix.SURPRISED"], ["ASLEEP", "onboard_matrix.ASLEEP"], ["ANGRY", "onboard_matrix.ANGRY"], ["CONFUSED", "onboard_matrix.CONFUSED"], ["NO", "onboard_matrix.NO"], ["YES", "onboard_matrix.YES"]],
|
||||
builtinimg_extern: [["HEART", "matrix32x12.Matrix.HEART"], ["HEART_SMALL", "matrix32x12.Matrix.HEART_SMALL"], ["HAPPY", "matrix32x12.Matrix.HAPPY"], ["SAD", "matrix32x12.Matrix.SAD"], ["SMILE", "matrix32x12.Matrix.SMILE"], ["SILLY", "matrix32x12.Matrix.SILLY"], ["FABULOUS", "matrix32x12.Matrix.FABULOUS"], ["SURPRISED", "matrix32x12.Matrix.SURPRISED"], ["ASLEEP", "matrix32x12.Matrix.ASLEEP"], ["ANGRY", "matrix32x12.Matrix.ANGRY"], ["CONFUSED", "matrix32x12.Matrix.CONFUSED"], ["NO", "matrix32x12.Matrix.NO"], ["YES", "matrix32x12.Matrix.YES"], ["LEFT_ARROW", "matrix32x12.Matrix.LEFT_ARROW"], ["RIGHT_ARROW", "matrix32x12.Matrix.RIGHT_ARROW"], ["DRESS", "matrix32x12.Matrix.DRESS"], ["TRANSFORMERS", "matrix32x12.Matrix.TRANSFORMERS"], ["SCISSORS", "matrix32x12.Matrix.SCISSORS"], ["EXIT", "matrix32x12.Matrix.EXIT"], ["TREE", "matrix32x12.Matrix.TREE"], ["PACMAN", "matrix32x12.Matrix.PACMAN"], ["TARGET", "matrix32x12.Matrix.TARGET"], ["TSHIRT", "matrix32x12.Matrix.TSHIRT"], ["ROLLERSKATE", "matrix32x12.Matrix.ROLLERSKATE"], ["DUCK", "matrix32x12.Matrix.DUCK"], ["HOUSE", "matrix32x12.Matrix.HOUSE"], ["TORTOISE", "matrix32x12.Matrix.TORTOISE"], ["BUTTERFLY", "matrix32x12.Matrix.BUTTERFLY"], ["STICKFIGURE", "matrix32x12.Matrix.STICKFIGURE"], ["GHOST", "matrix32x12.Matrix.GHOST"], ["PITCHFORK", "matrix32x12.Matrix.PITCHFORK"], ["onboard_music_QUAVERS", "matrix32x12.Matrix.onboard_music_QUAVERS"], ["onboard_music_QUAVER", "matrix32x12.Matrix.onboard_music_QUAVER"], ["onboard_music_CROTCHET", "matrix32x12.Matrix.onboard_music_CROTCHET"], ["COW", "matrix32x12.Matrix.COW"], ["RABBIT", "matrix32x12.Matrix.RABBIT"], ["SQUARE_SMALL", "matrix32x12.Matrix.SQUARE_SMALL"], ["SQUARE", "matrix32x12.Matrix.SQUARE"], ["DIAMOND_SMALL", "matrix32x12.Matrix.DIAMOND_SMALL"], ["DIAMOND", "matrix32x12.Matrix.DIAMOND"], ["CHESSBOARD", "matrix32x12.Matrix.CHESSBOARD"], ["TRIANGLE_LEFT", "matrix32x12.Matrix.TRIANGLE_LEFT"], ["TRIANGLE", "matrix32x12.Matrix.TRIANGLE"], ["SNAKE", "matrix32x12.Matrix.SNAKE"], ["UMBRELLA", "matrix32x12.Matrix.UMBRELLA"], ["SKULL", "matrix32x12.Matrix.SKULL"], ["GIRAFFE", "matrix32x12.Matrix.GIRAFFE"], ["SWORD", "matrix32x12.Matrix.SWORD"]],
|
||||
imglist: [["ALL_CLOCKS", "matrix.Image.ALL_CLOCKS"], ["ALL_ARROWS", "matrix.Image.ALL_ARROWS"]],
|
||||
playlist: [["DADADADUM", "onboard_music.DADADADUM"], ["ENTERTAINER", "onboard_music.ENTERTAINER"], ["PRELUDE", "onboard_music.PRELUDE"], ["ODE", "onboard_music.ODE"], ["NYAN", "onboard_music.NYAN"], ["RINGTONE", "onboard_music.RINGTONE"], ["FUNK", "onboard_music.FUNK"], ["BLUES", "onboard_music.BLUES"], ["BIRTHDAY", "onboard_music.BIRTHDAY"], ["WEDDING", "onboard_music.WEDDING"], ["FUNERAL", "onboard_music.FUNERAL"], ["PUNCHLINE", "onboard_music.PUNCHLINE"], ["PYTHON", "onboard_music.PYTHON"], ["BADDY", "onboard_music.BADDY"], ["CHASE", "onboard_music.CHASE"], ["BA_DING", "onboard_music.BA_DING"], ["WAWAWAWAA", "onboard_music.WAWAWAWAA"], ["JUMP_UP", "onboard_music.JUMP_UP"], ["JUMP_DOWN", "onboard_music.JUMP_DOWN"], ["POWER_UP", "onboard_music.POWER_UP"], ["POWER_DOWN", "onboard_music.POWER_DOWN"]],
|
||||
playlist_extern: [["DADADADUM", "DADADADUM"], ["ENTERTAINER", "ENTERTAINER"], ["PRELUDE", "PRELUDE"], ["ODE", "ODE"], ["NYAN", "NYAN"], ["RINGTONE", "RINGTONE"], ["FUNK", "FUNK"], ["BLUES", "BLUES"], ["BIRTHDAY", "BIRTHDAY"], ["WEDDING", "WEDDING"], ["FUNERAL", "FUNERAL"], ["PUNCHLINE", "PUNCHLINE"], ["PYTHON", "PYTHON"], ["BADDY", "BADDY"], ["CHASE", "CHASE"], ["BA_DING", "BA_DING"], ["WAWAWAWAA", "WAWAWAWAA"], ["JUMP_UP", "JUMP_UP"], ["JUMP_DOWN", "JUMP_DOWN"], ["POWER_UP", "POWER_UP"], ["POWER_DOWN", "POWER_DOWN"]],
|
||||
tone_notes: [
|
||||
["NOTE_C3", "131"], ["NOTE_D3", "147"], ["NOTE_E3", "165"], ["NOTE_F3", "175"], ["NOTE_G3", "196"], ["NOTE_A3", "220"], ["NOTE_B3", "247"],
|
||||
["NOTE_C4", "262"], ["NOTE_D4", "294"], ["NOTE_E4", "330"], ["NOTE_F4", "349"], ["NOTE_G4", "392"], ["NOTE_A4", "440"], ["NOTE_B4", "494"],
|
||||
["NOTE_C5", "523"], ["NOTE_D5", "587"], ["NOTE_E5", "659"], ["NOTE_F5", "698"], ["NOTE_G5", "784"], ["NOTE_A5", "880"], ["NOTE_B5", "988"]
|
||||
],
|
||||
serial_pin: [["pin0", "0"], ["pin1", "1"], ["pin2", "2"], ["pin8", "8"], ["pin12", "12"], ["pin13", "13"], ["pin14", "14"], ["pin15", "15"], ["pin16", "16"]],
|
||||
radio_power: [['0', '0'], ['1', '1'], ['2', '2'], ['3', '3'], ['4', '4'], ['5', '5'], ['6', '6'], ['7', '7']],
|
||||
radio_datarate: [["1Mbit", "RATE_1MBIT"], ["250Kbit", "RATE_250KBIT"], ["2Mbit", "RATE_2MBIT"]],
|
||||
one_more: [["ONE_SHOT", "ONE_SHOT"], ["PERIODIC", "PERIODIC"]],
|
||||
digital_dot: [["0", "0"], ["1", "1"], ["2", "2"]],
|
||||
};
|
||||
|
||||
export default pins;
|
||||
264
mixly/boards/default_src/micropython_esp32c2/blocks/inout.js
Normal file
264
mixly/boards/default_src/micropython_esp32c2/blocks/inout.js
Normal file
@@ -0,0 +1,264 @@
|
||||
import * as Blockly from 'blockly/core';
|
||||
|
||||
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_ESP32_INOUT_HIGHLOW_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const inout_digital_write = {
|
||||
init: function () {
|
||||
this.setColour(BASE_HUE);
|
||||
this.appendValueInput("PIN", Number)
|
||||
.appendField(Blockly.Msg.MIXLY_Digital_PINMODEOUT)
|
||||
.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.MIXLY_ESP32_INOUT_DIGITAL_WRITE_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const inout_digital_read = {
|
||||
init: function () {
|
||||
this.setColour(BASE_HUE);
|
||||
this.appendValueInput("PIN", Number)
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)
|
||||
.appendField(Blockly.Msg.MIXLY_Digital_PINMODEIN)
|
||||
.setCheck(Number);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_ESP32_MACHINE_VALUE)
|
||||
this.setInputsInline(true);
|
||||
this.setOutput(true, [Boolean, Number]);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_INOUT_DIGITAL_READ_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const inout_analog_write = {
|
||||
init: function () {
|
||||
this.setColour(BASE_HUE);
|
||||
this.appendValueInput("PIN", Number)
|
||||
.appendField("DAC" + Blockly.Msg.MIXLY_Analog_PINMODEOUT)
|
||||
.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_ESP32_INOUT_ANALOG_WRITE_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const inout_analog_write_set = {
|
||||
init: function () {
|
||||
this.setColour(BASE_HUE);
|
||||
this.appendValueInput("PIN", Number)
|
||||
.appendField(Blockly.Msg.MIXLY_Analog_PINMODEOUT)
|
||||
.setCheck(Number);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_JS_PERIOD_MIL)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.MIXLY_mSecond, "period"],
|
||||
[Blockly.Msg.MIXLY_uSecond, "period_microseconds"]
|
||||
]), "key");
|
||||
this.appendValueInput("NUM", Number)
|
||||
.appendField(Blockly.Msg.MIXLY_STAT)
|
||||
.setCheck(Number);
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_INOUT_ANALOG_WRITE_SET_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const inout_analog_atten = {
|
||||
init: function () {
|
||||
this.setColour(BASE_HUE);
|
||||
this.appendValueInput("PIN", Number)
|
||||
.appendField(Blockly.Msg.MIXLY_Analog_PINMODEIN)
|
||||
.setCheck(Number);
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_ESP32_REF_VOLTAGE + Blockly.Msg.MIXLY_STAT)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
["3.3V", "machine.ADC.ATTN_11DB"],
|
||||
["1.2V", "machine.ADC.ATTN_0DB"]
|
||||
]), "atten");
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_INOUT_ANALOG_ATTEN_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
export const inout_pin_pressed = {
|
||||
init: function () {
|
||||
this.setColour(BASE_HUE);
|
||||
this.appendValueInput('pin')
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)
|
||||
.appendField(Blockly.Msg.MIXLY_ESP32_TOUCH_SENSOR);
|
||||
// this.appendDummyInput()
|
||||
// .appendField(Blockly.Msg.MIXLY_IS_TOUCHED);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_ESP32_MACHINE_VALUE)
|
||||
this.setOutput(true, Number);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_INOUT_PIN_PRESSED_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const inout_pin_attachInterrupt = {
|
||||
init: function () {
|
||||
this.setColour(20);
|
||||
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, "machine.Pin.IRQ_RISING"],
|
||||
[Blockly.Msg.MIXLY_FALLING, "machine.Pin.IRQ_FALLING"],
|
||||
[Blockly.Msg.MIXLY_CHANGE, "(machine.Pin.IRQ_RISING | machine.Pin.IRQ_FALLING)"]
|
||||
]), "mode");
|
||||
this.appendValueInput('DO')
|
||||
.appendField(Blockly.Msg.MIXLY_DO)
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_INOUT_PIN_ATTACHINTERRUPT_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const inout_digital_init = {
|
||||
init: function () {
|
||||
this.setColour(20);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_SETUP)
|
||||
.appendField(new Blockly.FieldTextInput('pin#'), 'PIN_OBJ');
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_MICROPYTHON_AS)
|
||||
// .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_MODE+Blockly.Msg.LISTS_SET_INDEX_INPUT_TO)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.MIXLY_Digital_PINMODEOUT, "machine.Pin.OUT"],
|
||||
[Blockly.Msg.MIXLY_Digital_PINMODEIN, "machine.Pin.IN"],
|
||||
[Blockly.Msg.MIXLY_PINMODEPULLUP, "machine.Pin.IN, machine.Pin.PULL_UP"],
|
||||
[Blockly.Msg.MIXLY_PINMODEPULLDOWN, "machine.Pin.IN, machine.Pin.PULL_DOWN"]
|
||||
]), "MODE")
|
||||
this.appendValueInput("PIN", Number)
|
||||
.appendField(Blockly.Msg.MIXLY_PIN)
|
||||
.setCheck(Number);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_INOUT_DIGITAL_INIT_TOOLTIP);
|
||||
},
|
||||
getVars: function () {
|
||||
return [this.getFieldValue('PIN_OBJ') == 'pin#' ? null : this.getFieldValue('PIN_OBJ')];
|
||||
},
|
||||
renameVar: function (oldName, newName) {
|
||||
if (Blockly.Names.equals(oldName, this.getFieldValue('PIN_OBJ'))) {
|
||||
this.setTitleValue(newName, 'PIN_OBJ');
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
export const inout_analog_write_init = {
|
||||
init: function () {
|
||||
this.setColour(BASE_HUE);
|
||||
// this.appendValueInput("PIN", Number)
|
||||
// .appendField(Blockly.Msg.MIXLY_SETUP)
|
||||
// .appendField("PWM"+Blockly.Msg.MIXLY_Analog_PINMODEOUT)
|
||||
// .appendField('pwm')
|
||||
// .setCheck(Number);
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_SETUP)
|
||||
.appendField(new Blockly.FieldTextInput('dac#'), 'PIN_OBJ')
|
||||
.appendField(Blockly.Msg.MIXLY_MICROPYTHON_AS)
|
||||
this.appendDummyInput("")
|
||||
.appendField("DAC" + Blockly.Msg.MIXLY_Analog_PINMODEOUT)
|
||||
// .appendField('dac')
|
||||
// .appendField(new Blockly.FieldDropdown(profile.default.dac_pin),"PIN")
|
||||
this.appendValueInput("PIN", Number)
|
||||
.appendField(Blockly.Msg.MIXLY_PIN)
|
||||
.setCheck(Number);
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_INOUT_ANALOG_WRITE_INIT_TOOLTIP);
|
||||
},
|
||||
getVars: function () {
|
||||
return [this.getFieldValue('PIN_OBJ') == 'dac#' ? null : this.getFieldValue('PIN_OBJ')];
|
||||
},
|
||||
renameVar: function (oldName, newName) {
|
||||
if (Blockly.Names.equals(oldName, this.getFieldValue('PIN_OBJ'))) {
|
||||
this.setTitleValue(newName, 'PIN_OBJ');
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
export const inout_pin_pressed_init = {
|
||||
init: function () {
|
||||
this.setColour(BASE_HUE);
|
||||
// this.appendValueInput("PIN", Number)
|
||||
// .appendField(Blockly.Msg.MIXLY_SETUP)
|
||||
// .appendField("PWM"+Blockly.Msg.MIXLY_Analog_PINMODEOUT)
|
||||
// .appendField('pwm')
|
||||
// .setCheck(Number);
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_SETUP)
|
||||
.appendField(new Blockly.FieldTextInput('tc#'), 'PIN_OBJ')
|
||||
.appendField(Blockly.Msg.MIXLY_MICROPYTHON_AS)
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_ESP32_TOUCH_SENSOR)
|
||||
// .appendField('tc')
|
||||
// .appendField(new Blockly.FieldDropdown(profile.default.tc_pin),"PIN")
|
||||
this.appendValueInput("PIN", Number)
|
||||
.appendField(Blockly.Msg.MIXLY_PIN)
|
||||
.setCheck(Number);
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_INOUT_PIN_PRESSED_INIT_TOOLTIP);
|
||||
},
|
||||
getVars: function () {
|
||||
return [this.getFieldValue('PIN_OBJ') == 'tc#' ? null : this.getFieldValue('PIN_OBJ')];
|
||||
},
|
||||
renameVar: function (oldName, newName) {
|
||||
if (Blockly.Names.equals(oldName, this.getFieldValue('PIN_OBJ'))) {
|
||||
this.setTitleValue(newName, 'PIN_OBJ');
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
export const inout_analog_write_set_freq = {
|
||||
init: function () {
|
||||
this.setColour(BASE_HUE);
|
||||
this.appendValueInput("PIN", Number)
|
||||
.appendField("PWM" + Blockly.Msg.MIXLY_Analog_PINMODEOUT)
|
||||
.setCheck(Number);
|
||||
this.appendValueInput("NUM", Number)
|
||||
.appendField(Blockly.Msg.MIXLY_FREQUENCY + Blockly.Msg.MIXLY_STAT)
|
||||
.setCheck(Number);
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_INOUT_PWM_ANALOG_WRITE_SET_FREQ_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const inout_pinMode = inout_digital_init;
|
||||
export const pin_pressed_init = inout_pin_pressed_init;
|
||||
export const pin_pressed = inout_pin_pressed;
|
||||
export const controls_pin_attachInterrupt = inout_pin_attachInterrupt;
|
||||
316
mixly/boards/default_src/micropython_esp32c2/blocks/me_go.js
Normal file
316
mixly/boards/default_src/micropython_esp32c2/blocks/me_go.js
Normal file
@@ -0,0 +1,316 @@
|
||||
import * as Blockly from 'blockly/core';
|
||||
|
||||
const MEGO_HUE = 100;
|
||||
|
||||
// LED
|
||||
export const me_go_light_number = {
|
||||
init: function () {
|
||||
this.setColour(MEGO_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.MIXGO_LEFT_FRONT + Blockly.Msg.COLOUR_RGB_GREEN + Blockly.Msg.MIXLY_EXTERN_LED, "GLED[0]"],
|
||||
[Blockly.Msg.MIXGO_RIGHT_FRONT + Blockly.Msg.COLOUR_RGB_GREEN + Blockly.Msg.MIXLY_EXTERN_LED, "GLED[1]"],
|
||||
[Blockly.Msg.MIXGO_LEFT_BACK + Blockly.Msg.COLOUR_RGB_GREEN + Blockly.Msg.MIXLY_EXTERN_LED, "GLED[3]"],
|
||||
[Blockly.Msg.MIXGO_RIGHT_BACK + Blockly.Msg.COLOUR_RGB_GREEN + Blockly.Msg.MIXLY_EXTERN_LED, "GLED[2]"],
|
||||
[Blockly.Msg.MIXGO_LEFT_FRONT + Blockly.Msg.COLOUR_RGB_RED + Blockly.Msg.MIXLY_EXTERN_LED, "RLED[0]"],
|
||||
[Blockly.Msg.MIXGO_RIGHT_FRONT + Blockly.Msg.COLOUR_RGB_RED + Blockly.Msg.MIXLY_EXTERN_LED, "RLED[1]"],
|
||||
[Blockly.Msg.MIXGO_LEFT_BACK + Blockly.Msg.COLOUR_RGB_RED + Blockly.Msg.MIXLY_EXTERN_LED, "RLED[3]"],
|
||||
[Blockly.Msg.MIXGO_RIGHT_BACK + Blockly.Msg.COLOUR_RGB_RED + Blockly.Msg.MIXLY_EXTERN_LED, "RLED[2]"],
|
||||
[Blockly.Msg.ME_GO_LIGHT_HEADLIGHT, "WLED"]
|
||||
]), 'op')
|
||||
this.setOutput(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const me_go_led_bright = {
|
||||
init: function () {
|
||||
this.setColour(MEGO_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_SETTING);
|
||||
this.appendValueInput('led')
|
||||
.appendField('ME GO')
|
||||
this.appendValueInput('bright')
|
||||
.appendField(Blockly.Msg.MIXLY_PULSEIN_STAT)
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_LED_SETONOFF);
|
||||
}
|
||||
};
|
||||
|
||||
export const me_go_get_led_bright = {
|
||||
init: function () {
|
||||
this.setColour(MEGO_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET);
|
||||
this.appendValueInput('led')
|
||||
.appendField('ME GO')
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_BRIGHTNESS)
|
||||
this.setOutput(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_LED_GETONOFF);
|
||||
}
|
||||
};
|
||||
|
||||
export const me_go_get_led_state = {
|
||||
init: function () {
|
||||
this.setColour(MEGO_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET);
|
||||
this.appendValueInput('led')
|
||||
.appendField('ME GO')
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_PULSEIN_STAT)
|
||||
this.setOutput(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_LED_GETONOFF);
|
||||
}
|
||||
};
|
||||
|
||||
export const me_go_led_brightness = {
|
||||
init: function () {
|
||||
this.setColour(MEGO_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_SETTING);
|
||||
this.appendValueInput('led')
|
||||
.appendField('ME GO')
|
||||
this.appendValueInput('bright')
|
||||
.appendField(Blockly.Msg.MIXLY_BRIGHTNESS)
|
||||
this.appendDummyInput("")
|
||||
.appendField("%")
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_SETTING + Blockly.Msg.MIXLY_BUILDIN_LED + Blockly.Msg.MIXLY_BRIGHTNESS + '(0-10)');
|
||||
}
|
||||
};
|
||||
|
||||
export const me_go_stepper_keep = {
|
||||
init: function () {
|
||||
this.setColour(MEGO_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField("ME GO")
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.blockpy_forward, "F"],
|
||||
[Blockly.Msg.blockpy_backward, "B"],
|
||||
[Blockly.Msg.blockpy_left, "L"],
|
||||
[Blockly.Msg.blockpy_right, "R"]
|
||||
]), "VAR");
|
||||
this.appendValueInput('speed')
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.MIXLY_STEPPER_SET_SPEED);
|
||||
this.appendDummyInput("")
|
||||
.appendField("%")
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
}
|
||||
}
|
||||
|
||||
export const me_go_stepper_stop = {
|
||||
init: function () {
|
||||
this.setColour(MEGO_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField("ME GO")
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.MOTOR_P, "P"],
|
||||
[Blockly.Msg.MOTOR_N, "N"]
|
||||
]), "VAR");
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
}
|
||||
}
|
||||
|
||||
export const me_go_dc_motor = {
|
||||
init: function () {
|
||||
this.setColour(MEGO_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField("ME GO")
|
||||
.appendField(Blockly.Msg.MOTOR_DC)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.MIXLYCAR_WHEEL_LEFT, "0"],
|
||||
[Blockly.Msg.MIXLYCAR_WHEEL_RIGHT, "1"],
|
||||
[Blockly.Msg.ME_GO_MOTOR_EXTERN, "2"]
|
||||
]), "wheel");
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_Direction)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.ROTATION_FORWARD, "CW"],
|
||||
[Blockly.Msg.ROTATION_BACKWARD, "CCW"],
|
||||
[Blockly.Msg.MOTOR_P, "P"],
|
||||
[Blockly.Msg.MOTOR_N, "N"]
|
||||
]), "direction");
|
||||
this.appendValueInput('speed')
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.MIXLY_STEPPER_SET_SPEED);
|
||||
this.appendDummyInput("")
|
||||
.appendField("%")
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
}
|
||||
}
|
||||
|
||||
export const me_go_hall_attachInterrupt = {
|
||||
init: function () {
|
||||
this.setColour(MEGO_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_ESP32_INTERRUPT)
|
||||
.appendField(Blockly.Msg.ME_GO_HALL_SENSOR)
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown([[Blockly.Msg.TEXT_TRIM_LEFT, "A"], [Blockly.Msg.TEXT_TRIM_RIGHT, "B"]]), "mode");
|
||||
this.appendValueInput('DO')
|
||||
.appendField(Blockly.Msg.MIXLY_DO)
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.setInputsInline(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const me_go_hall_initialize = {
|
||||
init: function () {
|
||||
this.setColour(MEGO_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.ME_GO_HALL_SENSOR)
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown([[Blockly.Msg.TEXT_TRIM_LEFT, "A"], [Blockly.Msg.TEXT_TRIM_RIGHT, "B"]]), "mode");
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_SETUP)
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown([['turns', "turns"], ['distance', "distance"], ['turns,distance', 'all']]), "args");
|
||||
this.appendValueInput('num')
|
||||
.setCheck(Number)
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.setInputsInline(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const me_go_hall_data = {
|
||||
init: function () {
|
||||
this.setColour(MEGO_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.ME_GO_HALL_SENSOR)
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown([[Blockly.Msg.TEXT_TRIM_LEFT, "A"], [Blockly.Msg.TEXT_TRIM_RIGHT, "B"]]), "mode");
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown([['turns', "turns"], ['distance', "distance"], ['speed', 'speed']]), "args");
|
||||
this.setOutput(true);
|
||||
this.setInputsInline(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const me_go_pin_near_line = {
|
||||
init: function () {
|
||||
this.setColour(MEGO_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.TEXT_TRIM_LEFT, "[0]"],
|
||||
[Blockly.Msg.MIXGO_LEFT_MID, "[1]"],
|
||||
[Blockly.Msg.MIXGO_RIGHT_MID, "[2]"],
|
||||
[Blockly.Msg.TEXT_TRIM_RIGHT, "[3]"],
|
||||
[Blockly.Msg.MIXLY_ALL, ""]
|
||||
]), "key")
|
||||
.appendField(Blockly.Msg.MIXGO_LINE_SENSOR_VAL);
|
||||
this.setOutput(true, Number);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(function () {
|
||||
var mode0 = Blockly.Msg.MIXLY_ESP32_SENSOR_MIXGO_PIN_NEAR_TOOLTIP;
|
||||
var mode1 = Blockly.Msg.MIXLY_ESP32_NEAR;
|
||||
return mode0 + mode1
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
export const me_go_pin_near = {
|
||||
init: function () {
|
||||
this.setColour(MEGO_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.MIXGO_LEFT_FRONT, "[0]"],
|
||||
[Blockly.Msg.MIXGO_RIGHT_FRONT, "[1]"],
|
||||
[Blockly.Msg.MIXGO_LEFT_BACK, "[3]"],
|
||||
[Blockly.Msg.MIXGO_RIGHT_BACK, "[2]"],
|
||||
[Blockly.Msg.MIXLY_ALL, ""]
|
||||
]), "key")
|
||||
.appendField(Blockly.Msg.MIXGO_PROXIMITY_SENSOR);
|
||||
this.setOutput(true, Number);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(function () {
|
||||
var mode0 = Blockly.Msg.MIXLY_ESP32_SENSOR_MIXGO_PIN_NEAR_TOOLTIP;
|
||||
var mode1 = Blockly.Msg.MIXLY_ESP32_NEAR;
|
||||
return mode0 + mode1
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
export const me_go_pin_near_state_change = {
|
||||
init: function () {
|
||||
this.setColour(MEGO_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_MIXGO_CAR_SENSOR_ONBOARD_CHANGE)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.MIXLY_ME_GO_CAR_SENSOR_ONBOARD_AUTO_CHANGE, "AS"],
|
||||
[Blockly.Msg.MIXLY_MIXGO_CAR_USE_LINE_ONLY, "LP"],
|
||||
[Blockly.Msg.MIXLY_MIXGO_CAR_USE_PROXIMITY_ONLY, "OA"],
|
||||
[Blockly.Msg.MIXLY_ME_GO_CAR_LIGHT_SEEKING_ONLY, "LS"],
|
||||
[Blockly.Msg.ME_GO_SENSOR_MODE_OFF, "CL"]
|
||||
]), "key");
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const sensor_mixgome_eulerangles = {
|
||||
init: function () {
|
||||
this.setColour(MEGO_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_GET_GESTURE)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.ME_GO_PITCH, '[0]'],
|
||||
[Blockly.Msg.ME_GO_ROLL, '[1]'],
|
||||
[Blockly.Msg.ME_GO_PITCH + ', ' + Blockly.Msg.ME_GO_ROLL, '']
|
||||
]), 'angle');
|
||||
// this.appendDummyInput("")
|
||||
// .appendField(Blockly.Msg.BOARD_DIRECTION)
|
||||
// .appendField(new Blockly.FieldDropdown([
|
||||
// [Blockly.Msg.OLED_VER,'True'],
|
||||
// [Blockly.Msg.OLED_HOR,'False'],
|
||||
// ]),'dir');
|
||||
this.appendDummyInput("")
|
||||
this.setOutput(true, Number);
|
||||
this.setInputsInline(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const me_go_pin_light = {
|
||||
init: function () {
|
||||
this.setColour(MEGO_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.TEXT_TRIM_LEFT, "[0]"],
|
||||
[Blockly.Msg.MIXGO_LEFT_MID, "[1]"],
|
||||
[Blockly.Msg.MIXGO_RIGHT_MID, "[2]"],
|
||||
[Blockly.Msg.TEXT_TRIM_RIGHT, "[3]"],
|
||||
[Blockly.Msg.MIXLY_ALL, ""]
|
||||
]), "key")
|
||||
.appendField(Blockly.Msg.MIXLY_ME_GO_CAR_LIGHT_SEEKING_SENSOR);
|
||||
this.setOutput(true, Number);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(function () {
|
||||
var mode0 = Blockly.Msg.MIXLY_ESP32_SENSOR_MIXGO_PIN_NEAR_TOOLTIP;
|
||||
var mode1 = Blockly.Msg.MIXLY_ME_GO_CAR_LIGHT_SEEKING_SENSOR;
|
||||
return mode0 + mode1
|
||||
});
|
||||
}
|
||||
};
|
||||
179
mixly/boards/default_src/micropython_esp32c2/blocks/mini_g2.js
Normal file
179
mixly/boards/default_src/micropython_esp32c2/blocks/mini_g2.js
Normal file
@@ -0,0 +1,179 @@
|
||||
import * as Blockly from 'blockly/core';
|
||||
import { Boards } from 'mixly';
|
||||
|
||||
const MEG1_HUE = 40;
|
||||
|
||||
export const mini_g2_aht11 = {
|
||||
init: function () {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
if (version == "mixgo_me") { var name = 'ME G1' }
|
||||
this.setColour(MEG1_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(name)
|
||||
.appendField(Blockly.Msg.MIXLY_TEM_HUM + " AHT21")
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.MIXLY_GETTEMPERATUE, "temperature"],
|
||||
[Blockly.Msg.MIXLY_GETHUMIDITY, "humidity"]
|
||||
]), "key");
|
||||
this.setOutput(true, Number);
|
||||
this.setInputsInline(true);
|
||||
var thisBlock = this;
|
||||
this.setTooltip(function () {
|
||||
var mode = thisBlock.getFieldValue('key');
|
||||
var TOOLTIPS = {
|
||||
"temperature": Blockly.Msg.MIXLY_MICROBIT_SENSOR_SHT_temperature_TOOLTIP,
|
||||
"relative_humidity": Blockly.Msg.MIXLY_MICROBIT_SENSOR_SHT_HUM_TOOLTIP
|
||||
};
|
||||
return TOOLTIPS[mode]
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
export const mini_g2_hp203 = {
|
||||
init: function () {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
if (version == "mixgo_me") { var name = 'ME G1' }
|
||||
this.setColour(MEG1_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(name)
|
||||
.appendField(Blockly.Msg.MIXLY_Altitude + Blockly.Msg.MSG.catSensor + " HP203X")
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.MIXLY_GETPRESSURE, "pressure()"],
|
||||
[Blockly.Msg.MIXLY_GETTEMPERATUE, "temperature()"],
|
||||
[Blockly.Msg.MIXLY_GET_ALTITUDE, "altitude()"],
|
||||
]), "key");
|
||||
this.setOutput(true, Number);
|
||||
this.setInputsInline(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const mini_g2_varistor = {
|
||||
init: function () {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
if (version == "mixgo_me") { var name = 'ME G1' }
|
||||
this.setColour(MEG1_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(name)
|
||||
.appendField(Blockly.Msg.MIXLY_MIXGO_NOVA_POTENTIAL_NUM);
|
||||
this.setOutput(true, Number);
|
||||
this.setInputsInline(true);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* @deprecated To be removed in the future
|
||||
*/
|
||||
export const mini_g2_rfid_readid = {
|
||||
init: function () {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
if (version == "mixgo_me") { var name = 'ME G1' }
|
||||
this.setColour(MEG1_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(name)
|
||||
.appendField("RFID" + Blockly.Msg.MIXLY_RFID_READ_CARD);
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_RFID_READ_CARD_UID);
|
||||
this.appendDummyInput()
|
||||
.appendField(`(${Blockly.Msg.MIXLY_DEPRECATED})`);
|
||||
this.setOutput(true, Number);
|
||||
this.setInputsInline(true);
|
||||
this.setWarningText(Blockly.Msg.MIXLY_DEPRECATED_WARNING_TEXT);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* @deprecated To be removed in the future
|
||||
*/
|
||||
export const mini_g2_rfid_readcontent = {
|
||||
init: function () {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
if (version == "mixgo_me") { var name = 'ME G1' }
|
||||
this.setColour(MEG1_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(name)
|
||||
.appendField("RFID" + Blockly.Msg.MIXLY_RFID_READ_CARD);
|
||||
this.appendValueInput('SECTOR')
|
||||
.appendField(Blockly.Msg.MIXLY_LIST_INDEX)
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_ALL);
|
||||
this.appendDummyInput()
|
||||
.appendField(`(${Blockly.Msg.MIXLY_DEPRECATED})`);
|
||||
this.setOutput(true, Number);
|
||||
this.setInputsInline(true);
|
||||
this.setWarningText(Blockly.Msg.MIXLY_DEPRECATED_WARNING_TEXT);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* @deprecated To be removed in the future
|
||||
*/
|
||||
export const mini_g2_rfid_write = {
|
||||
init: function () {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
if (version == "mixgo_me") { var name = 'ME G1' }
|
||||
this.setColour(MEG1_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(name)
|
||||
.appendField(Blockly.Msg.MIXLY_COMMUNICATION_RFID_WRITE);
|
||||
this.appendValueInput('SECTOR')
|
||||
.appendField(Blockly.Msg.MIXLY_LIST_INDEX)
|
||||
this.appendValueInput('CONTENT')
|
||||
.appendField(Blockly.Msg.MIXLY_COMMUNICATION_WRITE_NUM);
|
||||
this.appendDummyInput()
|
||||
.appendField(`(${Blockly.Msg.MIXLY_DEPRECATED})`);
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setWarningText(Blockly.Msg.MIXLY_DEPRECATED_WARNING_TEXT);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* @deprecated To be removed in the future
|
||||
*/
|
||||
export const mini_g2_rfid_write_outcome = {
|
||||
init: function () {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
if (version == "mixgo_me") { var name = 'ME G1' }
|
||||
this.setColour(MEG1_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(name)
|
||||
.appendField(Blockly.Msg.MIXLY_COMMUNICATION_RFID_WRITE);
|
||||
this.appendValueInput('SECTOR')
|
||||
.appendField(Blockly.Msg.MIXLY_LIST_INDEX);
|
||||
this.appendValueInput('CONTENT')
|
||||
.appendField(Blockly.Msg.MIXLY_COMMUNICATION_WRITE_NUM);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.RETURN_SUCCESS_OR_NOT);
|
||||
this.appendDummyInput()
|
||||
.appendField(`(${Blockly.Msg.MIXLY_DEPRECATED})`);
|
||||
this.setInputsInline(true);
|
||||
this.setOutput(true);
|
||||
this.setWarningText(Blockly.Msg.MIXLY_DEPRECATED_WARNING_TEXT);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* @deprecated To be removed in the future
|
||||
*/
|
||||
export const mini_g2_rfid_status = {
|
||||
init: function () {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
if (version == "mixgo_me") { var name = 'ME G1' }
|
||||
this.setColour(MEG1_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(name)
|
||||
.appendField("RFID");
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.MIXLY_RFID_SCAN_OK, "True"],
|
||||
[Blockly.Msg.MIXLY_RFID_SCAN_NOTAGERR, "None"],
|
||||
[Blockly.Msg.MIXLY_RFID_SCAN_ERROR, "False"]
|
||||
]), "key");
|
||||
this.appendDummyInput()
|
||||
.appendField(`(${Blockly.Msg.MIXLY_DEPRECATED})`);
|
||||
this.setOutput(true, Number);
|
||||
this.setInputsInline(true);
|
||||
this.setWarningText(Blockly.Msg.MIXLY_DEPRECATED_WARNING_TEXT);
|
||||
}
|
||||
};
|
||||
412
mixly/boards/default_src/micropython_esp32c2/blocks/pins.js
Normal file
412
mixly/boards/default_src/micropython_esp32c2/blocks/pins.js
Normal file
@@ -0,0 +1,412 @@
|
||||
import * as Blockly from 'blockly/core';
|
||||
import { Profile } from 'mixly';
|
||||
|
||||
const PINS_HUE = 230;
|
||||
|
||||
export const pins_digital = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.digital), 'PIN');
|
||||
this.setOutput(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const pins_digital_pin = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.digital_pin), 'PIN');
|
||||
this.setOutput(true, Number);
|
||||
}
|
||||
};
|
||||
|
||||
export const pins_input_pin = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.input_pin), 'PIN');
|
||||
this.setOutput(true, Number);
|
||||
}
|
||||
};
|
||||
|
||||
export const pins_output_pin = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.output_pin), 'PIN');
|
||||
this.setOutput(true, Number);
|
||||
}
|
||||
};
|
||||
|
||||
export const espnow_channel = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.espnow_channel), 'PIN');
|
||||
this.setOutput(true, Number);
|
||||
}
|
||||
};
|
||||
|
||||
export const haskylens_model = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.haskylens_model), 'PIN');
|
||||
this.setOutput(true, Number);
|
||||
}
|
||||
};
|
||||
|
||||
export const pwm_input = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.pwm_input), 'PIN');
|
||||
this.setOutput(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const analog_input = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.analog_input), 'PIN');
|
||||
this.setOutput(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const pwm_output = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.pwm_output), 'PIN');
|
||||
this.setOutput(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const analog_output = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.analog_output), 'PIN');
|
||||
this.setOutput(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const i2c_A_pin = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.i2c_A_pin), 'PIN');
|
||||
this.setOutput(true, Number);
|
||||
}
|
||||
};
|
||||
|
||||
export const i2c_B_pin = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.i2c_B_pin), 'PIN');
|
||||
this.setOutput(true, Number);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
export const spi_A_pin = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.spi_A_pin), 'PIN');
|
||||
this.setOutput(true, Number);
|
||||
}
|
||||
};
|
||||
|
||||
export const spi_B_pin = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.spi_B_pin), 'PIN');
|
||||
this.setOutput(true, Number);
|
||||
}
|
||||
};
|
||||
|
||||
export const spi_C_pin = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.spi_C_pin), 'PIN');
|
||||
this.setOutput(true, Number);
|
||||
}
|
||||
};
|
||||
|
||||
export const spi_D_pin = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.spi_D_pin), 'PIN');
|
||||
this.setOutput(true, Number);
|
||||
}
|
||||
};
|
||||
|
||||
export const pins_analog = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.analog), 'PIN');
|
||||
this.setOutput(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const pins_analog_pin = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.analog_pin), 'PIN');
|
||||
this.setOutput(true, Number);
|
||||
}
|
||||
};
|
||||
|
||||
export const pins_dac = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.dac), 'PIN');
|
||||
this.setOutput(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const pins_dac_pin = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.dac_pin), 'PIN');
|
||||
this.setOutput(true, Number);
|
||||
}
|
||||
};
|
||||
|
||||
export const pins_button = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.button), 'PIN');
|
||||
this.setOutput(true, Number);
|
||||
}
|
||||
};
|
||||
|
||||
export const pins_buttonB = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.buttonB), 'PIN');
|
||||
this.setOutput(true, Number);
|
||||
}
|
||||
};
|
||||
|
||||
export const pins_pwm = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.pwm), 'PIN');
|
||||
this.setOutput(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const pins_pwm_pin = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.pwm_pin), 'PIN');
|
||||
this.setOutput(true, Number);
|
||||
}
|
||||
};
|
||||
|
||||
export const pins_touch_pin = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.touch_pin), 'PIN');
|
||||
this.setOutput(true, Number);
|
||||
}
|
||||
};
|
||||
|
||||
export const pins_touch = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.touch), 'PIN');
|
||||
this.setOutput(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const pins_serial = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.serial_pin), 'PIN');
|
||||
this.setOutput(true, Number);
|
||||
}
|
||||
};
|
||||
|
||||
export const pins_builtinimg = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.builtinimg), 'PIN');
|
||||
this.setOutput(true, "esp32_image");
|
||||
}
|
||||
};
|
||||
|
||||
export const pins_builtinimg_extern = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.builtinimg_extern), 'PIN');
|
||||
this.setOutput(true, "esp32_image");
|
||||
}
|
||||
};
|
||||
|
||||
export const pins_imglist = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.imglist), 'PIN');
|
||||
this.setOutput(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const pins_playlist = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.playlist), 'PIN');
|
||||
this.setOutput(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const pins_playlist_extern = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.playlist_extern), 'PIN');
|
||||
this.setOutput(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const pins_exlcdh = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.exlcdh), 'PIN');
|
||||
this.setOutput(true, Number);
|
||||
}
|
||||
};
|
||||
|
||||
export const pins_exlcdv = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.exlcdv), 'PIN');
|
||||
this.setOutput(true, Number);
|
||||
}
|
||||
};
|
||||
|
||||
export const pins_axis = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.axis), 'PIN');
|
||||
this.setOutput(true, Number);
|
||||
}
|
||||
};
|
||||
|
||||
export const pins_brightness = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.brightness), 'PIN');
|
||||
this.setOutput(true, Number);
|
||||
}
|
||||
};
|
||||
|
||||
export const pins_tts_voice = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.tts_voice), 'PIN');
|
||||
this.setOutput(true, Number);
|
||||
}
|
||||
};
|
||||
|
||||
export const pins_tts_builtin_music = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.tts_builtin_music), 'PIN');
|
||||
this.setOutput(true, Number);
|
||||
}
|
||||
};
|
||||
|
||||
export const pins_tts_bgmusic = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.tts_bgmusic), 'PIN');
|
||||
this.setOutput(true, Number);
|
||||
}
|
||||
};
|
||||
|
||||
export const pins_tone_notes = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.tone_notes), 'PIN');
|
||||
this.setOutput(true, Number);
|
||||
}
|
||||
};
|
||||
|
||||
export const pins_radio_power = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.radio_power), 'PIN');
|
||||
this.setOutput(true, Number);
|
||||
}
|
||||
};
|
||||
|
||||
export const pins_radio_datarate = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.radio_datarate), 'PIN');
|
||||
this.setOutput(true, Number);
|
||||
}
|
||||
};
|
||||
|
||||
export const pins_one_more = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.one_more), 'PIN');
|
||||
this.setOutput(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const pins_digital_dot = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.digital_dot), 'PIN');
|
||||
this.setOutput(true, Number);
|
||||
}
|
||||
};
|
||||
|
||||
export const timer_id_pin = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
["0","0"]
|
||||
]), 'PIN');
|
||||
this.setOutput(true, Number);
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,508 @@
|
||||
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(1)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/inout.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(1)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/inout2.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(2)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/ctrl.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(2)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/ctrl2.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(3)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/math.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(3)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/math2.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(4)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/logic.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(4)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/logic2.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(5)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/text.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(5)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/text2.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(6)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/list3.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(6)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/list4.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(7)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/tuple.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(7)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/tuple2.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(8)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/dict.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(8)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/dict2.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(9)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/set.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(9)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/set2.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(10)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/var.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(10)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/var2.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(11)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/func.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(11)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/func2.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(12)>div.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/port.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(12)>div.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/port2.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catOnBoardSensor.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/sensor_onboard.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catOnBoardSensor.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/sensor_new2.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catOnBoardActuator.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/actuator_onboard.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catOnBoardActuator.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/actuator_new2.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catOnBoardDisplay.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/display_onboard.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catOnBoardDisplay.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/display_new2.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catME_GO.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/act.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catME_GO.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/act2.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catPE_G1.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/act.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catPE_G1.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/act2.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catME_G1.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/sensor.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catME_G1.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/sensor2.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catCC_G1.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/sensor.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catCC_G1.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/sensor2.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catMINI_G2.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/sensor.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catMINI_G2.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/sensor2.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
#catMINI_G5.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/sensor.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catMINI_G5.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/sensor2.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catExternSensor.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/sensor_extern.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catExternSensor.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/sensor_new2.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catExternActuator.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/actuator_extern.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catExternActuator.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/actuator_new2.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catMatrix.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/Matrix.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catMatrix.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/Matrix2.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#cat4Digitdisplay.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/4Digitdisplay.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#cat4Digitdisplay.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/4Digitdisplay2.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catLCD.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/oled.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catLCD.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/oled2.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catOLED.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/oled.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catOLED.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/oled2.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catTFT.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/oled.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catTFT.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/oled2.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catAIsensor.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/image.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catAIsensor.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/image2.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catAIsensor2.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/image.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catAIsensor2.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/image2.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catFile.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/file.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catFile.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/file2.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catBLE.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/comuni.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catBLE.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/comuni2.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catIR.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/comuni.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catIR.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/comuni2.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catI2C.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/comuni.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catI2C.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/comuni2.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catSPI.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/comuni.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catSPI.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/comuni2.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catRadio.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/comuni.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catRadio.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/comuni2.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catOneWire.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/comuni.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catOneWire.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/comuni2.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catESPNow.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/comuni.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catESPNow.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/comuni2.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catLora.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/comuni.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catLora.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/comuni2.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catNetwork.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/net3.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catNetwork.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/net2.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catOnenet.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/onenet.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catOnenet.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/onenet2.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catBlynk.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/blynk.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catBlynk.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/blynk2.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catMixIO.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/mixio.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catMixIO.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/mixio2.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catweather.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/weather.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catweather.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/weather2.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catTinyWebDB.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/database.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catTinyWebDB.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/database2.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catAIOT.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/ai.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catAIOT.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/ai2.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catFactory.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/factory3.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catFactory.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/factory4.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catCommunicate.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/requests.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catCommunicate.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/requests2.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catBLEC.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/comuni.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catBLEC.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/comuni2.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catBLEKM.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/comuni.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catBLEKM.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/comuni2.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catVI.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/AIvoice.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
#catVI.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
|
||||
background: url('../../../../common/media/mark/AIvoice2.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
23
mixly/boards/default_src/micropython_esp32c2/export.js
Normal file
23
mixly/boards/default_src/micropython_esp32c2/export.js
Normal file
@@ -0,0 +1,23 @@
|
||||
import MicropythonESP32C2Pins from './blocks/esp32_profile';
|
||||
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';
|
||||
import * as MicropythonESP32C2PinsGenerators from './generators/pins';
|
||||
|
||||
export {
|
||||
MicropythonESP32C2Pins,
|
||||
MicropythonESP32C2InoutBlocks,
|
||||
MicropythonESP32C2MiniG2Blocks,
|
||||
MicropythonESP32C2MEGOBlocks,
|
||||
MicropythonESP32C2PinsBlocks,
|
||||
MicropythonESP32C2ActuatorExternGenerators,
|
||||
MicropythonESP32C2InoutGenerators,
|
||||
MicropythonESP32C2MiniG2Generators,
|
||||
MicropythonESP32C2MEGOGenerators,
|
||||
MicropythonESP32C2PinsGenerators
|
||||
};
|
||||
@@ -0,0 +1,17 @@
|
||||
/**
|
||||
* @typedef {import('@mixly/micropython').MicroPythonActuatorExternGenerators} MicroPythonActuatorExternGenerators
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @override Override {@link MicroPythonActuatorExternGenerators.actuator_neopixel_init}
|
||||
*/
|
||||
export const actuator_neopixel_init = function (_, generator) {
|
||||
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_ws2812x_NeoPixel'] = 'from ws2812x import NeoPixel';
|
||||
const code = `${v} = NeoPixel(machine.Pin(${dropdown_rgbpin}), ${value_ledcount})\n`;
|
||||
return code;
|
||||
}
|
||||
109
mixly/boards/default_src/micropython_esp32c2/generators/inout.js
Normal file
109
mixly/boards/default_src/micropython_esp32c2/generators/inout.js
Normal file
@@ -0,0 +1,109 @@
|
||||
import * as Blockly from 'blockly/core';
|
||||
|
||||
// ok
|
||||
export const inout_highlow = function (_, generator) {
|
||||
// Boolean values HIGH and LOW.
|
||||
var code = (this.getFieldValue('BOOL') == 'HIGH') ? '1' : '0';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
// ok
|
||||
export const inout_digital_write = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var dropdown_stat = generator.valueToCode(this, 'STAT', generator.ORDER_ATOMIC);
|
||||
var code = "";
|
||||
code += dropdown_pin + '.value(' + dropdown_stat + ')\n'
|
||||
return code;
|
||||
}
|
||||
|
||||
// ok
|
||||
export const inout_digital_read = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var code = "";
|
||||
code = dropdown_pin + '.value()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
//ok
|
||||
export const inout_analog_write = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
//var dropdown_stat = this.getFieldValue('STAT');
|
||||
var value_num = generator.valueToCode(this, 'NUM', generator.ORDER_ATOMIC);
|
||||
//generator.setups_['setup_output'+dropdown_pin] = 'pinMode('+dropdown_pin+', OUTPUT);';
|
||||
var code = dropdown_pin + '.write(' + value_num + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
//ok
|
||||
export const inout_analog_write_set = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var value_num = generator.valueToCode(this, 'NUM', generator.ORDER_ATOMIC);
|
||||
var key = this.getFieldValue('key');
|
||||
var code = dropdown_pin + '.set_analog_' + key + '(' + value_num + ')\n';
|
||||
//var code = 'pin' + dropdown_pin + '.set_analog_period(' + value_num + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
//ok
|
||||
export const inout_pin_pressed = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var pin = generator.valueToCode(this, 'pin', generator.ORDER_ATOMIC);
|
||||
var code = pin + '.read()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const inout_pin_attachInterrupt = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var dropdown_mode = this.getFieldValue('mode');
|
||||
var atta = generator.valueToCode(this, 'DO', generator.ORDER_ATOMIC);
|
||||
var code = 'machine.Pin(' + dropdown_pin + ').irq' + '(handler = ' + atta + ', trigger = ' + dropdown_mode + ')\n'
|
||||
//var funcName = 'attachInterrupt_func_' + dropdown_pin;
|
||||
//var branch = generator.statementToCode(this, 'DO') || generator.PASS;
|
||||
//var code2 = 'def' + ' ' + funcName + '(p):\n' + branch + '\n';
|
||||
//generator.setups_[funcName] = code2;
|
||||
return code;
|
||||
}
|
||||
|
||||
export const inout_digital_init = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var pin_obj = this.getFieldValue('PIN_OBJ') || 'pin#';
|
||||
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var dropdown_mode = this.getFieldValue('MODE');
|
||||
var varName = (pin_obj == 'pin#') ? 'pin' + dropdown_pin : generator.variableDB_.getName(pin_obj, Blockly.Variables.NAME_TYPE);
|
||||
var code = varName + ' = machine.Pin(' + dropdown_pin + ', ' + dropdown_mode + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
//ok
|
||||
export const inout_analog_write_init = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var pin_obj = this.getFieldValue('PIN_OBJ') || 'dac#';
|
||||
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var varName = (pin_obj == 'dac#') ? 'dac' + dropdown_pin : generator.variableDB_.getName(pin_obj, Blockly.Variables.NAME_TYPE);
|
||||
var code = varName + ' = machine.DAC(machine.Pin(' + dropdown_pin + '))\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const inout_analog_atten = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
//var dropdown_stat = this.getFieldValue('STAT');
|
||||
var value_atten = this.getFieldValue('atten')
|
||||
var code = dropdown_pin + '.atten(' + value_atten + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
//ok
|
||||
export const inout_pin_pressed_init = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var pin_obj = this.getFieldValue('PIN_OBJ') || 'tc#';
|
||||
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var varName = (pin_obj == 'tc#') ? 'tc' + dropdown_pin : generator.variableDB_.getName(pin_obj, Blockly.Variables.NAME_TYPE);
|
||||
var code = varName + ' = machine.TouchPad(machine.Pin(' + dropdown_pin + '))\n';
|
||||
return code;
|
||||
}
|
||||
127
mixly/boards/default_src/micropython_esp32c2/generators/me_go.js
Normal file
127
mixly/boards/default_src/micropython_esp32c2/generators/me_go.js
Normal file
@@ -0,0 +1,127 @@
|
||||
export const me_go_light_number = function (_, generator) {
|
||||
generator.definitions_['import_me_go_car'] = 'from me_go import car';
|
||||
var code = 'car.' + this.getFieldValue('op');
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const me_go_led_bright = function (_, generator) {
|
||||
var op = generator.valueToCode(this, 'led', generator.ORDER_ATOMIC);
|
||||
generator.definitions_['import_me_go_car'] = 'from me_go import car';
|
||||
var bright = generator.valueToCode(this, 'bright', generator.ORDER_ATOMIC);
|
||||
var code = "car.setonoff(" + op + "," + bright + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const me_go_get_led_bright = function (_, generator) {
|
||||
var op = generator.valueToCode(this, 'led', generator.ORDER_ATOMIC);
|
||||
generator.definitions_['import_me_go_car'] = 'from me_go import car';
|
||||
var code = "car.getrightness(" + op + ")";
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const me_go_get_led_state = function (_, generator) {
|
||||
var op = generator.valueToCode(this, 'led', generator.ORDER_ATOMIC);
|
||||
generator.definitions_['import_me_go_car'] = 'from me_go import car';
|
||||
var code = "car.getonoff(" + op + ")";
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const me_go_led_brightness = function (_, generator) {
|
||||
var op = generator.valueToCode(this, 'led', generator.ORDER_ATOMIC);
|
||||
generator.definitions_['import_me_go_car'] = 'from me_go import car';
|
||||
var flag = generator.valueToCode(this, 'bright', generator.ORDER_ATOMIC);
|
||||
var code = "car.setbrightness(" + op + "," + flag + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const me_go_stepper_keep = function (_, generator) {
|
||||
var v = this.getFieldValue('VAR');
|
||||
generator.definitions_['import_me_go_car'] = 'from me_go import car';
|
||||
var speed = generator.valueToCode(this, 'speed', generator.ORDER_ASSIGNMENT);
|
||||
var code = 'car.move("' + v + '",' + speed + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const me_go_stepper_stop = function (_, generator) {
|
||||
var v = this.getFieldValue('VAR');
|
||||
generator.definitions_['import_me_go_car'] = 'from me_go import car';
|
||||
var code = 'car.move("' + v + '")\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const me_go_dc_motor = function (_, generator) {
|
||||
var wheel = this.getFieldValue('wheel');
|
||||
generator.definitions_['import_me_go_car'] = 'from me_go import car';
|
||||
var v = this.getFieldValue('direction');
|
||||
if (wheel == 0) {
|
||||
if (v == 'CW') { v = 'CCW' }
|
||||
else if (v == 'CCW') { v = 'CW' }
|
||||
}
|
||||
var speed = generator.valueToCode(this, 'speed', generator.ORDER_ATOMIC);
|
||||
var code = "car.motor(car.MOTO[" + wheel + '],"' + v + '",' + speed + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const me_go_hall_attachInterrupt = function (_, generator) {
|
||||
var dropdown_mode = this.getFieldValue('mode');
|
||||
generator.definitions_['import_me_go_hall_' + dropdown_mode] = 'from me_go import hall_' + dropdown_mode;
|
||||
var atta = generator.valueToCode(this, 'DO', generator.ORDER_ATOMIC);
|
||||
var code = 'hall_' + dropdown_mode + '.irq_cb(' + atta + ')\n'
|
||||
return code;
|
||||
}
|
||||
|
||||
export const me_go_hall_initialize = function (_, generator) {
|
||||
var dropdown_mode = this.getFieldValue('mode');
|
||||
var args = this.getFieldValue('args');
|
||||
generator.definitions_['import_me_go_hall_' + dropdown_mode] = 'from me_go import hall_' + dropdown_mode;
|
||||
var num = generator.valueToCode(this, 'num', generator.ORDER_ATOMIC);
|
||||
if (args == 'all') {
|
||||
var code = 'hall_' + dropdown_mode + '.initial(' + 'turns' + '=' + num + ',distance=' + num + ')\n'
|
||||
return code;
|
||||
}
|
||||
var code = 'hall_' + dropdown_mode + '.initial(' + args + '=' + num + ')\n'
|
||||
return code;
|
||||
}
|
||||
|
||||
export const me_go_hall_data = function (_, generator) {
|
||||
var dropdown_mode = this.getFieldValue('mode');
|
||||
var args = this.getFieldValue('args');
|
||||
generator.definitions_['import_me_go_hall_' + dropdown_mode] = 'from me_go import hall_' + dropdown_mode;
|
||||
var code = 'hall_' + dropdown_mode + '.' + args + '';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const me_go_pin_near_line = function (_, generator) {
|
||||
var key = this.getFieldValue('key');
|
||||
generator.definitions_['import_me_go_hall'] = 'from me_go import car';
|
||||
var code = 'car.patrol()' + key + '';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const me_go_pin_near = function (_, generator) {
|
||||
var key = this.getFieldValue('key');
|
||||
generator.definitions_['import_me_go_hall'] = 'from me_go import car';
|
||||
var code = 'car.obstacle()' + key + '';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const me_go_pin_near_state_change = function (_, generator) {
|
||||
var key = this.getFieldValue('key');
|
||||
generator.definitions_['import_me_go_hall'] = 'from me_go import car';
|
||||
var code = 'car.ir_mode(car.' + key + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const sensor_mixgome_eulerangles = function (_, generator) {
|
||||
generator.definitions_['import_mixgo_me_onboard_mxc6655xa'] = "from mixgo_me import onboard_mxc6655xa";
|
||||
var angle = this.getFieldValue('angle');
|
||||
var code = 'onboard_mxc6655xa.eulerangles(upright=True)' + angle;
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const me_go_pin_light = function (_, generator) {
|
||||
var key = this.getFieldValue('key');
|
||||
generator.definitions_['import_me_go_hall'] = 'from me_go import car';
|
||||
var code = 'car.light()' + key + '';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
@@ -0,0 +1,98 @@
|
||||
import { Boards } from 'mixly';
|
||||
|
||||
export const mini_g2_aht11 = function (_, generator) {
|
||||
var key = this.getFieldValue('key');
|
||||
generator.definitions_['import_mini_g2'] = 'import mini_g2';
|
||||
var code = 'mini_g2.ext_ahtx0.' + key + '()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const mini_g2_hp203 = function (_, generator) {
|
||||
var key = this.getFieldValue('key');
|
||||
generator.definitions_['import_mini_g2'] = 'import mini_g2';
|
||||
var code = 'mini_g2.ext_hp203x.' + key;
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const mini_g2_varistor = function (_, generator) {
|
||||
generator.definitions_['import_mini_g2'] = 'import mini_g2';
|
||||
var code = 'mini_g2.varistor()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const mini_g2_rfid_readid = function (_, generator) {
|
||||
generator.definitions_['import_mini_g2'] = 'import mini_g2';
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2];
|
||||
if (version == "mixgo_mini") {
|
||||
generator.definitions_['import_mini_g2_ext_rfid'] = 'from mini_g2 import ext_rfid';
|
||||
var code = 'ext_rfid.read_card(0, x="id")';
|
||||
} else {
|
||||
// generator.definitions_['import_mini_g2'] = 'import mini_g2';
|
||||
// var code = 'mini_g2.ext_rc522.read_card(0, x="id")';
|
||||
generator.definitions_['import_' + version + '_onboard_rfid'] = "from " + version + " import onboard_rfid";
|
||||
var code = 'onboard_rfid.read_card(0, x="id")';
|
||||
}
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const mini_g2_rfid_readcontent = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2];
|
||||
var sector = generator.valueToCode(this, 'SECTOR', generator.ORDER_ATOMIC);
|
||||
if (version == "mixgo_mini") {
|
||||
generator.definitions_['import_mini_g2_ext_rfid'] = 'from mini_g2 import ext_rfid';
|
||||
var code = 'ext_rfid.read_card(' + sector + ')';
|
||||
} else {
|
||||
// generator.definitions_['import_mini_g2'] = 'import mini_g2';
|
||||
// var code = 'mini_g2.ext_rc522.read_card(' + sector + ')';
|
||||
generator.definitions_['import_' + version + '_onboard_rfid'] = "from " + version + " import onboard_rfid";
|
||||
var code = 'onboard_rfid.read_card(' + sector + ', x="content")';
|
||||
}
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const mini_g2_rfid_write = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2];
|
||||
var sector = generator.valueToCode(this, 'SECTOR', generator.ORDER_ATOMIC);
|
||||
var cnt = generator.valueToCode(this, 'CONTENT', generator.ORDER_ATOMIC);
|
||||
if (version == "mixgo_mini") {
|
||||
generator.definitions_['import_mini_g2_ext_rfid'] = 'from mini_g2 import ext_rfid';
|
||||
var code = 'ext_rfid.write_card(' + cnt + ',' + sector + ')\n';
|
||||
} else {
|
||||
// generator.definitions_['import_mini_g2'] = 'import mini_g2';
|
||||
// var code = 'mini_g2.ext_rc522.write_card(' + cnt + ',' + sector + ')\n';
|
||||
generator.definitions_['import_' + version + '_onboard_rfid'] = "from " + version + " import onboard_rfid";
|
||||
var code = 'onboard_rfid.write_card(' + cnt + ', ' + sector + ')\n';
|
||||
}
|
||||
return code;
|
||||
}
|
||||
|
||||
export const mini_g2_rfid_write_outcome = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2];
|
||||
var sector = generator.valueToCode(this, 'SECTOR', generator.ORDER_ATOMIC);
|
||||
var cnt = generator.valueToCode(this, 'CONTENT', generator.ORDER_ATOMIC);
|
||||
if (version == "mixgo_mini") {
|
||||
generator.definitions_['import_mini_g2_ext_rfid'] = 'from mini_g2 import ext_rfid';
|
||||
var code = 'ext_rfid.write_card(' + cnt + ',' + sector + ')';
|
||||
} else {
|
||||
// generator.definitions_['import_mini_g2'] = 'import mini_g2';
|
||||
// var code = 'mini_g2.ext_rc522.write_card(' + cnt + ',' + sector + ')';
|
||||
generator.definitions_['import_' + version + '_onboard_rfid'] = "from " + version + " import onboard_rfid";
|
||||
var code = 'onboard_rfid.write_card(' + cnt + ', ' + sector + ')';
|
||||
}
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const mini_g2_rfid_status = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2];
|
||||
var key = this.getFieldValue('key');
|
||||
if (version == "mixgo_mini") {
|
||||
generator.definitions_['import_mini_g2_ext_rfid'] = 'from mini_g2 import ext_rfid';
|
||||
var code = 'ext_rfid.scan_card()==' + key;
|
||||
} else {
|
||||
// generator.definitions_['import_mini_g2'] = 'import mini_g2';
|
||||
// var code = 'mini_g2.ext_rc522.scan_card()==' + key;
|
||||
generator.definitions_['import_' + version + '_onboard_rfid'] = "from " + version + " import onboard_rfid";
|
||||
var code = 'onboard_rfid.scan_card()==' + key;
|
||||
}
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
export const pins_digital = function (_, generator) {
|
||||
var code = this.getFieldValue('PIN');
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const pins_button = pins_digital;
|
||||
export const pins_buttonB = pins_digital;
|
||||
export const pins_digital_pin = pins_digital;
|
||||
export const pins_input_pin = pins_digital;
|
||||
export const pins_output_pin = pins_digital;
|
||||
export const pins_pwm_input = pins_digital;
|
||||
export const espnow_channel = pins_digital;
|
||||
export const haskylens_model = pins_digital;
|
||||
export const analog_input = pins_digital;
|
||||
export const pwm_output = pins_digital;
|
||||
export const analog_output = pins_digital;
|
||||
export const i2c_A_pin = pins_digital;
|
||||
export const i2c_B_pin = pins_digital;
|
||||
export const spi_A_pin = pins_digital;
|
||||
export const spi_B_pin = pins_digital;
|
||||
export const spi_C_pin = pins_digital;
|
||||
export const spi_D_pin = pins_digital;
|
||||
export const pins_analog_pin = pins_digital;
|
||||
export const pins_analog = pins_digital;
|
||||
export const pins_pwm_pin = pins_digital;
|
||||
export const pins_pwm = pins_digital;
|
||||
export const pins_dac_pin = pins_digital;
|
||||
export const pins_dac = pins_digital;
|
||||
export const pins_touch_pin = pins_digital;
|
||||
export const pins_touch = pins_digital;
|
||||
export const pins_interrupt = pins_digital;
|
||||
export const pins_serial = pins_digital;
|
||||
export const pins_builtinimg = pins_digital;
|
||||
export const pins_builtinimg_extern = pins_digital;
|
||||
export const pins_imglist = pins_digital;
|
||||
export const pins_playlist = pins_digital;
|
||||
export const pins_playlist_extern = pins_digital;
|
||||
export const pins_axis = pins_digital;
|
||||
export const pins_exlcdh = pins_digital;
|
||||
export const pins_exlcdv = pins_digital;
|
||||
export const pins_brightness = pins_digital;
|
||||
export const pins_tts_voice = pins_digital;
|
||||
export const pins_tts_builtin_music = pins_digital;
|
||||
export const pins_tts_bgmusic = pins_digital;
|
||||
export const pins_tone_notes = pins_digital;
|
||||
export const pins_radio_power = pins_digital;
|
||||
export const pins_radio_datarate = pins_digital;
|
||||
export const pins_one_more = pins_digital;
|
||||
export const pins_digital_dot = pins_digital;
|
||||
export const timer_id_pin = pins_digital;
|
||||
200
mixly/boards/default_src/micropython_esp32c2/index.js
Normal file
200
mixly/boards/default_src/micropython_esp32c2/index.js
Normal file
@@ -0,0 +1,200 @@
|
||||
import * as Blockly from 'blockly/core';
|
||||
import { Profile } from 'mixly';
|
||||
|
||||
import {
|
||||
PythonVariablesBlocks,
|
||||
PythonControlBlocks,
|
||||
PythonMathBlocks,
|
||||
PythonTextBlocks,
|
||||
PythonListsBlocks,
|
||||
PythonDictsBlocks,
|
||||
PythonLogicBlocks,
|
||||
PythonStorageBlocks,
|
||||
PythonProceduresBlocks,
|
||||
PythonTupleBlocks,
|
||||
PythonSetBlocks,
|
||||
PythonHtmlBlocks,
|
||||
PythonUtilityBlocks,
|
||||
PythonVariablesGenerators,
|
||||
PythonControlGenerators,
|
||||
PythonMathGenerators,
|
||||
PythonTextGenerators,
|
||||
PythonListsGenerators,
|
||||
PythonDictsGenerators,
|
||||
PythonLogicGenerators,
|
||||
PythonStorageGenerators,
|
||||
PythonProceduresGenerators,
|
||||
PythonTupleGenerators,
|
||||
PythonSetGenerators,
|
||||
PythonHtmlGenerators,
|
||||
PythonUtilityGenerators,
|
||||
Procedures,
|
||||
Variables,
|
||||
Python
|
||||
} from '@mixly/python';
|
||||
|
||||
import {
|
||||
MicroPythonActuatorExternBlocks,
|
||||
MicroPythonActuatorOnBoardBlocks,
|
||||
MicroPythonAISensorBlocks,
|
||||
MicroPythonAIBlocks,
|
||||
MicroPythonAILocalBlocks,
|
||||
MicroPythonAICloudBlocks,
|
||||
MicroPythonBlynkBlocks,
|
||||
MicroPythonCCG1Blocks,
|
||||
MicroPythonCEGOBlocks,
|
||||
MicroPythonCommunicateBlocks,
|
||||
MicroPythonDisplayExternBlocks,
|
||||
MicroPythonDisplayOnBoardBlocks,
|
||||
MicroPythonFactoryBlocks,
|
||||
MicroPythonInputBlocks,
|
||||
MicroPythonIotBlocks,
|
||||
MicroPythonNetworkBlocks,
|
||||
MicroPythonPeG1Blocks,
|
||||
MicroPythonSensorExternBlocks,
|
||||
MicroPythonSensorOnBoardBlocks,
|
||||
MicroPythonSerialBlocks,
|
||||
MicroPythonSystemBlocks,
|
||||
MicroPythonWeatherBlocks,
|
||||
MicroPythonActuatorExternGenerators,
|
||||
MicroPythonActuatorOnBoardGenerators,
|
||||
MicroPythonAISensorGenerators,
|
||||
MicroPythonAIGenerators,
|
||||
MicroPythonAILocalGenerators,
|
||||
MicroPythonAICloudGenerators,
|
||||
MicroPythonBlynkGenerators,
|
||||
MicroPythonCCG1Generators,
|
||||
MicroPythonCEGOGenerators,
|
||||
MicroPythonCommunicateGenerators,
|
||||
MicroPythonDisplayExternGenerators,
|
||||
MicroPythonDisplayOnBoardGenerators,
|
||||
MicroPythonFactoryGenerators,
|
||||
MicroPythonInputGenerators,
|
||||
MicroPythonIotGenerators,
|
||||
MicroPythonNetworkGenerators,
|
||||
MicroPythonPeG1Generators,
|
||||
MicroPythonSensorExternGenerators,
|
||||
MicroPythonSensorOnBoardGenerators,
|
||||
MicroPythonSerialGenerators,
|
||||
MicroPythonSystemGenerators,
|
||||
MicroPythonWeatherGenerators,
|
||||
MicroPythonZhHans,
|
||||
MicroPythonZhHant,
|
||||
MicroPythonEn
|
||||
} from '@mixly/micropython';
|
||||
|
||||
import {
|
||||
MicropythonESP32C2Pins,
|
||||
MicropythonESP32C2InoutBlocks,
|
||||
MicropythonESP32C2MiniG2Blocks,
|
||||
MicropythonESP32C2MEGOBlocks,
|
||||
MicropythonESP32C2PinsBlocks,
|
||||
MicropythonESP32C2ActuatorExternGenerators,
|
||||
MicropythonESP32C2InoutGenerators,
|
||||
MicropythonESP32C2MiniG2Generators,
|
||||
MicropythonESP32C2MEGOGenerators,
|
||||
MicropythonESP32C2PinsGenerators
|
||||
} from './';
|
||||
|
||||
import './css/color_esp32c3_mixgocc.css';
|
||||
|
||||
Object.assign(Blockly.Variables, Variables);
|
||||
Object.assign(Blockly.Procedures, Procedures);
|
||||
|
||||
Object.assign(Blockly.Lang.ZhHans, MicroPythonZhHans);
|
||||
Object.assign(Blockly.Lang.ZhHant, MicroPythonZhHant);
|
||||
Object.assign(Blockly.Lang.En, MicroPythonEn);
|
||||
|
||||
Blockly.Python = Python;
|
||||
Blockly.generator = Python;
|
||||
|
||||
Profile.default = {};
|
||||
Object.assign(Profile, MicropythonESP32C2Pins);
|
||||
Object.assign(Profile.default, MicropythonESP32C2Pins['元控奋斗(MINI)']);
|
||||
|
||||
Object.assign(
|
||||
Blockly.Blocks,
|
||||
PythonVariablesBlocks,
|
||||
PythonControlBlocks,
|
||||
PythonMathBlocks,
|
||||
PythonTextBlocks,
|
||||
PythonListsBlocks,
|
||||
PythonDictsBlocks,
|
||||
PythonLogicBlocks,
|
||||
PythonStorageBlocks,
|
||||
PythonProceduresBlocks,
|
||||
PythonTupleBlocks,
|
||||
PythonSetBlocks,
|
||||
PythonHtmlBlocks,
|
||||
PythonUtilityBlocks,
|
||||
MicroPythonInputBlocks,
|
||||
MicroPythonSystemBlocks,
|
||||
MicroPythonSerialBlocks,
|
||||
MicroPythonCommunicateBlocks,
|
||||
MicroPythonIotBlocks,
|
||||
MicroPythonWeatherBlocks,
|
||||
MicroPythonAISensorBlocks,
|
||||
MicroPythonAILocalBlocks,
|
||||
MicroPythonAICloudBlocks,
|
||||
MicroPythonSensorOnBoardBlocks,
|
||||
MicroPythonSensorExternBlocks,
|
||||
MicroPythonNetworkBlocks,
|
||||
MicroPythonPeG1Blocks,
|
||||
MicroPythonAIBlocks,
|
||||
MicroPythonActuatorOnBoardBlocks,
|
||||
MicroPythonActuatorExternBlocks,
|
||||
MicroPythonDisplayOnBoardBlocks,
|
||||
MicroPythonDisplayExternBlocks,
|
||||
MicroPythonFactoryBlocks,
|
||||
MicroPythonBlynkBlocks,
|
||||
MicroPythonCCG1Blocks,
|
||||
MicroPythonCEGOBlocks,
|
||||
MicropythonESP32C2InoutBlocks,
|
||||
MicropythonESP32C2MiniG2Blocks,
|
||||
MicropythonESP32C2MEGOBlocks,
|
||||
MicropythonESP32C2PinsBlocks
|
||||
);
|
||||
|
||||
Object.assign(
|
||||
Blockly.Python.forBlock,
|
||||
PythonVariablesGenerators,
|
||||
PythonControlGenerators,
|
||||
PythonMathGenerators,
|
||||
PythonTextGenerators,
|
||||
PythonListsGenerators,
|
||||
PythonDictsGenerators,
|
||||
PythonLogicGenerators,
|
||||
PythonStorageGenerators,
|
||||
PythonProceduresGenerators,
|
||||
PythonTupleGenerators,
|
||||
PythonSetGenerators,
|
||||
PythonHtmlGenerators,
|
||||
PythonUtilityGenerators,
|
||||
MicroPythonInputGenerators,
|
||||
MicroPythonSystemGenerators,
|
||||
MicroPythonSerialGenerators,
|
||||
MicroPythonCommunicateGenerators,
|
||||
MicroPythonIotGenerators,
|
||||
MicroPythonWeatherGenerators,
|
||||
MicroPythonAISensorGenerators,
|
||||
MicroPythonAILocalGenerators,
|
||||
MicroPythonAICloudGenerators,
|
||||
MicroPythonSensorOnBoardGenerators,
|
||||
MicroPythonSensorExternGenerators,
|
||||
MicroPythonNetworkGenerators,
|
||||
MicroPythonPeG1Generators,
|
||||
MicroPythonAIGenerators,
|
||||
MicroPythonActuatorOnBoardGenerators,
|
||||
MicroPythonActuatorExternGenerators,
|
||||
MicroPythonDisplayOnBoardGenerators,
|
||||
MicroPythonDisplayExternGenerators,
|
||||
MicroPythonFactoryGenerators,
|
||||
MicroPythonBlynkGenerators,
|
||||
MicroPythonCCG1Generators,
|
||||
MicroPythonCEGOGenerators,
|
||||
MicropythonESP32C2ActuatorExternGenerators,
|
||||
MicropythonESP32C2InoutGenerators,
|
||||
MicropythonESP32C2MiniG2Generators,
|
||||
MicropythonESP32C2MEGOGenerators,
|
||||
MicropythonESP32C2PinsGenerators
|
||||
);
|
||||
18
mixly/boards/default_src/micropython_esp32c2/jsconfig.json
Normal file
18
mixly/boards/default_src/micropython_esp32c2/jsconfig.json
Normal file
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"experimentalDecorators": true,
|
||||
"baseUrl": "./",
|
||||
"paths": {
|
||||
"@mixly/python": [
|
||||
"../python"
|
||||
],
|
||||
"@mixly/micropython": [
|
||||
"../micropython"
|
||||
]
|
||||
}
|
||||
},
|
||||
"exclude": [
|
||||
"node_modules",
|
||||
"dist"
|
||||
]
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,217 @@
|
||||
"""
|
||||
Bluetooth-Central
|
||||
|
||||
Micropython library for the Bluetooth-Central(ESP32-C2)
|
||||
=======================================================
|
||||
#https://github.com/micropython/micropython/tree/master/examples/bluetooth
|
||||
|
||||
@dahanzimin From the Mixly Team
|
||||
"""
|
||||
import time,gc
|
||||
import bluetooth
|
||||
from micropython import const
|
||||
from ubinascii import hexlify,unhexlify
|
||||
from ble_advertising import decode_services, decode_name
|
||||
|
||||
_IRQ_CENTRAL_CONNECT = const(1)
|
||||
_IRQ_CENTRAL_DISCONNECT = const(2)
|
||||
_IRQ_GATTS_WRITE = const(3)
|
||||
_IRQ_GATTS_READ_REQUEST = const(4)
|
||||
_IRQ_SCAN_RESULT = const(5)
|
||||
_IRQ_SCAN_DONE = const(6)
|
||||
_IRQ_PERIPHERAL_CONNECT = const(7)
|
||||
_IRQ_PERIPHERAL_DISCONNECT = const(8)
|
||||
_IRQ_GATTC_SERVICE_RESULT = const(9)
|
||||
_IRQ_GATTC_SERVICE_DONE = const(10)
|
||||
_IRQ_GATTC_CHARACTERISTIC_RESULT = const(11)
|
||||
_IRQ_GATTC_CHARACTERISTIC_DONE = const(12)
|
||||
_IRQ_GATTC_DESCRIPTOR_RESULT = const(13)
|
||||
_IRQ_GATTC_DESCRIPTOR_DONE = const(14)
|
||||
_IRQ_GATTC_READ_RESULT = const(15)
|
||||
_IRQ_GATTC_READ_DONE = const(16)
|
||||
_IRQ_GATTC_WRITE_DONE = const(17)
|
||||
_IRQ_GATTC_NOTIFY = const(18)
|
||||
_IRQ_GATTC_INDICATE = const(19)
|
||||
|
||||
_ADV_IND = const(0x00)
|
||||
_ADV_DIRECT_IND = const(0x01)
|
||||
_ADV_SCAN_IND = const(0x02)
|
||||
_ADV_NONCONN_IND = const(0x03)
|
||||
|
||||
_UART_SERVICE_UUID = bluetooth.UUID(0x1101)
|
||||
_UART_RX_CHAR_UUID = bluetooth.UUID("6E400002-B5A3-F393-E0A9-E50E24DCCA9E")
|
||||
_UART_TX_CHAR_UUID = bluetooth.UUID("6E400003-B5A3-F393-E0A9-E50E24DCCA9E")
|
||||
|
||||
|
||||
class BLESimpleCentral:
|
||||
def __init__(self):
|
||||
self._ble = bluetooth.BLE()
|
||||
self._scan_flg = True
|
||||
self._ble.active(True)
|
||||
self._ble.irq(self._irq)
|
||||
self._reset()
|
||||
self.scan()
|
||||
|
||||
def _reset(self):
|
||||
# Cached name and address from a successful scan.
|
||||
self._name = None
|
||||
self._addr_type = None
|
||||
self._addr = None
|
||||
|
||||
# Callbacks for completion of various operations.
|
||||
# These reset back to None after being invoked.
|
||||
self._conn_callback = None
|
||||
self._read_callback = None
|
||||
|
||||
# Persistent callback for when new data is notified from the device.
|
||||
self._notify_callback = None
|
||||
self._write_data=None
|
||||
|
||||
# Connected device.
|
||||
self._conn_handle = None
|
||||
self._start_handle = None
|
||||
self._end_handle = None
|
||||
self._tx_handle = None
|
||||
self._rx_handle = None
|
||||
|
||||
def _irq(self, event, data):
|
||||
if event == _IRQ_SCAN_RESULT:
|
||||
addr_type, addr, adv_type, rssi, adv_data = data
|
||||
|
||||
if adv_type in (_ADV_IND, _ADV_DIRECT_IND) and _UART_SERVICE_UUID in decode_services(adv_data):
|
||||
# Found a potential device, remember it and stop scanning.
|
||||
self._addr_type = addr_type
|
||||
self._addr = bytes(addr) # Note: addr buffer is owned by caller so need to copy it.
|
||||
self._name = decode_name(adv_data) or "?"
|
||||
if self._addr in self._info[2]:
|
||||
#self._ble.gap_scan(None)
|
||||
return None
|
||||
else:
|
||||
self._info[0].append(self._name)
|
||||
self._info[1].append(self._addr_type)
|
||||
self._info[2].append(self._addr)
|
||||
self._info[3].append(rssi)
|
||||
|
||||
elif event == _IRQ_SCAN_DONE:
|
||||
self._scan_flg = False
|
||||
|
||||
elif event == _IRQ_PERIPHERAL_CONNECT:
|
||||
# Connect successful.
|
||||
conn_handle, addr_type, addr = data
|
||||
if addr_type == self._addr_type and addr == self._addr:
|
||||
self._conn_handle = conn_handle
|
||||
self._ble.gattc_discover_services(self._conn_handle)
|
||||
|
||||
elif event == _IRQ_PERIPHERAL_DISCONNECT:
|
||||
# Disconnect (either initiated by us or the remote end).
|
||||
conn_handle, _, _ = data
|
||||
if conn_handle == self._conn_handle:
|
||||
# If it was initiated by us, it'll already be reset.
|
||||
self._reset()
|
||||
|
||||
elif event == _IRQ_GATTC_SERVICE_RESULT:
|
||||
# Connected device returned a service.
|
||||
conn_handle, start_handle, end_handle, uuid = data
|
||||
print("service", data)
|
||||
if conn_handle == self._conn_handle and uuid == _UART_SERVICE_UUID:
|
||||
self._start_handle, self._end_handle = start_handle, end_handle
|
||||
|
||||
elif event == _IRQ_GATTC_SERVICE_DONE:
|
||||
# Service query complete.
|
||||
if self._start_handle and self._end_handle:
|
||||
self._ble.gattc_discover_characteristics(
|
||||
self._conn_handle, self._start_handle, self._end_handle
|
||||
)
|
||||
else:
|
||||
print("Failed to find uart service.")
|
||||
|
||||
elif event == _IRQ_GATTC_CHARACTERISTIC_RESULT:
|
||||
# Connected device returned a characteristic.
|
||||
conn_handle, def_handle, value_handle, properties, uuid = data
|
||||
if conn_handle == self._conn_handle and uuid == _UART_RX_CHAR_UUID:
|
||||
self._rx_handle = value_handle
|
||||
if conn_handle == self._conn_handle and uuid == _UART_TX_CHAR_UUID:
|
||||
self._tx_handle = value_handle
|
||||
|
||||
elif event == _IRQ_GATTC_CHARACTERISTIC_DONE:
|
||||
# Characteristic query complete.
|
||||
if self._tx_handle is not None and self._rx_handle is not None:
|
||||
# We've finished connecting and discovering device, fire the connect callback.
|
||||
if self._conn_callback:
|
||||
self._conn_callback()
|
||||
else:
|
||||
print("Failed to find uart rx characteristic.")
|
||||
|
||||
elif event == _IRQ_GATTC_WRITE_DONE:
|
||||
conn_handle, value_handle, status = data
|
||||
print("TX complete")
|
||||
|
||||
elif event == _IRQ_GATTC_NOTIFY:
|
||||
conn_handle, value_handle, notify_data = data
|
||||
if conn_handle == self._conn_handle and value_handle == self._tx_handle:
|
||||
try:
|
||||
self._write_data=bytes(notify_data).decode().strip()
|
||||
except:
|
||||
self._write_data=bytes(notify_data)
|
||||
if self._notify_callback:
|
||||
self._notify_callback(self._write_data)
|
||||
|
||||
# Returns true if we've successfully connected and discovered characteristics.
|
||||
def is_connected(self):
|
||||
return (self._conn_handle is not None and self._tx_handle is not None and self._rx_handle is not None)
|
||||
|
||||
# Find a device advertising the environmental sensor service.
|
||||
def scan(self):
|
||||
self._info = [[],[],[],[]]
|
||||
self._ble.gap_scan(5000, 30000, 30000)
|
||||
while self._scan_flg:
|
||||
time.sleep_ms(10)
|
||||
self._scan_flg = True
|
||||
info=[]
|
||||
for i in range(len(self._info[0])):
|
||||
info.append([self._info[0][i],self._info[1][i],hexlify(self._info[2][i]).decode(),self._info[3][i]])
|
||||
return info
|
||||
|
||||
# Connect to the specified device (otherwise use cached address from a scan).
|
||||
def connect(self, name=None,mac=None, callback=None):
|
||||
if mac and unhexlify(mac) in self._info[2]:
|
||||
index=self._info[2].index(unhexlify(mac))
|
||||
self._addr_type=self._info[1][index]
|
||||
self._addr=unhexlify(mac)
|
||||
elif name and name in self._info[0]:
|
||||
index=self._info[0].index(name)
|
||||
self._addr_type=self._info[1][index]
|
||||
self._addr=self._info[2][index]
|
||||
else:
|
||||
raise ValueError("The '{}' Bluetooth was not found, Please check device is working".format(mac if name is None else name))
|
||||
self._conn_callback = callback
|
||||
self._ble.gap_connect(self._addr_type, self._addr)
|
||||
return True
|
||||
|
||||
# Disconnect from current device.
|
||||
def disconnect(self):
|
||||
if not self._conn_handle:
|
||||
return
|
||||
self._ble.gap_disconnect(self._conn_handle)
|
||||
self._reset()
|
||||
gc.collect()
|
||||
|
||||
# Send data over the UART
|
||||
def send(self, v, response=False):
|
||||
if not self.is_connected():
|
||||
return
|
||||
self._ble.gattc_write(self._conn_handle, self._rx_handle, v, 1 if response else 0)
|
||||
|
||||
# Set handler for when data is received over the UART.
|
||||
def recv(self, callback= None):
|
||||
if callback:
|
||||
self._notify_callback = callback
|
||||
else:
|
||||
write_data=self._write_data
|
||||
self._write_data=None
|
||||
return write_data
|
||||
|
||||
@property
|
||||
def mac(self):
|
||||
'''Get mac address'''
|
||||
return hexlify(self._ble.config('mac')[1]).decode()
|
||||
@@ -0,0 +1,421 @@
|
||||
"""
|
||||
MINI_WCH
|
||||
|
||||
Micropython library for the MINI_WCH(TOUCH*2, MIC*1, Buzzer*1, PWM*2, Matrix8x12, HID)
|
||||
=======================================================
|
||||
@dahanzimin From the Mixly Team
|
||||
"""
|
||||
import time, math
|
||||
from esp import flash_read
|
||||
from micropython import const
|
||||
from framebuf import FrameBuffer, MONO_VLSB
|
||||
|
||||
_BOT035_ADDRESS = const(0x13)
|
||||
_BOT5_TOUCH = const(0x01)
|
||||
_BOT035_MIC = const(0x05)
|
||||
_BOT035_SPK = const(0x07)
|
||||
_BOT035_PWM = const(0x0B)
|
||||
_BOT035_FLAG = const(0x0F)
|
||||
_BOT035_LEDS = const(0x10)
|
||||
_BOT035_KB = const(0x1C)
|
||||
_BOT035_MS = const(0x20)
|
||||
_BOT035_STR = const(0x24)
|
||||
_BOT035_STA = const(0x25)
|
||||
_BOT035_PCM = const(0x26)
|
||||
_FONT_W = const(5)
|
||||
_FONT_H = const(8)
|
||||
_LEDS_W = const(12)
|
||||
_LEDS_H = const(8)
|
||||
_FONT5x8_CODE = const(b'\x05\x08\x00\x00\x00\x00\x00\x00\x00_\x00\x00\x00\x07\x00\x07\x00\x14\x7f\x14\x7f\x14$*\x7f*\x12#\x13\x08db6IV P\x00\x08\x07\x03\x00\x00\x1c"A\x00\x00A"\x1c\x00*\x1c\x7f\x1c*\x08\x08>\x08\x08\x00\x80p0\x00\x08\x08\x08\x08\x08\x00\x00``\x00 \x10\x08\x04\x02>QIE>\x00B\x7f@\x00rIIIF!AIM3\x18\x14\x12\x7f\x10\'EEE9<JII1A!\x11\t\x076III6FII)\x1e\x00\x00\x14\x00\x00\x00@4\x00\x00\x00\x08\x14"A\x14\x14\x14\x14\x14\x00A"\x14\x08\x02\x01Y\t\x06>A]YN|\x12\x11\x12|\x7fIII6>AAA"\x7fAAA>\x7fIIIA\x7f\t\t\t\x01>AAQs\x7f\x08\x08\x08\x7f\x00A\x7fA\x00 @A?\x01\x7f\x08\x14"A\x7f@@@@\x7f\x02\x1c\x02\x7f\x7f\x04\x08\x10\x7f>AAA>\x7f\t\t\t\x06>AQ!^\x7f\t\x19)F&III2\x03\x01\x7f\x01\x03?@@@?\x1f @ \x1f?@8@?c\x14\x08\x14c\x03\x04x\x04\x03aYIMC\x00\x7fAAA\x02\x04\x08\x10 \x00AAA\x7f\x04\x02\x01\x02\x04@@@@@\x00\x03\x07\x08\x00 TTx@\x7f(DD88DDD(8DD(\x7f8TTT\x18\x00\x08~\t\x02\x18\xa4\xa4\x9cx\x7f\x08\x04\x04x\x00D}@\x00 @@=\x00\x7f\x10(D\x00\x00A\x7f@\x00|\x04x\x04x|\x08\x04\x04x8DDD8\xfc\x18$$\x18\x18$$\x18\xfc|\x08\x04\x04\x08HTTT$\x04\x04?D$<@@ |\x1c @ \x1c<@0@<D(\x10(DL\x90\x90\x90|DdTLD\x00\x086A\x00\x00\x00w\x00\x00\x00A6\x08\x00\x02\x01\x02\x04\x02<&#&<')
|
||||
_Uincode_ADDR = const(0x3A0000)
|
||||
|
||||
class BOT035(FrameBuffer):
|
||||
def __init__(self, i2c_bus, brightness=0.8):
|
||||
self._i2c = i2c_bus
|
||||
self._way = 2
|
||||
self._speed = 100
|
||||
self._buffer = bytearray(12)
|
||||
self._brightness = brightness
|
||||
self._touchs = [self.touch(0), self.touch(1)]
|
||||
super().__init__(self._buffer, _LEDS_W, _LEDS_H, MONO_VLSB)
|
||||
self.version()
|
||||
self.reset()
|
||||
self.show()
|
||||
|
||||
def _chardata(self, ch):
|
||||
'''Ascall code font reading data'''
|
||||
if 0x20 <= ord(ch) <= 0x7f:
|
||||
char_index = 2 + (ord(ch)-32) * _FONT_W
|
||||
return _FONT5x8_CODE[char_index : char_index + _FONT_W]
|
||||
else:
|
||||
raise ValueError("Cannot display characters other than ASCLL code")
|
||||
|
||||
def _uincode(self, ch):
|
||||
'''uincode code font reading data'''
|
||||
uni = ord(ch)
|
||||
if 0x20 <= uni <= 0x2642 :
|
||||
_address = 0x28 + (uni - 0x20) * 4
|
||||
elif 0x3001 <= uni <= 0x9fa0 :
|
||||
_address = 0x98b4 + (uni - 0x3001) * 4
|
||||
elif 0xff01 <= uni <= 0xffe5 :
|
||||
_address = 0x25734 + (uni - 0xff01) * 4
|
||||
else:
|
||||
raise ValueError("Cannot display characters other than GB2312 code")
|
||||
buffer = bytearray(4)
|
||||
flash_read(_Uincode_ADDR + _address, buffer)
|
||||
font_info = buffer[3] << 24 | buffer[2] << 16 | buffer[1] << 8 | buffer[0]
|
||||
font_address = font_info & 0x3FFFFFF
|
||||
font_width = font_info >> 26
|
||||
buffer = bytearray(12 * (font_width // 8 + 1))
|
||||
flash_read(_Uincode_ADDR + font_address, buffer)
|
||||
return buffer, font_width, 12
|
||||
|
||||
def shift(self, x, y, rotate=False):
|
||||
"""Shift pixels by x and y"""
|
||||
if x > 0: # Shift Right
|
||||
for _ in range(x):
|
||||
for row in range(0, _LEDS_H):
|
||||
last_pixel = self.pixel(_LEDS_W - 1, row) if rotate else 0
|
||||
for col in range(_LEDS_W - 1, 0, -1):
|
||||
self.pixel(col, row, self.pixel(col - 1, row))
|
||||
self.pixel(0, row, last_pixel)
|
||||
elif x < 0: # Shift Left
|
||||
for _ in range(-x):
|
||||
for row in range(0, _LEDS_H):
|
||||
last_pixel = self.pixel(0, row) if rotate else 0
|
||||
for col in range(0, _LEDS_W - 1):
|
||||
self.pixel(col, row, self.pixel(col + 1, row))
|
||||
self.pixel(_LEDS_W - 1, row, last_pixel)
|
||||
if y > 0: # Shift Up
|
||||
for _ in range(y):
|
||||
for col in range(0, _LEDS_W):
|
||||
last_pixel = self.pixel(col, _LEDS_H - 1) if rotate else 0
|
||||
for row in range(_LEDS_H - 1, 0, -1):
|
||||
self.pixel(col, row, self.pixel(col, row - 1))
|
||||
self.pixel(col, 0, last_pixel)
|
||||
elif y < 0: # Shift Down
|
||||
for _ in range(-y):
|
||||
for col in range(0, _LEDS_W):
|
||||
last_pixel = self.pixel(col, 0) if rotate else 0
|
||||
for row in range(0, _LEDS_H - 1):
|
||||
self.pixel(col, row, self.pixel(col, row + 1))
|
||||
self.pixel(col, _LEDS_H - 1, last_pixel)
|
||||
self.show()
|
||||
|
||||
def shift_right(self, num, rotate=False):
|
||||
"""Shift all pixels right"""
|
||||
self.shift(num, 0, rotate)
|
||||
|
||||
def shift_left(self, num, rotate=False):
|
||||
"""Shift all pixels left"""
|
||||
self.shift(-num, 0, rotate)
|
||||
|
||||
def shift_up(self, num, rotate=False):
|
||||
"""Shift all pixels up"""
|
||||
self.shift(0, -num, rotate)
|
||||
|
||||
def shift_down(self, num, rotate=False):
|
||||
"""Shift all pixels down"""
|
||||
self.shift(0, num, rotate)
|
||||
|
||||
def map_invert(self, own):
|
||||
"""Graph invert operation"""
|
||||
result = bytearray()
|
||||
for i in range(len(own)):
|
||||
result.append(~ own[i])
|
||||
return result
|
||||
|
||||
def map_add(self, own, other):
|
||||
"""Graph union operation"""
|
||||
result = bytearray()
|
||||
for i in range(min(len(own), len(other))):
|
||||
result.append(own[i] | other[i])
|
||||
return result
|
||||
|
||||
def map_sub(self, own, other):
|
||||
"""Graphic subtraction operation"""
|
||||
result = bytearray()
|
||||
for i in range(min(len(own), len(other))):
|
||||
result.append((own[i] ^ other[i]) & own[i])
|
||||
return result
|
||||
|
||||
def set_buffer(self, buffer):
|
||||
for i in range(len(buffer)):
|
||||
self._buffer[i] = self._buffer[i] | buffer[i]
|
||||
|
||||
def _ascall_bitmap(self, data, x=0 ,space=0):
|
||||
for char in data:
|
||||
buf = self._chardata(char)
|
||||
if -_FONT_W <= x <= _LEDS_W:
|
||||
for _x in range(_FONT_W):
|
||||
for _y in range(_FONT_H):
|
||||
if (buf[_x] >> _y) & 0x1:
|
||||
self.pixel(x + _x, _y, 1)
|
||||
x = _FONT_W + x + space
|
||||
self.show()
|
||||
|
||||
def _uincode_scroll(self, buffer, space):
|
||||
_len = 0
|
||||
for buf in buffer:
|
||||
_len = _len + space + (buf[2] if self._way <= 1 else buf[1])
|
||||
for i in range(_len - space + (_LEDS_W if self._way <= 1 else _LEDS_H)):
|
||||
_step = (_LEDS_W - 1 if self._way <= 1 else _LEDS_H) - i
|
||||
self.fill(0)
|
||||
for buf in buffer:
|
||||
_buf, width, high = buf
|
||||
_xx = (_LEDS_W - width) // 2
|
||||
if -high < _step < _LEDS_W:
|
||||
for _y in range(12):
|
||||
for _x in range(width):
|
||||
if _buf[_y * ((width + 7) // 8) + _x // 8] & (0x80 >> (_x & 7)):
|
||||
if self._way == 0:
|
||||
self.pixel( _LEDS_W - (_xx + _x) - 2, _LEDS_H - (_step + _y), 1)
|
||||
elif self._way == 1:
|
||||
self.pixel(_xx + _x + 1, _step + _y, 1)
|
||||
elif self._way == 2:
|
||||
self.pixel(_y, _LEDS_H - (_step + _x), 1)
|
||||
elif self._way == 3:
|
||||
self.pixel(_LEDS_W - _y - 1, (_step + _x), 1)
|
||||
_step = _step + space + (high if self._way <= 1 else width)
|
||||
self.show()
|
||||
time.sleep_ms(self._speed)
|
||||
|
||||
def _gb2312_scroll(self, data, space):
|
||||
for char in data:
|
||||
if ord(char) >= 0xFF:
|
||||
font_buffer = []
|
||||
for c in data:
|
||||
_buffer = self._uincode(c)
|
||||
font_buffer.append(_buffer)
|
||||
self._uincode_scroll(font_buffer, space)
|
||||
return True
|
||||
|
||||
def scroll_way(self, way=1, speed=None):
|
||||
"""0,1竖,2,3横"""
|
||||
self._way = way % 4
|
||||
if speed is not None:
|
||||
self._speed = speed
|
||||
|
||||
def shows(self, data, space=1, center=True):
|
||||
"""Display character"""
|
||||
if data is not None:
|
||||
self.fill(0)
|
||||
if type(data) in [bytes, bytearray]:
|
||||
self.set_buffer(data)
|
||||
self.show()
|
||||
else:
|
||||
data = str(data)
|
||||
if not self._gb2312_scroll(data, space):
|
||||
x = (_LEDS_W - len(data) * (_FONT_W + space) + space) // 2 if center else 0
|
||||
self._ascall_bitmap(data, x)
|
||||
|
||||
def frame(self, data, delay=500):
|
||||
"""Display one frame per character"""
|
||||
if data is not None:
|
||||
data = str(data)
|
||||
for char in data:
|
||||
self.fill(0)
|
||||
if ord(char) >= 0xFF:
|
||||
_way = self._way
|
||||
self._way = 1
|
||||
self._uincode_scroll([self._uincode(char)], 0)
|
||||
self._way = _way
|
||||
else:
|
||||
self._ascall_bitmap([char], (_LEDS_W - _FONT_W) // 2)
|
||||
time.sleep_ms(delay)
|
||||
|
||||
def scroll(self, data, space=0, speed=None):
|
||||
"""Scrolling characters"""
|
||||
if speed is not None:
|
||||
self._speed = speed
|
||||
if data is not None:
|
||||
data = str(data)
|
||||
if not self._gb2312_scroll(data, space):
|
||||
str_len = len(data) * (_FONT_W + space) - space
|
||||
for i in range(str_len + _LEDS_W + 1):
|
||||
x = _LEDS_W - i
|
||||
self.fill(0)
|
||||
self._ascall_bitmap(data, x)
|
||||
time.sleep_ms(self._speed)
|
||||
|
||||
def pointern(self, x=_LEDS_W // 2, y=_LEDS_H // 2, l=_LEDS_H // 2, angle=0):
|
||||
radian = math.radians(angle)
|
||||
self.fill(0)
|
||||
self.line(x, y, round(x + l * math.sin(radian)), round(y - l * math.cos(radian)), 1)
|
||||
self.show()
|
||||
|
||||
def _wreg(self, reg, val):
|
||||
'''Write memory address'''
|
||||
self._i2c.writeto_mem(_BOT035_ADDRESS, reg, val.to_bytes(1, 'little'))
|
||||
|
||||
def _rreg(self, reg, nbytes=1):
|
||||
'''Read memory address'''
|
||||
self._i2c.writeto(_BOT035_ADDRESS, reg.to_bytes(1, 'little'))
|
||||
return self._i2c.readfrom(_BOT035_ADDRESS, nbytes)[0] if nbytes <= 1 else self._i2c.readfrom(_BOT035_ADDRESS, nbytes)
|
||||
|
||||
def version(self):
|
||||
_ver = self._rreg(0x00)
|
||||
if _ver == 0x26:
|
||||
self._version = 0
|
||||
return "v1.7", "Only support CDC serial port"
|
||||
elif _ver == 0x27:
|
||||
self._version = 1
|
||||
return "v2.5", "Composite devices (CDC, Keyboard and Mouse)"
|
||||
elif _ver == 0x28:
|
||||
self._version = 2
|
||||
return "v2.9", "Composite devices (CDC, HID, WEBUSB, Keyboard and Mouse)"
|
||||
elif _ver == 0x29:
|
||||
self._version = 3
|
||||
return "v3.0", "Composite devices (CDC, HID, WEBUSB, Keyboard and Mouse), Support PCM collection for MIC"
|
||||
else:
|
||||
return "vx.x", "Unknown, awaiting update"
|
||||
|
||||
def reset(self):
|
||||
"""Reset SPK, PWM, HID registers to default state"""
|
||||
self._i2c.writeto_mem(_BOT035_ADDRESS, _BOT035_SPK, b'\x0A\x00\x00\x00\x20\x4E\x64\x64\x28')
|
||||
if self._version: self._i2c.writeto_mem(_BOT035_ADDRESS, _BOT035_KB, bytes(10))
|
||||
|
||||
def get_brightness(self):
|
||||
return self._brightness
|
||||
|
||||
def set_brightness(self, brightness):
|
||||
if not 0.0 <= brightness <= 1.0:
|
||||
raise ValueError("Brightness must be a decimal number in the range: 0.0-1.0")
|
||||
self._brightness = brightness
|
||||
self._wreg(_BOT035_FLAG, (self._rreg(_BOT035_FLAG) & 0x0F) | round(10 * brightness))
|
||||
|
||||
def show(self):
|
||||
self._i2c.writeto_mem(_BOT035_ADDRESS, _BOT035_LEDS, self._buffer)
|
||||
|
||||
def buzzer(self, duty=None, freq=None):
|
||||
if duty is not None:
|
||||
duty = max(min(duty, 100), 0)
|
||||
self._wreg(_BOT035_SPK + 2, int(duty))
|
||||
if freq is not None:
|
||||
freq = max(min(freq, 65535), 10)
|
||||
self._wreg(_BOT035_SPK, freq & 0xFF)
|
||||
self._wreg(_BOT035_SPK + 1, freq >> 8)
|
||||
if freq is None and duty is None:
|
||||
return self._rreg(_BOT035_SPK + 2), self._rreg(_BOT035_SPK) | self._rreg(_BOT035_SPK + 1) << 8
|
||||
|
||||
def usben(self, index=1, duty=None, freq=None):
|
||||
index = max(min(index, 2), 1) - 1
|
||||
if duty is not None:
|
||||
duty = max(min(duty, 100), 0)
|
||||
self._wreg(_BOT035_PWM + index + 2, int(duty))
|
||||
if freq is not None:
|
||||
freq = max(min(freq, 65535), 10)
|
||||
self._wreg(_BOT035_PWM, freq & 0xFF)
|
||||
self._wreg(_BOT035_PWM + 1, freq >> 8)
|
||||
if freq is None and duty is None:
|
||||
return self._rreg(_BOT035_PWM + index + 2), self._rreg(_BOT035_PWM) | self._rreg(_BOT035_PWM + 1) << 8
|
||||
|
||||
def touch(self, index, value=None):
|
||||
index = max(min(index, 1), 0)
|
||||
touch = 4095 - (self._rreg(_BOT5_TOUCH + index * 2) | self._rreg(_BOT5_TOUCH + index * 2 + 1) << 8)
|
||||
return touch > value if value else touch
|
||||
|
||||
def touched(self, index, value=600):
|
||||
return self.touch(index, value)
|
||||
|
||||
def touch_slide(self):
|
||||
values = []
|
||||
for i in range(30):
|
||||
values.append((self.touch(1) - self._touchs[1]) - (self.touch(0) - self._touchs[0]))
|
||||
return round(sorted(values)[15] / 10)
|
||||
|
||||
def soundlevel(self):
|
||||
values = []
|
||||
for i in range(50):
|
||||
values.append(self._rreg(_BOT035_MIC) | self._rreg(_BOT035_MIC + 1) << 8)
|
||||
values = sorted(values)
|
||||
return values[-10] - values[10]
|
||||
|
||||
def hid_keyboard(self, special=0, general=0, release=True):
|
||||
if self._version:
|
||||
self._buf = bytearray(4)
|
||||
self._buf[0] = special
|
||||
if type(general) in (tuple, list):
|
||||
for i in range(len(general)):
|
||||
if i > 2: break
|
||||
self._buf[i + 1] = general[i]
|
||||
else:
|
||||
self._buf[1] = general
|
||||
self._i2c.writeto_mem(_BOT035_ADDRESS, _BOT035_KB, self._buf)
|
||||
if release:
|
||||
time.sleep_ms(10)
|
||||
self._i2c.writeto_mem(_BOT035_ADDRESS, _BOT035_KB, bytes(4))
|
||||
else:
|
||||
print("Warning: Please upgrade the coprocessor firmware to use this feature")
|
||||
|
||||
def hid_keyboard_str(self, string, delay=0):
|
||||
if self._version:
|
||||
for char in str(string):
|
||||
self._wreg(_BOT035_STR, ord(char) & 0xFF)
|
||||
time.sleep_ms(20 + delay)
|
||||
else:
|
||||
print("Warning: Please upgrade the coprocessor firmware to use this feature")
|
||||
|
||||
def hid_keyboard_state(self):
|
||||
state = self._rreg(_BOT035_STA)
|
||||
return bool(state & 0x10), bool(state & 0x20), bool(state & 0x40)
|
||||
|
||||
def hid_mouse(self, keys=0, move=(0, 0), wheel=0, release=True):
|
||||
if self._version:
|
||||
self._i2c.writeto_mem(_BOT035_ADDRESS, _BOT035_MS, bytes([keys & 0x0F, move[0] & 0xFF, move[1] & 0xFF, wheel & 0xFF]))
|
||||
if release:
|
||||
time.sleep_ms(10)
|
||||
self._i2c.writeto_mem(_BOT035_ADDRESS, _BOT035_MS, bytes(4))
|
||||
else:
|
||||
print("Warning: Please upgrade the coprocessor firmware to use this feature")
|
||||
|
||||
def mic_pga(self, value=None):
|
||||
'''0:4x, 1:8x, 2:16x, 3:32x, 4:OFF'''
|
||||
if value is None:
|
||||
return self._rreg(_BOT035_FLAG) >> 4
|
||||
else:
|
||||
self._wreg(_BOT035_FLAG, (self._rreg(_BOT035_FLAG) & 0x0F) | (value & 0x03) << 4)
|
||||
|
||||
def pcm_en(self, power=None):
|
||||
if self._version >= 3:
|
||||
if power is None:
|
||||
return bool(self._rreg(_BOT035_STA) & 0x08)
|
||||
else:
|
||||
self._wreg(_BOT035_STA, (self._rreg(_BOT035_STA) & 0xF7) | (power & 0x01) << 3)
|
||||
else:
|
||||
raise OSError("This feature is only supported on version 2.0 ~")
|
||||
|
||||
def pcm_any(self):
|
||||
return bool(self._rreg(_BOT035_STA) & 0x80)
|
||||
|
||||
def pcm_read(self, ibuf=1600):
|
||||
return self._rreg(_BOT035_PCM, ibuf)
|
||||
|
||||
def pcm_record(self, path='mixly.wav', seconds=5, ibuf=1600, timeout=2000):
|
||||
self.pcm_en(True)
|
||||
_star = time.ticks_ms()
|
||||
_size = int(ibuf * seconds * 10)
|
||||
_header = b'RIFF' + (36 + _size).to_bytes(4, 'little') + b'WAVEfmt \x10\x00\x00\x00\x01\x00\x01\x00' + (ibuf * 5).to_bytes(4, 'little') + (ibuf * 10).to_bytes(4, 'little') + b'\x02\x00\x10\x00data' + _size.to_bytes(4, 'little')
|
||||
with open(path, 'wb') as f:
|
||||
f.write(_header)
|
||||
while _size > 0:
|
||||
if self.pcm_any():
|
||||
f.write(self.pcm_read(ibuf))
|
||||
_size -= ibuf
|
||||
_star = time.ticks_ms()
|
||||
if time.ticks_diff(time.ticks_ms(), _star) > timeout:
|
||||
raise OSError("Timeout write error")
|
||||
self.pcm_en(False)
|
||||
|
||||
"""Graph module"""
|
||||
HEART =b'\x00\x0c\x1e?~\xfc~?\x1e\x0c\x00\x00'
|
||||
HEART_SMALL =b'\x00\x00\x0c\x1e<x<\x1e\x0c\x00\x00\x00'
|
||||
HAPPY =b'\x00\x06\x06\x10 @@ \x10\x06\x06\x00'
|
||||
SAD =b'\x04\x02\x02B \x10\x10 B\x02\x02\x04'
|
||||
SMILE =b'\x04\x02\x02$@\x80\x80@$\x02\x02\x04'
|
||||
ANGRY =b'\x01\x02\x84B!\x10\x10!B\x84\x02\x01'
|
||||
NO =b'\x00\x00\x00B$\x18\x18$B\x00\x00\x00'
|
||||
YES =b'\x00\x00\x10 @@ \x10\x08\x04\x02\x00'
|
||||
DOOR_OPEN =b'\x00\x00\xfe\xfd\x01\x01\x01\x01\x01\xfe\x00\x00'
|
||||
DOOR_OPENING =b'\x00\x00\xfe\x03\x03\x15\xf9\x01\x01\xfe\x00\x00'
|
||||
DOOR_CLOSE =b'\x00\x00\xfe\x03\x03\x03\x13\x13\xff\xfe\x00\x00'
|
||||
@@ -0,0 +1,239 @@
|
||||
"""
|
||||
ME GO -Onboard resources
|
||||
|
||||
MicroPython library for the ME GO (Smart Car base for MixGo Mini)
|
||||
=======================================================
|
||||
@dahanzimin From the Mixly Team
|
||||
"""
|
||||
import time, gc, math
|
||||
from tm1931 import TM1931
|
||||
from machine import Pin, SoftI2C, ADC
|
||||
|
||||
'''i2c-onboard'''
|
||||
onboard_i2c = SoftI2C(scl=Pin(10), sda=Pin(18), freq=400000)
|
||||
onboard_i2c_scan = onboard_i2c.scan()
|
||||
|
||||
'''Version judgment'''
|
||||
if 0x50 in onboard_i2c_scan:
|
||||
version = 1
|
||||
else:
|
||||
version = 0
|
||||
|
||||
'''Judging the type of external motor'''
|
||||
Mi2c = 0
|
||||
for addr in onboard_i2c_scan:
|
||||
if addr in [0x30, 0x31, 0x32, 0x33]:
|
||||
Mi2c = addr
|
||||
break
|
||||
|
||||
'''i2c-motor'''
|
||||
def i2c_motor(speed):
|
||||
i2c.writeto(Mi2c, b'\x00\x00' + speed.to_bytes(1, 'little') + b'\x00')
|
||||
|
||||
'''TM1931-Expand'''
|
||||
class CAR(TM1931):
|
||||
'''Infrared line patrol obstacle avoidance mode'''
|
||||
CL=0 #Turn off infrared to reduce power consumption
|
||||
OA=1 #Obstacle avoidance mode only
|
||||
LP=2 #Line patrol mode only
|
||||
LS=3 #Light seeking mode only
|
||||
AS=4 #Automatic mode switching
|
||||
|
||||
'''TM1931 port corresponding function definition'''
|
||||
OAOU=5 #obstacle avoidance
|
||||
LPOU=4 #Line patrol control
|
||||
LSOU=3 #Light control
|
||||
WLED=12 #Headlamp port
|
||||
GLED=(17,8,6,15) #Green LED port
|
||||
RLED=(16,7,9,18) #Red LED port
|
||||
UCOU=(1,2) #Typec external port
|
||||
MOTO=((13,14),(10,11),(1,2)) #Motor port
|
||||
|
||||
def __init__(self, i2c_bus):
|
||||
super().__init__(i2c_bus)
|
||||
self._mode = self.CL
|
||||
self.atten = 0.82 if version else 1
|
||||
self.adc0 = ADC(Pin(3), atten=ADC.ATTN_11DB)
|
||||
self.adc1 = ADC(Pin(4), atten=ADC.ATTN_11DB)
|
||||
self.adc2 = ADC(Pin(1), atten=ADC.ATTN_11DB)
|
||||
self.adc3 = ADC(Pin(2), atten=ADC.ATTN_11DB)
|
||||
|
||||
def ir_mode(self,select=0):
|
||||
'''Infrared line patrol obstacle avoidance mode'''
|
||||
self._mode=select
|
||||
if select==self.CL:
|
||||
self.pwm(self.OAOU,0)
|
||||
self.pwm(self.LPOU,0)
|
||||
self.pwm(self.LSOU,0)
|
||||
if select==self.OA:
|
||||
self.pwm(self.OAOU,255)
|
||||
self.pwm(self.LPOU,0)
|
||||
self.pwm(self.LSOU,0)
|
||||
if select==self.LP:
|
||||
self.pwm(self.OAOU,0)
|
||||
self.pwm(self.LPOU,255)
|
||||
self.pwm(self.LSOU,0)
|
||||
if select==self.LS:
|
||||
self.pwm(self.OAOU,0)
|
||||
self.pwm(self.LPOU,0)
|
||||
self.pwm(self.LSOU,255)
|
||||
time.sleep_ms(2)
|
||||
|
||||
def obstacle(self):
|
||||
'''Read the obstacle avoidance sensor'''
|
||||
if self._mode==self.AS:
|
||||
self.pwm(self.OAOU,255)
|
||||
self.pwm(self.LPOU,0)
|
||||
self.pwm(self.LSOU,0)
|
||||
time.sleep_ms(2)
|
||||
if self._mode==self.OA or self._mode==self.AS :
|
||||
return self.adc2.read_u16(),self.adc1.read_u16(),self.adc0.read_u16(),self.adc3.read_u16()
|
||||
else:
|
||||
raise ValueError('Mode selection error, obstacle avoidance data cannot be read')
|
||||
|
||||
def patrol(self):
|
||||
'''Read the line patrol sensor'''
|
||||
if self._mode==self.AS:
|
||||
self.pwm(self.OAOU,0)
|
||||
self.pwm(self.LPOU,255)
|
||||
self.pwm(self.LSOU,0)
|
||||
time.sleep_ms(2)
|
||||
if self._mode==self.LP or self._mode==self.AS:
|
||||
return self.adc3.read_u16(),self.adc2.read_u16(),self.adc1.read_u16(),self.adc0.read_u16()
|
||||
else:
|
||||
raise ValueError('Mode selection error, line patrol data cannot be read')
|
||||
|
||||
def light(self):
|
||||
'''Read the light seeking sensor'''
|
||||
if self._mode==self.AS:
|
||||
self.pwm(self.OAOU,0)
|
||||
self.pwm(self.LPOU,0)
|
||||
self.pwm(self.LSOU,255)
|
||||
time.sleep_ms(2)
|
||||
if self._mode==self.LS or self._mode==self.AS:
|
||||
return self.adc3.read_u16(),self.adc2.read_u16(),self.adc1.read_u16(),self.adc0.read_u16()
|
||||
else:
|
||||
raise ValueError('Mode selection error, light seeking data cannot be read')
|
||||
|
||||
def motor(self, index, action, speed=0):
|
||||
speed = round(max(min(speed, 100), -100) * self.atten)
|
||||
if action=="N":
|
||||
if (index == [1, 2]) and Mi2c:
|
||||
i2c_motor(0)
|
||||
else:
|
||||
self.pwm(index[0], 255)
|
||||
self.pwm(index[1], 255)
|
||||
elif action=="P":
|
||||
if (index == [1, 2]) and Mi2c:
|
||||
i2c_motor(0)
|
||||
else:
|
||||
self.pwm(index[0], 0)
|
||||
self.pwm(index[1], 0)
|
||||
elif action=="CW":
|
||||
if (index == [1, 2]) and Mi2c:
|
||||
i2c_motor(speed)
|
||||
else:
|
||||
if speed >= 0:
|
||||
self.pwm(index[0], speed * 255 // 100)
|
||||
self.pwm(index[1], 0)
|
||||
else:
|
||||
self.pwm(index[0], 0)
|
||||
self.pwm(index[1], - speed * 255 // 100)
|
||||
elif action=="CCW":
|
||||
if (index == [1, 2]) and Mi2c:
|
||||
i2c_motor(- speed)
|
||||
else:
|
||||
if speed >= 0:
|
||||
self.pwm(index[0], 0)
|
||||
self.pwm(index[1], speed * 255 // 100)
|
||||
else:
|
||||
self.pwm(index[0], - speed * 255 // 100)
|
||||
self.pwm(index[1], 0)
|
||||
|
||||
def move(self,action,speed=100):
|
||||
if action=="N":
|
||||
self.motor(self.MOTO[0],"N")
|
||||
self.motor(self.MOTO[1],"N")
|
||||
elif action=="P":
|
||||
self.motor(self.MOTO[0],"P")
|
||||
self.motor(self.MOTO[1],"P")
|
||||
elif action=="F":
|
||||
self.motor(self.MOTO[0],"CCW",speed)
|
||||
self.motor(self.MOTO[1],"CW",speed)
|
||||
elif action=="B":
|
||||
self.motor(self.MOTO[0],"CW",speed)
|
||||
self.motor(self.MOTO[1],"CCW",speed)
|
||||
elif action=="L":
|
||||
self.motor(self.MOTO[0],"CW",speed)
|
||||
self.motor(self.MOTO[1],"CW",speed)
|
||||
elif action=="R":
|
||||
self.motor(self.MOTO[0],"CCW",speed)
|
||||
self.motor(self.MOTO[1],"CCW",speed)
|
||||
|
||||
def setbrightness(self,index,val):
|
||||
self.pwm(index, max(min(val, 100), 0))
|
||||
|
||||
def getrightness(self,index):
|
||||
return self.duty(index)
|
||||
|
||||
def setonoff(self,index,val):
|
||||
if val == -1:
|
||||
if self.getrightness(index) < 50:
|
||||
self.setbrightness(index,100)
|
||||
else:
|
||||
self.setbrightness(index,0)
|
||||
elif val == 1:
|
||||
self.setbrightness(index,100)
|
||||
elif val == 0:
|
||||
self.setbrightness(index,0)
|
||||
|
||||
def getonoff(self,index):
|
||||
return True if self.getrightness(index)>0 else False
|
||||
|
||||
try :
|
||||
car=CAR(onboard_i2c) #Including LED,motor,patrol,obstacle
|
||||
except Exception as e:
|
||||
print("Warning: Failed to communicate with TM1931 (ME GO CAR) or", e)
|
||||
|
||||
'''2Hall_HEP'''
|
||||
class HALL:
|
||||
|
||||
_pulse_turns=1/480 if version else 1/400 #圈数= 1/(减速比*磁极)
|
||||
_pulse_distance=_pulse_turns*math.pi*4.4 #距离= 圈数*π*轮胎直径
|
||||
|
||||
def __init__(self, pin):
|
||||
self.turns = 0
|
||||
self.distance = 0 #cm
|
||||
self._speed = 0 #cm/s
|
||||
self._on_receive = None
|
||||
self._time = time.ticks_ms()
|
||||
Pin(pin, Pin.IN).irq(handler=self._receive_cb, trigger = (Pin.IRQ_RISING | Pin.IRQ_FALLING))
|
||||
|
||||
def _receive_cb(self, event_source):
|
||||
self.turns += self._pulse_turns
|
||||
self.distance += self._pulse_distance
|
||||
self._speed += self._pulse_distance
|
||||
if self._on_receive:
|
||||
self._on_receive(round(self.turns,2),round(self.distance,2))
|
||||
|
||||
def irq_cb(self, callback):
|
||||
self._on_receive = callback
|
||||
|
||||
def initial(self,turns=None,distance=None):
|
||||
if turns is not None:
|
||||
self.turns = turns
|
||||
if distance is not None:
|
||||
self.distance = distance
|
||||
|
||||
@property
|
||||
def speed(self):
|
||||
value=self._speed/time.ticks_diff(time.ticks_ms(), self._time)*1000 if self._speed>0 else 0
|
||||
self._time = time.ticks_ms()
|
||||
self._speed=0
|
||||
return round(value, 2)
|
||||
|
||||
hall_A = HALL(5)
|
||||
hall_B = HALL(6)
|
||||
|
||||
'''Reclaim memory'''
|
||||
gc.collect()
|
||||
@@ -0,0 +1,31 @@
|
||||
"""
|
||||
MINI GX -MixGo MINI EXT (G2, G5)
|
||||
|
||||
MicroPython library for the MINI GX (Expansion board for MixGo MINI)
|
||||
=======================================================
|
||||
@dahanzimin From the Mixly Team
|
||||
"""
|
||||
|
||||
import gc
|
||||
from machine import Pin, SoftI2C
|
||||
|
||||
'''i2c-extboard'''
|
||||
ext_i2c = SoftI2C(scl=Pin(7), sda=Pin(8), freq=400000)
|
||||
|
||||
'''RFID_Sensor'''
|
||||
try :
|
||||
import rc522
|
||||
ext_rfid = rc522.RC522(ext_i2c)
|
||||
except Exception as e:
|
||||
print("Warning: Failed to communicate with SI522A (RFID) or",e)
|
||||
|
||||
'''ASR_Sensor(G5)'''
|
||||
try :
|
||||
import ci130x
|
||||
ext_asr = ci130x.CI130X(ext_i2c)
|
||||
except Exception as e:
|
||||
#print("Warning: Failed to communicate with CI130X (ASR) or",e)
|
||||
pass
|
||||
|
||||
'''Reclaim memory'''
|
||||
gc.collect()
|
||||
@@ -0,0 +1,284 @@
|
||||
"""
|
||||
MINI_XUNFEI
|
||||
|
||||
Micropython library for the MINI_XUNFEI(ASR, LLM)
|
||||
=======================================================
|
||||
@dahanzimin From the Mixly Team
|
||||
|
||||
"""
|
||||
import time
|
||||
import hmac
|
||||
import json
|
||||
import hashlib
|
||||
import rtctime
|
||||
import websocket
|
||||
from mixgo_mini import onboard_bot
|
||||
from base64 import b64decode, b64encode
|
||||
from urllib import urlencode, urlparse
|
||||
|
||||
class Ws_Param:
|
||||
def __init__(self, APPID, APIKey, APISecret, Spark_url):
|
||||
self.APPID = APPID
|
||||
self.APIKey = APIKey
|
||||
self.APISecret = APISecret
|
||||
self.url = Spark_url
|
||||
self.urlparse = urlparse(Spark_url)
|
||||
|
||||
def create_url(self):
|
||||
date = rtctime.rfc1123_time()
|
||||
signature_origin = "host: " + self.urlparse.netloc + "\n"
|
||||
signature_origin += "date: " + date + "\n"
|
||||
signature_origin += "GET " + self.urlparse.path + " HTTP/1.1"
|
||||
signature_sha = hmac.new(self.APISecret.encode('utf-8'), signature_origin.encode('utf-8'), digestmod=hashlib.sha256).digest()
|
||||
signature_base64 = b64encode(signature_sha).decode('utf-8')
|
||||
authorization_origin = ('api_key="{}", algorithm="hmac-sha256", headers="host date request-line", signature="{}"'.format(self.APIKey, signature_base64))
|
||||
authorization = b64encode(authorization_origin.encode('utf-8')).decode('utf-8')
|
||||
headers = {"authorization": authorization, "date": date, "host": self.urlparse.netloc}
|
||||
return self.url + '?' + urlencode(headers)
|
||||
|
||||
#语音听写
|
||||
class ASR_WebSocket(Ws_Param):
|
||||
def __init__(self, APPID, APIKey, APISecret, url='ws://iat-api.xfyun.cn/v2/iat'):
|
||||
super().__init__(APPID, APIKey, APISecret, url)
|
||||
self.ws = None
|
||||
self.business = {
|
||||
"domain": "iat",
|
||||
"language": "zh_cn",
|
||||
"accent": "mandarin",
|
||||
"vad_eos": 1000,
|
||||
"nbest": 1,
|
||||
"wbest": 1,
|
||||
}
|
||||
|
||||
def connect(self):
|
||||
self.ws = websocket.connect(self.create_url())
|
||||
self.ws.settimeout(1000)
|
||||
|
||||
def _frame(self, status, buf):
|
||||
if status == 0:
|
||||
return {"common": {"app_id": self.APPID}, "business": self.business, "data": {"status": status, "format": "audio/L16;rate=8000", "audio": str(b64encode(buf), 'utf-8'), "encoding": "raw"}}
|
||||
else:
|
||||
return {"data": {"status": status, "format": "audio/L16;rate=8000", "audio": str(b64encode(buf), 'utf-8'), "encoding": "raw"}}
|
||||
|
||||
def on_message(self, message):
|
||||
result = ""
|
||||
msg = json.loads(message)
|
||||
code = msg["code"]
|
||||
if code != 0:
|
||||
raise AttributeError("%s Code:%s" % (msg["message"], code))
|
||||
else:
|
||||
data = msg["data"]["result"]["ws"]
|
||||
for i in data:
|
||||
for w in i["cw"]:
|
||||
result += w["w"]
|
||||
if msg["data"]["status"]== 2:
|
||||
return result, False
|
||||
return result, True
|
||||
|
||||
def receive_messages(self):
|
||||
msg = ""
|
||||
while True:
|
||||
t = self.on_message(self.ws.recv())
|
||||
msg += t[0]
|
||||
if not t[1]:
|
||||
break
|
||||
return msg
|
||||
|
||||
def run(self, seconds=3, pace=True, ibuf=1600, timeout=2000):
|
||||
try:
|
||||
_state = 0
|
||||
self.connect()
|
||||
_star = time.ticks_ms()
|
||||
_size = int(ibuf * seconds * 10) #100ms/次
|
||||
onboard_bot.pcm_en(True) #PCM开启
|
||||
if pace: print('[',end ="")
|
||||
while _size > 0:
|
||||
if onboard_bot.pcm_any():
|
||||
_size -= ibuf
|
||||
_star = time.ticks_ms()
|
||||
buf = onboard_bot.pcm_read(ibuf)
|
||||
if pace: print('=',end ="")
|
||||
# 第一帧处理
|
||||
if _state == 0:
|
||||
d = self._frame(_state, buf)
|
||||
_state = 1
|
||||
# 中间帧处理
|
||||
else:
|
||||
d = self._frame(_state, buf)
|
||||
self.ws.send(json.dumps(d))
|
||||
if time.ticks_diff(time.ticks_ms(), _star) > timeout:
|
||||
raise OSError("Timeout pcm read error")
|
||||
# 最后一帧处理
|
||||
d = self._frame(2, b'\x00')
|
||||
self.ws.send(json.dumps(d))
|
||||
onboard_bot.pcm_en(False) #PCM关闭
|
||||
if pace: print(']')
|
||||
msg = self.receive_messages()
|
||||
self.ws.close()
|
||||
return msg
|
||||
except Exception as e:
|
||||
onboard_bot.pcm_en(False) #PCM关闭
|
||||
if "403 Forbidden" in str(e):
|
||||
raise OSError("Access denied, Please try updating clock time")
|
||||
else:
|
||||
print("Run error: %s" % (e))
|
||||
|
||||
#中英识别大模型
|
||||
class IAT_WebSocket(ASR_WebSocket):
|
||||
def __init__(self, APPID, APIKey, APISecret, url='ws://iat.xf-yun.com/v1', accent="mandarin", res_id=None):
|
||||
super().__init__(APPID, APIKey, APISecret, url)
|
||||
self.res_id = res_id
|
||||
self.business = {
|
||||
"domain": "slm",
|
||||
"language": "zh_cn",
|
||||
"accent": accent,
|
||||
"result": {
|
||||
"encoding": "utf8",
|
||||
"compress": "raw",
|
||||
"format": "plain"
|
||||
}
|
||||
}
|
||||
|
||||
def _frame(self, status, buf):
|
||||
if status == 0:
|
||||
return {"header": {"status": status, "app_id": self.APPID, "res_id": self.res_id}, "parameter": {"iat": self.business}, "payload": {"audio": { "audio": str(b64encode(buf), 'utf-8'), "sample_rate": 8000, "encoding": "raw"}}}
|
||||
else:
|
||||
return {"header": {"status": status, "app_id": self.APPID, "res_id": self.res_id}, "payload": {"audio": { "audio": str(b64encode(buf), 'utf-8'), "sample_rate": 8000, "encoding": "raw"}}}
|
||||
|
||||
def on_message(self, message):
|
||||
result = ""
|
||||
msg = json.loads(message)
|
||||
code = msg['header']["code"]
|
||||
if code != 0:
|
||||
raise AttributeError("%s Code:%s" % (msg['header']["message"], code))
|
||||
else:
|
||||
if "payload" in msg:
|
||||
text = msg["payload"]["result"]["text"]
|
||||
data = json.loads(b64decode(text).decode())['ws']
|
||||
for i in data:
|
||||
for w in i["cw"]:
|
||||
result += w["w"]
|
||||
if msg["header"]["status"]== 2:
|
||||
return result, False
|
||||
return result, True
|
||||
|
||||
#大模型
|
||||
class LLM_WebSocket(Ws_Param):
|
||||
Model_url = {
|
||||
"Spark Ultra-32K": ("ws://spark-api.xf-yun.com/v4.0/chat", "4.0Ultra"),
|
||||
"Spark Max-32K": ("ws://spark-api.xf-yun.com/chat/max-32k", "max-32k"),
|
||||
"Spark Max": ("ws://spark-api.xf-yun.com/v3.5/chat", "generalv3.5"),
|
||||
"Spark Pro-128K": (" ws://spark-api.xf-yun.com/chat/pro-128k", "pro-128k"),
|
||||
"Spark Pro": ("ws://spark-api.xf-yun.com/v3.1/chat", "generalv3"),
|
||||
"Spark Lite": ("ws://spark-api.xf-yun.com/v1.1/chat", "lite"),
|
||||
"Spark kjwx": ("ws://spark-openapi-n.cn-huabei-1.xf-yun.com/v1.1/chat_kjwx", "kjwx"),
|
||||
"Spark X1-32K": ("ws://spark-api.xf-yun.com/v1/x1", "x1"),
|
||||
"Spark Customize": ("ws://sparkcube-api.xf-yun.com/v1/customize", "max"),
|
||||
}
|
||||
|
||||
def __init__(self, APPID, APIKey, APISecret, model='Spark Ultra-32K', system="你是知识渊博的助理,习惯简短表达", answers=50):
|
||||
self.ws = None
|
||||
self.answers = answers
|
||||
self._url = self.Model_url[model] if model in self.Model_url else model
|
||||
super().__init__(APPID, APIKey, APISecret, self._url[0])
|
||||
self._function = [{}, []] #[回调函数, 功能描述]
|
||||
self._messages = [{"role": "system", "content": system}]
|
||||
|
||||
def connect(self):
|
||||
self.ws = websocket.connect(self.create_url())
|
||||
self.ws.settimeout(1000)
|
||||
|
||||
def _params(self):
|
||||
d = {
|
||||
"header": {"app_id": self.APPID},
|
||||
"parameter": {
|
||||
"chat": {
|
||||
"domain": self._url[1],
|
||||
"random_threshold": 0.5,
|
||||
"max_tokens": 2048,
|
||||
"auditing": "default"
|
||||
}
|
||||
},
|
||||
"payload": {
|
||||
"message": {
|
||||
"text": self._messages
|
||||
}
|
||||
}
|
||||
}
|
||||
if self._function[1]:
|
||||
d["payload"]["functions"] = {"text": self._function[1]}
|
||||
self.ws.send(json.dumps(d))
|
||||
|
||||
def function_call(self, callback, name, description, params):
|
||||
"""功能回调名称, 描述, ((参数名, 类型, 描述), ...)"""
|
||||
properties = {"type": "object", "properties":{}, "required":[]}
|
||||
for arg in params:
|
||||
if len(arg) >= 3:
|
||||
properties["properties"][arg[0]] = {"type": arg[1], "description": arg[2]}
|
||||
if arg[0] not in properties["required"]:
|
||||
properties["required"].append(arg[0])
|
||||
else:
|
||||
raise AttributeError('Invalid Input , format is (name, type, description)')
|
||||
self._function[0][name] = callback
|
||||
self._function[1].append({"name": name, "description": description, "parameters": properties})
|
||||
|
||||
def empty_history(self):
|
||||
self._messages = []
|
||||
|
||||
def add_history(self, role, content):
|
||||
self._messages.append({
|
||||
"role": role,
|
||||
"content": content
|
||||
})
|
||||
|
||||
def on_message(self, message, reas):
|
||||
result = ""
|
||||
msg = json.loads(message)
|
||||
code = msg['header']['code']
|
||||
if code != 0:
|
||||
raise AttributeError("%s Code:%s" % (msg["header"]["message"], code))
|
||||
else:
|
||||
choices = msg["payload"]["choices"]
|
||||
text = choices["text"][0]
|
||||
#推理
|
||||
if "reasoning_content" in text and reas:
|
||||
print("reasoning: ", text["reasoning_content"])
|
||||
#回调
|
||||
if "tool_calls" in text:
|
||||
function = text['tool_calls'][0]['function']
|
||||
if str(function['name']) in self._function[0] and function['arguments']:
|
||||
self._function[0][function['name']](json.loads(function['arguments']))
|
||||
if "function_call" in text:
|
||||
if str(text['function_call']['name']) in self._function[0] and text['function_call']['arguments']:
|
||||
self._function[0][text['function_call']['name']](json.loads(text['function_call']['arguments']))
|
||||
#答复
|
||||
if "content" in text:
|
||||
result += text["content"]
|
||||
if choices["status"] == 2:
|
||||
return result, False
|
||||
return result, True
|
||||
|
||||
def receive_messages(self, reas):
|
||||
msg = ""
|
||||
while True:
|
||||
t = self.on_message(self.ws.recv(), reas)
|
||||
msg += t[0]
|
||||
if not t[1]:
|
||||
break
|
||||
return msg
|
||||
|
||||
def run(self, question, reas=True):
|
||||
try:
|
||||
self.connect()
|
||||
self.add_history("user", question)
|
||||
self._params()
|
||||
while self.answers < len(self._messages):
|
||||
del self._messages[0]
|
||||
msg = self.receive_messages(reas)
|
||||
self.ws.close()
|
||||
return msg
|
||||
except Exception as e:
|
||||
if "403 Forbidden" in str(e):
|
||||
raise OSError("Access denied, Please try updating clock time")
|
||||
else:
|
||||
print("Run error: %s" % (e))
|
||||
@@ -0,0 +1,180 @@
|
||||
"""
|
||||
mixgo_mini onboard resources
|
||||
|
||||
Micropython library for the mixgo_mini onboard resources
|
||||
=======================================================
|
||||
@dahanzimin From the Mixly Team
|
||||
"""
|
||||
import time, gc
|
||||
from esp32 import mcu_temperature
|
||||
from machine import Pin, ADC, RTC, SoftI2C
|
||||
|
||||
'''Reclaim memory'''
|
||||
gc.collect()
|
||||
|
||||
'''RTC'''
|
||||
rtc_clock = RTC()
|
||||
|
||||
'''I2C-onboard'''
|
||||
onboard_i2c = SoftI2C(scl=Pin(10), sda=Pin(18), freq=400000)
|
||||
#onboard_i2c_scan = onboard_i2c.scan()
|
||||
|
||||
'''ACC-Sensor'''
|
||||
try :
|
||||
import sc7a20
|
||||
onboard_acc = sc7a20.SC7A20(onboard_i2c)
|
||||
except Exception as e:
|
||||
print("Warning: Failed to communicate with SC7A20H (ACC) or",e)
|
||||
|
||||
'''ALS_PS-Sensor'''
|
||||
try :
|
||||
import ap3216c
|
||||
onboard_als = ap3216c.AP3216C(onboard_i2c)
|
||||
except Exception as e:
|
||||
print("Warning: Failed to communicate with AP3216C (ALS&PS) or",e)
|
||||
|
||||
'''BOT035-Sensor'''
|
||||
try :
|
||||
import mini_bot
|
||||
onboard_bot = mini_bot.BOT035(onboard_i2c)
|
||||
onboard_matrix = onboard_bot
|
||||
except Exception as e:
|
||||
print("Warning: Failed to communicate with BOT035 (Coprocessor) or",e)
|
||||
|
||||
'''BPS-Sensor'''
|
||||
# if 0x77 in onboard_i2c_scan:
|
||||
# try :
|
||||
# import spl06_001
|
||||
# onboard_bps = spl06_001.SPL06(onboard_i2c)
|
||||
# except Exception as e:
|
||||
# print("Warning: Failed to communicate with SPL06-001 (BPS) or",e)
|
||||
|
||||
'''THS-Sensor'''
|
||||
# if 0x70 in onboard_i2c_scan:
|
||||
# try :
|
||||
# import shtc3
|
||||
# onboard_ths = shtc3.SHTC3(onboard_i2c)
|
||||
# except Exception as e:
|
||||
# print("Warning: Failed to communicate with GXHTC3 (THS) or",e)
|
||||
|
||||
'''MGS-Sensor'''
|
||||
# if 0x30 in onboard_i2c_scan:
|
||||
# try :
|
||||
# import mmc5603
|
||||
# onboard_mgs = mmc5603.MMC5603(onboard_i2c)
|
||||
# except Exception as e:
|
||||
# print("Warning: Failed to communicate with MMC5603 (MGS) or",e)
|
||||
|
||||
'''MCU_temperature'''
|
||||
def onboard_temperature():
|
||||
return mcu_temperature()
|
||||
|
||||
'''1Buzzer-Music'''
|
||||
from musicx import MIDI
|
||||
onboard_music = MIDI(onboard_bot)
|
||||
|
||||
'''5KEY_Sensor'''
|
||||
class KEYSensor:
|
||||
def __init__(self, pin, range):
|
||||
self.pin = pin
|
||||
self.adc = ADC(Pin(pin), atten=ADC.ATTN_0DB)
|
||||
self.range = range
|
||||
self.flag = True
|
||||
|
||||
def _value(self):
|
||||
values = []
|
||||
for _ in range(50):
|
||||
values.append(self.adc.read())
|
||||
time.sleep_us(2)
|
||||
return (self.range-200) < min(values) < (self.range+200)
|
||||
|
||||
def get_presses(self, delay=1):
|
||||
last_time,presses = time.time(), 0
|
||||
while time.time() < last_time + delay:
|
||||
time.sleep_ms(50)
|
||||
if self.was_pressed():
|
||||
presses += 1
|
||||
return presses
|
||||
|
||||
def is_pressed(self):
|
||||
return self._value()
|
||||
|
||||
def was_pressed(self):
|
||||
if(self._value() != self.flag):
|
||||
self.flag = self._value()
|
||||
if self.flag :
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
def irq(self, handler, trigger):
|
||||
self.handler = handler
|
||||
self.trigger = trigger
|
||||
Pin(self.pin, Pin.IN).irq(handler=handler, trigger=trigger)
|
||||
|
||||
def irq_en(self, enable):
|
||||
if self.handler is not None and self.trigger is not None:
|
||||
Pin(self.pin, Pin.IN).irq(handler=None if enable else self.handler, trigger=self.trigger)
|
||||
|
||||
'''1KEY_Button'''
|
||||
class Button(KEYSensor):
|
||||
def __init__(self, pin):
|
||||
self.pin = pin
|
||||
self.key = Pin(pin, Pin.IN)
|
||||
self.flag = True
|
||||
self.handler = None
|
||||
self.trigger = None
|
||||
|
||||
def _value(self):
|
||||
return not self.key.value()
|
||||
|
||||
B1key = Button(9)
|
||||
B2key = KEYSensor(0, 0)
|
||||
A1key = KEYSensor(0, 2100)
|
||||
A2key = KEYSensor(0, 1500)
|
||||
A3key = KEYSensor(0, 800)
|
||||
A4key = KEYSensor(0, 2700)
|
||||
|
||||
'''2RGB_WS2812 #Public IO'''
|
||||
from ws2812x import NeoPixel
|
||||
onboard_rgb = NeoPixel(B1key.key, 2, func=B1key.irq_en)
|
||||
|
||||
'''2LED-Multiplex RGB'''
|
||||
class LED:
|
||||
def __init__(self, rgb, num=2, color=7):
|
||||
self._rgb = rgb
|
||||
self._col = [color] * num
|
||||
self._color = ((0, 0, 0), (1, 0, 0), (0, 1, 0), (0, 0, 1), (1, 1, 0), (0, 1, 1), (1, 0, 1), (1, 1, 1))
|
||||
|
||||
def setbrightness(self, index, value):
|
||||
self._rgb[index - 1] = (value if self._color[self._col[index-1]][0] else 0,
|
||||
value if self._color[self._col[index-1]][1] else 0,
|
||||
value if self._color[self._col[index-1]][2] else 0)
|
||||
self._rgb.write()
|
||||
|
||||
def getbrightness(self, index):
|
||||
color = self._rgb[index - 1]
|
||||
return color[0] | color[1] | color[2]
|
||||
|
||||
def setonoff(self, index, value):
|
||||
if value == -1:
|
||||
if self.getbrightness(index) < 50:
|
||||
self.setbrightness(index, 100)
|
||||
else:
|
||||
self.setbrightness(index, 0)
|
||||
elif value == 1:
|
||||
self.setbrightness(index, 100)
|
||||
elif value == 0:
|
||||
self.setbrightness(index, 0)
|
||||
|
||||
def getonoff(self, index):
|
||||
return True if self.getbrightness(index) >= 50 else False
|
||||
|
||||
def setcolor(self, index, color, value=50):
|
||||
self._col[index-1] = color
|
||||
self.setbrightness(index, value)
|
||||
|
||||
onboard_led = LED(onboard_rgb)
|
||||
|
||||
'''Reclaim memory'''
|
||||
gc.collect()
|
||||
@@ -0,0 +1,140 @@
|
||||
"""
|
||||
Music buzzer(BOT)
|
||||
|
||||
Micropython library for the Music buzzer(Coprocessor I2C communication)
|
||||
=======================================================
|
||||
@dahanzimin From the Mixly Team
|
||||
"""
|
||||
import _thread
|
||||
from time import sleep_ms
|
||||
|
||||
normal_tone = {
|
||||
'A1': 55, 'B1': 62, 'C1': 33, 'D1': 37, 'E1': 41, 'F1': 44, 'G1': 49,
|
||||
'A2': 110, 'B2': 123, 'C2': 65, 'D2': 73, 'E2': 82, 'F2': 87, 'G2': 98,
|
||||
'A3': 220, 'B3': 247, 'C3': 131, 'D3': 147, 'E3': 165, 'F3': 175, 'G3': 196,
|
||||
'A4': 440, 'B4': 494, 'C4': 262, 'D4': 294, 'E4': 330, 'F4': 349, 'G4': 392,
|
||||
'A5': 880, 'B5': 988, 'C5': 523, 'D5': 587, 'E5': 659, 'F5': 698, 'G5': 784,
|
||||
'A6': 1760, 'B6': 1976, 'C6': 1047, 'D6': 1175, 'E6': 1319, 'F6': 1397, 'G6': 1568,
|
||||
'A7': 3520, 'B7': 3951, 'C7': 2093, 'D7': 2349, 'E7': 2637, 'F7': 2794, 'G7': 3135,
|
||||
'A8': 7040, 'B8': 7902, 'C8': 4186, 'D8': 4699, 'E8': 5274, 'F8': 5588, 'G8': 6271,
|
||||
'A9': 14080, 'B9': 15804 }
|
||||
|
||||
Letter = 'ABCDEFG#R'
|
||||
|
||||
class MIDI():
|
||||
def __init__(self, bus, volume=100):
|
||||
self.reset()
|
||||
self._bus = bus
|
||||
self._play = False
|
||||
self._over = True
|
||||
self._volume = volume // 5
|
||||
|
||||
def set_volume(self, volume):
|
||||
self._volume = max(min(volume, 100), 0) // 5
|
||||
|
||||
def set_tempo(self, ticks=4, bpm=120):
|
||||
self.ticks = ticks
|
||||
self.bpm = bpm
|
||||
self.beat = 60000 / self.bpm / self.ticks
|
||||
|
||||
def set_octave(self, octave=4):
|
||||
self.octave = octave
|
||||
|
||||
def set_duration(self, duration=4):
|
||||
self.duration = duration
|
||||
|
||||
def get_tempo(self):
|
||||
return (self.ticks, self.bpm)
|
||||
|
||||
def get_octave(self):
|
||||
return self.octave
|
||||
|
||||
def get_duration(self):
|
||||
return self.duration
|
||||
|
||||
def reset(self):
|
||||
self.set_duration()
|
||||
self.set_octave()
|
||||
self.set_tempo()
|
||||
|
||||
def parse(self, tone, dict):
|
||||
time = self.beat * self.duration
|
||||
pos = tone.find(':')
|
||||
if pos != -1:
|
||||
time = self.beat * int(tone[(pos + 1):])
|
||||
tone = tone[:pos]
|
||||
freq, tone_size = 1, len(tone)
|
||||
if 'R' in tone:
|
||||
freq = 400000
|
||||
elif tone_size == 1:
|
||||
freq = dict[tone[0] + str(self.octave)]
|
||||
elif tone_size == 2:
|
||||
freq = dict[tone]
|
||||
self.set_octave(tone[1:])
|
||||
return int(freq), int(time)
|
||||
|
||||
def midi(self, tone):
|
||||
pos = tone.find('#')
|
||||
if pos != -1:
|
||||
return self.parse(tone.replace('#', ''), normal_tone)
|
||||
pos = tone.find('B')
|
||||
if pos != -1 and pos != 0:
|
||||
return self.parse(tone.replace('B', ''), normal_tone)
|
||||
return self.parse(tone, normal_tone)
|
||||
|
||||
def set_default(self, tone):
|
||||
pos = tone.find(':')
|
||||
if pos != -1:
|
||||
self.set_duration(int(tone[(pos + 1):]))
|
||||
tone = tone[:pos]
|
||||
|
||||
def play(self, tune, duration=None):
|
||||
self._play = True
|
||||
self._over = False
|
||||
if duration is None:
|
||||
self.set_default(tune[0])
|
||||
else:
|
||||
self.set_duration(duration)
|
||||
for tone in tune:
|
||||
tone = tone.upper()
|
||||
if not self._play:
|
||||
break
|
||||
if tone[0] not in Letter:
|
||||
continue
|
||||
midi = self.midi(tone)
|
||||
self._bus.buzzer(self._volume, midi[0])
|
||||
sleep_ms(midi[1])
|
||||
self._bus.buzzer(0)
|
||||
sleep_ms(1)
|
||||
sleep_ms(10)
|
||||
self._over = True
|
||||
|
||||
def play_thread(self, tune, duration=None):
|
||||
self._play = False
|
||||
while not self._over:
|
||||
pass
|
||||
if not self._play:
|
||||
_thread.start_new_thread(self.play, (tune, duration))
|
||||
sleep_ms(50)
|
||||
|
||||
def pitch(self, freq):
|
||||
self._bus.buzzer(self._volume, int(freq))
|
||||
|
||||
def pitch_time(self, freq, delay):
|
||||
self._bus.buzzer(self._volume, int(freq))
|
||||
sleep_ms(delay)
|
||||
self._bus.buzzer(0)
|
||||
sleep_ms(10)
|
||||
|
||||
def stop(self):
|
||||
self._bus.buzzer(0)
|
||||
self._play = False
|
||||
sleep_ms(10)
|
||||
|
||||
BA_DING=('b5:1','e6:3')
|
||||
JUMP_UP=('c5:1','d','e','f','g')
|
||||
JUMP_DOWN=('g5:1','f','e','d','c')
|
||||
POWER_UP=('g4:1','c5','e4','g5:2','e5:1','g5:3')
|
||||
POWER_DOWN=('g5:1','d#','c','g4:2','b:1','c5:3')
|
||||
DADADADUM=('r4:2','g','g','g','eb:8','r:2','f','f','f','d:8')
|
||||
BIRTHDAY=('c4:4','c:1','d:4','c:4','f','e:8','c:3','c:1','d:4','c:4','g','f:8','c:3','c:1','c5:4','a4','f','e','d','a#:3','a#:1','a:4','f','g','f:8')
|
||||
@@ -0,0 +1,74 @@
|
||||
"""
|
||||
WS2812 RGB
|
||||
|
||||
Micropython library for the WS2812 NeoPixel-RGB
|
||||
=======================================================
|
||||
@dahanzimin From the Mixly Team
|
||||
"""
|
||||
from time import sleep, sleep_us
|
||||
from machine import bitstream
|
||||
|
||||
class NeoPixel:
|
||||
def __init__(self, pin, n, bpp=3, timing=1, ORDER=(1, 0, 2, 3), func=None):
|
||||
self.pin = pin
|
||||
self.bpp = bpp
|
||||
self.rgbs = n
|
||||
self.func = func
|
||||
self.ORDER = ORDER
|
||||
self.rgb_buf = bytearray(self.rgbs * bpp)
|
||||
self.timing = (((350, 850, 800, 400) if timing else (800, 1700, 1600, 900)) if isinstance(timing, int) else timing)
|
||||
self.write()
|
||||
|
||||
def __len__(self):
|
||||
return self.rgbs
|
||||
|
||||
def __setitem__(self, n, v):
|
||||
for i in range(self.bpp):
|
||||
self.rgb_buf[n * self.bpp + self.ORDER[i]] = v[i]
|
||||
|
||||
def __getitem__(self, n):
|
||||
return tuple(self.rgb_buf[n* self.bpp + self.ORDER[i]] for i in range(self.bpp))
|
||||
|
||||
def fill(self, v):
|
||||
for i in range(self.bpp):
|
||||
j = self.ORDER[i]
|
||||
while j < self.rgbs * self.bpp:
|
||||
self.rgb_buf[j] = v[i]
|
||||
j += self.bpp
|
||||
|
||||
def write(self):
|
||||
if self.func: self.func(True)
|
||||
self.pin.init(self.pin.OUT, value=0)
|
||||
bitstream(self.pin, 0, self.timing, bytes(3) + self.rgb_buf)
|
||||
sleep_us(150)
|
||||
self.pin.init(self.pin.IN)
|
||||
if self.func: self.func(False)
|
||||
|
||||
def color_chase(self,R, G, B, wait):
|
||||
for i in range(self.rgbs):
|
||||
self.__setitem__(i,(R, G, B))
|
||||
self.write()
|
||||
sleep(wait/1000)
|
||||
|
||||
def rainbow_cycle(self, wait, clear=True):
|
||||
for j in range(255):
|
||||
for i in range(self.rgbs):
|
||||
rc_index = (i * 256 // self.rgbs) + j
|
||||
self.__setitem__(i,self.wheel(rc_index & 255))
|
||||
self.write()
|
||||
sleep(wait / 1000 / 256)
|
||||
if clear:
|
||||
self.fill((0, 0, 0))
|
||||
self.write()
|
||||
|
||||
def wheel(self,pos):
|
||||
if pos < 0 or pos > 255:
|
||||
return (0, 0, 0)
|
||||
elif pos < 85:
|
||||
return (pos * 3, 255 - pos * 3, 0)
|
||||
elif pos < 170:
|
||||
pos -= 85
|
||||
return (255 - pos * 3, 0, pos * 3)
|
||||
else:
|
||||
pos -= 170
|
||||
return (0, pos * 3, 255 - pos * 3)
|
||||
203
mixly/boards/default_src/micropython_esp32c2/origin/config.json
Normal file
203
mixly/boards/default_src/micropython_esp32c2/origin/config.json
Normal file
@@ -0,0 +1,203 @@
|
||||
{
|
||||
"board": {
|
||||
"元控奋斗(MINI)": {
|
||||
"key": "micropython:esp32c2:mixgo_mini",
|
||||
"config": [
|
||||
{
|
||||
"key": "BurnSpeed",
|
||||
"label": "Burn Speed",
|
||||
"messageId": "MICROPYTHON_CONFIG_MESSAGE_BURN_SPEED",
|
||||
"options": [
|
||||
{
|
||||
"key": "921600",
|
||||
"label": "921600"
|
||||
},
|
||||
{
|
||||
"key": "460800",
|
||||
"label": "460800"
|
||||
},
|
||||
{
|
||||
"key": "230400",
|
||||
"label": "230400"
|
||||
},
|
||||
{
|
||||
"key": "115200",
|
||||
"label": "115200"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"ESP32C2 Generic(4M)": {
|
||||
"key": "micropython:esp32c2:generic_4M",
|
||||
"config": [
|
||||
{
|
||||
"key": "BurnSpeed",
|
||||
"label": "Burn Speed",
|
||||
"messageId": "MICROPYTHON_CONFIG_MESSAGE_BURN_SPEED",
|
||||
"options": [
|
||||
{
|
||||
"key": "921600",
|
||||
"label": "921600"
|
||||
},
|
||||
{
|
||||
"key": "460800",
|
||||
"label": "460800"
|
||||
},
|
||||
{
|
||||
"key": "230400",
|
||||
"label": "230400"
|
||||
},
|
||||
{
|
||||
"key": "115200",
|
||||
"label": "115200"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"language": "MicroPython",
|
||||
"burn": {
|
||||
"type": "command",
|
||||
"portSelect": "all",
|
||||
"micropython:esp32c2:mixgo_mini": {
|
||||
"command": "\"{esptool}\" --chip esp32c2 --port {com} --baud {baudrate} --after=no_reset_stub write_flash -e 0x0 \"{indexPath}/build/Mixgo_Mini_lib-v1.25.0.bin\" 0X3A0000 \"{indexPath}/../micropython/build/HZK12.bin\"",
|
||||
"special": [
|
||||
{
|
||||
"name": "Firmware For General Application",
|
||||
"command": "\"{esptool}\" --chip esp32c2 --port {com} --baud {baudrate} --after=no_reset_stub write_flash -e 0x0 \"{indexPath}/build/Mixgo_Mini_lib-v1.25.0.bin\" 0X3A0000 \"{indexPath}/../micropython/build/HZK12.bin\""
|
||||
},
|
||||
{
|
||||
"name": "Firmware Optimize For V2.x Board",
|
||||
"command": "\"{esptool}\" --chip esp32c2 --port {com} --baud {baudrate} --after=no_reset_stub write_flash -e 0x0 \"{indexPath}/build/Mixgo_Mini_v2_lib-v1.25.0.bin\" 0X3A0000 \"{indexPath}/../micropython/build/HZK12.bin\""
|
||||
}
|
||||
]
|
||||
},
|
||||
"micropython:esp32c2:generic_2M": {
|
||||
"command": "\"{esptool}\" --chip esp32c2 --port {com} --baud {baudrate} write_flash -e 0x0 \"{indexPath}/build/Generic_C2_lib-v1.25.0.bin\""
|
||||
}
|
||||
},
|
||||
"upload": {
|
||||
"type": "command",
|
||||
"portSelect": "all",
|
||||
"libPath": [
|
||||
"{indexPath}/../micropython/build/lib",
|
||||
"{indexPath}/build/lib"
|
||||
],
|
||||
"command": "\"{ampy}\" -p {com} -d 1 -r \"{reset}\" put \"{indexPath}/build/upload\"",
|
||||
"filePath": "{indexPath}/build/upload/main.py",
|
||||
"copyLib": false,
|
||||
"reset": []
|
||||
},
|
||||
"nav": {
|
||||
"burn": true,
|
||||
"upload": true,
|
||||
"save": {
|
||||
"py": true
|
||||
},
|
||||
"setting": {
|
||||
"thirdPartyLibrary": true
|
||||
}
|
||||
},
|
||||
"serial": {
|
||||
"ctrlCBtn": true,
|
||||
"ctrlDBtn": true,
|
||||
"baudRates": 115200,
|
||||
"yMax": 100,
|
||||
"yMin": 0,
|
||||
"pointNum": 100,
|
||||
"rts": false,
|
||||
"dtr": false
|
||||
},
|
||||
"lib": {
|
||||
"mixly": {
|
||||
"url": [
|
||||
"http://download.mixlylibs.cloud/mixly3-packages/cloud-libs/micropython_esp32c2/libs.json"
|
||||
]
|
||||
}
|
||||
},
|
||||
"pythonToBlockly": false,
|
||||
"web": {
|
||||
"devices": {
|
||||
"serial": {
|
||||
"filters": [
|
||||
{
|
||||
"usbVendorId": 6790,
|
||||
"usbProductId": 65036
|
||||
}
|
||||
]
|
||||
},
|
||||
"hid": {
|
||||
"filters": [
|
||||
{
|
||||
"vendorId": 6790,
|
||||
"productId": 65036
|
||||
}
|
||||
]
|
||||
},
|
||||
"usb": {
|
||||
"filters": [
|
||||
{
|
||||
"vendorId": 6790,
|
||||
"productId": 65036
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"burn": {
|
||||
"erase": true,
|
||||
"micropython:esp32c2:mixgo_mini": {
|
||||
"binFile": [
|
||||
{
|
||||
"offset": "0x0000",
|
||||
"path": "./build/Mixgo_Mini_lib-v1.25.0.bin"
|
||||
},
|
||||
{
|
||||
"offset": "0x3A0000",
|
||||
"path": "../micropython/build/HZK12.bin"
|
||||
}
|
||||
],
|
||||
"special": [
|
||||
{
|
||||
"name": "Firmware For General Application",
|
||||
"binFile": [
|
||||
{
|
||||
"offset": "0x0000",
|
||||
"path": "./build/Mixgo_Mini_lib-v1.25.0.bin"
|
||||
},
|
||||
{
|
||||
"offset": "0x3A0000",
|
||||
"path": "../micropython/build/HZK12.bin"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Firmware Optimize For V2.x Board",
|
||||
"binFile": [
|
||||
{
|
||||
"offset": "0x0000",
|
||||
"path": "./build/Mixgo_Mini_v2_lib-v1.25.0.bin"
|
||||
},
|
||||
{
|
||||
"offset": "0x3A0000",
|
||||
"path": "../micropython/build/HZK12.bin"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"micropython:esp32c2:generic_4M": {
|
||||
"binFile": [
|
||||
{
|
||||
"offset": "0x0000",
|
||||
"path": "./build/Generic_C2_lib-v1.25.0.bin"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"upload": {
|
||||
"reset": []
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-C2@元控奋斗(MINI)"><block type="controls_whileUntil" id="xI[qjkFKz-3viCln|59z" x="-1001" y="-592"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id=")Iq|f9v63SzMv:~.q#Y{"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="display_show_image" id="zI8!6Gwli,Up:P_9cG2}"><value name="data"><shadow type="pins_builtinimg" id="UFl7`]4NvM1mtc;N(,Iv"><field name="PIN">onboard_matrix.HEART</field></shadow></value><next><block type="display_scroll_string" id="!_k|)u1KA}ECIaJm{es+"><value name="data"><shadow type="text" id="p_+Blq-rB!2E+a$rT~fg"><field name="TEXT">Hello,Mixly!</field></shadow></value></block></next></block></statement></block></xml><config>{}</config><code>ZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21hdHJpeAoKCndoaWxlIFRydWU6CiAgICBvbmJvYXJkX21hdHJpeC5zaG93cyhvbmJvYXJkX21hdHJpeC5IRUFSVCkKICAgIG9uYm9hcmRfbWF0cml4LnNjcm9sbCgnSGVsbG8sTWl4bHkhJykK</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-C2@元控奋斗(MINI)"><block type="controls_whileUntil" id="=9wg(;{JD;c/jp7.B|+I" x="-1330" y="-796"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="Ny|6ds_^$l@cf]l]ctoh"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="display_show_image" id="J_#=#`g|3gdeD`7|Vt-8"><value name="data"><shadow type="pins_builtinimg" id="(y$IGZG(0ysf8p;xhtNl"><field name="PIN">onboard_matrix.HEART</field></shadow><block type="image_invert" id="(lPTAl1=b_wtGTK5=W@w"><value name="A"><shadow type="pins_builtinimg" id="pHC]eN;x1`6KJJqC5Haa"><field name="PIN">onboard_matrix.HEART</field></shadow></value></block></value><next><block type="display_scroll_string_delay" id="[_u[i0vWg[[*_9`.a-qF"><value name="data"><shadow type="text" id="r/!Fb;Zto4YDe;.7Xs]L"><field name="TEXT">Hello,Mixly!</field></shadow></value><value name="space"><shadow type="math_number" id="jfJI+APyIOq2aHj=OG8T"><field name="NUM">0</field></shadow></value><value name="time"><shadow type="math_number" id="d$}Pr^KVL(56|cf{1o-~"><field name="NUM">50</field></shadow></value></block></next></block></statement></block></xml><config>{}</config><code>ZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21hdHJpeAoKCndoaWxlIFRydWU6CiAgICBvbmJvYXJkX21hdHJpeC5zaG93cyhvbmJvYXJkX21hdHJpeC5tYXBfaW52ZXJ0KG9uYm9hcmRfbWF0cml4LkhFQVJUKSkKICAgIG9uYm9hcmRfbWF0cml4LnNjcm9sbCgnSGVsbG8sTWl4bHkhJyxzcGVlZCA9NTAsc3BhY2UgPSAwKQo=</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-C2@元控奋斗(MINI)"><block type="controls_whileUntil" id="T:u+64BA;ObbTSIh8p}{" x="-851" y="-584"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="3f7$*fD@}Q`:0~~F8qc*"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="display_show_image" id="~3P;@{i_68k09=6uQp:-"><value name="data"><shadow type="pins_builtinimg" id="f$n6m.-4ksR:+ire*rsj"><field name="PIN">onboard_matrix.HEART</field></shadow></value><next><block type="controls_delay_new" id="9u:O86~gD[ZDR!AG3qFB"><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id="=axS],Nohjvz,HRpJE}2"><field name="NUM">0.1</field></shadow></value><next><block type="display_show_image" id="a8x{9qbvPu_5wg4)Ha?="><value name="data"><shadow type="pins_builtinimg" id="Km94tRdt_FfUzngGMquM"><field name="PIN">onboard_matrix.HEART_SMALL</field></shadow></value><next><block type="controls_delay_new" id="]TE1lZY_sV=J[8uTd|kP"><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id="xSoXkYt|.=GcTDmAb4Kt"><field name="NUM">0.1</field></shadow></value></block></next></block></next></block></next></block></statement></block></xml><config>{}</config><code>ZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21hdHJpeAppbXBvcnQgdGltZQoKCndoaWxlIFRydWU6CiAgICBvbmJvYXJkX21hdHJpeC5zaG93cyhvbmJvYXJkX21hdHJpeC5IRUFSVCkKICAgIHRpbWUuc2xlZXAoMC4xKQogICAgb25ib2FyZF9tYXRyaXguc2hvd3Mob25ib2FyZF9tYXRyaXguSEVBUlRfU01BTEwpCiAgICB0aW1lLnNsZWVwKDAuMSkK</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-C2@元控奋斗(MINI)"><block type="display_scroll_string" id="Xan)iRUI`3CX/LO_7~[V" x="-847" y="-630"><value name="data"><shadow type="text" id="gdiuE+6U_6fSvF2,vmft"><field name="TEXT">Mixly</field></shadow></value><next><block type="controls_whileUntil" id="K]Pfml~Vs_fuV#SYHav@"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="XF[HzE?zoD2_nhYYd_ZK"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="display_show_image" id="1,##BQQadoN}-8*vvQg!"><value name="data"><shadow type="pins_builtinimg" id="XVS?siV#6fqjFHExmlH["><field name="PIN">onboard_matrix.HEART</field></shadow></value><next><block type="controls_delay_new" id="EZvI}~8,GU/W!L7[qrkU"><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id="`JPmK[ag8k*E$6+idkO-"><field name="NUM">0.1</field></shadow></value><next><block type="display_show_image" id="`ocMyTd^!Y.I39euyAU$"><value name="data"><shadow type="pins_builtinimg" id="NtTV,+TQ8=f3zi1r6$01"><field name="PIN">onboard_matrix.HEART_SMALL</field></shadow></value><next><block type="controls_delay_new" id="Kj`T#2c**wdLRmxv1L!/"><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id="juEIbZ)l`Oy!QB!@0out"><field name="NUM">0.1</field></shadow></value></block></next></block></next></block></next></block></statement></block></next></block></xml><config>{}</config><code>ZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21hdHJpeAppbXBvcnQgdGltZQoKCm9uYm9hcmRfbWF0cml4LnNjcm9sbCgnTWl4bHknKQp3aGlsZSBUcnVlOgogICAgb25ib2FyZF9tYXRyaXguc2hvd3Mob25ib2FyZF9tYXRyaXguSEVBUlQpCiAgICB0aW1lLnNsZWVwKDAuMSkKICAgIG9uYm9hcmRfbWF0cml4LnNob3dzKG9uYm9hcmRfbWF0cml4LkhFQVJUX1NNQUxMKQogICAgdGltZS5zbGVlcCgwLjEpCg==</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-C2@元控奋斗(MINI)"><block type="controls_whileUntil" id="ZoHanGPY2mrL|.qj7$S@" x="-1017" y="-593"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="!r4fCzJ#6!bt$LgoJT`h"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="controls_if" id="w7_lnnt2)z!O/1aar8UQ"><mutation else="1"></mutation><value name="IF0"><block type="sensor_mixgo_button_is_pressed" id="+W,C]b[+hPU#f.KK2-O7"><value name="btn"><shadow type="pins_button" id="r(Z|cPPrAl[)8c)wf8cJ"><field name="PIN">B1key</field></shadow></value></block></value><statement name="DO0"><block type="display_show_image" id="34J)w]Z,z2W+5@U]$-Vb"><value name="data"><shadow type="pins_builtinimg" id="a3O(A:JL!Un?KWV(CEX;"><field name="PIN">onboard_matrix.HEART</field></shadow></value></block></statement><statement name="ELSE"><block type="display_show_image" id="Df7I]c8|#(@e2GmCj{Yt"><value name="data"><shadow type="pins_builtinimg" id="--b6!VK1eH$19O|DY__o"><field name="PIN">onboard_matrix.HEART_SMALL</field></shadow></value></block></statement></block></statement></block></xml><config>{}</config><code>aW1wb3J0IG1peGdvX21pbmkKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21hdHJpeAoKCndoaWxlIFRydWU6CiAgICBpZiBtaXhnb19taW5pLkIxa2V5LmlzX3ByZXNzZWQoKToKICAgICAgICBvbmJvYXJkX21hdHJpeC5zaG93cyhvbmJvYXJkX21hdHJpeC5IRUFSVCkKICAgIGVsc2U6CiAgICAgICAgb25ib2FyZF9tYXRyaXguc2hvd3Mob25ib2FyZF9tYXRyaXguSEVBUlRfU01BTEwpCg==</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-C2@元控奋斗(MINI)"><block type="controls_whileUntil" id="bC{d[Hn).;^6T5{YG_Rj" x="-1059" y="-724"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="Qjf]kYq[$n;Y7K1|`@nz"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="controls_if" id="W5Cd*a8a$Nfj!cne{WkN"><mutation elseif="2" else="1"></mutation><value name="IF0"><block type="logic_operation" id="GgptYk/-($D(g@E@?EB:"><field name="OP">AND</field><value name="A"><block type="sensor_mixgo_button_is_pressed" id="(.opv*R!a!kz+YO4_d9U"><value name="btn"><shadow type="pins_button" id=":CkM!uWu65p@IobG:d~5"><field name="PIN">B1key</field></shadow></value></block></value><value name="B"><block type="sensor_mixgo_button_is_pressed" id="*J921^l|eCERTwfglu~s"><value name="btn"><shadow type="pins_button" id=".~=KWAA4g:V7Oc$?5i/I"><field name="PIN">B2key</field></shadow></value></block></value></block></value><statement name="DO0"><block type="display_show_image" id="||dqk=|{SxBRhI/`3w7="><value name="data"><shadow type="pins_builtinimg" id="gJR!.n4I1C+SB!B-nM5;"><field name="PIN">onboard_matrix.SAD</field></shadow></value></block></statement><value name="IF1"><block type="sensor_mixgo_button_is_pressed" id="ugt|_e9^;TS_9jJrJc3s"><value name="btn"><shadow type="pins_button" id="?3].YD^w8~X*xCFy=?4y"><field name="PIN">B1key</field></shadow></value></block></value><statement name="DO1"><block type="display_show_image" id=";rcI2l3V~-`bP=`^O;hr"><value name="data"><shadow type="pins_builtinimg" id="7HsH_F$s2EB1~#OpaMn~"><field name="PIN">onboard_matrix.HEART</field></shadow></value></block></statement><value name="IF2"><block type="sensor_mixgo_button_is_pressed" id="^sGmA$X)W);mluhM2,/G"><value name="btn"><shadow type="pins_button" id="Ox)*Te@DA^?!@g;]wQbq"><field name="PIN">B2key</field></shadow></value></block></value><statement name="DO2"><block type="display_show_image" id="z~WI3j/iT88R):Yg:8i@"><value name="data"><shadow type="pins_builtinimg" id="w!.]j=;+w6vPI5]MQ-9E"><field name="PIN">onboard_matrix.HEART_SMALL</field></shadow></value></block></statement><statement name="ELSE"><block type="display_show_image" id="C.$DW9*^KIfY*q*[/]bz"><value name="data"><shadow type="pins_builtinimg" id="nr1(-R9ZHk(G^7o27h4w"><field name="PIN">onboard_matrix.SMILE</field></shadow></value></block></statement></block></statement></block></xml><config>{}</config><code>aW1wb3J0IG1peGdvX21pbmkKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21hdHJpeAoKCndoaWxlIFRydWU6CiAgICBpZiBtaXhnb19taW5pLkIxa2V5LmlzX3ByZXNzZWQoKSBhbmQgbWl4Z29fbWluaS5CMmtleS5pc19wcmVzc2VkKCk6CiAgICAgICAgb25ib2FyZF9tYXRyaXguc2hvd3Mob25ib2FyZF9tYXRyaXguU0FEKQogICAgZWxpZiBtaXhnb19taW5pLkIxa2V5LmlzX3ByZXNzZWQoKToKICAgICAgICBvbmJvYXJkX21hdHJpeC5zaG93cyhvbmJvYXJkX21hdHJpeC5IRUFSVCkKICAgIGVsaWYgbWl4Z29fbWluaS5CMmtleS5pc19wcmVzc2VkKCk6CiAgICAgICAgb25ib2FyZF9tYXRyaXguc2hvd3Mob25ib2FyZF9tYXRyaXguSEVBUlRfU01BTEwpCiAgICBlbHNlOgogICAgICAgIG9uYm9hcmRfbWF0cml4LnNob3dzKG9uYm9hcmRfbWF0cml4LlNNSUxFKQo=</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-C2@元控奋斗(MINI)"><block type="controls_whileUntil" id="j:$d1XB3jy.lNFv6VM`V" x="-1059" y="-724"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="5rqTO`Q_|.@/v8^0SV1f"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="controls_forEach" id="tGh^rGrS8V~iuZ4$2$N("><value name="LIST"><shadow type="list_many_input" id="NofKKjzJq/^kR^Z295s#"><field name="CONTENT">0,1,2,3</field></shadow><block type="controls_range" id="~DP]C;Gfhf|:GFw5qfoi"><value name="FROM"><shadow type="math_number" id="Bg^Xr!zT*1l;hIY$dTL@"><field name="NUM">0</field></shadow></value><value name="TO"><shadow type="math_number" id="Tem*mPd5R2e_2.HWqdQ?"><field name="NUM">2</field></shadow></value><value name="STEP"><shadow type="math_number" id="CFqfLAy1PBx#.,JrX84q"><field name="NUM">1</field></shadow></value></block></value><value name="VAR"><shadow type="variables_get" id="GHxdq_o@3#2]O,fxqSkQ"><field name="VAR">i</field></shadow></value><statement name="DO"><block type="actuator_onboard_neopixel_rgb" id="g/D.suDbYe7x4Qfr)iID"><value name="_LED_"><shadow type="math_number" id="~.uPiSzrkVbt$)Q]y`yr"><field name="NUM">0</field></shadow><block type="variables_get" id="1/zyryl#mcN(X~irO^rk"><field name="VAR">i</field></block></value><value name="RVALUE"><shadow type="math_number" id="xUfuhb-Ign#97yf-8s@A"><field name="NUM">0</field></shadow></value><value name="GVALUE"><shadow type="math_number" id="XK1CAE9{-v`JELBX*Lhm"><field name="NUM">0</field></shadow></value><value name="BVALUE"><shadow type="math_number" id="Yw/U[}[=HY*RWaK5Gj[}"><field name="NUM">25</field></shadow></value><next><block type="actuator_onboard_neopixel_write" id="b9_X1{(`e^yrx+8jGiiw"><next><block type="controls_delay_new" id=",z(?X~^_i|L{.._]w-2y"><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id="^YD+$1.FiXJH(ffdI$O*"><field name="NUM">0.5</field></shadow></value></block></next></block></next></block></statement><next><block type="actuator_onboard_neopixel_rgb_all" id="~QLvL-RCe6})ERUaS7N$"><value name="RVALUE"><shadow type="math_number" id="!r$xl{IV.0hV[n3(S~Z1"><field name="NUM">0</field></shadow></value><value name="GVALUE"><shadow type="math_number" id="[F5;@QYIs?EOq?WBx7@k"><field name="NUM">0</field></shadow></value><value name="BVALUE"><shadow type="math_number" id="=W|qgn`VXA)M)}cFgWaR"><field name="NUM">0</field></shadow></value><next><block type="actuator_onboard_neopixel_write" id="o@JMmwksuZdADsI#h8.c"><next><block type="controls_delay_new" id="|O=n-v*}C`9efKu]iv:L"><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id="1Xcr.:9-?x+yGjiAb97q"><field name="NUM">1</field></shadow></value></block></next></block></next></block></next></block></statement></block></xml><config>{}</config><code>ZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX3JnYgppbXBvcnQgdGltZQoKCndoaWxlIFRydWU6CiAgICBmb3IgaSBpbiByYW5nZSgwLCAyLCAxKToKICAgICAgICBvbmJvYXJkX3JnYltpXSA9ICgwLCAwLCAyNSkKICAgICAgICBvbmJvYXJkX3JnYi53cml0ZSgpCiAgICAgICAgdGltZS5zbGVlcCgwLjUpCiAgICBvbmJvYXJkX3JnYi5maWxsKCgwLCAwLCAwKSkKICAgIG9uYm9hcmRfcmdiLndyaXRlKCkKICAgIHRpbWUuc2xlZXAoMSkK</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-C2@元控奋斗(MINI)"><block type="controls_whileUntil" id="r3u}Sxr!sYug/~v^@i~=" x="-1059" y="-724"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="}Q{dHT#x07x:(!fupNh$"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="controls_forEach" id="Tm`7PucwqXaF:vuJBHd["><value name="LIST"><shadow type="list_many_input" id="Fyv5b+dJmlJto-e,biaz"><field name="CONTENT">0,1,2,3</field></shadow><block type="controls_range" id="$~qf?}KQ3Q3Gh0D)pQm^"><value name="FROM"><shadow type="math_number" id="r#.x=|_b_MS~QRZ*]J$y"><field name="NUM">0</field></shadow></value><value name="TO"><shadow type="math_number" id="RMMS~yDl~6AO|JkNuTpl"><field name="NUM">2</field></shadow></value><value name="STEP"><shadow type="math_number" id="L^zY2VPyUq2LZuTWYbKh"><field name="NUM">1</field></shadow></value></block></value><value name="VAR"><shadow type="variables_get" id="?f{x^q?~Dx7;,itiC`y("><field name="VAR">i</field></shadow></value><statement name="DO"><block type="actuator_onboard_neopixel_rgb_all" id="9hIXv|lq_Y`+]pI;b;}j"><value name="RVALUE"><shadow type="math_number" id="DsAY,wu97RLbQ;y?Wp/`"><field name="NUM">0</field></shadow></value><value name="GVALUE"><shadow type="math_number" id="X$zWT4t[DEgy.rxp=VwM"><field name="NUM">0</field></shadow></value><value name="BVALUE"><shadow type="math_number" id="k@8MM3SZm=o#UaHE/Bxq"><field name="NUM">0</field></shadow></value><next><block type="actuator_onboard_neopixel_rgb" id="5;HRDqyj7-JR.JRoKgwn"><value name="_LED_"><shadow type="math_number" id="$L.Kx?KJYaUOkjj`p!Fx"><field name="NUM">0</field></shadow><block type="variables_get" id="iEfzAqf95Luh#_t]f5G/"><field name="VAR">i</field></block></value><value name="RVALUE"><shadow type="math_number" id=":dOSYrnts+b#q#s3KW3Y"><field name="NUM">0</field></shadow></value><value name="GVALUE"><shadow type="math_number" id="?V_?pPBM0^NR]b07dx2B"><field name="NUM">0</field></shadow></value><value name="BVALUE"><shadow type="math_number" id="jMbjNUyH|yq^3/0SrHEX"><field name="NUM">25</field></shadow></value><next><block type="actuator_onboard_neopixel_write" id=";7:F5I$wmA._DPvUGi/2"><next><block type="controls_delay_new" id="(#UI*@Q0i7_!EXtp*}Mu"><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id="Zj97idWS:Tnh2iO.E_ua"><field name="NUM">0.5</field></shadow></value></block></next></block></next></block></next></block></statement><next><block type="actuator_onboard_neopixel_rgb_all" id="/K5ZOtt4G|P}uX#*7(YA"><value name="RVALUE"><shadow type="math_number" id="1K3bBRn^Gw1#[l$4+tvz"><field name="NUM">0</field></shadow></value><value name="GVALUE"><shadow type="math_number" id="^iY]fN_b@pvJ|Hi}mQvR"><field name="NUM">0</field></shadow></value><value name="BVALUE"><shadow type="math_number" id="4VB-4z5fT=2!z$!*~c]n"><field name="NUM">0</field></shadow></value><next><block type="actuator_onboard_neopixel_write" id="TW)D4I*g,u*|:C@jOOjC"><next><block type="controls_delay_new" id="O`usTtutF`gI;vNi]|Bh"><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id="lnXQne4b1Xl0Y,nb#JMD"><field name="NUM">1</field></shadow></value></block></next></block></next></block></next></block></statement></block></xml><config>{}</config><code>ZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX3JnYgppbXBvcnQgdGltZQoKCndoaWxlIFRydWU6CiAgICBmb3IgaSBpbiByYW5nZSgwLCAyLCAxKToKICAgICAgICBvbmJvYXJkX3JnYi5maWxsKCgwLCAwLCAwKSkKICAgICAgICBvbmJvYXJkX3JnYltpXSA9ICgwLCAwLCAyNSkKICAgICAgICBvbmJvYXJkX3JnYi53cml0ZSgpCiAgICAgICAgdGltZS5zbGVlcCgwLjUpCiAgICBvbmJvYXJkX3JnYi5maWxsKCgwLCAwLCAwKSkKICAgIG9uYm9hcmRfcmdiLndyaXRlKCkKICAgIHRpbWUuc2xlZXAoMSkK</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 3.0 rc0" board="Python ESP32-C2@元控奋斗(MINI)" shown="block"><block type="controls_forEach" id="iNXjbZa)]]7-*TW~HIY," x="-290" y="-169"><value name="LIST"><shadow type="list_many_input" id=")!d0bU$GQ-{r:8?hW)Ed"><field name="CONTENT">0,1,2,3</field></shadow><block type="controls_range" id="$Lh?/hnfhWqS$08htdy2"><value name="FROM"><shadow type="math_number" id="m}`TG2dj}Bb]J^?lWj?x"><field name="NUM">0</field></shadow></value><value name="TO"><shadow type="math_number" id="!}Br6UqC+i3cx;qbr0)."><field name="NUM">8</field></shadow></value><value name="STEP"><shadow type="math_number" id="3@/rFq+r+G+X[;}E(#bO"><field name="NUM">1</field></shadow></value></block></value><value name="VAR"><shadow type="variables_get" id="a_({=NbK*)n/-TC)0Ej5"><field name="VAR">Y</field></shadow></value><statement name="DO"><block type="controls_forEach" id="WidIMnkD*:[ZERv#}Es("><value name="LIST"><shadow type="list_many_input" id=")!d0bU$GQ-{r:8?hW)Ed"><field name="CONTENT">0,1,2,3</field></shadow><block type="controls_range" id="{sW,YZ8vhc0vS2)A4JtH"><value name="FROM"><shadow type="math_number" id="JD*t,:KLczqK7L!3!S@r"><field name="NUM">0</field></shadow></value><value name="TO"><shadow type="math_number" id="Z?I*23XW.4f^Z`coWppa"><field name="NUM">12</field></shadow></value><value name="STEP"><shadow type="math_number" id="#,5q_*!,kr7SoTdd,/Zo"><field name="NUM">1</field></shadow></value></block></value><value name="VAR"><shadow type="variables_get" id="VDnGU^FY)~ynCd{rpL}p"><field name="VAR">X</field></shadow></value><statement name="DO"><block type="display_bright_point" id="3o*;K^d2vLq53?2olLJA"><value name="x"><shadow type="pins_exlcdh" id="{t@t2[mUpq{:`Uwm)Mpw"><field name="PIN">0</field></shadow><block type="variables_get" id="E6g3XeOg[nh]W_7Q:i}-"><field name="VAR">X</field></block></value><value name="y"><shadow type="pins_exlcdv" id="u*#LbQRYB2Oy:ox`ze0u"><field name="PIN">0</field></shadow><block type="variables_get" id="{*Lxu+*vmab,+0WPDFMG"><field name="VAR">Y</field></block></value><value name="STAT"><shadow type="display_onoff" id="r#[L_~!Ch?,j}5^rhrV*"><field name="ONOFF">ON</field></shadow></value><next><block type="controls_delay_new" id="^t24Xa{L|@gH_bw9faWA"><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id="H6)ldL=^}I8!ug!sQlPO"><field name="NUM">0.1</field></shadow></value></block></next></block></statement></block></statement></block></xml><config>{}</config><code>ZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21hdHJpeAppbXBvcnQgdGltZQoKCmZvciBZIGluIHJhbmdlKDAsIDgsIDEpOgogICAgZm9yIFggaW4gcmFuZ2UoMCwgMTIsIDEpOgogICAgICAgIG9uYm9hcmRfbWF0cml4LnBpeGVsKGludChYKSwgaW50KFkpLCAxKQogICAgICAgIG9uYm9hcmRfbWF0cml4LnNob3coKQogICAgICAgIHRpbWUuc2xlZXAoMC4xKQo=</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 3.0 rc0" board="Python ESP32-C2@元控奋斗(MINI)" shown="block"><block type="controls_forEach" id="luDI5P;M-;)FtI(MykBV" x="-275" y="-244"><value name="LIST"><shadow type="list_many_input" id="uF/J]celFm[^J6O!iTwp"><field name="CONTENT">0,1,2,3</field></shadow><block type="controls_range" id=",VTz.v1eFExVL{yrvaT4"><value name="FROM"><shadow type="math_number" id="Q,~*H+Rm,DNjGeC.PQys"><field name="NUM">0</field></shadow></value><value name="TO"><shadow type="math_number" id="jk#|Z;uBeSw=RGvF*AUB"><field name="NUM">8</field></shadow></value><value name="STEP"><shadow type="math_number" id="MPkPP*a8WzpUS[,I+1#A"><field name="NUM">2</field></shadow></value></block></value><value name="VAR"><shadow type="variables_get" id="Qcsy=IG[L^hp_q]a8Y5O"><field name="VAR">Y</field></shadow></value><statement name="DO"><block type="controls_forEach" id="eCfWgSREp$0!jWJo44.l"><value name="LIST"><shadow type="list_many_input" id="[|dL995fgZY@R04=aFa)"><field name="CONTENT">0,1,2,3</field></shadow><block type="controls_range" id="x]k|q1U,7}iV,@mu~.Z8"><value name="FROM"><shadow type="math_number" id="R1GW}Uk|d;LxJ5Xiy+u+"><field name="NUM">0</field></shadow></value><value name="TO"><shadow type="math_number" id="2dkl0Hm:!LZPQhYxs0yn"><field name="NUM">12</field></shadow></value><value name="STEP"><shadow type="math_number" id="2wE6y`Bl-zeJjSP3NQTY"><field name="NUM">1</field></shadow></value></block></value><value name="VAR"><shadow type="variables_get" id="a`nsE(J/nf;n(06,(IUN"><field name="VAR">X</field></shadow></value><statement name="DO"><block type="display_bright_point" id="xUMCUiXmFQC}s$_h`+=l"><value name="x"><shadow type="pins_exlcdh" id="#o:uN4S2FPB~zQSn0k*r"><field name="PIN">0</field></shadow><block type="variables_get" id="G7bvO=4XH{K16_nr4/Na"><field name="VAR">X</field></block></value><value name="y"><shadow type="pins_exlcdv" id="bq2A2tK1Ccm!T`!de7KN"><field name="PIN">0</field></shadow><block type="variables_get" id="dv1r7E5(+oVy]BqaMh7!"><field name="VAR">Y</field></block></value><value name="STAT"><shadow type="display_onoff" id="|(Gc0Elc_$/DocK3:;=#"><field name="ONOFF">ON</field></shadow></value><next><block type="controls_delay_new" id="+lmcf{V^Lpy9/.twC1/3"><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id="n/{}cMGcc)EnLTRgyEQ/"><field name="NUM">0.1</field></shadow></value></block></next></block></statement><next><block type="controls_forEach" id="Bs[GzliTD7$y?*6r{hk|"><value name="LIST"><shadow type="list_many_input" id="[|dL995fgZY@R04=aFa)"><field name="CONTENT">0,1,2,3</field></shadow><block type="controls_range" id="PC_Y-;xg)s.(k(RIJfXl"><value name="FROM"><shadow type="math_number" id="P=TQjjqT0}3oRD|=nsVM"><field name="NUM">11</field></shadow></value><value name="TO"><shadow type="math_number" id="tBgMkLMm$KL{vGmI}p)1"><field name="NUM">-1</field></shadow></value><value name="STEP"><shadow type="math_number" id="`2,x-rw?l:qh?MKN`a?,"><field name="NUM">-1</field></shadow></value></block></value><value name="VAR"><shadow type="variables_get" id="NA,v=Un;0TUWRO:)!=wh"><field name="VAR">X</field></shadow></value><statement name="DO"><block type="display_bright_point" id="cWPN,NULzO8$E:gLyg`i"><value name="x"><shadow type="pins_exlcdh" id="#o:uN4S2FPB~zQSn0k*r"><field name="PIN">0</field></shadow><block type="variables_get" id="hc]CRguE`i9`Z.iScT}#"><field name="VAR">X</field></block></value><value name="y"><shadow type="pins_exlcdv" id="bq2A2tK1Ccm!T`!de7KN"><field name="PIN">0</field></shadow><block type="math_arithmetic" id="z8V7}KJAdIX1F1S2R{.n"><field name="OP">ADD</field><value name="A"><shadow type="math_number" id="HtZ1*fJh/~x|/FS?+,{."><field name="NUM">1</field></shadow><block type="variables_get" id="pMW^-g{Mv8.dGu2l-?Zn"><field name="VAR">Y</field></block></value><value name="B"><shadow type="math_number" id="M?krV,I_-G-(I/b1Z+WW"><field name="NUM">1</field></shadow></value></block></value><value name="STAT"><shadow type="display_onoff" id="wJbbUWR]QEi.YX]2AX8s"><field name="ONOFF">ON</field></shadow></value><next><block type="controls_delay_new" id="2c+HjMh-{AWtV9w?D0om"><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id="QZ#+b^,jt-+M`r95@))v"><field name="NUM">0.1</field></shadow></value></block></next></block></statement></block></next></block></statement></block></xml><config>{}</config><code>ZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21hdHJpeAppbXBvcnQgdGltZQoKCmZvciBZIGluIHJhbmdlKDAsIDgsIDIpOgogICAgZm9yIFggaW4gcmFuZ2UoMCwgMTIsIDEpOgogICAgICAgIG9uYm9hcmRfbWF0cml4LnBpeGVsKGludChYKSwgaW50KFkpLCAxKQogICAgICAgIG9uYm9hcmRfbWF0cml4LnNob3coKQogICAgICAgIHRpbWUuc2xlZXAoMC4xKQogICAgZm9yIFggaW4gcmFuZ2UoMTEsIC0xLCAtMSk6CiAgICAgICAgb25ib2FyZF9tYXRyaXgucGl4ZWwoaW50KFgpLCBpbnQoWSArIDEpLCAxKQogICAgICAgIG9uYm9hcmRfbWF0cml4LnNob3coKQogICAgICAgIHRpbWUuc2xlZXAoMC4xKQo=</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 3.0 rc0" board="Python ESP32-C2@元控奋斗(MINI)" shown="block"><block type="controls_forEach" id=";c2o[e}xD~^cQ#]J$ajK" x="-275" y="-244"><value name="LIST"><shadow type="list_many_input" id="Yc4!2[^fOz,s)f#rH_X/"><field name="CONTENT">0,1,2,3</field></shadow><block type="controls_range" id="]xU8/`At$8}_B9#shX?u"><value name="FROM"><shadow type="math_number" id="W+c6WR)ZQQCJR}z#1J:v"><field name="NUM">0</field></shadow></value><value name="TO"><shadow type="math_number" id="*B(Y+bzOy=[`_XAepNk}"><field name="NUM">12</field></shadow></value><value name="STEP"><shadow type="math_number" id="h4ENX6GUr~u)Pb:Zpjh~"><field name="NUM">2</field></shadow></value></block></value><value name="VAR"><shadow type="variables_get" id="g2Z4iyi1k];JVw[YK,|y"><field name="VAR">X</field></shadow></value><statement name="DO"><block type="controls_forEach" id="uuKA8$qdv(?@Re;4Z4AJ"><value name="LIST"><shadow type="list_many_input" id="oT1P1Pi91=x`;NPL#VYl"><field name="CONTENT">0,1,2,3</field></shadow><block type="controls_range" id="[WROv9L+8{Fshf}}x9m@"><value name="FROM"><shadow type="math_number" id="tHLI(;59$L;Z,dvisEJ("><field name="NUM">0</field></shadow></value><value name="TO"><shadow type="math_number" id="Pi+!*GcaePhQ/s=DntON"><field name="NUM">8</field></shadow></value><value name="STEP"><shadow type="math_number" id="iTi[t;B?!m0pS5uJIR7?"><field name="NUM">1</field></shadow></value></block></value><value name="VAR"><shadow type="variables_get" id="=W*$3N0R{xBm+iJg3Z6s"><field name="VAR">Y</field></shadow></value><statement name="DO"><block type="display_bright_point" id="mVUz636!zhRTI|A7#@=p"><value name="x"><shadow type="pins_exlcdh" id="0U-:{;^h63|8-mU[:.zm"><field name="PIN">0</field></shadow><block type="variables_get" id="KRhG.gW8dnuR1d.8,})a"><field name="VAR">X</field></block></value><value name="y"><shadow type="pins_exlcdv" id="aPPDv$4dy;MP4ycOH}{d"><field name="PIN">0</field></shadow><block type="variables_get" id="UY-L3k?G{l~d8:D9Yrxu"><field name="VAR">Y</field></block></value><value name="STAT"><shadow type="display_onoff" id="Y@T[?|O_Jh[4Qt+bDr)X"><field name="ONOFF">ON</field></shadow></value><next><block type="controls_delay_new" id=",7lSdjJckt@nNp(bsx2B"><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id="Rt.y@TZQx-?h.G^[K-3="><field name="NUM">0.1</field></shadow></value></block></next></block></statement><next><block type="controls_forEach" id="A39vv/~3hz8gfRV0Pc?h"><value name="LIST"><shadow type="list_many_input" id="247PE_b+Y8onhE8#F6*1"><field name="CONTENT">0,1,2,3</field></shadow><block type="controls_range" id="l2q-(ANa|Spq~rvPhk3?"><value name="FROM"><shadow type="math_number" id="OVcS*vq={PIm3fDtEHM."><field name="NUM">7</field></shadow></value><value name="TO"><shadow type="math_number" id="*+!(;u{rMY+WQZD$.X?4"><field name="NUM">-1</field></shadow></value><value name="STEP"><shadow type="math_number" id="BeOw8LN`!o?Ht_xD,7|c"><field name="NUM">-1</field></shadow></value></block></value><value name="VAR"><shadow type="variables_get" id="XNpb6{q3$0:cX9u,w9fh"><field name="VAR">Y</field></shadow></value><statement name="DO"><block type="display_bright_point" id="eH}+:IFZi=T{~Rk2YQWD"><value name="x"><shadow type="pins_exlcdh" id="EOZ}`s*^3Uk_#qfL9^Nx"><field name="PIN">0</field></shadow><block type="math_arithmetic" id="h.*Xwrc?}OB8J07_L|R6"><field name="OP">ADD</field><value name="A"><shadow type="math_number" id="Ab+3[#H[Xx)r:J^5Ta~M"><field name="NUM">1</field></shadow><block type="variables_get" id="WNh3Cw.QXb440362a4k;"><field name="VAR">X</field></block></value><value name="B"><shadow type="math_number" id="l.$q?-pq0vUAjUi@[3J)"><field name="NUM">1</field></shadow></value></block></value><value name="y"><shadow type="pins_exlcdv" id="$K$`|U9O2mA@^Su5v;Ec"><field name="PIN">0</field></shadow><block type="variables_get" id="pR/FQtuS)HzgOMOOcpX+"><field name="VAR">Y</field></block></value><value name="STAT"><shadow type="display_onoff" id=")UCe8QKmiyJIxLMAq_Fp"><field name="ONOFF">ON</field></shadow></value><next><block type="controls_delay_new" id="4;$j=X)h,5Zreth4IzEt"><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id="gW/vMq2KMVrpfv#!o1_|"><field name="NUM">0.1</field></shadow></value></block></next></block></statement></block></next></block></statement></block></xml><config>{}</config><code>ZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21hdHJpeAppbXBvcnQgdGltZQoKCmZvciBYIGluIHJhbmdlKDAsIDEyLCAyKToKICAgIGZvciBZIGluIHJhbmdlKDAsIDgsIDEpOgogICAgICAgIG9uYm9hcmRfbWF0cml4LnBpeGVsKGludChYKSwgaW50KFkpLCAxKQogICAgICAgIG9uYm9hcmRfbWF0cml4LnNob3coKQogICAgICAgIHRpbWUuc2xlZXAoMC4xKQogICAgZm9yIFkgaW4gcmFuZ2UoNywgLTEsIC0xKToKICAgICAgICBvbmJvYXJkX21hdHJpeC5waXhlbChpbnQoWCArIDEpLCBpbnQoWSksIDEpCiAgICAgICAgb25ib2FyZF9tYXRyaXguc2hvdygpCiAgICAgICAgdGltZS5zbGVlcCgwLjEpCg==</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 3.0 rc0" board="Python ESP32-C2@元控奋斗(MINI)" shown="block"><block type="controls_whileUntil" id="l+-MS8pB.H1|wbLNZP6J" x="-13" y="288"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="={-eC-#GSCH27K7X)m_}"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="display_scroll_string" id="4m#W5bX6h4)EDIf.V++5"><value name="data"><shadow type="text" id="D.{834e;]AeuUL;R=h}M"><field name="TEXT">我爱米思齐</field></shadow></value></block></statement></block></xml><config>{}</config><code>ZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21hdHJpeAoKCndoaWxlIFRydWU6CiAgICBvbmJvYXJkX21hdHJpeC5zY3JvbGwoJ+aIkeeIseexs+aAnem9kCcpCg==</code>
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 3.0 rc0" board="Python ESP32-C2@元控奋斗(MINI)" shown="block"><block type="controls_whileUntil" id="=^:jLj?09;0k55A.mS`@" x="-1059" y="-724"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id=":3n1FAsz]bQ,Ns4@HqJf"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="controls_if" id="`iYa#yW5-2VD9+`3$=yb"><mutation elseif="1"></mutation><value name="IF0"><block type="sensor_mixgo_button_was_pressed" id="/RbL(ffb];d[U_M0Z6Sk"><value name="btn"><shadow type="pins_button" id="TZ)#/Lc5=49Nlj+k-*wL"><field name="PIN">B1key</field></shadow></value></block></value><statement name="DO0"><block type="actuator_led_bright" id="?6Q8#wLwSGOa}^D{yW=W"><value name="led"><shadow type="number" id="XbCJv65qafvS4(UrfE;?"><field name="op">1</field></shadow></value><value name="bright"><shadow type="ledswitch" id="KEk!drP@Z8Bg;Q]y*:Yx"><field name="flag">1</field></shadow></value></block></statement><value name="IF1"><block type="sensor_mixgo_button_was_pressed" id="97NU.*-f)R@H=*]z.X#0"><value name="btn"><shadow type="pins_button" id="B*cejo/$!NJZ/l@nQP2D"><field name="PIN">B2key</field></shadow></value></block></value><statement name="DO1"><block type="actuator_led_bright" id="Qt8A=C=Xw2HdM$4CDXOB"><value name="led"><shadow type="number" id="dHbEgzJ`T?26wJVWrdZ6"><field name="op">1</field></shadow></value><value name="bright"><shadow type="ledswitch" id="D$R3iid0XFnxA/]$T[.k"><field name="flag">0</field></shadow></value></block></statement></block></statement></block></xml><config>{}</config><code>aW1wb3J0IG1peGdvX21pbmkKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX2xlZAoKCndoaWxlIFRydWU6CiAgICBpZiBtaXhnb19taW5pLkIxa2V5Lndhc19wcmVzc2VkKCk6CiAgICAgICAgb25ib2FyZF9sZWQuc2V0b25vZmYoMSwxKQogICAgZWxpZiBtaXhnb19taW5pLkIya2V5Lndhc19wcmVzc2VkKCk6CiAgICAgICAgb25ib2FyZF9sZWQuc2V0b25vZmYoMSwwKQo=</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 3.0 rc0" board="Python ESP32-C2@元控奋斗(MINI)" shown="block"><block type="controls_whileUntil" id="s`mJcun0U/Ja;MfhU?pg" x="-1437" y="-624"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="TP_te3t1;8Aj)y|W[4o6"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="controls_if" id="8g=b7]K_$HH75L3E)VmQ"><value name="IF0"><block type="sensor_mixgo_button_was_pressed" id="v$fq=Bpd.{P/:6](rUPd"><value name="btn"><shadow type="pins_button" id="p}u7KXju=W)krA!Y824U"><field name="PIN">B1key</field></shadow></value></block></value><statement name="DO0"><block type="actuator_led_bright" id="INo+Q(7EijcIF)w3)P2?"><value name="led"><shadow type="number" id="DvlD4yV$C+#q?be92KmQ"><field name="op">1</field></shadow></value><value name="bright"><shadow type="ledswitch" id="{dcwOP:g_p!ECh9m0$jL"><field name="flag">-1</field></shadow></value></block></statement></block></statement></block></xml><config>{}</config><code>aW1wb3J0IG1peGdvX21pbmkKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX2xlZAoKCndoaWxlIFRydWU6CiAgICBpZiBtaXhnb19taW5pLkIxa2V5Lndhc19wcmVzc2VkKCk6CiAgICAgICAgb25ib2FyZF9sZWQuc2V0b25vZmYoMSwtMSkK</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 3.0 rc0" board="Python ESP32-C2@元控奋斗(MINI)" shown="block"><block type="controls_whileUntil" id="=(3g*Uj3qV}Tt*#6LdcR" x="-1437" y="-624"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="3QHK+lm+/^C]+IuOlUsy"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="controls_if" id="yk+~.DBFrgE{cn#g`=EK"><value name="IF0"><block type="sensor_mixgo_button_was_pressed" id="qFl.e{g=thy2|.`:M$y:"><value name="btn"><shadow type="pins_button" id="*yB^id,nOvtBz-[QU=}d"><field name="PIN">B1key</field></shadow></value></block></value><statement name="DO0"><block type="do_while" id="VCoE)B/0liq{U)u+KA:/"><field name="type">true</field><statement name="input_data"><block type="actuator_led_bright" id="_[dz.G$lM8^(Pnf;x(N_"><value name="led"><shadow type="number" id="7@1PHrCf8_-nH@5VWmzU"><field name="op">1</field></shadow></value><value name="bright"><shadow type="ledswitch" id="JL[g|6tvrJ0U6x0R{;/t"><field name="flag">1</field></shadow></value></block></statement><value name="select_data"><block type="sensor_mixgo_button_was_pressed" id="5#M#Kx-oC6lX$R(C4n;c"><value name="btn"><shadow type="pins_button" id="{SX`QDtxtIYynxv,W3i`"><field name="PIN">B1key</field></shadow></value></block></value><next><block type="actuator_led_bright" id="mjsRJo6m~ja@N`3#Y/0c"><value name="led"><shadow type="number" id="M@#tYZ[W@.q:oYlzma1t"><field name="op">1</field></shadow></value><value name="bright"><shadow type="ledswitch" id="9MJl(PGW7G0aBazI3`:$"><field name="flag">0</field></shadow></value></block></next></block></statement></block></statement></block></xml><config>{}</config><code>aW1wb3J0IG1peGdvX21pbmkKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX2xlZAoKCndoaWxlIFRydWU6CiAgICBpZiBtaXhnb19taW5pLkIxa2V5Lndhc19wcmVzc2VkKCk6CiAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgb25ib2FyZF9sZWQuc2V0b25vZmYoMSwxKQogICAgICAgICAgICBpZiAobWl4Z29fbWluaS5CMWtleS53YXNfcHJlc3NlZCgpKToKICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgb25ib2FyZF9sZWQuc2V0b25vZmYoMSwwKQo=</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-C2@元控奋斗(MINI)"><block type="variables_set" id="[L_6#Gt=E8PWoPnxFj]D" x="-1054" y="-758"><field name="VAR">显示</field><value name="VALUE"><block type="logic_boolean" id="J~XfWw,ed9.7*V(km1yo"><field name="BOOL">FALSE</field></block></value><next><block type="controls_whileUntil" id="EYg3=9X=w#J[^4)=,nd^"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="xgzrD/JKeq$4]wu*ejR="><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="controls_if" id="z`go^ZprW_J0h(m#X}R!"><value name="IF0"><block type="sensor_mixgo_button_was_pressed" id=";-|XK;A#_r,vL8mhA09_"><value name="btn"><shadow type="pins_button" id="6*6-Uv8ZPO~VQ{6!$3;4"><field name="PIN">B1key</field></shadow></value></block></value><statement name="DO0"><block type="variables_set" id="ay_;#/.bV:cuAMGTej=8"><field name="VAR">显示</field><value name="VALUE"><block type="logic_negate" id="elOAb`Xd5m99o8L6.K0+"><value name="BOOL"><block type="variables_get" id="iyyY*)lFY|=/x99Ag/2V"><field name="VAR">显示</field></block></value></block></value></block></statement><next><block type="controls_if" id="f0yH`[m+^@@1^SMbPA;X"><mutation else="1"></mutation><value name="IF0"><block type="variables_get" id="`M~/M^atT`M{;FJqn;^A"><field name="VAR">显示</field></block></value><statement name="DO0"><block type="display_show_image" id="BoCQ9hM@j/NkjL2z`Z=A"><value name="data"><shadow type="pins_builtinimg" id="w7VV9:2C8SQ@q(I3.UEz"><field name="PIN">onboard_matrix.HEART</field></shadow></value></block></statement><statement name="ELSE"><block type="display_clear" id="{bBhEH+h7CQ9O07QAHZ?"></block></statement></block></next></block></statement></block></next></block></xml><config>{}</config><code>aW1wb3J0IG1peGdvX21pbmkKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21hdHJpeAoKCl9FNl85OF9CRV9FN19BNF9CQSA9IEZhbHNlCndoaWxlIFRydWU6CiAgICBpZiBtaXhnb19taW5pLkIxa2V5Lndhc19wcmVzc2VkKCk6CiAgICAgICAgX0U2Xzk4X0JFX0U3X0E0X0JBID0gbm90IF9FNl85OF9CRV9FN19BNF9CQQogICAgaWYgX0U2Xzk4X0JFX0U3X0E0X0JBOgogICAgICAgIG9uYm9hcmRfbWF0cml4LnNob3dzKG9uYm9hcmRfbWF0cml4LkhFQVJUKQogICAgZWxzZToKICAgICAgICBvbmJvYXJkX21hdHJpeC5maWxsKDApCiAgICAgICAgb25ib2FyZF9tYXRyaXguc2hvdygpCg==</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-C2@元控奋斗(MINI)"><block type="controls_whileUntil" id="9MZBd~S17.dmR89q=?Qb" x="-1444" y="-789"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id=";r^tVGEY^2mjU)c13E$="><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="system_print" id="w)kbHFZCWCCR1bRqL,55"><value name="VAR"><shadow type="text" id="SG1{JHdXY*wmyjQSe^uK"><field name="TEXT">Mixly</field></shadow><block type="sensor_sound" id="T-w1!zKD[*bytQwQC83b"></block></value><next><block type="controls_delay_new" id="J(B00QvP7}C]UF#+mvHX"><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id="$2dr^]m:s^66+*QMB}Fc"><field name="NUM">0.01</field></shadow></value></block></next></block></statement></block></xml><config>{}</config><code>aW1wb3J0IG1hY2hpbmUKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX2JvdAppbXBvcnQgdGltZQoKCndoaWxlIFRydWU6CiAgICBwcmludChvbmJvYXJkX2JvdC5zb3VuZGxldmVsKCkpCiAgICB0aW1lLnNsZWVwKDAuMDEpCg==</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-C2@元控奋斗(MINI)"><block type="controls_whileUntil" id="$Q?hE*Dzix+eX]2a!BjS" x="-1457" y="-799"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="a7o!sFq6R]hK$U5RzX77"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="system_print" id="c_D!+JVU3v2/5Cg(i2+="><value name="VAR"><shadow type="text" id="WppuQ]CSb+u~QyYgX7*["><field name="TEXT">Mixly</field></shadow><block type="sensor_sound" id="OTOvWWso/k~dDig^(B,s"></block></value><next><block type="controls_forEach" id="1ojvQkmPcQ7I.}w,3AI@"><value name="LIST"><shadow type="list_many_input" id="lt95]yg`K@`_xoI$vMn("><field name="CONTENT">0,1,2,3</field></shadow><block type="controls_range" id="i*fQg_X.rrCQWqFJnaWZ"><value name="FROM"><shadow type="math_number" id="kKFZ`cNl6hD@bQU@jd,7"><field name="NUM">0</field></shadow></value><value name="TO"><shadow type="math_number" id="#^x9tE8qM5FW/kGh:,])"><field name="NUM">5</field></shadow><block type="text_to_number" id="~OCjx=GAg|_/Sw?u/DSk"><field name="TOWHAT">int</field><value name="VAR"><shadow type="variables_get" id="v*9hlp`chpYA;1smCgCn"><field name="VAR">x</field></shadow><block type="math_map" id="PycEHO}RK`qOv3k;p?nO"><value name="NUM"><shadow type="math_number" id="YHrU!*hUaQf1Nk:7isKZ"><field name="NUM">50</field></shadow><block type="sensor_sound" id=",i--OlP^bOik.yq,kd2u"></block></value><value name="fromLow"><shadow type="math_number" id="Q7UiB;l#Ihf[Na=Q)c]."><field name="NUM">0</field></shadow></value><value name="fromHigh"><shadow type="math_number" id="v^;mr-^aA8LXP^8kStC:"><field name="NUM">100</field></shadow></value><value name="toLow"><shadow type="math_number" id="W,)$ww?GR$5#g*n75eq:"><field name="NUM">0</field></shadow></value><value name="toHigh"><shadow type="math_number" id="==m=Y;N0UzKe}G@V$tE="><field name="NUM">7</field></shadow></value></block></value></block></value><value name="STEP"><shadow type="math_number" id="^(I9Hfs2Hv.V-N:U_I0E"><field name="NUM">1</field></shadow></value></block></value><value name="VAR"><shadow type="variables_get" id="R1VSe7Xu9Kb``,)q({;f"><field name="VAR">y</field></shadow></value><statement name="DO"><block type="display_bright_point" id="]M4q;*$657EM:3;fxT5M"><value name="x"><shadow type="pins_exlcdh" id="7iIO1Tr|o94g6|6q?si["><field name="PIN">11</field></shadow></value><value name="y"><shadow type="pins_exlcdv" id="A7]6h=7mI2uMnCciuQ23"><field name="PIN">0</field></shadow><block type="math_arithmetic" id="v~uX2^4WLRU~7[^}|wh8"><field name="OP">MINUS</field><value name="A"><shadow type="math_number" id="T(31oL41gDTEmb6nc=H="><field name="NUM">7</field></shadow></value><value name="B"><shadow type="math_number" id="E)fH#$2P_K+jgKdek^0z"><field name="NUM">1</field></shadow><block type="variables_get" id="|H[g=`J:06sByUvw8|Hm"><field name="VAR">y</field></block></value></block></value><value name="STAT"><shadow type="display_onoff" id="BH8V5A]v2Dp7:TUnH_;{"><field name="ONOFF">ON</field></shadow></value></block></statement><next><block type="display_shift" id=",vEVdci8L$RNVoHv_3J-"><field name="OP">shift_left</field><value name="val"><shadow type="math_number" id="Z.aj3.o;H6vz6~?Qf[VK"><field name="NUM">1</field></shadow></value><next><block type="controls_delay_new" id="S1wPU!DdS{YCUdBm:Wmb"><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id="T1vPd2e)lf(I-N,pDHFV"><field name="NUM">0.1</field></shadow></value></block></next></block></next></block></next></block></statement></block></xml><config>{}</config><code>aW1wb3J0IG1hY2hpbmUKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX2JvdApmcm9tIG1peHB5IGltcG9ydCBtYXRoX21hcApmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfbWF0cml4CmltcG9ydCB0aW1lCgoKd2hpbGUgVHJ1ZToKICAgIHByaW50KG9uYm9hcmRfYm90LnNvdW5kbGV2ZWwoKSkKICAgIGZvciB5IGluIHJhbmdlKDAsIGludCgobWF0aF9tYXAob25ib2FyZF9ib3Quc291bmRsZXZlbCgpLCAwLCAxMDAsIDAsIDcpKSksIDEpOgogICAgICAgIG9uYm9hcmRfbWF0cml4LnBpeGVsKGludCgxMSksIGludCg3IC0geSksIDEpCiAgICAgICAgb25ib2FyZF9tYXRyaXguc2hvdygpCiAgICBvbmJvYXJkX21hdHJpeC5zaGlmdF9sZWZ0KDEpCiAgICB0aW1lLnNsZWVwKDAuMSkK</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-C2@元控奋斗(MINI)"><block type="controls_whileUntil" id="}x8y)Z4}_3:(xb^mO8~b" x="-1433" y="-745"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="@9GK;e,hlnf+|6,}B]O:"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="system_print" id=";i1SK8^$@jh3cj8w{pA]"><value name="VAR"><shadow type="text" id="U9?W5TIq0@0t|h-XRstd"><field name="TEXT">Mixly</field></shadow><block type="sensor_LTR308" id="f!m!c9nUS(^GKn{uBkU`"></block></value><next><block type="display_show_image_or_string_delay" id="m}@N;XV|C$YWNF_1E!uE"><field name="center">False</field><value name="data"><shadow type="text" id="O$3^@=+-{;7?Y2Wx!.NV"><field name="TEXT">Mixly</field></shadow><block type="number_to_text" id="=59|*hD;k2gsOUD~p~c!"><value name="VAR"><shadow type="variables_get" id="+4fOGTH7~k?Q64FV0OwM"><field name="VAR">x</field></shadow><block type="text_to_number" id="f?Zbtb|pQT^lfvfBF$~^"><field name="TOWHAT">int</field><value name="VAR"><shadow type="variables_get" id="8=UwfYukg8v^8$MfK7JY"><field name="VAR">x</field></shadow><block type="sensor_LTR308" id="0_U|j:*Fu;#MK3aavj*t"></block></value></block></value></block></value><value name="space"><shadow type="math_number" id="2yw[Iyy+M{AYryIB`2jw"><field name="NUM">0</field></shadow></value><next><block type="controls_delay_new" id="m!SFTW[lnzz/_Jz6qb~S"><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id="1~84Qni}bTI2Ea!~,|0W"><field name="NUM">0.1</field></shadow></value></block></next></block></next></block></statement></block></xml><config>{}</config><code>aW1wb3J0IG1hY2hpbmUKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX2Fscwpmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfbWF0cml4CmltcG9ydCB0aW1lCgoKd2hpbGUgVHJ1ZToKICAgIHByaW50KG9uYm9hcmRfYWxzLmFsc192aXMoKSkKICAgIG9uYm9hcmRfbWF0cml4LnNob3dzKHN0cihpbnQob25ib2FyZF9hbHMuYWxzX3ZpcygpKSksc3BhY2UgPSAwLGNlbnRlciA9IEZhbHNlKQogICAgdGltZS5zbGVlcCgwLjEpCg==</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-C2@元控奋斗(MINI)"><block type="variables_set" id="Y+v/d!@{#=Al)HCE*0xw" x="-1439" y="-816"><field name="VAR">当前光强</field><value name="VALUE"><block type="math_number" id="{lsZ]tzCi*UqXivl!8ut"><field name="NUM">0</field></block></value><next><block type="variables_set" id="C|{BBiAac?=5]x_$R@O;"><field name="VAR">补光大小</field><value name="VALUE"><block type="math_number" id="hnnJHh4h`:YV$K6]i6pw"><field name="NUM">0</field></block></value><next><block type="controls_whileUntil" id="WH{7l,lVZ,zIyuw=$iPQ"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="(GoWxM8Glf]|{^~o?^1g"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="variables_set" id="W0(2wKxhh@^K)j9TdVN@"><field name="VAR">当前光强</field><value name="VALUE"><block type="text_to_number" id="[~MQUN@;F:pK.@1411,."><field name="TOWHAT">int</field><value name="VAR"><shadow type="variables_get" id="Wp/X.KvSQ(fE.gD8UPA7"><field name="VAR">x</field></shadow><block type="sensor_LTR308" id="Fc9p-~7z_A!Cn`Sb^n4w"></block></value></block></value><next><block type="system_print" id="w:F5032fkoHJ2q)Ct78m"><value name="VAR"><shadow type="text" id="QJ!SjlVLb)XmD=p)hJMj"><field name="TEXT">Mixly</field></shadow><block type="variables_get" id="*ZsQteB-dbd)(X)IFTEZ"><field name="VAR">当前光强</field></block></value><next><block type="display_show_image_or_string_delay" id="E!0i/~z4![S4d8Yt4QIm"><field name="center">False</field><value name="data"><shadow type="text" id="#uCT8a:._HSZi,5S,/N6"><field name="TEXT">Mixly</field></shadow><block type="number_to_text" id="diy}i#=GZtAkox]t3$Xl"><value name="VAR"><shadow type="variables_get" id="9;~h:S|9ldJ/@u7u+~XK"><field name="VAR">x</field></shadow><block type="variables_get" id="sS!*/pE;r10Tm+_YQ3}L"><field name="VAR">当前光强</field></block></value></block></value><value name="space"><shadow type="math_number" id="E8C:3|`,qmMJlmnj|?In"><field name="NUM">0</field></shadow></value><next><block type="variables_set" id="e;X6Z$?M9^N,B.03_i?c"><field name="VAR">补光大小</field><value name="VALUE"><block type="math_constrain" id="EJvxH|+vOS9xYn]FHch*"><value name="VALUE"><shadow type="math_number" id="O3^kwSxps^fD.JC;S7d1"><field name="NUM">1000</field></shadow><block type="math_arithmetic" id="IzZ.XNQXO8N}7r!#bb|Y"><field name="OP">MINUS</field><value name="A"><shadow type="math_number" id="n8qEoF_*Jj??{ir]u5#y"><field name="NUM">25</field></shadow></value><value name="B"><shadow type="math_number" id="8Y$0PS_MCPJYI63A/:s~"><field name="NUM">1</field></shadow><block type="variables_get" id="w#^yOJx]=?w6GgQk]k}N"><field name="VAR">当前光强</field></block></value></block></value><value name="LOW"><shadow type="math_number" id="I@0llYK$m_ZF*I(/j@*f"><field name="NUM">0</field></shadow></value><value name="HIGH"><shadow type="math_number" id=")oQ6EGcdFlrWsG!j-QHq"><field name="NUM">25</field></shadow></value></block></value><next><block type="actuator_onboard_neopixel_rgb_all" id="AyOO@J=]l(;.gS8}N2}f"><value name="RVALUE"><shadow type="math_number" id="Bp)^u?RZvk/5_L7*ZIm1"><field name="NUM">0</field></shadow><block type="variables_get" id="AAB^utYW,Qx{yh+bWji`"><field name="VAR">补光大小</field></block></value><value name="GVALUE"><shadow type="math_number" id=":44/2@*[.#cjcf4O*cl:"><field name="NUM">0</field></shadow><block type="variables_get" id="q.e6^NPTG(jBiP7oi32z"><field name="VAR">补光大小</field></block></value><value name="BVALUE"><shadow type="math_number" id="ak-u]m06.;pd^h5MBS!j"><field name="NUM">0</field></shadow><block type="variables_get" id="}l5ps*I5ob99[p$]m^35"><field name="VAR">补光大小</field></block></value><next><block type="actuator_onboard_neopixel_write" id="WG9=|-$6ww?xz2tKaK`h"></block></next></block></next></block></next></block></next></block></next></block></statement></block></next></block></next></block></xml><config>{}</config><code>ZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX2FscwppbXBvcnQgbWFjaGluZQpmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfbWF0cml4CmZyb20gbWl4Z29fbWluaSBpbXBvcnQgb25ib2FyZF9yZ2IKCgpfRTVfQkRfOTNfRTVfODlfOERfRTVfODVfODlfRTVfQkNfQkEgPSAwCl9FOF9BMV9BNV9FNV84NV84OV9FNV9BNF9BN19FNV9CMF84RiA9IDAKd2hpbGUgVHJ1ZToKICAgIF9FNV9CRF85M19FNV84OV84RF9FNV84NV84OV9FNV9CQ19CQSA9IGludChvbmJvYXJkX2Fscy5hbHNfdmlzKCkpCiAgICBwcmludChfRTVfQkRfOTNfRTVfODlfOERfRTVfODVfODlfRTVfQkNfQkEpCiAgICBvbmJvYXJkX21hdHJpeC5zaG93cyhzdHIoX0U1X0JEXzkzX0U1Xzg5XzhEX0U1Xzg1Xzg5X0U1X0JDX0JBKSxzcGFjZSA9IDAsY2VudGVyID0gRmFsc2UpCiAgICBfRThfQTFfQTVfRTVfODVfODlfRTVfQTRfQTdfRTVfQjBfOEYgPSBtaW4obWF4KDI1IC0gX0U1X0JEXzkzX0U1Xzg5XzhEX0U1Xzg1Xzg5X0U1X0JDX0JBLCAwKSwgMjUpCiAgICBvbmJvYXJkX3JnYi5maWxsKChfRThfQTFfQTVfRTVfODVfODlfRTVfQTRfQTdfRTVfQjBfOEYsIF9FOF9BMV9BNV9FNV84NV84OV9FNV9BNF9BN19FNV9CMF84RiwgX0U4X0ExX0E1X0U1Xzg1Xzg5X0U1X0E0X0E3X0U1X0IwXzhGKSkKICAgIG9uYm9hcmRfcmdiLndyaXRlKCkK</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-C2@元控奋斗(MINI)"><block type="variables_set" id="#Y_3hurlSZ,RGINR{~:b" x="-1439" y="-816"><field name="VAR">接近距离</field><value name="VALUE"><block type="math_number" id="M9Fa(`iukQ=Wcq`Xzb?z"><field name="NUM">0</field></block></value><next><block type="controls_whileUntil" id="`{2IU3xnUxxzl/F0m!Mt"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="kG?^HpcTJ./X!.oRfKW#"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="variables_set" id="~OA2U8vg^.]yE3`Sfv;)"><field name="VAR">接近距离</field><value name="VALUE"><block type="text_to_number" id="hC270vVYm=NcK4aEy[t3"><field name="TOWHAT">int</field><value name="VAR"><shadow type="variables_get" id="Hr.:_J$=JHZL6BC(7dI="><field name="VAR">x</field></shadow><block type="sensor_mixgo_pin_near_single" id="Q5CYM]J]-,!BK4TvuOsw"></block></value></block></value><next><block type="system_print" id="R0Bf8K+XwU2F=$m0ET3)"><value name="VAR"><shadow type="text" id="J.YPT8f{0{po1xj}D}r~"><field name="TEXT">Mixly</field></shadow><block type="variables_get" id="q_rkAd#kUcd/|d1VieA6"><field name="VAR">接近距离</field></block></value><next><block type="display_scroll_string" id="xX,+|vfS=Fp=i52DMom="><value name="data"><shadow type="text" id="yE+yO}]:C)X^q|Zn[?e-"><field name="TEXT">Mixly</field></shadow><block type="number_to_text" id="xG{`_KdZCW+i#+4Iv3[Q"><value name="VAR"><shadow type="variables_get" id="c{-{*F/2(2GcIrmqnZ-U"><field name="VAR">x</field></shadow><block type="variables_get" id="@CRm*dV:8L5W([|}/g.M"><field name="VAR">接近距离</field></block></value></block></value></block></next></block></next></block></statement></block></next></block></xml><config>{}</config><code>ZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX2FscwppbXBvcnQgbWFjaGluZQpmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfbWF0cml4CgoKX0U2XzhFX0E1X0U4X0JGXzkxX0U4X0I3XzlEX0U3X0E2X0JCID0gMAp3aGlsZSBUcnVlOgogICAgX0U2XzhFX0E1X0U4X0JGXzkxX0U4X0I3XzlEX0U3X0E2X0JCID0gaW50KG9uYm9hcmRfYWxzLnBzX25sKCkpCiAgICBwcmludChfRTZfOEVfQTVfRThfQkZfOTFfRThfQjdfOURfRTdfQTZfQkIpCiAgICBvbmJvYXJkX21hdHJpeC5zY3JvbGwoc3RyKF9FNl84RV9BNV9FOF9CRl85MV9FOF9CN185RF9FN19BNl9CQikpCg==</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-C2@元控奋斗(MINI)"><block type="variables_set" id="X(nw/HNt~J.W=3}fZ4)D" x="-1439" y="-831"><field name="VAR">接近距离</field><value name="VALUE"><block type="math_number" id="r.4.N(2{yV85)@E]R1}l"><field name="NUM">0</field></block></value><next><block type="variables_set" id="Gre)3M:#v]}7UM`g27O@"><field name="VAR">是否报警</field><value name="VALUE"><block type="logic_boolean" id="50}`*uT88e0oju;Dd*/w"><field name="BOOL">FALSE</field></block></value><next><block type="controls_whileUntil" id="]Ya6u+P8~k).5wcfuL^r"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="u6=]U{+cWOO_K/+Vh(7:"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="variables_set" id="Q3SRG[{7JykSoR~E|;$+"><field name="VAR">接近距离</field><value name="VALUE"><block type="text_to_number" id="zuah~?(@.vZv(UfXc5Au"><field name="TOWHAT">int</field><value name="VAR"><shadow type="variables_get" id="Y@jdLPL.5yosIt2OEKK;"><field name="VAR">x</field></shadow><block type="sensor_mixgo_pin_near_single" id="e$},vI-S-9X^g]srSS!O"></block></value></block></value><next><block type="system_print" id=")N$uS8W4Tabm3(9x6dNZ"><value name="VAR"><shadow type="text" id="vl,Y:ZOUGEWirKp*/8|{"><field name="TEXT">Mixly</field></shadow><block type="variables_get" id="(;IvQHzJcfLl9!-p4/d1"><field name="VAR">接近距离</field></block></value><next><block type="display_show_image_or_string_delay" id="3Ypwp;fyiv9h^WG^`y[P"><field name="center">False</field><value name="data"><shadow type="text" id="gsZpxBwClWJZU+)+a=s="><field name="TEXT">Mixly</field></shadow><block type="number_to_text" id="$SclT0HiVk=XVnFa)I`R"><value name="VAR"><shadow type="variables_get" id="N!C.DI@oi9ea^Py`d2zZ"><field name="VAR">x</field></shadow><block type="math_arithmetic" id="VWE9IU!s9Y{p$#KgPU9U"><field name="OP">ZHENGCHU</field><value name="A"><shadow type="math_number" id="calZG=}-lq3=ssu[JOvq"><field name="NUM">1</field></shadow><block type="variables_get" id="|I~pYurHGGuGxB]GXlBd"><field name="VAR">接近距离</field></block></value><value name="B"><shadow type="math_number" id="W8IrBR=cQTekv-OS^Jm@"><field name="NUM">100</field></shadow></value></block></value></block></value><value name="space"><shadow type="math_number" id="}c3_8h.Ddk5XnPEKM1:U"><field name="NUM">0</field></shadow></value><next><block type="variables_set" id="6fOy5nwkK+3uXrsFV;hf"><field name="VAR">是否报警</field><value name="VALUE"><block type="logic_compare" id="JN?@UZ~w6lAqnqJ/fTm."><field name="OP">GT</field><value name="A"><block type="variables_get" id="92r-|U]1{q?!8mfzuO-R"><field name="VAR">接近距离</field></block></value><value name="B"><block type="math_number" id="D=#ZbP[M#Itz=fh*bY|d"><field name="NUM">1000</field></block></value></block></value><next><block type="controls_if" id="8TJJ]?/S**B6J8;gvA$b"><value name="IF0"><block type="variables_get" id="G~0sjjG!/AIIM$w^Ia)0"><field name="VAR">是否报警</field></block></value><statement name="DO0"><block type="esp32_onboard_music_play_list" id="169W_KTCz`o4QN)^Ag21"><value name="LIST"><shadow type="pins_playlist" id="@0fMJ{.(sDy?.ZcadtaE"><field name="PIN">onboard_music.DADADADUM</field></shadow></value></block></statement></block></next></block></next></block></next></block></next></block></statement></block></next></block></next></block></xml><config>{}</config><code>ZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX2FscwppbXBvcnQgbWFjaGluZQpmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfbWF0cml4CmZyb20gbWl4Z29fbWluaSBpbXBvcnQgb25ib2FyZF9tdXNpYwoKCl9FNl84RV9BNV9FOF9CRl85MV9FOF9CN185RF9FN19BNl9CQiA9IDAKX0U2Xzk4X0FGX0U1XzkwX0E2X0U2XzhBX0E1X0U4X0FEX0E2ID0gRmFsc2UKd2hpbGUgVHJ1ZToKICAgIF9FNl84RV9BNV9FOF9CRl85MV9FOF9CN185RF9FN19BNl9CQiA9IGludChvbmJvYXJkX2Fscy5wc19ubCgpKQogICAgcHJpbnQoX0U2XzhFX0E1X0U4X0JGXzkxX0U4X0I3XzlEX0U3X0E2X0JCKQogICAgb25ib2FyZF9tYXRyaXguc2hvd3Moc3RyKChfRTZfOEVfQTVfRThfQkZfOTFfRThfQjdfOURfRTdfQTZfQkIgLy8gMTAwKSksc3BhY2UgPSAwLGNlbnRlciA9IEZhbHNlKQogICAgX0U2Xzk4X0FGX0U1XzkwX0E2X0U2XzhBX0E1X0U4X0FEX0E2ID0gX0U2XzhFX0E1X0U4X0JGXzkxX0U4X0I3XzlEX0U3X0E2X0JCID4gMTAwMAogICAgaWYgX0U2Xzk4X0FGX0U1XzkwX0E2X0U2XzhBX0E1X0U4X0FEX0E2OgogICAgICAgIG9uYm9hcmRfbXVzaWMucGxheShvbmJvYXJkX211c2ljLkRBREFEQURVTSkK</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-C2@元控奋斗(MINI)"><block type="controls_whileUntil" id="yQGY7p`,aGCzPI;S(Gs/" x="-1405" y="-729"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="a7+MDf`;@dU}xbh/Yjk*"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="system_print" id="zpZ}Pv-lQ5:izYo^!c-0"><value name="VAR"><shadow type="text" id=":}81}5bB)sZlp3T^_i(9"><field name="TEXT">Mixly</field></shadow><block type="sensor_get_acceleration" id="vg};:tW/-z4`KgJt?q3A"><field name="key"></field></block></value><next><block type="controls_delay_new" id="55;-4IP6)B/}7O{MS/y1"><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id="D$fY,_D1^:JJMP7`Ps.Y"><field name="NUM">1</field></shadow></value></block></next></block></statement></block></xml><config>{}</config><code>aW1wb3J0IG1hY2hpbmUKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX2FjYwppbXBvcnQgdGltZQoKCndoaWxlIFRydWU6CiAgICBwcmludChvbmJvYXJkX2FjYy5hY2NlbGVyYXRpb24oKSkKICAgIHRpbWUuc2xlZXAoMSkK</code>
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-C2@元控奋斗(MINI)"><block type="controls_whileUntil" id="kbc@|^;9pfoEq/FG$(P?" x="-1474" y="-692"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="X_=jD4S,ccdKUH;]8v3$"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="system_print" id="$NR2M9;nHO1Jhats)X/r"><value name="VAR"><shadow type="text" id="x73H/AO.?3I)e[L8H^!V"><field name="TEXT">Mixly</field></shadow><block type="sensor_mixgo_cc_mmc5603_get_magnetic" id="va~HFT1nxR//g.-?~l`*"><field name="key">all</field></block></value><next><block type="controls_delay_new" id="yI7;mFVfDK}Z_W~{lLV,"><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id="(I!LQPvhEP:cz`oyxbic"><field name="NUM">1</field></shadow></value></block></next></block></statement></block></xml><config>{}</config><code>aW1wb3J0IG1hY2hpbmUKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21ncwppbXBvcnQgdGltZQoKCndoaWxlIFRydWU6CiAgICBwcmludChvbmJvYXJkX21ncy5nZXRzdHJlbmd0aCgpKQogICAgdGltZS5zbGVlcCgxKQo=</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-C2@元控奋斗(MINI)"><block type="controls_whileUntil" id="d]s?~(R$H^5OT5#TE@(}" x="-1507" y="-849"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="3Lh=4bNW3FKR,]2b*pTw"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="controls_if" id="0g[R+9!ZB_)/QU{*5k/c"><value name="IF0"><block type="logic_compare" id="`-ECJm}1=$EN1,t/mJtc"><field name="OP">GT</field><value name="A"><block type="sensor_mixgo_cc_mmc5603_get_magnetic" id="pmA~.Z1PsXI=,,NC$;H|"><field name="key">all</field></block></value><value name="B"><block type="math_number" id="wTiEjaOZ;RI,=*(zO|cI"><field name="NUM">2000</field></block></value></block></value><statement name="DO0"><block type="esp32_onboard_music_pitch_with_time" id="=H{gDO[GDHp2w}O|`;=H"><value name="pitch"><shadow type="pins_tone_notes" id="I;r+jO`#wr`z-g[1.yM:"><field name="PIN">440</field></shadow></value><value name="time"><shadow type="math_number" id="7]Z9Usz{nKW8d4qA~nL]"><field name="NUM">100</field></shadow></value><next><block type="display_show_image_or_string_delay" id="m$TRNcQn:m[t^EU#X)@b"><field name="center">True</field><value name="data"><shadow type="text" id="PaKJ:|$^)g)=~eM$!)te"><field name="TEXT">GO</field></shadow></value><value name="space"><shadow type="math_number" id="$_T_Dg|;el_5m9rQN|0}"><field name="NUM">0</field></shadow></value><next><block type="controls_delay_new" id=")I{Yx;1$=Ivzs$k{~/Ft"><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id="W`IN0D1YlBRBZ*0YDaz|"><field name="NUM">1</field></shadow></value></block></next></block></next></block></statement><next><block type="controls_if" id="7SH1eJUT$R~T)CW-V+rx"><value name="IF0"><block type="sensor_mixgo_button_was_pressed" id="^3GG3{*zkqyzIR!*3^B!"><value name="btn"><shadow type="pins_button" id="=8Ae8|Cx~_I`M3#dMEyH"><field name="PIN">B1key</field></shadow></value></block></value><statement name="DO0"><block type="display_clear" id="_iXL/.1*3C({!SLq]_bm"></block></statement></block></next></block></statement></block></xml><config>{}</config><code>ZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21ncwpmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfbXVzaWMKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21hdHJpeAppbXBvcnQgdGltZQppbXBvcnQgbWl4Z29fbWluaQoKCndoaWxlIFRydWU6CiAgICBpZiBvbmJvYXJkX21ncy5nZXRzdHJlbmd0aCgpID4gMjAwMDoKICAgICAgICBvbmJvYXJkX211c2ljLnBpdGNoX3RpbWUoNDQwLCAxMDApCiAgICAgICAgb25ib2FyZF9tYXRyaXguc2hvd3MoJ0dPJyxzcGFjZSA9IDAsY2VudGVyID0gVHJ1ZSkKICAgICAgICB0aW1lLnNsZWVwKDEpCiAgICBpZiBtaXhnb19taW5pLkIxa2V5Lndhc19wcmVzc2VkKCk6CiAgICAgICAgb25ib2FyZF9tYXRyaXguZmlsbCgwKQogICAgICAgIG9uYm9hcmRfbWF0cml4LnNob3coKQo=</code>
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-C2@元控奋斗(MINI)"><block type="display_bright_point" id="}DHe$Nlq!!?@W!R21`n9" x="-675" y="-358"><value name="x"><shadow type="pins_exlcdh" id="?njI|jXfRTKdG.ll}`:{"><field name="PIN">6</field></shadow></value><value name="y"><shadow type="pins_exlcdv" id="crOz@[lvYN[UuQWQJZXD"><field name="PIN">4</field></shadow></value><value name="STAT"><shadow type="display_onoff" id="R2NkDo6mQM/U253HCno;"><field name="ONOFF">ON</field></shadow></value><next><block type="controls_whileUntil" id="Qs{HRC/(:{bGw+V^_uBd"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="[X(!-bx}~P@$tq0GC-.$"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="controls_if" id="4^$3N[YDo/:p{n{Niqso"><value name="IF0"><block type="sensor_mixgo_button_was_pressed" id="bYnuV0jB`hIhJv|V[r[U"><value name="btn"><shadow type="pins_button" id="CqASFQP1WU5$.-2^fOMm"><field name="PIN">A1key</field></shadow></value></block></value><statement name="DO0"><block type="display_shift" id="#.0(_ujQRCw63AO34z:4"><field name="OP">shift_down</field><value name="val"><shadow type="math_number" id="|uiscUP8SAp~Wsp0Rk1{"><field name="NUM">1</field></shadow></value></block></statement><next><block type="controls_if" id="7v_K[OOwj?7s7}n[Pdct"><value name="IF0"><block type="sensor_mixgo_button_was_pressed" id="@csTKgu)!{j!4,L=EiWW"><value name="btn"><shadow type="pins_button" id="${5$p2XwFx5JAz={yzBL"><field name="PIN">A2key</field></shadow></value></block></value><statement name="DO0"><block type="display_shift" id="7Bs#e2l5EE]jl-3O3j#("><field name="OP">shift_left</field><value name="val"><shadow type="math_number" id="By*rONGzKkXR^F!,ru2M"><field name="NUM">1</field></shadow></value></block></statement><next><block type="controls_if" id="I{^j*!6bC5rDVU`bzz63"><value name="IF0"><block type="sensor_mixgo_button_was_pressed" id="CSI*na=m]`T)l7y_K_PT"><value name="btn"><shadow type="pins_button" id="dBGmz,`@2SGe*d0Dlb+v"><field name="PIN">A3key</field></shadow></value></block></value><statement name="DO0"><block type="display_shift" id="}f/8n1Z6N]y9nPd^!..J"><field name="OP">shift_up</field><value name="val"><shadow type="math_number" id="K,qUiyERbLUjX}dhIvOE"><field name="NUM">1</field></shadow></value></block></statement><next><block type="controls_if" id="ygJc;+[L`6MGH3rSM(@["><value name="IF0"><block type="sensor_mixgo_button_was_pressed" id="jaNevf]Z^{91oia?uSGR"><value name="btn"><shadow type="pins_button" id="RfWE`3v5tWf0mGMq*LQd"><field name="PIN">A4key</field></shadow></value></block></value><statement name="DO0"><block type="display_shift" id="GZT2)h.b[aAS[CwTL1d="><field name="OP">shift_right</field><value name="val"><shadow type="math_number" id="g`]oIs7KO0=0g(8CQWu2"><field name="NUM">1</field></shadow></value></block></statement></block></next></block></next></block></next></block></statement></block></next></block></xml><config>{}</config><code>ZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21hdHJpeAppbXBvcnQgbWl4Z29fbWluaQoKCm9uYm9hcmRfbWF0cml4LnBpeGVsKGludCg2KSwgaW50KDQpLCAxKQpvbmJvYXJkX21hdHJpeC5zaG93KCkKd2hpbGUgVHJ1ZToKICAgIGlmIG1peGdvX21pbmkuQTFrZXkud2FzX3ByZXNzZWQoKToKICAgICAgICBvbmJvYXJkX21hdHJpeC5zaGlmdF9kb3duKDEpCiAgICBpZiBtaXhnb19taW5pLkEya2V5Lndhc19wcmVzc2VkKCk6CiAgICAgICAgb25ib2FyZF9tYXRyaXguc2hpZnRfbGVmdCgxKQogICAgaWYgbWl4Z29fbWluaS5BM2tleS53YXNfcHJlc3NlZCgpOgogICAgICAgIG9uYm9hcmRfbWF0cml4LnNoaWZ0X3VwKDEpCiAgICBpZiBtaXhnb19taW5pLkE0a2V5Lndhc19wcmVzc2VkKCk6CiAgICAgICAgb25ib2FyZF9tYXRyaXguc2hpZnRfcmlnaHQoMSkK</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-C2@元控奋斗(MINI)"><block type="onboard_RTC_set_datetime" id="MgV.Rn.5B5ff;xnV:@+g" inline="true" x="-1763" y="-898"><value name="year"><shadow type="math_number" id="FrP|g$-~5(v,19[4UL:n"><field name="NUM">2024</field></shadow></value><value name="month"><shadow type="math_number" id="XE0QQRjbV+3}I/~hSxgE"><field name="NUM">4</field></shadow></value><value name="day"><shadow type="math_number" id="c@^F7jYQ~!S,_lx9Fg{p"><field name="NUM">2</field></shadow></value><value name="hour"><shadow type="math_number" id="tBtQ#RTOtEK+dymI-G)H"><field name="NUM">21</field></shadow></value><value name="minute"><shadow type="math_number" id="m-3PqB}Ux-6)sRYgU@$8"><field name="NUM">4</field></shadow></value><value name="second"><shadow type="math_number" id="H_|Q=K/Eoo}injEJy37;"><field name="NUM">45</field></shadow></value><next><block type="controls_whileUntil" id="t6F0Ce8y`hYIi*{u2QIs"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="QzI:0.X7k4Yy+kPaVE0W"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="system_print" id="@VLQZ$H{3d^o8WJ$(N.`"><value name="VAR"><shadow type="text" id="O~@I.7TO{m2{4POxrT-w"><field name="TEXT">Mixly</field></shadow><block type="onboard_RTC_get_time" id="1oBbBJ;ohllcwWYFp]|:"></block></value><next><block type="controls_delay_new" id="5{RgVe;Nl[#P_5_[-19a"><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id="CQLIoVuPLlg?aIG6S#^F"><field name="NUM">1</field></shadow></value></block></next></block></statement></block></next></block></xml><config>{}</config><code>aW1wb3J0IG50cHRpbWUKaW1wb3J0IG1hY2hpbmUKaW1wb3J0IHRpbWUKCgpudHB0aW1lLnNldHRpbWUoKDIwMjQsNCwyLDIxLDA0LDQ1LDAsMCkpCndoaWxlIFRydWU6CiAgICBwcmludCh0aW1lLmxvY2FsdGltZSgpKQogICAgdGltZS5zbGVlcCgxKQo=</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-C2@元控奋斗(MINI)"><block type="onboard_RTC_set_datetime" id="65q^3qC4sh6IaezPCruX" inline="true" x="-2187" y="-818"><value name="year"><shadow type="math_number" id="whl#m`SfebH`[cu$+dn!"><field name="NUM">2024</field></shadow></value><value name="month"><shadow type="math_number" id="0_Bl^Wwj__R{Yr.cS^45"><field name="NUM">4</field></shadow></value><value name="day"><shadow type="math_number" id="2BRG.og`pWGr(cOG;t`,"><field name="NUM">2</field></shadow></value><value name="hour"><shadow type="math_number" id="xt{_3c7^N/-U-Sa!f@vH"><field name="NUM">21</field></shadow></value><value name="minute"><shadow type="math_number" id="jsQ2MwfQpbq=!~zUDVi|"><field name="NUM">4</field></shadow></value><value name="second"><shadow type="math_number" id="I(^z/O1]`X+][ppP7ER~"><field name="NUM">45</field></shadow></value><next><block type="controls_whileUntil" id="#8GiG._+K|y21QHcGHA["><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="Vc0}c(UsL404p:Um9/0o"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="variables_set" id="T.OtLiV#`6RX^kUhhglh"><field name="VAR">mytup</field><value name="VALUE"><block type="onboard_RTC_get_time" id="]T0Jf(v)U}wsZP(_OHP3"></block></value><next><block type="display_scroll_string" id="q#;opu4~9CIxb+peAfcv"><value name="data"><shadow type="text" id="!iK!qxf|G*4_TeH*~|O|"><field name="TEXT">Mixly</field></shadow><block type="text_format_noreturn" id="8;UMyGq)T@n6E8I^{4rv" inline="false"><mutation items="3"></mutation><value name="VAR"><shadow type="text" id="C@8I,-L,.P-4b]O-Uozf"><field name="TEXT">{}:{}:{}</field></shadow></value><value name="ADD0"><block type="number_to_text" id="d#mzDylTqj8,={Z5hqsH"><value name="VAR"><shadow type="variables_get" id="|Yt1Pia$EP8nqJu}Pp2$"><field name="VAR">x</field></shadow><block type="tuple_getIndex" id="Y6-o:YaXUA~Nh.})~Cc,"><value name="TUP"><shadow type="variables_get" id="5v?J/8J!3~3,wmNkJJx`"><field name="VAR">mytup</field></shadow></value><value name="AT"><shadow type="math_number" id="8??pMB]T:fE;/Hc$m(pr"><field name="NUM">3</field></shadow></value></block></value></block></value><value name="ADD1"><block type="number_to_text" id="FgeuXY[,d[Tsdg?#v;4j"><value name="VAR"><shadow type="variables_get" id="-KBN[da3uh,`UjI!xcsP"><field name="VAR">x</field></shadow><block type="tuple_getIndex" id="[{T!9AlZcqc=Oog?:P_5"><value name="TUP"><shadow type="variables_get" id="WE**VqW(-b@0$vOqAj4I"><field name="VAR">mytup</field></shadow></value><value name="AT"><shadow type="math_number" id="RyuSI0=6N+VSlToK)]sR"><field name="NUM">4</field></shadow></value></block></value></block></value><value name="ADD2"><block type="number_to_text" id="2R*.?8iH?pEWWi}GnIdW"><value name="VAR"><shadow type="variables_get" id="UC~D#bRZByh$pn.D;=q}"><field name="VAR">x</field></shadow><block type="tuple_getIndex" id="xr+JH?Jpln0IG0Z3wl*$"><value name="TUP"><shadow type="variables_get" id="MM.RSK2iG3dM47s.@paJ"><field name="VAR">mytup</field></shadow></value><value name="AT"><shadow type="math_number" id="L29a]W(HNEKYd14GOM,I"><field name="NUM">5</field></shadow></value></block></value></block></value></block></value><next><block type="controls_delay_new" id="DPR;}H|0]^YvdRzUY[B`"><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id="x*!V7p:yVtIT]j:Ep,{h"><field name="NUM">0.5</field></shadow></value></block></next></block></next></block></statement></block></next></block></xml><config>{}</config><code>aW1wb3J0IG50cHRpbWUKaW1wb3J0IHRpbWUKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21hdHJpeAoKCm50cHRpbWUuc2V0dGltZSgoMjAyNCw0LDIsMjEsMDQsNDUsMCwwKSkKd2hpbGUgVHJ1ZToKICAgIG15dHVwID0gdGltZS5sb2NhbHRpbWUoKQogICAgb25ib2FyZF9tYXRyaXguc2Nyb2xsKCd7fTp7fTp7fScuZm9ybWF0KHN0cihteXR1cFszXSksIHN0cihteXR1cFs0XSksIHN0cihteXR1cFs1XSkpKQogICAgdGltZS5zbGVlcCgwLjUpCg==</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 3.0 rc0" board="Python ESP32-C2@元控奋斗(MINI)" shown="block"><block type="actuator_neopixel_init" id="w/Vp{s[{Tq0_77uJy=!F" x="0" y="0"><value name="SUB"><shadow type="variables_get" id="tR[5jbXi)(r0jT@6z7M^"><field name="VAR">rgb</field></shadow></value><value name="PIN"><shadow type="pins_digital_pin" id="^_h-9|*cer3$DHZ^ZeKj"><field name="PIN">4</field></shadow></value><value name="LEDCOUNT"><shadow type="math_number" id="Eu,(tDZ*zu4z_;#V}^$9"><field name="NUM">12</field></shadow></value><next><block type="controls_whileUntil" id="aj=?2dIc|5gj?Dte)[w6"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="K;I+QouO|}-eYa*$7WQP"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="controls_if" id="Mo#q+kEVdiHR[Yc`.;=2"><mutation elseif="1"></mutation><value name="IF0"><block type="sensor_mixgo_button_was_pressed" id="?dziCIh25!c`OGK00pQd"><value name="btn"><shadow type="pins_button" id="I#jyEG7MPv2lWQ6J4Nc}"><field name="PIN">A1key</field></shadow></value></block></value><statement name="DO0"><block type="math_random_seed" id="u$e-Z|f}]C]y4.x-oXWO"><value name="NUM"><shadow type="math_number" id="/:PS;,MdHXnQBSHC!hgd"><field name="NUM">997</field></shadow><block type="controls_millis" id="g,Ytc]8iS@*b}12@4wR7"><field name="Time">ms</field></block></value><next><block type="actuator_neopixel_rgb_all" id="/J0Vm^+Mg+SZ!0t#eN(J" inline="false"><value name="SUB"><shadow type="variables_get" id="ji=uML4oLj9,i10];OK*"><field name="VAR">rgb</field></shadow></value><value name="RVALUE"><shadow type="math_number" id="!kQiO,L![*XH@3cyarF0"><field name="NUM">0</field></shadow><block type="math_random" id="o?tFp5jN5WEj$ZM;L^xA"><field name="TYPE">int</field><value name="FROM"><shadow type="math_number" id="_q7EM8^N?=qf*HE;2/X:"><field name="NUM">0</field></shadow></value><value name="TO"><shadow type="math_number" id="xh/#J0.m*R{#4~dh0JXk"><field name="NUM">255</field></shadow></value></block></value><value name="GVALUE"><shadow type="math_number" id="1^BRN+yQrj`N8gcIX(#B"><field name="NUM">0</field></shadow><block type="math_random" id=";UD11E,1SfA-5jZyP4fq"><field name="TYPE">int</field><value name="FROM"><shadow type="math_number" id="yOH,+!s0QCD$1UrHm$@Y"><field name="NUM">0</field></shadow></value><value name="TO"><shadow type="math_number" id="ZX.vF@jeoAP})J-fjt:}"><field name="NUM">255</field></shadow></value></block></value><value name="BVALUE"><shadow type="math_number" id="b{V0s4qBGK+1w/O^5/(N"><field name="NUM">0</field></shadow><block type="math_random" id="8-j)y,F-GB0CvTeBh.aO"><field name="TYPE">int</field><value name="FROM"><shadow type="math_number" id="3blVm.n|Ili8x}bU5^`-"><field name="NUM">0</field></shadow></value><value name="TO"><shadow type="math_number" id="bvK,aB[hU$la`;HPtLR]"><field name="NUM">255</field></shadow></value></block></value><next><block type="actuator_neopixel_write" id="[TZ6JqTATGB}YalBif9/"><value name="SUB"><shadow type="variables_get" id="HG5w~.}.0Z;6O]M7rE|,"><field name="VAR">rgb</field></shadow></value></block></next></block></next></block></statement><value name="IF1"><block type="sensor_mixgo_button_was_pressed" id="c9u)K6R009W4LH/ngKIY"><value name="btn"><shadow type="pins_button" id="}gB`ZezBn1x1dRA(K0g~"><field name="PIN">A2key</field></shadow></value></block></value><statement name="DO1"><block type="actuator_neopixel_rgb_all" id="Z(WO1Gj9A2VFh{:3]7wA"><value name="SUB"><shadow type="variables_get" id="Hc=e2h)Exij]?i^|7yPJ"><field name="VAR">rgb</field></shadow></value><value name="RVALUE"><shadow type="math_number" id="!kQiO,L![*XH@3cyarF0"><field name="NUM">0</field></shadow></value><value name="GVALUE"><shadow type="math_number" id="1^BRN+yQrj`N8gcIX(#B"><field name="NUM">0</field></shadow></value><value name="BVALUE"><shadow type="math_number" id="b{V0s4qBGK+1w/O^5/(N"><field name="NUM">0</field></shadow></value><next><block type="actuator_neopixel_write" id="348^,s7P4.$__dT!)myb"><value name="SUB"><shadow type="variables_get" id="GKB2}aaIi2-t9:N@287-"><field name="VAR">rgb</field></shadow></value></block></next></block></statement></block></statement></block></next></block></xml><config>{}</config><code>aW1wb3J0IG1hY2hpbmUKaW1wb3J0IG5lb3BpeGVsCmltcG9ydCBtaXhnb19taW5pCmltcG9ydCByYW5kb20KaW1wb3J0IHRpbWUKCgpyZ2IgPSBuZW9waXhlbC5OZW9QaXhlbChtYWNoaW5lLlBpbig0KSwgMTIpCndoaWxlIFRydWU6CiAgICBpZiBtaXhnb19taW5pLkExa2V5Lndhc19wcmVzc2VkKCk6CiAgICAgICAgcmFuZG9tLnNlZWQodGltZS50aWNrc19tcygpKTsKICAgICAgICByZ2IuZmlsbCgoKHJhbmRvbS5yYW5kaW50KDAsIDI1NSkpLCAocmFuZG9tLnJhbmRpbnQoMCwgMjU1KSksIChyYW5kb20ucmFuZGludCgwLCAyNTUpKSkpCiAgICAgICAgcmdiLndyaXRlKCkKICAgIGVsaWYgbWl4Z29fbWluaS5BMmtleS53YXNfcHJlc3NlZCgpOgogICAgICAgIHJnYi5maWxsKCgwLCAwLCAwKSkKICAgICAgICByZ2Iud3JpdGUoKQo=</code>
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-C2@元控奋斗(MINI)"><block type="variables_set" id="ayd4*({)l#^VM[bpI#U`" x="-2099" y="-915"><field name="VAR">按下时刻</field><value name="VALUE"><block type="math_number" id="o6_E_lNVPaxx)+QA`bjS"><field name="NUM">0</field></block></value><next><block type="variables_set" id="$R;@8I?a_8vdz=/lag!#"><field name="VAR">抬起时刻</field><value name="VALUE"><block type="math_number" id="7}exR2|MhpJ,l+*YpaOB"><field name="NUM">0</field></block></value><next><block type="controls_whileUntil" id="gpu3Lv-VSStmnRkk7Zbi"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="An}U,!6],wwU-)a0Hpos"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="controls_if" id="c-l{42h3LCus6rd*jLo("><value name="IF0"><block type="sensor_mixgo_button_is_pressed" id="x34i[LV1[a-!Y2p2mTLl"><value name="btn"><shadow type="pins_button" id="L.|wOw~fnv)p.eLk73:H"><field name="PIN">B1key</field></shadow></value></block></value><statement name="DO0"><block type="variables_set" id="-vrRF-J}uJM~Eb;KbN?B"><field name="VAR">按下时刻</field><value name="VALUE"><block type="controls_millis" id="!F?P34[=5(8/B9t_K+a@"><field name="Time">ms</field></block></value><next><block type="do_while" id="?gxI)r;UnW,*h}gmJ9[."><field name="type">true</field><value name="select_data"><block type="logic_negate" id="X)p-e;`Q;8|tJ9Qj:vOT"><value name="BOOL"><block type="sensor_mixgo_button_is_pressed" id="TRVLJb+^-t~2mO}j-0]X"><value name="btn"><shadow type="pins_button" id="$lU_@TZoS|}*-cu~~p0~"><field name="PIN">B1key</field></shadow></value></block></value></block></value><next><block type="variables_set" id="PcP8d7OHTTQyxa$SCu9N"><field name="VAR">抬起时刻</field><value name="VALUE"><block type="controls_millis" id="c!oBQ;CY5m[TJQ8IZGB["><field name="Time">ms</field></block></value><next><block type="system_print" id="mr;p9mF-EU,s6-M?,J)k"><value name="VAR"><shadow type="text" id="pc0f?d@p-WTYeJ]XRd4;"><field name="TEXT">Mixly</field></shadow><block type="math_arithmetic" id="!YlQY{4uT1LfY#-utnrB"><field name="OP">MINUS</field><value name="A"><shadow type="math_number" id="[THMBX]9b_k^.A$ag]7z"><field name="NUM">1</field></shadow><block type="variables_get" id="W-NWZQ,rBnsOq8?t/0,h"><field name="VAR">抬起时刻</field></block></value><value name="B"><shadow type="math_number" id="LTxG]U2}HWAjbRvK6k:="><field name="NUM">1</field></shadow><block type="variables_get" id="M!t_#N4IGKdHw`KFb9B~"><field name="VAR">按下时刻</field></block></value></block></value><next><block type="display_scroll_string" id="]Qe8dx7nv}5c-,I=}@q?"><value name="data"><shadow type="text" id="VW[w-uXT^xzM~p+aoYjV"><field name="TEXT">Mixly</field></shadow><block type="number_to_text" id="5C:;80`2fR:3x`|_yn3G"><value name="VAR"><shadow type="variables_get" id="6$K[TnaE!RvAKa-|YB#H"><field name="VAR">x</field></shadow><block type="math_arithmetic" id="2Pucn8eA6=#wg4E)CFL5"><field name="OP">MINUS</field><value name="A"><shadow type="math_number" id=":v.EdXeHXt*9fJ]If7HA"><field name="NUM">1</field></shadow><block type="variables_get" id="3V,jYXZ|@7K2|U8cc{sF"><field name="VAR">抬起时刻</field></block></value><value name="B"><shadow type="math_number" id="m_HpRt!W}.x1Ab}`lKm+"><field name="NUM">1</field></shadow><block type="variables_get" id="lT;Yuv1x+q+*T8`*d6NL"><field name="VAR">按下时刻</field></block></value></block></value></block></value></block></next></block></next></block></next></block></next></block></statement></block></statement></block></next></block></next></block></xml><config>{}</config><code>aW1wb3J0IG1peGdvX21pbmkKaW1wb3J0IHRpbWUKaW1wb3J0IG1hY2hpbmUKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21hdHJpeAoKCl9FNl84Q184OV9FNF9COF84Ql9FNl85N19CNl9FNV84OF9CQiA9IDAKX0U2XzhBX0FDX0U4X0I1X0I3X0U2Xzk3X0I2X0U1Xzg4X0JCID0gMAp3aGlsZSBUcnVlOgogICAgaWYgbWl4Z29fbWluaS5CMWtleS5pc19wcmVzc2VkKCk6CiAgICAgICAgX0U2XzhDXzg5X0U0X0I4XzhCX0U2Xzk3X0I2X0U1Xzg4X0JCID0gdGltZS50aWNrc19tcygpCiAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgaWYgKG5vdCBtaXhnb19taW5pLkIxa2V5LmlzX3ByZXNzZWQoKSk6CiAgICAgICAgICAgICAgICBicmVhawogICAgICAgIF9FNl84QV9BQ19FOF9CNV9CN19FNl85N19CNl9FNV84OF9CQiA9IHRpbWUudGlja3NfbXMoKQogICAgICAgIHByaW50KChfRTZfOEFfQUNfRThfQjVfQjdfRTZfOTdfQjZfRTVfODhfQkIgLSBfRTZfOENfODlfRTRfQjhfOEJfRTZfOTdfQjZfRTVfODhfQkIpKQogICAgICAgIG9uYm9hcmRfbWF0cml4LnNjcm9sbChzdHIoKF9FNl84QV9BQ19FOF9CNV9CN19FNl85N19CNl9FNV84OF9CQiAtIF9FNl84Q184OV9FNF9COF84Ql9FNl85N19CNl9FNV84OF9CQikpKQo=</code>
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-C2@元控奋斗(MINI)"><block type="controls_whileUntil" id="CUUxBl{B=-86:pOTbpdU" x="-2754" y="-915"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="h_7kIDrejKtsa(5O.^,9"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="display_show_image" id="ASEcu/oCLaBT$/s5ojA)"><value name="data"><shadow type="pins_builtinimg" id="Q+Y?X`ktiym:zQPvv,Fg"><field name="PIN">onboard_matrix.HEART</field></shadow></value><next><block type="controls_delay_new" id="_o+^LUBbmukoelJ7i?-p"><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id="RZ$gk0dW^n_^(P-/CH0o"><field name="NUM">0.5</field></shadow></value><next><block type="display_show_image" id="T-;R9z})N|m[z*+qu{Q,"><value name="data"><shadow type="pins_builtinimg" id="NnW.3RRcYYsKtzubh)56"><field name="PIN">onboard_matrix.HEART_SMALL</field></shadow></value><next><block type="controls_delay_new" id="3F|Sk})}oO2ofzR)K;n."><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id="zx6@bo4$Vr5oQKNIoGXw"><field name="NUM">0.5</field></shadow></value><next><block type="controls_if" id="[9q0$Z?Q?zVvCZXjgv~_"><value name="IF0"><block type="sensor_mixgo_button_was_pressed" id="W$+lD)}Y63,1SpkqubBq"><value name="btn"><shadow type="pins_button" id="oIOW+a@:tdTVg)y;2B9:"><field name="PIN">B1key</field></shadow></value></block></value><statement name="DO0"><block type="actuator_onboard_neopixel_rgb_all" id=":HnJx[e6-i-o:BjxQD0A"><value name="RVALUE"><shadow type="math_number" id=":jt1+KxA/m{5:?Z{*|v2"><field name="NUM">20</field></shadow></value><value name="GVALUE"><shadow type="math_number" id="/^?(vdoyMFO$#F0slSmB"><field name="NUM">20</field></shadow></value><value name="BVALUE"><shadow type="math_number" id="4EG9uqe*COq7.!N@ghF{"><field name="NUM">20</field></shadow></value><next><block type="actuator_onboard_neopixel_write" id="Gc6izjv[VPvSG:eeG$/P"></block></next></block></statement><next><block type="controls_if" id="}cn9.txd,Jad6IW@fxR{"><value name="IF0"><block type="sensor_mixgo_button_was_pressed" id="ukHGd`3#SZ#.zeoJJF{h"><value name="btn"><shadow type="pins_button" id=")U4vLKnG@rHs|]i,3Uj^"><field name="PIN">B2key</field></shadow></value></block></value><statement name="DO0"><block type="actuator_onboard_neopixel_rgb_all" id="T#7(43P^$}R]~$_i~7cK"><value name="RVALUE"><shadow type="math_number" id="V,8[d5^r!}t]`O*{;:AQ"><field name="NUM">0</field></shadow></value><value name="GVALUE"><shadow type="math_number" id="7[.wMWaJGY~Zi3,)1{$?"><field name="NUM">0</field></shadow></value><value name="BVALUE"><shadow type="math_number" id="fUo$z6oCoujl6w?hpT)|"><field name="NUM">0</field></shadow></value><next><block type="actuator_onboard_neopixel_write" id="YS,DlTzWeW3DZrLBl;MU"></block></next></block></statement></block></next></block></next></block></next></block></next></block></next></block></statement></block></xml><config>{}</config><code>ZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21hdHJpeAppbXBvcnQgdGltZQppbXBvcnQgbWl4Z29fbWluaQpmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfcmdiCgoKd2hpbGUgVHJ1ZToKICAgIG9uYm9hcmRfbWF0cml4LnNob3dzKG9uYm9hcmRfbWF0cml4LkhFQVJUKQogICAgdGltZS5zbGVlcCgwLjUpCiAgICBvbmJvYXJkX21hdHJpeC5zaG93cyhvbmJvYXJkX21hdHJpeC5IRUFSVF9TTUFMTCkKICAgIHRpbWUuc2xlZXAoMC41KQogICAgaWYgbWl4Z29fbWluaS5CMWtleS53YXNfcHJlc3NlZCgpOgogICAgICAgIG9uYm9hcmRfcmdiLmZpbGwoKDIwLCAyMCwgMjApKQogICAgICAgIG9uYm9hcmRfcmdiLndyaXRlKCkKICAgIGlmIG1peGdvX21pbmkuQjJrZXkud2FzX3ByZXNzZWQoKToKICAgICAgICBvbmJvYXJkX3JnYi5maWxsKCgwLCAwLCAwKSkKICAgICAgICBvbmJvYXJkX3JnYi53cml0ZSgpCg==</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-C2@元控奋斗(MINI)"><variables><variable id="kujED6C|3`}2*o!`dvF;">x</variable></variables><block type="variables_set" id="5WItal*H*J7-m8:#sED^" x="-2776" y="-1041"><field name="VAR">是否亮灯</field><value name="VALUE"><block type="logic_boolean" id="=ad7L_-Gs^B#M$qef.PS"><field name="BOOL">FALSE</field></block></value><next><block type="sensor_mixgo_button_attachInterrupt" id="May;=sfQ=J31x}w|92LI"><field name="mode">machine.Pin.IRQ_RISING</field><value name="btn"><shadow type="pins_button" id="03Kk0)_s~Yg.2Bol+lP."><field name="PIN">B2key</field></shadow></value><value name="DO"><shadow type="factory_block_return" id="eYwvYy?4):!@J+M4IE0O"><field name="VALUE">attachInterrupt_func</field></shadow></value><next><block type="controls_whileUntil" id="ElIgPzaV:js3uwRD;KYs"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="02}#Xoj9x!HgLbg5/Q/a"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="display_show_image" id="H4NfVD?dLCa(!qB.TCdD"><value name="data"><shadow type="pins_builtinimg" id="a1_0Qf55N}OSa9m1MOV!"><field name="PIN">onboard_matrix.HEART</field></shadow></value><next><block type="controls_delay_new" id="DFx/nvWZ_l?Pp]XD2@2;"><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id="{es3vxn[#_0^MSqGILK2"><field name="NUM">0.5</field></shadow></value><next><block type="display_show_image" id="~_Bn_Bb0_+pcI.lg0o9X"><value name="data"><shadow type="pins_builtinimg" id="e0-AH{)BU[9.uzD5fK[#"><field name="PIN">onboard_matrix.HEART_SMALL</field></shadow></value><next><block type="controls_delay_new" id="/qp*QBk!jjXkUX9dG_T2"><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id="Toiog-(g~BC86W8.=otb"><field name="NUM">0.5</field></shadow></value></block></next></block></next></block></next></block></statement></block></next></block></next></block><block type="procedures_defnoreturn" id="@89D~2/S|GTeUaV9t#m8" x="-2787" y="-716"><mutation><arg name="x" varid="kujED6C|3`}2*o!`dvF;"></arg></mutation><field name="NAME">attachInterrupt_func</field><statement name="STACK"><block type="variables_global" id="7e]l2J13():6Vb(zwjOp"><value name="VAR"><block type="variables_get" id="RG1Y!HvwXl$]T-/Mo^0a"><field name="VAR">是否亮灯</field></block></value><next><block type="variables_set" id="2Y65)bGr0JrZy)ftyxQz"><field name="VAR">是否亮灯</field><value name="VALUE"><block type="logic_negate" id="[n37]VcE_`rRPZYUMc_w"><value name="BOOL"><block type="variables_get" id="e(os{ow]9=}crNul]Nnb"><field name="VAR">是否亮灯</field></block></value></block></value><next><block type="controls_if" id="|EAx|c[9weCS2~qac7UU"><mutation else="1"></mutation><value name="IF0"><block type="variables_get" id="gH:bZ@l9NcT+Nbcg}plx"><field name="VAR">是否亮灯</field></block></value><statement name="DO0"><block type="actuator_onboard_neopixel_rgb_all" id="VBou22tv1B$h;TCP?ZRu"><value name="RVALUE"><shadow type="math_number" id="i/p$F7g(zw*5FCz]hhzg"><field name="NUM">10</field></shadow></value><value name="GVALUE"><shadow type="math_number" id="{LGS*Z,r6@;e?`j[(jTA"><field name="NUM">10</field></shadow></value><value name="BVALUE"><shadow type="math_number" id="3^I*K7c~gOz0XujAE$Zg"><field name="NUM">10</field></shadow></value></block></statement><statement name="ELSE"><block type="actuator_onboard_neopixel_rgb_all" id="D2gKVsK.{vjP79h[Pfa*"><value name="RVALUE"><shadow type="math_number" id="8n0DzgTOgAk?b$3bPY::"><field name="NUM">0</field></shadow></value><value name="GVALUE"><shadow type="math_number" id="LAA[K[`mHb/#RS:FNOh="><field name="NUM">0</field></shadow></value><value name="BVALUE"><shadow type="math_number" id="7m_VKVfBMH[[B=1?8eJc"><field name="NUM">0</field></shadow></value></block></statement><next><block type="actuator_onboard_neopixel_write" id="o7JpLR+x^o5(HIu_}$b;"></block></next></block></next></block></next></block></statement></block></xml><config>{}</config><code>aW1wb3J0IG1hY2hpbmUKaW1wb3J0IG1peGdvX21pbmkKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21hdHJpeAppbXBvcnQgdGltZQpmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfcmdiCgpkZWYgYXR0YWNoSW50ZXJydXB0X2Z1bmMoeCk6CiAgICBnbG9iYWwgX0U2Xzk4X0FGX0U1XzkwX0E2X0U0X0JBX0FFX0U3XzgxX0FGCiAgICBfRTZfOThfQUZfRTVfOTBfQTZfRTRfQkFfQUVfRTdfODFfQUYgPSBub3QgX0U2Xzk4X0FGX0U1XzkwX0E2X0U0X0JBX0FFX0U3XzgxX0FGCiAgICBpZiBfRTZfOThfQUZfRTVfOTBfQTZfRTRfQkFfQUVfRTdfODFfQUY6CiAgICAgICAgb25ib2FyZF9yZ2IuZmlsbCgoMTAsIDEwLCAxMCkpCiAgICBlbHNlOgogICAgICAgIG9uYm9hcmRfcmdiLmZpbGwoKDAsIDAsIDApKQogICAgb25ib2FyZF9yZ2Iud3JpdGUoKQoKCgpfRTZfOThfQUZfRTVfOTBfQTZfRTRfQkFfQUVfRTdfODFfQUYgPSBGYWxzZQptaXhnb19taW5pLkIya2V5LmlycShoYW5kbGVyID0gYXR0YWNoSW50ZXJydXB0X2Z1bmMsIHRyaWdnZXIgPSBtYWNoaW5lLlBpbi5JUlFfUklTSU5HKQp3aGlsZSBUcnVlOgogICAgb25ib2FyZF9tYXRyaXguc2hvd3Mob25ib2FyZF9tYXRyaXguSEVBUlQpCiAgICB0aW1lLnNsZWVwKDAuNSkKICAgIG9uYm9hcmRfbWF0cml4LnNob3dzKG9uYm9hcmRfbWF0cml4LkhFQVJUX1NNQUxMKQogICAgdGltZS5zbGVlcCgwLjUpCg==</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-C2@元控奋斗(MINI)"><variables><variable id="ok:ro0iEW(eJAtg/iAsj">tim</variable></variables><block type="variables_set" id="`/m=GV}T}coZ4Em_hb|!" x="-2908" y="-1031"><field name="VAR">开始</field><value name="VALUE"><block type="logic_boolean" id="EWf,jI.4_YX?z7GDhHYQ"><field name="BOOL">FALSE</field></block></value><next><block type="variables_set" id="R.*7g0g^rr_m9y+T]`Hx"><field name="VAR">计时</field><value name="VALUE"><block type="math_number" id="3H8pa1#a?)mEDdNOX[g2"><field name="NUM">0</field></block></value><next><block type="system_timer_init" id="iB{xw:H8VW$88mmSY-iC"><value name="SUB"><shadow type="variables_get" id="t1_pQ{PwQjdxLs1,@O)X"><field name="VAR">tim</field></shadow></value><next><block type="system_timer" id=",AN|$ao_^98JR/$,-i~$"><field name="mode">PERIODIC</field><value name="VAR"><shadow type="variables_get" id="8Bysq`*i;}bQ_zETnyzR"><field name="VAR">tim</field></shadow></value><value name="period"><shadow type="math_number" id="UKc+R8J`#),Opu{D=w#m"><field name="NUM">100</field></shadow></value><value name="callback"><shadow type="factory_block_return" id="xvCauxlX(^55jVMoviz?"><field name="VALUE">tim_callback</field></shadow></value><next><block type="controls_whileUntil" id="8n06)Vt$tvqM3GDgl!~9"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="qv#~tTjpQ|Mv28bX=2hT"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="controls_if" id="K0[oMObE~`ck`65-i.W}"><value name="IF0"><block type="sensor_mixgo_button_was_pressed" id="n8o7mTHC3wbs4+U]G4)~"><value name="btn"><shadow type="pins_button" id="t,O!?!9t:uH(oFlMEa_`"><field name="PIN">B1key</field></shadow></value></block></value><statement name="DO0"><block type="variables_set" id="ARYJ`vc83,}tJ=n4a$:h"><field name="VAR">开始</field><value name="VALUE"><block type="logic_negate" id="NHG89C)fpHYWXZ1Hgg,C"><value name="BOOL"><block type="variables_get" id="O/et@ut}-t33[X`j:K$T"><field name="VAR">开始</field></block></value></block></value></block></statement></block></statement></block></next></block></next></block></next></block></next></block><block type="procedures_defnoreturn" id="q4_w!KIC:o6h;i_PXnqb" x="-2822" y="-727"><mutation><arg name="tim" varid="ok:ro0iEW(eJAtg/iAsj"></arg></mutation><field name="NAME">tim_callback</field><statement name="STACK"><block type="variables_global" id="7=/7)87w8+5HAvxV]W~0"><value name="VAR"><block type="variables_get" id="JWSNSl;yL@PCTL,x)axV"><field name="VAR">计时</field></block></value><next><block type="variables_global" id="-Ol]JyzkEVxZ(b(h:olV"><value name="VAR"><block type="variables_get" id="{L0p.13(+UTO43l[W;^|"><field name="VAR">开始</field></block></value><next><block type="controls_if" id="5oX!oB!JnKgJ)zF!:ZFG"><value name="IF0"><block type="variables_get" id="[LA:AUxQVX}+(Q2g`$Vv"><field name="VAR">开始</field></block></value><statement name="DO0"><block type="math_selfcalcu" id="r1,0.6/qPa?l!bQul8bi"><field name="OP">ADD</field><value name="A"><shadow type="variables_get" id="5|.Q9ue4AnQ?_}4(d*]w"><field name="VAR">a</field></shadow><block type="variables_get" id="+0sAmQhqCA8V[yHrYu|j"><field name="VAR">计时</field></block></value><value name="B"><shadow type="math_number" id="8dq^QGB4[t3.a@,^wRzr"><field name="NUM">1</field></shadow></value></block></statement><next><block type="display_show_image_or_string_delay" id="o:Oc4{MQgYsd9FxAw`@n"><field name="center">False</field><value name="data"><shadow type="text" id="0!I:Abwk$@WDAi[NcD7g"><field name="TEXT">Mixly</field></shadow><block type="number_to_text" id="X-gLNb-CSt8T#2-jE,SB"><value name="VAR"><shadow type="variables_get" id="IZf8?}LXu=@X`G4ipDmo"><field name="VAR">x</field></shadow><block type="variables_get" id="tMMnCg.O3r!8v|LON4n+"><field name="VAR">计时</field></block></value></block></value><value name="space"><shadow type="math_number" id="biKls2Cw!!a~{)BPJ*fp"><field name="NUM">0</field></shadow></value></block></next></block></next></block></next></block></statement></block></xml><config>{}</config><code>aW1wb3J0IG1hY2hpbmUKaW1wb3J0IG1peGdvX21pbmkKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21hdHJpeAoKZGVmIHRpbV9jYWxsYmFjayh0aW0pOgogICAgZ2xvYmFsIF9FOF9BRV9BMV9FNl85N19CNgogICAgZ2xvYmFsIF9FNV9CQ184MF9FNV9BN184QgogICAgaWYgX0U1X0JDXzgwX0U1X0E3XzhCOgogICAgICAgIF9FOF9BRV9BMV9FNl85N19CNiArPSAxCiAgICBvbmJvYXJkX21hdHJpeC5zaG93cyhzdHIoX0U4X0FFX0ExX0U2Xzk3X0I2KSxzcGFjZSA9IDAsY2VudGVyID0gRmFsc2UpCgoKCl9FNV9CQ184MF9FNV9BN184QiA9IEZhbHNlCl9FOF9BRV9BMV9FNl85N19CNiA9IDAKdGltID0gbWFjaGluZS5UaW1lcigwKQp0aW0uaW5pdChwZXJpb2QgPSAxMDAsIG1vZGUgPSBtYWNoaW5lLlRpbWVyLlBFUklPRElDLCBjYWxsYmFjayA9IHRpbV9jYWxsYmFjaykKd2hpbGUgVHJ1ZToKICAgIGlmIG1peGdvX21pbmkuQjFrZXkud2FzX3ByZXNzZWQoKToKICAgICAgICBfRTVfQkNfODBfRTVfQTdfOEIgPSBub3QgX0U1X0JDXzgwX0U1X0E3XzhCCg==</code>
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-C2@元控奋斗(MINI)"><block type="variables_set" id="07vkg@Q9?4lm{#g3u}H#" x="-3402" y="-1011"><field name="VAR">音乐</field><value name="VALUE"><block type="logic_boolean" id="STZso9v/p?ZASK1DbYgZ"><field name="BOOL">FALSE</field></block></value><next><block type="controls_thread" id="hYla};BeV(O~,C0lWp)$"><value name="callback"><shadow type="factory_block_return" id="J,m_`2ivckL}r?RTG[54"><field name="VALUE">testThread</field></shadow></value><value name="VAR"><block type="tuple_create_with_noreturn" id="N+X|WNt,888}939!~|#Q" inline="true"><mutation items="0"></mutation></block></value><next><block type="controls_whileUntil" id="RzMO_[1dNzOuI1*A7#a."><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="^an0ZufLd4TUqq03vO94"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="controls_if" id="(4o@i,:X.M2.xiHv#TWA"><value name="IF0"><block type="sensor_mixgo_button_was_pressed" id="5P-Rpae5O+C#Ez*Hm7:5"><value name="btn"><shadow type="pins_button" id="pslCHUgH=x]E,Ut2r[{1"><field name="PIN">B1key</field></shadow></value></block></value><statement name="DO0"><block type="variables_set" id="JD4W4-|G@rsL7o[7IcU{"><field name="VAR">音乐</field><value name="VALUE"><block type="logic_negate" id="(CH0_kz/R(#Dq)s1VR!G"><value name="BOOL"><block type="variables_get" id="52^$4{I,9VNFn4FGY*=N"><field name="VAR">音乐</field></block></value></block></value></block></statement><next><block type="display_show_image" id="d1WW$yCJrXVO~^!8R!Lp"><value name="data"><shadow type="pins_builtinimg" id="2WooZ[+GvMR.|8F0aa}v"><field name="PIN">onboard_matrix.HEART</field></shadow></value><next><block type="controls_delay_new" id="Ifn2?E(2Uc2!EE|oCNM9"><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id="O;_E`GC_0Sa-:0+@so?p"><field name="NUM">0.1</field></shadow></value><next><block type="display_show_image" id="]s~WV5lfmpHmkLDq):(j"><value name="data"><shadow type="pins_builtinimg" id="^Rs0Y|uHKA6V[wSafDh?"><field name="PIN">onboard_matrix.HEART_SMALL</field></shadow></value><next><block type="controls_delay_new" id="`5vmQ@h55NG4)_N^2/V9"><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id="c]JO=e7oe9B:3hYkRF{i"><field name="NUM">0.1</field></shadow></value></block></next></block></next></block></next></block></next></block></statement></block></next></block></next></block><block type="procedures_defnoreturn" id="NJo.+F3iqHb-CBRRW-7F" inline="false" x="-3406" y="-641"><field name="NAME">testThread</field><statement name="STACK"><block type="variables_global" id=".u}BjgxV?PK?O04#.EhW"><value name="VAR"><block type="variables_get" id="?)o@LbVJ3`!![Z}x:W])"><field name="VAR">音乐</field></block></value><next><block type="controls_whileUntil" id="k35D@0h*kh=/Y.a@t!Ln"><field name="MODE">WHILE</field><value name="BOOL"><block type="logic_boolean" id="ur$=MKL-MX@E6LAN(CSY"><field name="BOOL">TRUE</field></block></value><statement name="DO"><block type="controls_if" id="dHDalRD,~}Ir0Gl1)Jl|"><value name="IF0"><block type="variables_get" id="1DhsVOvFv+JXr[73MkYj"><field name="VAR">音乐</field></block></value><statement name="DO0"><block type="esp32_onboard_music_play_list" id="j^PZk7dg)z~z0giTobk?"><value name="LIST"><shadow type="pins_playlist" id="vF^zd7aJe;:5[_a}TA1S"><field name="PIN">onboard_music.DADADADUM</field></shadow></value></block></statement></block></statement></block></next></block></statement></block></xml><config>{}</config><code>aW1wb3J0IF90aHJlYWQKaW1wb3J0IG1peGdvX21pbmkKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21hdHJpeAppbXBvcnQgdGltZQpmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfbXVzaWMKCmRlZiB0ZXN0VGhyZWFkKCk6CiAgICBnbG9iYWwgX0U5XzlGX0IzX0U0X0I5XzkwCiAgICB3aGlsZSBUcnVlOgogICAgICAgIGlmIF9FOV85Rl9CM19FNF9COV85MDoKICAgICAgICAgICAgb25ib2FyZF9tdXNpYy5wbGF5KG9uYm9hcmRfbXVzaWMuREFEQURBRFVNKQoKCgpfRTlfOUZfQjNfRTRfQjlfOTAgPSBGYWxzZQpfdGhyZWFkLnN0YXJ0X25ld190aHJlYWQodGVzdFRocmVhZCwgKCkpCndoaWxlIFRydWU6CiAgICBpZiBtaXhnb19taW5pLkIxa2V5Lndhc19wcmVzc2VkKCk6CiAgICAgICAgX0U5XzlGX0IzX0U0X0I5XzkwID0gbm90IF9FOV85Rl9CM19FNF9COV85MAogICAgb25ib2FyZF9tYXRyaXguc2hvd3Mob25ib2FyZF9tYXRyaXguSEVBUlQpCiAgICB0aW1lLnNsZWVwKDAuMSkKICAgIG9uYm9hcmRfbWF0cml4LnNob3dzKG9uYm9hcmRfbWF0cml4LkhFQVJUX1NNQUxMKQogICAgdGltZS5zbGVlcCgwLjEpCg==</code>
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 3.0 rc0" board="Python ESP32-C2@元控奋斗(MINI)" shown="block"><block type="controls_whileUntil" id="(V7U_H]pqRQZU5;NuR_x" x="-3672" y="-1058"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="[}2=$DEFvED86$:mPE/K"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="controls_if" id="ZE(x:;opl)m{i$h.7}E_"><value name="IF0"><block type="rfid_status" id="b^]nOp68SqMtb4iMQdAN"><field name="key">True</field></block></value><statement name="DO0"><block type="system_print" id="9L^e4Z;dgdAWI6w|F$RL"><value name="VAR"><shadow type="text" id="{6]Ro?{JnZC4aIqJ7ISJ"><field name="TEXT">Mixly</field></shadow><block type="rfid_readid" id="4@[L8nx*a_COwp7Eky-`"></block></value><next><block type="esp32_onboard_music_pitch_with_time" id="N.z*h4YR,JpaK:Tp?h6K"><value name="pitch"><shadow type="pins_tone_notes" id="So)s]JoH]FFSS;eGoBOk"><field name="PIN">659</field></shadow></value><value name="time"><shadow type="math_number" id="TMDtZK3KJdQiER-JPcY3"><field name="NUM">100</field></shadow></value><next><block type="controls_delay_new" id="xn.b.*qjl9Hc+LNHW6fU"><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id="S}XF1PtQI9,kjbk*cPd{"><field name="NUM">1</field></shadow></value></block></next></block></next></block></statement></block></statement></block></xml><config>{}</config><code>ZnJvbSBtaW5pX2cyIGltcG9ydCBleHRfcmZpZAppbXBvcnQgbWFjaGluZQpmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfbXVzaWMKaW1wb3J0IHRpbWUKCgp3aGlsZSBUcnVlOgogICAgaWYgZXh0X3JmaWQuc2Nhbl9jYXJkKCkgPT0gVHJ1ZToKICAgICAgICBwcmludChleHRfcmZpZC5yZWFkX2NhcmQoMCwgeD0iaWQiKSkKICAgICAgICBvbmJvYXJkX211c2ljLnBpdGNoX3RpbWUoNjU5LCAxMDApCiAgICAgICAgdGltZS5zbGVlcCgxKQo=</code>gICAgIHRpbWUuc2xlZXAoMSkK</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 3.0 rc0" board="Python ESP32-C2@元控奋斗(MINI)" shown="block"><block type="controls_whileUntil" id="1FgZ~kiZ?Ow4$TMCRSpD" x="-3672" y="-1058"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="$$I!=,`w3S;~ChEwT;9{"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="system_print" id="F|l,FaHTUKt+(r#FMF$)"><value name="VAR"><shadow type="text" id="z0Q).:UY+i/k08]KYp{`"><field name="TEXT">Mixly</field></shadow><block type="rfid_readid" id="C7C@Y;wMRw;{86K:7y2U"></block></value><next><block type="controls_delay_new" id="LSxOTX[,-@s:=,R`#-G5"><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id="Tb(R$EAb2DGUs?Q,cgbm"><field name="NUM">1</field></shadow></value></block></next></block></statement></block></xml><config>{}</config><code>aW1wb3J0IG1hY2hpbmUKZnJvbSBtaW5pX2cyIGltcG9ydCBleHRfcmZpZAppbXBvcnQgdGltZQoKCndoaWxlIFRydWU6CiAgICBwcmludChleHRfcmZpZC5yZWFkX2NhcmQoMCwgeD0iaWQiKSkKICAgIHRpbWUuc2xlZXAoMSkK</code>gIHRpbWUuc2xlZXAoMSkK</code>
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-C3@MixGo ME"><variables><variable id="*5WT[`,Lbe5En3jd}uUk">data</variable></variables><block type="communicate_bluetooth_central_init" id="XVxQU)9R2~Z@Y34pCxdG" x="-871" y="-463"><value name="VAR"><shadow type="variables_get" id="b26wwENV}ZJa^*TG4SHB"><field name="VAR">ble_c</field></shadow></value><next><block type="communicate_bluetooth_recv" id="0}BU=5,q|EY3[[2g]Rq]"><value name="VAR"><shadow type="variables_get" id="u[:3Rb[Vp2Mi=TJ1OU9#"><field name="VAR">ble_c</field></shadow></value><value name="METHOD"><shadow type="factory_block_return" id="MF?Y1mh^ZX0}8~wTT#hM"><field name="VALUE">ble_method</field></shadow></value><next><block type="controls_whileUntil" id="-a=^w$ZIpO~AmyTob1ak"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="?/UQc?34]r!Q~Bmu$2x)"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="controls_if" id="~RLW11bx?s}Y=?JIuby1"><mutation else="1"></mutation><value name="IF0"><block type="communicate_bluetooth_is_connected" id="QcBYlti-^RV71/TJFN15"><value name="VAR"><shadow type="variables_get" id="m1rNx#y2`a9!`5cAxgYL"><field name="VAR">ble_c</field></shadow></value></block></value><statement name="DO0"><block type="controls_if" id="NeNM|iZ8trC|{Lp}bHOX"><value name="IF0"><block type="sensor_mixgo_button_was_pressed" id="1=LPHL^_kW=6bxHnF0?U"><value name="btn"><shadow type="pins_button" id="jiy[|!mCn1Q4~CE1?}Zm"><field name="PIN">B1key</field></shadow></value></block></value><statement name="DO0"><block type="communicate_bluetooth_send" id="B8Oc@b*pbP}^H?8Dq0n/"><value name="VAR"><shadow type="variables_get" id="i$|Z;u5~Xe:AHtM?}X:u"><field name="VAR">ble_c</field></shadow></value><value name="data"><shadow type="text" id="/j(fe}yi~@kkJ`Gte}D3"><field name="TEXT">test</field></shadow></value></block></statement><next><block type="display_show_image_or_string_delay" id="lH;adktB[}@;ph+6I{Lr"><field name="center">True</field><value name="data"><shadow type="text" id="hEL/$GI7sYqy9bA+7Zz;"><field name="TEXT">OK</field></shadow></value><value name="space"><shadow type="math_number" id="t(-X+m^C[b=n]=cM:(2H"><field name="NUM">0</field></shadow></value></block></next></block></statement><statement name="ELSE"><block type="display_show_image_or_string_delay" id="792o!Nx=NDe{hqUpqnsm"><field name="center">True</field><value name="data"><shadow type="text" id="}KK[Kq3|A`}o00ZDCMaI"><field name="TEXT">==</field></shadow></value><value name="space"><shadow type="math_number" id="R3!Pi{iXE.DQz2gvE7GS"><field name="NUM">0</field></shadow></value><next><block type="controls_try_finally" id="6TYGLd7(~mI|si|:o[qi"><mutation elseif="1"></mutation><statement name="try"><block type="communicate_bluetooth_connect" id="gPsjE[c+p!KCN,:6SZ/R"><field name="mode">name</field><value name="VAR"><shadow type="variables_get" id="Ik:ud@FA44lo7!KBsiWz"><field name="VAR">ble_c</field></shadow></value><value name="data"><shadow type="text" id="`KJ]nfb3W9edNcx/]]KC"><field name="TEXT">Mixly_Slave</field></shadow></value></block></statement><value name="IF1"><shadow type="factory_block_return" id="DnGW|x`ZeQd|{ZVs_Pbx"><field name="VALUE">Exception as e</field></shadow></value></block></next></block></statement></block></statement></block></next></block></next></block><block type="procedures_defnoreturn" id="h$|cC!IK_w6^Ek1(jwju" x="-860" y="72"><mutation><arg name="data" varid="*5WT[`,Lbe5En3jd}uUk"></arg></mutation><field name="NAME">ble_method</field><statement name="STACK"><block type="system_print" id="v$-bT|,EIyW_4HggeMB-"><value name="VAR"><shadow type="text" id=":N.rnSDh6Ix8#kTGJrg2"><field name="TEXT">Mixly</field></shadow><block type="variables_get" id="NW[G10)uRPzcy07W{(ei"><field name="VAR">data</field></block></value></block></statement></block></xml><config>{}</config><code>aW1wb3J0IGJsZV9jZW50cmFsCmltcG9ydCBtaXhnb19tZQpmcm9tIG1peGdvX21lIGltcG9ydCBvbmJvYXJkX21hdHJpeAppbXBvcnQgbWFjaGluZQoKZGVmIGJsZV9tZXRob2QoZGF0YSk6CiAgICBwcmludChkYXRhKQoKCgpibGVfYyA9IGJsZV9jZW50cmFsLkJMRVNpbXBsZUNlbnRyYWwoKQpibGVfYy5yZWN2KGJsZV9tZXRob2QpCndoaWxlIFRydWU6CiAgICBpZiBibGVfYy5pc19jb25uZWN0ZWQoKToKICAgICAgICBpZiBtaXhnb19tZS5CMWtleS53YXNfcHJlc3NlZCgpOgogICAgICAgICAgICBibGVfYy5zZW5kKCd0ZXN0JykKICAgICAgICBvbmJvYXJkX21hdHJpeC5zaG93cygnT0snLHNwYWNlID0gMCxjZW50ZXIgPSBUcnVlKQogICAgZWxzZToKICAgICAgICBvbmJvYXJkX21hdHJpeC5zaG93cygnPT0nLHNwYWNlID0gMCxjZW50ZXIgPSBUcnVlKQogICAgICAgIHRyeToKICAgICAgICAgICAgYmxlX2MuY29ubmVjdChuYW1lPSdNaXhseV9TbGF2ZScpCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICBwYXNzCg==</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-C3@MixGo ME"><variables><variable id="d$Hz)_vvA0^=g9`rK.n2">data</variable></variables><block type="communicate_bluetooth_peripheral_init" id="hQ-[7#Gh.c]9SKrCXwaO" x="-1213" y="-853"><value name="VAR"><shadow type="variables_get" id="UpowlDu$DX-mBM964aN3"><field name="VAR">ble_x</field></shadow></value><value name="data"><shadow type="text" id="F6Q[$2br?,;zG764}yL+"><field name="TEXT">Mixly_Slave</field></shadow></value><next><block type="communicate_bluetooth_recv" id="aHQn*cI9^QP5:4ItL;){"><value name="VAR"><shadow type="variables_get" id="@a^I{D4pDPg6g)bsLT2y"><field name="VAR">ble_x</field></shadow></value><value name="METHOD"><shadow type="factory_block_return" id="C2/Kqb.(Ij,-*|IMw4Wo"><field name="VALUE">ble_method</field></shadow></value><next><block type="controls_whileUntil" id="|+f*lJaYS#Exbb?*5x(n"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="=Br}LQ;{QE1a{fy15dEk"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="controls_if" id="VBk6We_zfLGv/_-VMQ_*"><mutation else="1"></mutation><value name="IF0"><block type="communicate_bluetooth_is_connected" id="o4s!lK3j4@{EwZqikQs,"><value name="VAR"><shadow type="variables_get" id="ccNwXMCD+J?`dyhZ?:WL"><field name="VAR">ble_x</field></shadow></value></block></value><statement name="DO0"><block type="display_show_image_or_string_delay" id=":EM,twV{8YH!9$J|}X#h"><field name="center">True</field><value name="data"><shadow type="text" id="@T!IgR-}BLe!B47p-X(V"><field name="TEXT">OK</field></shadow></value><value name="space"><shadow type="math_number" id="5O~EKvg6wHe(6@yk+PQr"><field name="NUM">0</field></shadow></value><next><block type="controls_if" id=",}4;w3pz1)_)]YW$5VpP"><value name="IF0"><block type="sensor_mixgo_button_was_pressed" id="AKhM(j)IXg`m0V2.|r7f"><value name="btn"><shadow type="pins_button" id="*)Q[0.q`^OO6I^:By^FQ"><field name="PIN">B1key</field></shadow></value></block></value><statement name="DO0"><block type="communicate_bluetooth_send" id="Os[;cbKRVu(O1_KHf;6c"><value name="VAR"><shadow type="variables_get" id="$/MfTsjYU}4Uxzpp92ao"><field name="VAR">ble_x</field></shadow></value><value name="data"><shadow type="text" id="O#$zVkuf;?Mg}y0hald,"><field name="TEXT">B1按键按下</field></shadow></value></block></statement><next><block type="controls_if" id="~j-~?5NlXxavO!l{(l!8"><value name="IF0"><block type="sensor_mixgo_button_was_pressed" id="*eNs!nMRG:rcZ@+FqEtu"><value name="btn"><shadow type="pins_button" id="`7ph#K6a4-Ig*UKwt9To"><field name="PIN">B2key</field></shadow></value></block></value><statement name="DO0"><block type="communicate_bluetooth_send" id="6Z?srXLAA36;H|vS7xc+"><value name="VAR"><shadow type="variables_get" id="C_:Xe/).o!~|/|PDbR]R"><field name="VAR">ble_x</field></shadow></value><value name="data"><shadow type="text" id="7?~RZ*:qD!4b1r(;Gx,W"><field name="TEXT">B2按键按下</field></shadow></value></block></statement></block></next></block></next></block></statement><statement name="ELSE"><block type="display_show_image_or_string_delay" id="YOZBp0!A~@eOp^k{9.WI"><field name="center">True</field><value name="data"><shadow type="text" id="e35?=gwdj4dOEB{5c`#K"><field name="TEXT">==</field></shadow></value><value name="space"><shadow type="math_number" id="i;)KB:Vv~Cwol0^bLxl?"><field name="NUM">0</field></shadow></value></block></statement></block></statement></block></next></block></next></block><block type="procedures_defnoreturn" id="b#hYj{j~Z}w8uj@i8pHx" x="-1208" y="-319"><mutation><arg name="data" varid="d$Hz)_vvA0^=g9`rK.n2"></arg></mutation><field name="NAME">ble_method</field><statement name="STACK"><block type="system_print" id="fb0JMR4ZBy^4?f7BSRwI"><value name="VAR"><shadow type="text" id="DeX=Gmzl~KPb_}v:jD8T"><field name="TEXT">Mixly</field></shadow><block type="variables_get" id="KOn_R=BnF]g!]i(3hJU~"><field name="VAR">data</field></block></value></block></statement></block></xml><config>{}</config><code>aW1wb3J0IGJsZV9wZXJpcGhlcmFsCmZyb20gbWl4Z29fbWUgaW1wb3J0IG9uYm9hcmRfbWF0cml4CmltcG9ydCBtaXhnb19tZQppbXBvcnQgbWFjaGluZQoKZGVmIGJsZV9tZXRob2QoZGF0YSk6CiAgICBwcmludChkYXRhKQoKCgpibGVfeCA9IGJsZV9wZXJpcGhlcmFsLkJMRVNpbXBsZVBlcmlwaGVyYWwoJ01peGx5X1NsYXZlJykKYmxlX3gucmVjdihibGVfbWV0aG9kKQp3aGlsZSBUcnVlOgogICAgaWYgYmxlX3guaXNfY29ubmVjdGVkKCk6CiAgICAgICAgb25ib2FyZF9tYXRyaXguc2hvd3MoJ09LJyxzcGFjZSA9IDAsY2VudGVyID0gVHJ1ZSkKICAgICAgICBpZiBtaXhnb19tZS5CMWtleS53YXNfcHJlc3NlZCgpOgogICAgICAgICAgICBibGVfeC5zZW5kKCdCMeaMiemUruaMieS4iycpCiAgICAgICAgaWYgbWl4Z29fbWUuQjJrZXkud2FzX3ByZXNzZWQoKToKICAgICAgICAgICAgYmxlX3guc2VuZCgnQjLmjInplK7mjInkuIsnKQogICAgZWxzZToKICAgICAgICBvbmJvYXJkX21hdHJpeC5zaG93cygnPT0nLHNwYWNlID0gMCxjZW50ZXIgPSBUcnVlKQo=</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 3.0 rc0" board="Python ESP32-C2@元控奋斗(MINI)" shown="block"><block type="analog_ble_keyboard_mouse_init" id="Ft+kqP(~H{w65-=Bmn]x" x="-293" y="-124"><value name="kname"><shadow type="text" id="q=6K.9Plbfbf=:wh]v;g"><field name="TEXT">ble_keyboard_mouse</field></shadow></value><next><block type="do_while" id="`ETm[I,c?4Q?6kM/fW6["><field name="type">true</field><statement name="input_data"><block type="display_scroll_string" id="mAXo(C)7_,zjoSb^]Gk#"><value name="data"><shadow type="text" id="n|*tf=(!#!TCG.C,$}h-"><field name="TEXT">waitting</field></shadow></value></block></statement><value name="select_data"><block type="ble_keyboard_mouse_connect" id="H,VThFrSn+-TTWL`;lGl"></block></value><next><block type="esp32_onboard_music_pitch_with_time" id="{w:^u*3KSp5^j[YfnUhN"><value name="pitch"><shadow type="pins_tone_notes" id="Ng8OWk-Ku?u}HqptvnB+"><field name="PIN">784</field></shadow></value><value name="time"><shadow type="math_number" id="PF?duk^FbqT{*@xw_m4/"><field name="NUM">150</field></shadow></value><next><block type="esp32_onboard_music_pitch_with_time" id="P.)$(t)|HTo$vvt#h2=e"><value name="pitch"><shadow type="pins_tone_notes" id="+iP|TmSI[=KGEhP),jLq"><field name="PIN">659</field></shadow></value><value name="time"><shadow type="math_number" id="pk1G@elkG47UT/sc^{]r"><field name="NUM">150</field></shadow></value><next><block type="controls_whileUntil" id="+~GFL||m[[,]L)fgv=ne"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="?-1Rl_A38TsS!BTj+!m="><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="controls_if" id="{C6I8@1_Q[!v5U~cX9L;"><mutation elseif="1"></mutation><value name="IF0"><block type="sensor_mixgo_button_was_pressed" id="c+2qUVhe(h7+i(*hE8b`"><value name="btn"><shadow type="pins_button" id="}VoLA!ST.NK],-fxElLL"><field name="PIN">A1key</field></shadow></value></block></value><statement name="DO0"><block type="analog_ble_keyboard_mouse_input" id="CmmW!v$U})*/48$~Q]v^"><field name="release">True</field><value name="special"><block type="special_key" id="k;1[,pnoCm^{R.{]~#)W"><field name="op">0x00</field></block></value><value name="general"><block type="general_key" id="kfN}B,AD[(S7rF6I,$ej"><field name="op">0x52</field></block></value></block></statement><value name="IF1"><block type="sensor_mixgo_button_was_pressed" id="2(:F-w$fTvB2)#7|!{k+"><value name="btn"><shadow type="pins_button" id="r@Lv!}[l(^Gvk^YaW#dF"><field name="PIN">A3key</field></shadow></value></block></value><statement name="DO1"><block type="analog_ble_keyboard_mouse_input" id="]95m}Q-RA`Z*)w3yUrz3"><field name="release">True</field><value name="special"><block type="special_key" id="r5/G=+MFF=,#DbV;ZtRS"><field name="op">0x00</field></block></value><value name="general"><block type="general_key" id="Js9$2ml}A3#px7wc[IjC"><field name="op">0x4E</field></block></value></block></statement><next><block type="controls_delay_new" id="8Vd=P^cQRrQSGS_mAze0"><field name="Time">ms</field><value name="DELAY_TIME"><shadow type="math_number" id="EtJ4suZ`[/_peePEvjcB"><field name="NUM">10</field></shadow></value></block></next></block></statement></block></next></block></next></block></next></block></next></block></xml><config>{}</config><code>ZnJvbSBibGVfaGlkIGltcG9ydCBISUQKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21hdHJpeApmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfbXVzaWMKaW1wb3J0IG1peGdvX21pbmkKaW1wb3J0IHRpbWUKCgpibGVfaGlkID0gSElEKCdibGVfa2V5Ym9hcmRfbW91c2UnKQp3aGlsZSBUcnVlOgogICAgb25ib2FyZF9tYXRyaXguc2Nyb2xsKCd3YWl0dGluZycpCiAgICBpZiAoYmxlX2hpZC5pc19jb25uZWN0ZWQoKSk6CiAgICAgICAgYnJlYWsKb25ib2FyZF9tdXNpYy5waXRjaF90aW1lKDc4NCwgMTUwKQpvbmJvYXJkX211c2ljLnBpdGNoX3RpbWUoNjU5LCAxNTApCndoaWxlIFRydWU6CiAgICBpZiBtaXhnb19taW5pLkExa2V5Lndhc19wcmVzc2VkKCk6CiAgICAgICAgYmxlX2hpZC5rZXlib2FyZF9ub3RpZnkoMHgwMCwweDUyLFRydWUpCiAgICBlbGlmIG1peGdvX21pbmkuQTNrZXkud2FzX3ByZXNzZWQoKToKICAgICAgICBibGVfaGlkLmtleWJvYXJkX25vdGlmeSgweDAwLDB4NEUsVHJ1ZSkKICAgIHRpbWUuc2xlZXBfbXMoMTApCg==</code>
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 3.0 rc0" board="Python ESP32-C2@元控奋斗(MINI)" shown="block"><block type="analog_ble_keyboard_mouse_init" id=".E$R6tQ][ZXTy5u{8+^S" x="0" y="-11"><value name="kname"><shadow type="text" id=")lw]Q6|q+]TxQ8X^}t35"><field name="TEXT">ble_keyboard_mouse</field></shadow></value><next><block type="do_while" id="AtS-3xrN2MPl_I2:d5l9"><field name="type">true</field><statement name="input_data"><block type="display_scroll_string" id="oB#:rdkuBIHE`~(xdtlQ"><value name="data"><shadow type="text" id="+i1,9R*VnxG$}Ir!#*_b"><field name="TEXT">waitting</field></shadow></value></block></statement><value name="select_data"><block type="ble_keyboard_mouse_connect" id="v`f6J4F/snmx4;_pIgtE"></block></value><next><block type="esp32_onboard_music_pitch_with_time" id="/youZv,!}TYXE[B=c+VG"><value name="pitch"><shadow type="pins_tone_notes" id="]o7x9FaY3k1fIo/VDE)n"><field name="PIN">698</field></shadow></value><value name="time"><shadow type="math_number" id="_S!*.djI1S7+o;61}{dQ"><field name="NUM">150</field></shadow></value><next><block type="esp32_onboard_music_pitch_with_time" id="0?nOUGsZU~aq/e`zWN/E"><value name="pitch"><shadow type="pins_tone_notes" id="#hI-|B#e}?l`}*QunW~4"><field name="PIN">523</field></shadow></value><value name="time"><shadow type="math_number" id="~H)(pp/r.2,^=YT))7#S"><field name="NUM">150</field></shadow></value><next><block type="controls_whileUntil" id="/s_dZAVxk;@39[/HtvEU"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="g*nuVJcb/~Yso*r:ywQf"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="controls_if" id="?ejH?*!I!Z4B~t[BU^RX"><value name="IF0"><block type="logic_compare" id="23Gt6:D*X0W/=/@+zMNj"><field name="OP">GT</field><value name="A"><block type="sensor_mixgo_pin_near_single" id="D[CHo]J:gT4t5nS.clu$"></block></value><value name="B"><block type="math_number" id=",OW2o=0|`EB)Cr#H*f(h"><field name="NUM">100</field></block></value></block></value><statement name="DO0"><block type="analog_ble_keyboard_mouse_input" id="m#cQ4C1OECnUw2r-y,i4"><field name="release">True</field><value name="special"><block type="special_key" id="z_WbDzvyO|n.=$EKJNpp"><field name="op">0x08</field></block></value><value name="general"><block type="general_key" id="Lri+~*QWZm700A!NM:Up"><field name="op">0x07</field></block></value><next><block type="controls_delay_new" id="yIdkIx?zrf(E2r/*@W,P"><field name="Time">ms</field><value name="DELAY_TIME"><shadow type="math_number" id="m7`tb0QX+rqyxWbJ:,MX"><field name="NUM">300</field></shadow></value></block></next></block></statement><next><block type="controls_delay_new" id="/Q{xMEfg^{,IN=GAHB[R"><field name="Time">ms</field><value name="DELAY_TIME"><shadow type="math_number" id=";;@`GbbS:/:0)cMtze($"><field name="NUM">100</field></shadow></value></block></next></block></statement></block></next></block></next></block></next></block></next></block></xml><config>{}</config><code>ZnJvbSBibGVfaGlkIGltcG9ydCBISUQKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21hdHJpeApmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfbXVzaWMKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX2FscwppbXBvcnQgdGltZQoKCmJsZV9oaWQgPSBISUQoJ2JsZV9rZXlib2FyZF9tb3VzZScpCndoaWxlIFRydWU6CiAgICBvbmJvYXJkX21hdHJpeC5zY3JvbGwoJ3dhaXR0aW5nJykKICAgIGlmIChibGVfaGlkLmlzX2Nvbm5lY3RlZCgpKToKICAgICAgICBicmVhawpvbmJvYXJkX211c2ljLnBpdGNoX3RpbWUoNjk4LCAxNTApCm9uYm9hcmRfbXVzaWMucGl0Y2hfdGltZSg1MjMsIDE1MCkKd2hpbGUgVHJ1ZToKICAgIGlmIG9uYm9hcmRfYWxzLnBzX25sKCkgPiAxMDA6CiAgICAgICAgYmxlX2hpZC5rZXlib2FyZF9ub3RpZnkoMHgwOCwweDA3LFRydWUpCiAgICAgICAgdGltZS5zbGVlcF9tcygzMDApCiAgICB0aW1lLnNsZWVwX21zKDEwMCkK</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-C2@元控奋斗(MINI)"><block type="espnow_radio_channel" id="byWEk;}|70p^BD)uvy`=" x="-912" y="-519"><value name="CHNL"><shadow type="espnow_channel" id="xnh+Cl7+HTQ4+]lr[!G}"><field name="PIN">10</field></shadow></value><next><block type="espnow_radio_on_off" id="!Y-Us/+xZl`eEZC#IAZr"><field name="on_off">True</field><next><block type="controls_whileUntil" id="mAjiVY#Yx+;?A}54Ih2#"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="XgA{0p$t@jNCzKx7|}*}"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="controls_if" id="!@Kd)v}9yUiG4!J]d2uu"><value name="IF0"><block type="sensor_mixgo_button_was_pressed" id="1rKLm,@}ICD$:|?(EUPy"><value name="btn"><shadow type="pins_button" id=")a|Vfq@E-;,*#btub}G9"><field name="PIN">B1key</field></shadow></value></block></value><statement name="DO0"><block type="espnow_radio_send" id=")ndXYo+r!:q`VR?{UKbn"><value name="send"><shadow type="text" id="X+Bk+9:ZCLSAl,Vvxc8B"><field name="TEXT">LEFT</field></shadow></value></block></statement><next><block type="controls_if" id="]=u}F]`oyN[j9FG=;,(w"><value name="IF0"><block type="sensor_mixgo_button_was_pressed" id="VE8_PEd{3#jL61Ja[6+9"><value name="btn"><shadow type="pins_button" id="0F.YKuX(EHdq.[Zi~bKL"><field name="PIN">B2key</field></shadow></value></block></value><statement name="DO0"><block type="espnow_radio_send" id="Zk,?fxgzKaCSccy3@cRE"><value name="send"><shadow type="text" id="h]d[4-u.db1y~FofdL7o"><field name="TEXT">RIGHT</field></shadow></value></block></statement></block></next></block></statement></block></next></block></next></block><block type="espnow_radio_recv_new" id="unEL#5xNv.3x^e8-`xl|" x="-894" y="-189"><statement name="DO"><block type="system_print" id="tr-}z^Z!GU!@*kIi?MV5"><value name="VAR"><block type="espnow_radio_recv_msg" id="yFSqf~k6o6`+KtCN*1`9"></block></value></block></statement></block><block type="espnow_radio_recv_certain_msg_new" id="m(]:+_(S!=VW1z=B*I]C" x="-905" y="-84"><field name="msg">LEFT</field><statement name="DO"><block type="display_show_image_or_string_delay" id="biHAmbXg6^G?;{D$-=f#"><field name="center">True</field><value name="data"><shadow type="text" id="WM`_JZ*-Zib3P8B]jM}h"><field name="TEXT"><-</field></shadow></value><value name="space"><shadow type="math_number" id="m{51YL;aTg*~Kp`+INiV"><field name="NUM">0</field></shadow></value></block></statement></block><block type="espnow_radio_recv_certain_msg_new" id="{=^ksu,GAMqZ~H{NAD^|" x="-904" y="13"><field name="msg">RIGHT</field><statement name="DO"><block type="display_show_image_or_string_delay" id="(,oi9Gr:i=j]UIOecPI_"><field name="center">True</field><value name="data"><shadow type="text" id="pIv3flkHR(,bs^.k-,`h"><field name="TEXT">-></field></shadow></value><value name="space"><shadow type="math_number" id="DeNPA!@fKuQA`_{8?1pO"><field name="NUM">0</field></shadow></value></block></statement></block></xml><config>{}</config><code>aW1wb3J0IHJhZGlvCkVTUE5vd19yYWRpbz1yYWRpby5FU1BOb3coKQppbXBvcnQgbWl4Z29fbWluaQpoYW5kbGVfbGlzdD1bXQppbXBvcnQgbWFjaGluZQpkZWYgRVNQTm93X3JhZGlvX3JlY3YobWFjLEVTUE5vd19yYWRpb19tc2cpOgogICAgcHJpbnQoRVNQTm93X3JhZGlvX21zZykKCmlmIG5vdCBFU1BOb3dfcmFkaW9fcmVjdiBpbiBoYW5kbGVfbGlzdDoKICAgIGhhbmRsZV9saXN0LmFwcGVuZChFU1BOb3dfcmFkaW9fcmVjdikKRVNQTm93X3JhZGlvLnJlY3ZfY2IoaGFuZGxlX2xpc3QpCgpmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfbWF0cml4CmRlZiBFU1BOb3dfcmFkaW9fcmVjdl9fTEVGVChtYWMsRVNQTm93X3JhZGlvX21zZyk6CiAgICBvbmJvYXJkX21hdHJpeC5zaG93cygnPC0nLHNwYWNlID0gMCxjZW50ZXIgPSBUcnVlKQoKaWYgbm90IEVTUE5vd19yYWRpb19yZWN2X19MRUZUIGluIGhhbmRsZV9saXN0OgogICAgaGFuZGxlX2xpc3QuYXBwZW5kKEVTUE5vd19yYWRpb19yZWN2X19MRUZUKQpFU1BOb3dfcmFkaW8ucmVjdl9jYihoYW5kbGVfbGlzdCkKCmRlZiBFU1BOb3dfcmFkaW9fcmVjdl9fUklHSFQobWFjLEVTUE5vd19yYWRpb19tc2cpOgogICAgb25ib2FyZF9tYXRyaXguc2hvd3MoJy0+JyxzcGFjZSA9IDAsY2VudGVyID0gVHJ1ZSkKCmlmIG5vdCBFU1BOb3dfcmFkaW9fcmVjdl9fUklHSFQgaW4gaGFuZGxlX2xpc3Q6CiAgICBoYW5kbGVfbGlzdC5hcHBlbmQoRVNQTm93X3JhZGlvX3JlY3ZfX1JJR0hUKQpFU1BOb3dfcmFkaW8ucmVjdl9jYihoYW5kbGVfbGlzdCkKCgoKRVNQTm93X3JhZGlvLnNldF9jaGFubmVsKGNoYW5uZWw9MTApCkVTUE5vd19yYWRpby5hY3RpdmUoVHJ1ZSkKd2hpbGUgVHJ1ZToKICAgIGlmIG1peGdvX21pbmkuQjFrZXkud2FzX3ByZXNzZWQoKToKICAgICAgICBFU1BOb3dfcmFkaW8uc2VuZCgiZmZmZmZmZmZmZmZmIiwnTEVGVCcpCiAgICBpZiBtaXhnb19taW5pLkIya2V5Lndhc19wcmVzc2VkKCk6CiAgICAgICAgRVNQTm93X3JhZGlvLnNlbmQoImZmZmZmZmZmZmZmZiIsJ1JJR0hUJykK</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-C2@元控奋斗(MINI)"><block type="variables_set" id="`2s5bJ2.;fJZlP;UnC7L" x="-557" y="-442"><field name="VAR">lastmsgtime</field><value name="VALUE"><block type="controls_millis" id="L39MCf8qSuod85ow3u6v"><field name="Time">ms</field></block></value><next><block type="espnow_radio_channel" id="~c/JmG[L]YlNO@Ak#$pw"><value name="CHNL"><shadow type="espnow_channel" id="oCx?(XBwpR*Lv$UOzeWL"><field name="PIN">10</field></shadow></value><next><block type="espnow_radio_on_off" id="7AiOaVqWcN^:z#QhE3hX"><field name="on_off">True</field><next><block type="controls_whileUntil" id="{W_CuezcF=YyBUieY{iL"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="gAEf[a{FCz(V1[Ewe)t6"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="controls_delay_new" id="*3fDLliL9njEis4`{e#,"><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id="14~{3XH7Y5+MWO0C$OVk"><field name="NUM">2</field></shadow></value><next><block type="espnow_radio_send" id="xYYo,w)?5U*y#H_|fA20"><value name="send"><shadow type="text" id="@`-J!tr=;}/NyV`;uPgl"><field name="TEXT">Mixly</field></shadow><block type="number_to_text" id="/pCY;d8[^#)cH,0FT{qI"><value name="VAR"><shadow type="variables_get" id="txc`w^T2nR1xzf$yv1-l"><field name="VAR">x</field></shadow><block type="controls_millis" id="w(Eu3L,^21SF2I~C[L|f"><field name="Time">ms</field></block></value></block></value><next><block type="controls_if" id="dChYYfHYN:zGFs*7d#-F"><value name="IF0"><block type="logic_compare" id="wXBcjza^dvaIJTa,B6Yv"><field name="OP">GT</field><value name="A"><block type="math_arithmetic" id="Q6K8Q4#c73Tlsl33pVn#"><field name="OP">MINUS</field><value name="A"><shadow type="math_number" id=".U[^FsvZ]?;eiOwaZMdz"><field name="NUM">1</field></shadow><block type="controls_millis" id="Ja8KJ]ut-WQ;P@(Rd3*l"><field name="Time">ms</field></block></value><value name="B"><shadow type="math_number" id=":uc`4,`G+*PkdGXSX*ck"><field name="NUM">1</field></shadow><block type="variables_get" id="EP@RY_3J*$LcEQ[Z8B5!"><field name="VAR">lastmsgtime</field></block></value></block></value><value name="B"><block type="math_number" id="FljXOkifautL2|d7!NkO"><field name="NUM">10000</field></block></value></block></value><statement name="DO0"><block type="display_show_image" id="pPcSJn!Y)z@fuN6B[ERN"><value name="data"><shadow type="pins_builtinimg" id="3:nDeg9:d0`=j]iMyzZG"><field name="PIN">onboard_matrix.NO</field></shadow></value><next><block type="esp32_onboard_music_play_list" id="PwJxyW/CqY`#G95-||2#"><value name="LIST"><shadow type="pins_playlist" id="Tr+F!:0XCm_X^-{qg(o#"><field name="PIN">onboard_music.DADADADUM</field></shadow></value></block></next></block></statement></block></next></block></next></block></statement></block></next></block></next></block></next></block><block type="espnow_radio_recv_new" id="~2h@UB{Yv8c|`M_(j0Yp" x="-534" y="-34"><statement name="DO"><block type="variables_global" id="Lh122;6Wz]4g.vGrO=i;"><value name="VAR"><block type="variables_get" id="]FQp2hUe=|pTN7j:3U[("><field name="VAR">lastmsgtime</field></block></value><next><block type="display_show_image" id="`4NbTUt_IZhSt^wX53qx"><value name="data"><shadow type="pins_builtinimg" id="!F#zkpJyTr#b-6D@ri_+"><field name="PIN">onboard_matrix.YES</field></shadow></value><next><block type="variables_set" id="hk[+!ES3@-jg8#Z_^1N;"><field name="VAR">lastmsgtime</field><value name="VALUE"><block type="controls_millis" id="}fD^-Y+`Btu5*=E^s]h,"><field name="Time">ms</field></block></value></block></next></block></next></block></statement></block></xml><config>{}</config><code>aW1wb3J0IHRpbWUKaW1wb3J0IHJhZGlvCkVTUE5vd19yYWRpbz1yYWRpby5FU1BOb3coKQpmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfbWF0cml4CmZyb20gbWl4Z29fbWluaSBpbXBvcnQgb25ib2FyZF9tdXNpYwpoYW5kbGVfbGlzdD1bXQpkZWYgRVNQTm93X3JhZGlvX3JlY3YobWFjLEVTUE5vd19yYWRpb19tc2cpOgogICAgZ2xvYmFsIGxhc3Rtc2d0aW1lCiAgICBvbmJvYXJkX21hdHJpeC5zaG93cyhvbmJvYXJkX21hdHJpeC5ZRVMpCiAgICBsYXN0bXNndGltZSA9IHRpbWUudGlja3NfbXMoKQoKaWYgbm90IEVTUE5vd19yYWRpb19yZWN2IGluIGhhbmRsZV9saXN0OgogICAgaGFuZGxlX2xpc3QuYXBwZW5kKEVTUE5vd19yYWRpb19yZWN2KQpFU1BOb3dfcmFkaW8ucmVjdl9jYihoYW5kbGVfbGlzdCkKCgoKbGFzdG1zZ3RpbWUgPSB0aW1lLnRpY2tzX21zKCkKRVNQTm93X3JhZGlvLnNldF9jaGFubmVsKGNoYW5uZWw9MTApCkVTUE5vd19yYWRpby5hY3RpdmUoVHJ1ZSkKd2hpbGUgVHJ1ZToKICAgIHRpbWUuc2xlZXAoMikKICAgIEVTUE5vd19yYWRpby5zZW5kKCJmZmZmZmZmZmZmZmYiLHN0cih0aW1lLnRpY2tzX21zKCkpKQogICAgaWYgdGltZS50aWNrc19tcygpIC0gbGFzdG1zZ3RpbWUgPiAxMDAwMDoKICAgICAgICBvbmJvYXJkX21hdHJpeC5zaG93cyhvbmJvYXJkX21hdHJpeC5OTykKICAgICAgICBvbmJvYXJkX211c2ljLnBsYXkob25ib2FyZF9tdXNpYy5EQURBREFEVU0pCg==</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 3.0 rc0" board="Python ESP32-C2@元控奋斗(MINI)" shown="block"><block type="communicate_espnow_init" id="L?g$1?]hT!3c8qXK5H!q" x="-92" y="-31"><field name="op">20</field><value name="VAR"><shadow type="variables_get" id="H]pw(?XLf4Odm}4fz@~B"><field name="VAR">my_now</field></shadow></value><value name="CHNL"><shadow type="espnow_channel" id="e2J8X_=8^m1AMr3[;ngx"><field name="PIN">1</field></shadow></value><next><block type="controls_whileUntil" id="o:/uVBXuiH[ofC|TwaG:"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id=":VKBPDy57usGd5yrKmBo"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="controls_if" id="l9``iR@:Y!f9xo=f/e`N"><value name="IF0"><block type="sensor_mixgo_button_was_pressed" id="Q~w+lR7l@/KCycA|)sy4"><value name="btn"><shadow type="pins_button" id="]S9SR@U;97.HTDp8ViO5"><field name="PIN">B1key</field></shadow></value></block></value><statement name="DO0"><block type="network_espnow_send" id="@3Q;^m15*{BwxN$d4V,Y"><value name="VAR"><shadow type="variables_get" id="?jrOJviqB)8FMP.wCwZ~"><field name="VAR">my_now</field></shadow></value><value name="mac"><shadow type="text" id="PQpo;0Za@9h]fPd.iz_o"><field name="TEXT">FFFFFFFFFFFF</field></shadow></value><value name="content"><shadow type="text" id="A@|Dqz^b8*0JB~ZC^^m+"><field name="TEXT">1</field></shadow></value></block></statement></block></statement></block></next></block></xml><config>{}</config><code>aW1wb3J0IHJhZGlvCmltcG9ydCBtaXhnb19taW5pCgoKbXlfbm93PXJhZGlvLkVTUE5vdyhjaGFubmVsPTEsIHR4cG93ZXI9MjApCndoaWxlIFRydWU6CiAgICBpZiBtaXhnb19taW5pLkIxa2V5Lndhc19wcmVzc2VkKCk6CiAgICAgICAgbXlfbm93LnNlbmQoJ0ZGRkZGRkZGRkZGRicsICcxJykK</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 3.0 rc0" board="Python ESP32-C2@元控奋斗(MINI)" shown="block"><variables><variable id="0Aq|!{vW8tQ^BmpW7xw^">mac</variable><variable id="N*rL,2q/]zEiamun[mB.">msg</variable></variables><block type="communicate_espnow_init" id="L?g$1?]hT!3c8qXK5H!q" x="0" y="0"><field name="op">20</field><value name="VAR"><shadow type="variables_get" id="H]pw(?XLf4Odm}4fz@~B"><field name="VAR">my_now</field></shadow></value><value name="CHNL"><shadow type="espnow_channel" id="e2J8X_=8^m1AMr3[;ngx"><field name="PIN">1</field></shadow></value><next><block type="network_espnow_recv_handle" id="B)oe?qJKSxQ1ldEwy#mB"><value name="VAR"><shadow type="variables_get" id="6_2KsnwIhxWz1TtUAi)3"><field name="VAR">my_now</field></shadow></value><value name="METHOD"><shadow type="factory_block_return" id="4|Sp;cMag96a`6Z!zAp."><field name="VALUE">cb</field></shadow></value><next><block type="system_print" id="o+m={w~;v(ssY?#$Qw;b"><value name="VAR"><shadow type="text" id="6wx4vE2y}2m@y2DpG!hl"><field name="TEXT">Mixly</field></shadow><block type="network_espnow_mac" id="mSde[fFnx@?f-BnZt6g("><value name="VAR"><shadow type="variables_get" id="e$KTgxyTS6:5i3p`uKPH"><field name="VAR">my_now</field></shadow></value></block></value></block></next></block></next></block><block type="procedures_defnoreturn" id="CLNpvly.L|qOS@M3-W8f" x="0" y="154"><mutation><arg name="mac" varid="0Aq|!{vW8tQ^BmpW7xw^"></arg><arg name="msg" varid="N*rL,2q/]zEiamun[mB."></arg></mutation><field name="NAME">cb</field><statement name="STACK"><block type="controls_if" id="Q|$E@@1IB|Z]?:+W3U!U"><value name="IF0"><block type="logic_compare" id="d@e6}k-)U*t,(f#o^wmR"><field name="OP">EQ</field><value name="A"><block type="variables_get" id="#s_lWmHCKf$JnRW~+fk;"><field name="VAR">msg</field></block></value><value name="B"><block type="text" id="egzDYeo*d,ri5|TTVWoj"><field name="TEXT">1</field></block></value></block></value><statement name="DO0"><block type="actuator_led_bright" id="yt6]W**@1yDr=/zuC?Ik"><value name="led"><shadow type="number" id="wOULu(cYC1v=f+6ybK3U"><field name="op">1</field></shadow></value><value name="bright"><shadow type="ledswitch" id="D~n)BRBWEBxOwnm5[99D"><field name="flag">-1</field></shadow></value></block></statement></block></statement></block></xml><config>{}</config><code>aW1wb3J0IHJhZGlvCmltcG9ydCBtYWNoaW5lCmZyb20gbWl4Z29fbWluaSBpbXBvcnQgb25ib2FyZF9sZWQKCgpkZWYgY2IobWFjLCBtc2cpOgogICAgaWYgbXNnID09ICcxJzoKICAgICAgICBvbmJvYXJkX2xlZC5zZXRvbm9mZigxLC0xKQoKCgpteV9ub3c9cmFkaW8uRVNQTm93KGNoYW5uZWw9MSwgdHhwb3dlcj0yMCkKbXlfbm93LnJlY3ZfY2IoY2IpCnByaW50KG15X25vdy5tYWMpCg==</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-C2@元控奋斗(MINI)"><block type="iot_wifi_connect" id="vT^}]ki?*/-2;csG__u`" x="-1469" y="-438"><value name="WIFINAME"><shadow type="text" id="q0sV3B=4^jWTPd,t`DC?"><field name="TEXT">fuhua3</field></shadow></value><value name="PASSWORD"><shadow type="text" id="By*aUJ*jWX-i_IhT.!hn"><field name="TEXT">1234567890</field></shadow></value><next><block type="display_show_image_or_string_delay" id="et(0o_33]`VY3L9$OR-,"><field name="center">True</field><value name="data"><shadow type="text" id="OVg7rz)T/[/ykna)trQ^"><field name="TEXT">WO</field></shadow></value><value name="space"><shadow type="math_number" id="No{Vo^Qv$F,HqR^!^ZaV"><field name="NUM">0</field></shadow></value><next><block type="IOT_EMQX_INIT_AND_CONNECT_BY_MIXLY_CODE" id="d84#g.(LKHRO(j[rd##A"><value name="SERVER"><shadow type="text" id="Xy8fASeU`l;7Raqpp.e{"><field name="TEXT">mixio.mixly.cn</field></shadow></value><value name="KEY"><shadow type="iot_mixly_key" id="Fy)(lY{6v72g7T{0C$U;"><field name="VISITOR_ID">4OG7811O</field></shadow></value><next><block type="display_show_image_or_string_delay" id="ZQFZsW)WKdqoi]u#j=9/"><field name="center">True</field><value name="data"><shadow type="text" id="Js/Cba|rLfq:+x7U8h[^"><field name="TEXT">MO</field></shadow></value><value name="space"><shadow type="math_number" id="xIwRz(1zfqjKZSkeQ=^5"><field name="NUM">0</field></shadow></value><next><block type="controls_whileUntil" id=",.+P+(HolTB5H_[feT@g"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="JU8EHP+|X$UxZLq@o*p6"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="controls_delay_new" id="Ct!/HI!qqK7g)@j.84Ci"><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id=";mc.$6uIoT$iA$byc{Nl"><field name="NUM">5</field></shadow></value><next><block type="IOT_MIXIO_PUBLISH" id="5Va|*[p!X4lhCscfH?+o"><value name="TOPIC"><shadow type="text" id=",P]jk^S?=;b0Lq*Ti6W="><field name="TEXT">光照</field></shadow></value><value name="MSG"><shadow type="text" id="s@waEW2fHet1RKQ0Wm1$"><field name="TEXT">msg</field></shadow><block type="sensor_LTR308" id="4Ki/;/HBwFE*s*`551SH"></block></value><next><block type="display_scroll_string" id="iz^a-6L|^6eM.sGiS(2k"><value name="data"><shadow type="text" id="9vrE1U8l(kKI6QzSAw!/"><field name="TEXT">Mixly</field></shadow><block type="number_to_text" id="|Z+]`7:H5,ln^aMuqnBY"><value name="VAR"><shadow type="variables_get" id="-{vP9y2*+MFs]HCeO!gC"><field name="VAR">x</field></shadow><block type="sensor_LTR308" id="a/*mzg}UzOtbQTQ?UP#6"></block></value></block></value></block></next></block></next></block></statement></block></next></block></next></block></next></block></next></block></xml><config>{}</config><code>aW1wb3J0IG1peGlvdApmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfbWF0cml4CmltcG9ydCBtYWNoaW5lCmZyb20gdWJpbmFzY2lpIGltcG9ydCBoZXhsaWZ5CmltcG9ydCB0aW1lCmZyb20gbWl4Z29fbWluaSBpbXBvcnQgb25ib2FyZF9hbHMKCgptaXhpb3Qud2xhbl9jb25uZWN0KCdmdWh1YTMnLCcxMjM0NTY3ODkwJykKb25ib2FyZF9tYXRyaXguc2hvd3MoJ1dPJyxzcGFjZSA9IDAsY2VudGVyID0gVHJ1ZSkKTVFUVF9VU1JfUFJKID0gIk1peElPLzRPRzc4MTFPL2RlZmF1bHQvIgptcXR0X2NsaWVudCA9IG1peGlvdC5pbml0X01RVFRfY2xpZW50KCdtaXhpby5taXhseS5jbicsICJNaXhJT19wdWJsaWMiLCAiTWl4SU9fcHVibGljIiwgTVFUVF9VU1JfUFJKKQpvbmJvYXJkX21hdHJpeC5zaG93cygnTU8nLHNwYWNlID0gMCxjZW50ZXIgPSBUcnVlKQp3aGlsZSBUcnVlOgogICAgdGltZS5zbGVlcCg1KQogICAgbXF0dF9jbGllbnQucHVibGlzaChNUVRUX1VTUl9QUkogKyAn5YWJ54WnJywgb25ib2FyZF9hbHMuYWxzX3ZpcygpKQogICAgb25ib2FyZF9tYXRyaXguc2Nyb2xsKHN0cihvbmJvYXJkX2Fscy5hbHNfdmlzKCkpKQo=</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-C2@元控奋斗(MINI)"><block type="iot_wifi_connect" id="H:a[]NW6(W}XCpW.?)X6" x="-1378" y="-423"><value name="WIFINAME"><shadow type="text" id="29dLFQe}Lr3/-x;ywC,M"><field name="TEXT">fuhua3</field></shadow></value><value name="PASSWORD"><shadow type="text" id="3Gy{Si{-Lv!_4gqn]#~C"><field name="TEXT">1234567890</field></shadow></value><next><block type="display_show_image_or_string_delay" id="ZVE.Q|g.PSWwr~{(FMJO"><field name="center">True</field><value name="data"><shadow type="text" id="Nu@stN!{m=+HKdVwhhx{"><field name="TEXT">WO</field></shadow></value><value name="space"><shadow type="math_number" id="O,kIP=;/fY]+T.QSJhMS"><field name="NUM">0</field></shadow></value><next><block type="IOT_EMQX_INIT_AND_CONNECT_BY_MIXLY_CODE" id="U~Xx.5kc[|M}7(nD}Odi"><value name="SERVER"><shadow type="text" id="x;*h?dWa`bsq2hbhgExH"><field name="TEXT">mixio.mixly.cn</field></shadow></value><value name="KEY"><shadow type="iot_mixly_key" id="eA[-Cwu])`3-Uvc*Cj+g"><field name="VISITOR_ID">4OG7811O</field></shadow></value><next><block type="display_show_image_or_string_delay" id="pgTW(-g,;zBa~OzbJ,l{"><field name="center">True</field><value name="data"><shadow type="text" id="9+.9qP2SA3D4WAog/{Iw"><field name="TEXT">MO</field></shadow></value><value name="space"><shadow type="math_number" id="hRc][)gDBr+^+J38y~Zn"><field name="NUM">0</field></shadow></value><next><block type="controls_whileUntil" id="CO]W;|2YBHt_UHDSLTpH"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id=",,iYGHm]xkOrVHZPZqWj"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="controls_delay_new" id="PtB*Q=yg$+{=k@IZ?@em"><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id="l6W/A@ciFQ8Tcw~vNq.@"><field name="NUM">5</field></shadow></value><next><block type="IOT_MIXIO_PUBLISH" id="2v.GxSAK4Xt=K1Gq5sHX"><value name="TOPIC"><shadow type="text" id="81(.Y64VnngR6B1MlWU*"><field name="TEXT">环境</field></shadow></value><value name="MSG"><shadow type="text" id="!.8.L!Xriq#/_yvpx3]m"><field name="TEXT">msg</field></shadow><block type="IOT_FORMAT_STRING" id="ABqhg/^xPrv?IKos4Ubq"><value name="VAR"><block type="dicts_create_with_noreturn" id="g.5sVJn67;YQ#m:S0Euo" inline="false"><mutation items="3"></mutation><field name="KEY0">"光照"</field><field name="KEY1">"声音"</field><field name="KEY2">"震动"</field><value name="ADD0"><block type="sensor_LTR308" id="RW[4nE`eDuCK(JjPm,hP"></block></value><value name="ADD1"><block type="sensor_sound" id="Gb8XHR-4?cUB_HviEmD}"></block></value><value name="ADD2"><block type="sensor_get_acceleration" id="yeV[I5Oldq,TVEQt/p.Z"><field name="key">strength</field></block></value></block></value></block></value></block></next></block></statement></block></next></block></next></block></next></block></next></block></xml><config>{}</config><code>aW1wb3J0IG1peGlvdApmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfbWF0cml4CmltcG9ydCBtYWNoaW5lCmZyb20gdWJpbmFzY2lpIGltcG9ydCBoZXhsaWZ5CmltcG9ydCB0aW1lCmltcG9ydCBtaXhweQpmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfYWxzCmZyb20gbWl4Z29fbWluaSBpbXBvcnQgb25ib2FyZF9ib3QKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX2FjYwoKCm1peGlvdC53bGFuX2Nvbm5lY3QoJ2Z1aHVhMycsJzEyMzQ1Njc4OTAnKQpvbmJvYXJkX21hdHJpeC5zaG93cygnV08nLHNwYWNlID0gMCxjZW50ZXIgPSBUcnVlKQpNUVRUX1VTUl9QUkogPSAiTWl4SU8vNE9HNzgxMU8vZGVmYXVsdC8iCm1xdHRfY2xpZW50ID0gbWl4aW90LmluaXRfTVFUVF9jbGllbnQoJ21peGlvLm1peGx5LmNuJywgIk1peElPX3B1YmxpYyIsICJNaXhJT19wdWJsaWMiLCBNUVRUX1VTUl9QUkopCm9uYm9hcmRfbWF0cml4LnNob3dzKCdNTycsc3BhY2UgPSAwLGNlbnRlciA9IFRydWUpCndoaWxlIFRydWU6CiAgICB0aW1lLnNsZWVwKDUpCiAgICBtcXR0X2NsaWVudC5wdWJsaXNoKE1RVFRfVVNSX1BSSiArICfnjq/looMnLCBtaXhweS5mb3JtYXRfc3RyKHsi5YWJ54WnIjpvbmJvYXJkX2Fscy5hbHNfdmlzKCksICLlo7Dpn7MiOm9uYm9hcmRfYm90LnNvdW5kbGV2ZWwoKSwgIumch+WKqCI6b25ib2FyZF9hY2Muc3RyZW5ndGgoKX0pKQo=</code>
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-C2@元控奋斗(MINI)"><variables><variable id="x@Yfw8DrgkM3CEl{odMY">client</variable><variable id="Q.[d]Bc~)FuhqVb/l{Uh">topic</variable><variable id="0.A^[Eto)4wE7Tef?SZQ">msg</variable></variables><block type="iot_wifi_connect" id="v{QcbVW,(AR04a@Q|@mO" x="-2026" y="-593"><value name="WIFINAME"><shadow type="text" id="FU;=Xhq]rs~xFK(R4*Lv"><field name="TEXT">fuhua3</field></shadow></value><value name="PASSWORD"><shadow type="text" id="gP_;h#}.+my5gAt#vt,h"><field name="TEXT">1234567890</field></shadow></value><next><block type="display_show_image_or_string_delay" id="_4c3/i}00nC:g7(WKfL,"><field name="center">False</field><value name="data"><shadow type="text" id="I+P[-ufXaJD9mqa/eW^/"><field name="TEXT">WO</field></shadow></value><value name="space"><shadow type="math_number" id="wt6Wz.~tfM,vD4_Tfrr7"><field name="NUM">0</field></shadow></value><next><block type="IOT_EMQX_INIT_AND_CONNECT_BY_MIXLY_CODE" id="d{ZOK9dojw)whm)4@uTb"><value name="SERVER"><shadow type="text" id="Z+I3hE6?mk#r~DoTF{zS"><field name="TEXT">mixio.mixly.cn</field></shadow></value><value name="KEY"><shadow type="iot_mixly_key" id="~9W1nvo/I|Ej!m-p]CKx"><field name="VISITOR_ID">4OG7811O</field></shadow></value><next><block type="display_show_image_or_string_delay" id="UM.eX$M9Pq$*$0V],(fK"><field name="center">False</field><value name="data"><shadow type="text" id="mckcL2$n,`-ZOiuJ8|k:"><field name="TEXT">MO</field></shadow></value><value name="space"><shadow type="math_number" id="_5Z^)BrK4s_76i5W26pN"><field name="NUM">0</field></shadow></value><next><block type="IOT_MIXIO_SUBSCRIBE" id="y1bMJp}t,VbwoZN#u~ao"><value name="TOPIC"><shadow type="text" id="BCd.lHn6/wSE66Z@Kex/"><field name="TEXT">亮屏</field></shadow></value><value name="METHOD"><shadow type="factory_block_return" id="Y5NdcAoR(+~T#-k8wA+$"><field name="VALUE">method</field></shadow></value><next><block type="controls_whileUntil" id="y/w*4|k0?)cD)5@xgE6V"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="*GL[xWgBAUgwW=hPlRO["><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="iot_mixio_check" id="5d0*qQ|q`?|zx1L^bqre"></block></statement></block></next></block></next></block></next></block></next></block></next></block><block type="procedures_defnoreturn" id="feHTWcZ].X0xC,(~7Kzn" x="-2020" y="-282"><mutation><arg name="client" varid="x@Yfw8DrgkM3CEl{odMY"></arg><arg name="topic" varid="Q.[d]Bc~)FuhqVb/l{Uh"></arg><arg name="msg" varid="0.A^[Eto)4wE7Tef?SZQ"></arg></mutation><field name="NAME">method</field><statement name="STACK"><block type="controls_if" id="6(,!T_*k}/gBBDvnD[ps"><value name="IF0"><block type="logic_compare" id="7(#WANl.ja-FIP5Sz3a."><field name="OP">EQ</field><value name="A"><block type="variables_get" id="b+)3;k|sH9qW:$);N$x7"><field name="VAR">msg</field></block></value><value name="B"><block type="text" id="jAKUe4/wN!2e?R#siTF5"><field name="TEXT">1</field></block></value></block></value><statement name="DO0"><block type="display_show_image" id="}*9,o-99Fuba6mrOSm0e"><value name="data"><shadow type="pins_builtinimg" id="~zEtl@NW7_?7||yPo)9c"><field name="PIN">onboard_matrix.HEART</field></shadow></value></block></statement><next><block type="controls_if" id="^Uu/Wf}CbIm[QG,=d*VB"><value name="IF0"><block type="logic_compare" id=",t;5_G16Wl|2cg+u-*!#"><field name="OP">EQ</field><value name="A"><block type="variables_get" id="562;mwG#u,}rsl$,=CpK"><field name="VAR">msg</field></block></value><value name="B"><block type="text" id="X`}.BX`jMbWtTpp,uj$r"><field name="TEXT">0</field></block></value></block></value><statement name="DO0"><block type="display_clear" id="-5O1gP6KL|Re||gtoxK$"></block></statement></block></next></block></statement></block></xml><config>{}</config><code>aW1wb3J0IG1peGlvdApmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfbWF0cml4CmltcG9ydCBtYWNoaW5lCmZyb20gdWJpbmFzY2lpIGltcG9ydCBoZXhsaWZ5CgpkZWYgbWV0aG9kKGNsaWVudCwgdG9waWMsIG1zZyk6CiAgICBpZiBtc2cgPT0gJzEnOgogICAgICAgIG9uYm9hcmRfbWF0cml4LnNob3dzKG9uYm9hcmRfbWF0cml4LkhFQVJUKQogICAgaWYgbXNnID09ICcwJzoKICAgICAgICBvbmJvYXJkX21hdHJpeC5maWxsKDApCiAgICAgICAgb25ib2FyZF9tYXRyaXguc2hvdygpCgoKCm1peGlvdC53bGFuX2Nvbm5lY3QoJ2Z1aHVhMycsJzEyMzQ1Njc4OTAnKQpvbmJvYXJkX21hdHJpeC5zaG93cygnV08nLHNwYWNlID0gMCxjZW50ZXIgPSBGYWxzZSkKTVFUVF9VU1JfUFJKID0gIk1peElPLzRPRzc4MTFPL2RlZmF1bHQvIgptcXR0X2NsaWVudCA9IG1peGlvdC5pbml0X01RVFRfY2xpZW50KCdtaXhpby5taXhseS5jbicsICJNaXhJT19wdWJsaWMiLCAiTWl4SU9fcHVibGljIiwgTVFUVF9VU1JfUFJKKQpvbmJvYXJkX21hdHJpeC5zaG93cygnTU8nLHNwYWNlID0gMCxjZW50ZXIgPSBGYWxzZSkKbXF0dF9jbGllbnQuc2V0X2NhbGxiYWNrKCfkuq7lsY8nLG1ldGhvZCwgTVFUVF9VU1JfUFJKKQptcXR0X2NsaWVudC5zdWJzY3JpYmUoTVFUVF9VU1JfUFJKICsgJ+S6ruWxjycpCndoaWxlIFRydWU6CiAgICBtcXR0X2NsaWVudC5jaGVja19tc2coKQo=</code>
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user