初始化提交
This commit is contained in:
3
boards/default_src/micropython_esp32s3/.npmignore
Normal file
3
boards/default_src/micropython_esp32s3/.npmignore
Normal file
@@ -0,0 +1,3 @@
|
||||
node_modules
|
||||
build
|
||||
origin
|
||||
140
boards/default_src/micropython_esp32s3/blocks/esp32_profile.js
Normal file
140
boards/default_src/micropython_esp32s3/blocks/esp32_profile.js
Normal file
@@ -0,0 +1,140 @@
|
||||
import { Profile } from 'mixly';
|
||||
|
||||
const pins = {};
|
||||
|
||||
pins["元控青春"] = {
|
||||
description: "MicroPython[ESP32C3 MixGo CE]",
|
||||
digital_pin: Profile.generate(['0-18', '21', '33-48']),
|
||||
input_pin: Profile.generate(['0-18', '21', '33-48']),
|
||||
output_pin: Profile.generate(['0-18', '21', '33-48']),
|
||||
pwm_input: Profile.generate(['0-18', '21', '33-48'], 'pwm', 'pwm'),
|
||||
analog_input: Profile.generate(['1-18'], 'adc', 'adc'),
|
||||
pwm_output: Profile.generate(['0-18', '21', '33-48'], 'pwm', 'pwm'),
|
||||
analog_output: Profile.generate(['1-18'], 'adc', 'adc'),
|
||||
espnow_channel: Profile.generate(['1-13']),
|
||||
haskylens_model: Profile.generate(['0-4']),
|
||||
digital: Profile.generate(['0-18', '21', '33-48'], 'pin', 'pin'),
|
||||
pwm_pin: Profile.generate(['0-18', '21', '33-48']),
|
||||
pwm: Profile.generate(['0-18', '21', '33-48'], 'pwm', 'pwm'),
|
||||
analog_pin: Profile.generate(['1-18']),
|
||||
analog: Profile.generate(['1-18'], 'adc', 'adc'),
|
||||
touch: Profile.generate(['1-14'], 'tc', 'tc'),
|
||||
touch_pin: Profile.generate(['1-14']),
|
||||
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-15']),
|
||||
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", "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"], ["LEFT_ARROW", "onboard_matrix.LEFT_ARROW"], ["RIGHT_ARROW", "onboard_matrix.RIGHT_ARROW"], ["DRESS", "onboard_matrix.DRESS"], ["TRANSFORMERS", "onboard_matrix.TRANSFORMERS"], ["SCISSORS", "onboard_matrix.SCISSORS"], ["EXIT", "onboard_matrix.EXIT"], ["TREE", "onboard_matrix.TREE"], ["PACMAN", "onboard_matrix.PACMAN"], ["TARGET", "onboard_matrix.TARGET"], ["TSHIRT", "onboard_matrix.TSHIRT"], ["ROLLERSKATE", "onboard_matrix.ROLLERSKATE"], ["DUCK", "onboard_matrix.DUCK"], ["HOUSE", "onboard_matrix.HOUSE"], ["TORTOISE", "onboard_matrix.TORTOISE"], ["BUTTERFLY", "onboard_matrix.BUTTERFLY"], ["STICKFIGURE", "onboard_matrix.STICKFIGURE"], ["GHOST", "onboard_matrix.GHOST"], ["PITCHFORK", "onboard_matrix.PITCHFORK"], ["MUSIC_QUAVERS", "onboard_matrix.MUSIC_QUAVERS"], ["MUSIC_QUAVER", "onboard_matrix.MUSIC_QUAVER"], ["MUSIC_CROTCHET", "onboard_matrix.MUSIC_CROTCHET"], ["COW", "onboard_matrix.COW"], ["RABBIT", "onboard_matrix.RABBIT"], ["SQUARE_SMALL", "onboard_matrix.SQUARE_SMALL"], ["SQUARE", "onboard_matrix.SQUARE"], ["DIAMOND_SMALL", "onboard_matrix.DIAMOND_SMALL"], ["DIAMOND", "onboard_matrix.DIAMOND"], ["CHESSBOARD", "onboard_matrix.CHESSBOARD"], ["TRIANGLE_LEFT", "onboard_matrix.TRIANGLE_LEFT"], ["TRIANGLE", "onboard_matrix.TRIANGLE"], ["SNAKE", "onboard_matrix.SNAKE"], ["UMBRELLA", "onboard_matrix.UMBRELLA"], ["SKULL", "onboard_matrix.SKULL"], ["GIRAFFE", "onboard_matrix.GIRAFFE"], ["SWORD", "onboard_matrix.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", "spk_midi.DADADADUM"], ["ENTERTAINER", "spk_midi.ENTERTAINER"], ["PRELUDE", "spk_midi.PRELUDE"], ["ODE", "spk_midi.ODE"], ["NYAN", "spk_midi.NYAN"], ["RINGTONE", "spk_midi.RINGTONE"], ["FUNK", "spk_midi.FUNK"], ["BLUES", "spk_midi.BLUES"], ["BIRTHDAY", "spk_midi.BIRTHDAY"], ["WEDDING", "spk_midi.WEDDING"], ["FUNERAL", "spk_midi.FUNERAL"], ["PUNCHLINE", "spk_midi.PUNCHLINE"], ["PYTHON", "spk_midi.PYTHON"], ["BADDY", "spk_midi.BADDY"], ["CHASE", "spk_midi.CHASE"], ["BA_DING", "spk_midi.BA_DING"], ["WAWAWAWAA", "spk_midi.WAWAWAWAA"], ["JUMP_UP", "spk_midi.JUMP_UP"], ["JUMP_DOWN", "spk_midi.JUMP_DOWN"], ["POWER_UP", "spk_midi.POWER_UP"], ["POWER_DOWN", "spk_midi.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["元控"] = {
|
||||
description: "MicroPython[ESP32C3 MixGo CE]",
|
||||
digital_pin: Profile.generate(['0-18', '21', '33-48']),
|
||||
input_pin: Profile.generate(['0-18', '21', '33-48']),
|
||||
output_pin: Profile.generate(['0-18', '21', '33-48']),
|
||||
pwm_input: Profile.generate(['0-18', '21', '33-48'], 'pwm', 'pwm'),
|
||||
analog_input: Profile.generate(['1-18'], 'adc', 'adc'),
|
||||
pwm_output: Profile.generate(['0-18', '21', '33-48'], 'pwm', 'pwm'),
|
||||
analog_output: Profile.generate(['1-18'], 'adc', 'adc'),
|
||||
espnow_channel: Profile.generate(['1-13']),
|
||||
haskylens_model: Profile.generate(['0-4']),
|
||||
digital: Profile.generate(['0-18', '21', '33-48'], 'pin', 'pin'),
|
||||
pwm_pin: Profile.generate(['0-18', '21', '33-48']),
|
||||
pwm: Profile.generate(['0-18', '21', '33-48'], 'pwm', 'pwm'),
|
||||
analog_pin: Profile.generate(['1-18']),
|
||||
analog: Profile.generate(['1-18'], 'adc', 'adc'),
|
||||
touch: Profile.generate(['1-14'], 'tc', 'tc'),
|
||||
touch_pin: Profile.generate(['1-14']),
|
||||
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-15']),
|
||||
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", "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"], ["LEFT_ARROW", "onboard_matrix.LEFT_ARROW"], ["RIGHT_ARROW", "onboard_matrix.RIGHT_ARROW"], ["DRESS", "onboard_matrix.DRESS"], ["TRANSFORMERS", "onboard_matrix.TRANSFORMERS"], ["SCISSORS", "onboard_matrix.SCISSORS"], ["EXIT", "onboard_matrix.EXIT"], ["TREE", "onboard_matrix.TREE"], ["PACMAN", "onboard_matrix.PACMAN"], ["TARGET", "onboard_matrix.TARGET"], ["TSHIRT", "onboard_matrix.TSHIRT"], ["ROLLERSKATE", "onboard_matrix.ROLLERSKATE"], ["DUCK", "onboard_matrix.DUCK"], ["HOUSE", "onboard_matrix.HOUSE"], ["TORTOISE", "onboard_matrix.TORTOISE"], ["BUTTERFLY", "onboard_matrix.BUTTERFLY"], ["STICKFIGURE", "onboard_matrix.STICKFIGURE"], ["GHOST", "onboard_matrix.GHOST"], ["PITCHFORK", "onboard_matrix.PITCHFORK"], ["MUSIC_QUAVERS", "onboard_matrix.MUSIC_QUAVERS"], ["MUSIC_QUAVER", "onboard_matrix.MUSIC_QUAVER"], ["MUSIC_CROTCHET", "onboard_matrix.MUSIC_CROTCHET"], ["COW", "onboard_matrix.COW"], ["RABBIT", "onboard_matrix.RABBIT"], ["SQUARE_SMALL", "onboard_matrix.SQUARE_SMALL"], ["SQUARE", "onboard_matrix.SQUARE"], ["DIAMOND_SMALL", "onboard_matrix.DIAMOND_SMALL"], ["DIAMOND", "onboard_matrix.DIAMOND"], ["CHESSBOARD", "onboard_matrix.CHESSBOARD"], ["TRIANGLE_LEFT", "onboard_matrix.TRIANGLE_LEFT"], ["TRIANGLE", "onboard_matrix.TRIANGLE"], ["SNAKE", "onboard_matrix.SNAKE"], ["UMBRELLA", "onboard_matrix.UMBRELLA"], ["SKULL", "onboard_matrix.SKULL"], ["GIRAFFE", "onboard_matrix.GIRAFFE"], ["SWORD", "onboard_matrix.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", "spk_midi.DADADADUM"], ["ENTERTAINER", "spk_midi.ENTERTAINER"], ["PRELUDE", "spk_midi.PRELUDE"], ["ODE", "spk_midi.ODE"], ["NYAN", "spk_midi.NYAN"], ["RINGTONE", "spk_midi.RINGTONE"], ["FUNK", "spk_midi.FUNK"], ["BLUES", "spk_midi.BLUES"], ["BIRTHDAY", "spk_midi.BIRTHDAY"], ["WEDDING", "spk_midi.WEDDING"], ["FUNERAL", "spk_midi.FUNERAL"], ["PUNCHLINE", "spk_midi.PUNCHLINE"], ["PYTHON", "spk_midi.PYTHON"], ["BADDY", "spk_midi.BADDY"], ["CHASE", "spk_midi.CHASE"], ["BA_DING", "spk_midi.BA_DING"], ["WAWAWAWAA", "spk_midi.WAWAWAWAA"], ["JUMP_UP", "spk_midi.JUMP_UP"], ["JUMP_DOWN", "spk_midi.JUMP_DOWN"], ["POWER_UP", "spk_midi.POWER_UP"], ["POWER_DOWN", "spk_midi.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["ESP32S2 Generic"] = {
|
||||
description: "MicroPython[ESP32C3 MixGo CC]",
|
||||
digital_pin: Profile.generate(['0-18', '21', '33-48']),
|
||||
input_pin: Profile.generate(['0-18', '21', '33-48']),
|
||||
output_pin: Profile.generate(['0-18', '21', '33-48']),
|
||||
pwm_input: Profile.generate(['0-18', '21', '33-48'], 'pwm', 'pwm'),
|
||||
analog_input: Profile.generate(['1-18'], 'adc', 'adc'),
|
||||
pwm_output: Profile.generate(['0-18', '21', '33-48'], 'pwm', 'pwm'),
|
||||
analog_output: Profile.generate(['1-18'], 'adc', 'adc'),
|
||||
espnow_channel: Profile.generate(['1-13']),
|
||||
haskylens_model: Profile.generate(['0-4']),
|
||||
digital: Profile.generate(['0-18', '21', '33-48'], 'pin', 'pin'),
|
||||
pwm_pin: Profile.generate(['0-18', '21', '33-48']),
|
||||
pwm: Profile.generate(['0-18', '21', '33-48'], 'pwm', 'pwm'),
|
||||
analog_pin: Profile.generate(['1-18']),
|
||||
analog: Profile.generate(['1-18'], 'adc', 'adc'),
|
||||
touch: Profile.generate(['1-14'], 'tc', 'tc'),
|
||||
touch_pin: Profile.generate(['1-14']),
|
||||
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-15']),
|
||||
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", "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"], ["LEFT_ARROW", "onboard_matrix.LEFT_ARROW"], ["RIGHT_ARROW", "onboard_matrix.RIGHT_ARROW"], ["DRESS", "onboard_matrix.DRESS"], ["TRANSFORMERS", "onboard_matrix.TRANSFORMERS"], ["SCISSORS", "onboard_matrix.SCISSORS"], ["EXIT", "onboard_matrix.EXIT"], ["TREE", "onboard_matrix.TREE"], ["PACMAN", "onboard_matrix.PACMAN"], ["TARGET", "onboard_matrix.TARGET"], ["TSHIRT", "onboard_matrix.TSHIRT"], ["ROLLERSKATE", "onboard_matrix.ROLLERSKATE"], ["DUCK", "onboard_matrix.DUCK"], ["HOUSE", "onboard_matrix.HOUSE"], ["TORTOISE", "onboard_matrix.TORTOISE"], ["BUTTERFLY", "onboard_matrix.BUTTERFLY"], ["STICKFIGURE", "onboard_matrix.STICKFIGURE"], ["GHOST", "onboard_matrix.GHOST"], ["PITCHFORK", "onboard_matrix.PITCHFORK"], ["MUSIC_QUAVERS", "onboard_matrix.MUSIC_QUAVERS"], ["MUSIC_QUAVER", "onboard_matrix.MUSIC_QUAVER"], ["MUSIC_CROTCHET", "onboard_matrix.MUSIC_CROTCHET"], ["COW", "onboard_matrix.COW"], ["RABBIT", "onboard_matrix.RABBIT"], ["SQUARE_SMALL", "onboard_matrix.SQUARE_SMALL"], ["SQUARE", "onboard_matrix.SQUARE"], ["DIAMOND_SMALL", "onboard_matrix.DIAMOND_SMALL"], ["DIAMOND", "onboard_matrix.DIAMOND"], ["CHESSBOARD", "onboard_matrix.CHESSBOARD"], ["TRIANGLE_LEFT", "onboard_matrix.TRIANGLE_LEFT"], ["TRIANGLE", "onboard_matrix.TRIANGLE"], ["SNAKE", "onboard_matrix.SNAKE"], ["UMBRELLA", "onboard_matrix.UMBRELLA"], ["SKULL", "onboard_matrix.SKULL"], ["GIRAFFE", "onboard_matrix.GIRAFFE"], ["SWORD", "onboard_matrix.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", ".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"]],
|
||||
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;
|
||||
359
boards/default_src/micropython_esp32s3/blocks/inout.js
Normal file
359
boards/default_src/micropython_esp32s3/blocks/inout.js
Normal file
@@ -0,0 +1,359 @@
|
||||
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_pwm_analog_write = {
|
||||
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_VALUE2)
|
||||
.setCheck(Number);
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_INOUT_PWM_ANALOG_WRITE_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_pwm_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_analog_read = {
|
||||
init: function () {
|
||||
this.setColour(BASE_HUE);
|
||||
this.appendValueInput("PIN", Number)
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)
|
||||
.appendField(Blockly.Msg.MIXLY_Analog_PINMODEIN)
|
||||
.setCheck(Number);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_ESP32_MACHINE_VALUE)
|
||||
this.setInputsInline(true);
|
||||
this.setOutput(true, Number);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_INOUT_ANALOG_READ_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"],
|
||||
["2.2V", "machine.ADC.ATTN_6DB"],
|
||||
["1.5V", "machine.ADC.ATTN_2_5DB"],
|
||||
["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_pwm_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('pwm#'), 'PIN_OBJ')
|
||||
.appendField(Blockly.Msg.MIXLY_MICROPYTHON_AS)
|
||||
this.appendDummyInput("")
|
||||
.appendField("PWM" + Blockly.Msg.MIXLY_Analog_PINMODEOUT)
|
||||
// .appendField('pwm')
|
||||
// .appendField(new Blockly.FieldDropdown(profile.default.pwm_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_PWM_ANALOG_WRITE_INIT_TOOLTIP);
|
||||
},
|
||||
getVars: function () {
|
||||
return [this.getFieldValue('PIN_OBJ') == 'pwm#' ? 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_analog_read_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('adc#'), 'PIN_OBJ')
|
||||
.appendField(Blockly.Msg.MIXLY_MICROPYTHON_AS)
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_Analog_PINMODEIN)
|
||||
// .appendField('adc')
|
||||
// .appendField(new Blockly.FieldDropdown(profile.default.adc_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_READ_INIT_TOOLTIP);
|
||||
},
|
||||
getVars: function () {
|
||||
return [this.getFieldValue('PIN_OBJ') == 'adc#' ? 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_pinMode = inout_digital_init;
|
||||
export const inout_analog_write_set_freq = inout_pwm_analog_write_set_freq;
|
||||
export const pin_pressed_init = inout_pin_pressed_init;
|
||||
export const pin_pressed = inout_pin_pressed;
|
||||
export const controls_pin_attachInterrupt = inout_pin_attachInterrupt;
|
||||
401
boards/default_src/micropython_esp32s3/blocks/pins.js
Normal file
401
boards/default_src/micropython_esp32s3/blocks/pins.js
Normal file
@@ -0,0 +1,401 @@
|
||||
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);
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,344 @@
|
||||
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;
|
||||
}
|
||||
#catCE_G6.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
|
||||
background:url('../../../../common/media/mark/act.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
#catCE_G6.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
|
||||
background:url('../../../../common/media/mark/act2.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;
|
||||
}
|
||||
#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;
|
||||
}
|
||||
#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;
|
||||
}
|
||||
#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;
|
||||
}
|
||||
#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;
|
||||
}
|
||||
#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;
|
||||
}
|
||||
#catNova_G1.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
|
||||
background:url('../../../../common/media/mark/act.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
#catNova_G1.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
|
||||
background:url('../../../../common/media/mark/act2.png') no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
13
boards/default_src/micropython_esp32s3/export.js
Normal file
13
boards/default_src/micropython_esp32s3/export.js
Normal file
@@ -0,0 +1,13 @@
|
||||
import MicropythonESP32S3Pins from './blocks/esp32_profile';
|
||||
import * as MicropythonESP32S3InoutBlocks from './blocks/inout';
|
||||
import * as MicropythonESP32S3PinsBlocks from './blocks/pins';
|
||||
import * as MicropythonESP32S3InoutGenerators from './generators/inout';
|
||||
import * as MicropythonESP32S3PinsGenerators from './generators/pins';
|
||||
|
||||
export {
|
||||
MicropythonESP32S3Pins,
|
||||
MicropythonESP32S3InoutBlocks,
|
||||
MicropythonESP32S3PinsBlocks,
|
||||
MicropythonESP32S3InoutGenerators,
|
||||
MicropythonESP32S3PinsGenerators
|
||||
};
|
||||
158
boards/default_src/micropython_esp32s3/generators/inout.js
Normal file
158
boards/default_src/micropython_esp32s3/generators/inout.js
Normal file
@@ -0,0 +1,158 @@
|
||||
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_pwm_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 + '.duty(' + value_num + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
// 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;
|
||||
}
|
||||
|
||||
export const inout_pwm_analog_write_set_freq = function (_, generator) {
|
||||
//generator.definitions_['import_machine_Pin'] = "from machine import Pin";
|
||||
// generator.definitions_['import_machine_PWM'] = "from machine import PWM";
|
||||
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 code = dropdown_pin + '.freq(' + value_num + ')\n';
|
||||
//var code = 'pin' + dropdown_pin + '.set_analog_period(' + value_num + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
// ok
|
||||
export const inout_analog_read = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
//generator.setups_['setup_input_'+dropdown_pin] = 'pinMode('+dropdown_pin+', INPUT);';
|
||||
var code = dropdown_pin + '.read()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
// 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;
|
||||
}
|
||||
|
||||
export const inout_pwm_analog_write_init = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var pin_obj = this.getFieldValue('PIN_OBJ') || 'pwm#';
|
||||
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var varName = (pin_obj == 'pwm#') ? 'pwm' + dropdown_pin : generator.variableDB_.getName(pin_obj, Blockly.Variables.NAME_TYPE);
|
||||
var code = varName + ' = machine.PWM(machine.Pin(' + dropdown_pin + '))\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_read_init = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var pin_obj = this.getFieldValue('PIN_OBJ') || 'adc#';
|
||||
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var varName = (pin_obj == 'adc#') ? 'adc' + dropdown_pin : generator.variableDB_.getName(pin_obj, Blockly.Variables.NAME_TYPE);
|
||||
var code = varName + ' = machine.ADC(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;
|
||||
}
|
||||
49
boards/default_src/micropython_esp32s3/generators/pins.js
Normal file
49
boards/default_src/micropython_esp32s3/generators/pins.js
Normal file
@@ -0,0 +1,49 @@
|
||||
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;
|
||||
170
boards/default_src/micropython_esp32s3/index.js
Normal file
170
boards/default_src/micropython_esp32s3/index.js
Normal file
@@ -0,0 +1,170 @@
|
||||
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,
|
||||
MicroPythonBlynkBlocks,
|
||||
MicroPythonCommunicateBlocks,
|
||||
MicroPythonDisplayExternBlocks,
|
||||
MicroPythonDisplayOnBoardBlocks,
|
||||
MicroPythonFactoryBlocks,
|
||||
MicroPythonInputBlocks,
|
||||
MicroPythonIotBlocks,
|
||||
MicroPythonNetworkBlocks,
|
||||
MicroPythonNovaG1Blocks,
|
||||
MicroPythonPeG1Blocks,
|
||||
MicroPythonSensorExternBlocks,
|
||||
MicroPythonSensorOnBoardBlocks,
|
||||
MicroPythonSerialBlocks,
|
||||
MicroPythonSystemBlocks,
|
||||
MicroPythonWeatherBlocks,
|
||||
MicroPythonActuatorExternGenerators,
|
||||
MicroPythonActuatorOnBoardGenerators,
|
||||
MicroPythonAISensorGenerators,
|
||||
MicroPythonAIGenerators,
|
||||
MicroPythonBlynkGenerators,
|
||||
MicroPythonCommunicateGenerators,
|
||||
MicroPythonDisplayExternGenerators,
|
||||
MicroPythonDisplayOnBoardGenerators,
|
||||
MicroPythonFactoryGenerators,
|
||||
MicroPythonInputGenerators,
|
||||
MicroPythonIotGenerators,
|
||||
MicroPythonNetworkGenerators,
|
||||
MicroPythonNovaG1Generators,
|
||||
MicroPythonPeG1Generators,
|
||||
MicroPythonSensorExternGenerators,
|
||||
MicroPythonSensorOnBoardGenerators,
|
||||
MicroPythonSerialGenerators,
|
||||
MicroPythonSystemGenerators,
|
||||
MicroPythonWeatherGenerators
|
||||
} from '@mixly/micropython';
|
||||
|
||||
import {
|
||||
MicropythonESP32S3Pins,
|
||||
MicropythonESP32S3InoutBlocks,
|
||||
MicropythonESP32S3PinsBlocks,
|
||||
MicropythonESP32S3InoutGenerators,
|
||||
MicropythonESP32S3PinsGenerators
|
||||
} from './';
|
||||
|
||||
import './css/color_esp32s2_mixgoce.css';
|
||||
|
||||
Object.assign(Blockly.Variables, Variables);
|
||||
Object.assign(Blockly.Procedures, Procedures);
|
||||
Blockly.Python = Python;
|
||||
Blockly.generator = Python;
|
||||
|
||||
Profile.default = {};
|
||||
Object.assign(Profile, MicropythonESP32S3Pins);
|
||||
Object.assign(Profile.default, MicropythonESP32S3Pins['MixGo CE']);
|
||||
|
||||
Object.assign(
|
||||
Blockly.Blocks,
|
||||
PythonVariablesBlocks,
|
||||
PythonControlBlocks,
|
||||
PythonMathBlocks,
|
||||
PythonTextBlocks,
|
||||
PythonListsBlocks,
|
||||
PythonDictsBlocks,
|
||||
PythonLogicBlocks,
|
||||
PythonStorageBlocks,
|
||||
PythonProceduresBlocks,
|
||||
PythonTupleBlocks,
|
||||
PythonSetBlocks,
|
||||
PythonHtmlBlocks,
|
||||
PythonUtilityBlocks,
|
||||
MicroPythonInputBlocks,
|
||||
MicroPythonSystemBlocks,
|
||||
MicroPythonSerialBlocks,
|
||||
MicroPythonCommunicateBlocks,
|
||||
MicroPythonIotBlocks,
|
||||
MicroPythonWeatherBlocks,
|
||||
MicroPythonAISensorBlocks,
|
||||
MicroPythonSensorOnBoardBlocks,
|
||||
MicroPythonSensorExternBlocks,
|
||||
MicroPythonPeG1Blocks,
|
||||
MicroPythonNetworkBlocks,
|
||||
MicroPythonAIBlocks,
|
||||
MicroPythonActuatorOnBoardBlocks,
|
||||
MicroPythonActuatorExternBlocks,
|
||||
MicroPythonDisplayOnBoardBlocks,
|
||||
MicroPythonDisplayExternBlocks,
|
||||
MicroPythonFactoryBlocks,
|
||||
MicroPythonBlynkBlocks,
|
||||
MicroPythonNovaG1Blocks,
|
||||
MicropythonESP32S3InoutBlocks,
|
||||
MicropythonESP32S3PinsBlocks
|
||||
);
|
||||
|
||||
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,
|
||||
MicroPythonSensorOnBoardGenerators,
|
||||
MicroPythonSensorExternGenerators,
|
||||
MicroPythonPeG1Generators,
|
||||
MicroPythonNetworkGenerators,
|
||||
MicroPythonAIGenerators,
|
||||
MicroPythonActuatorOnBoardGenerators,
|
||||
MicroPythonActuatorExternGenerators,
|
||||
MicroPythonDisplayOnBoardGenerators,
|
||||
MicroPythonDisplayExternGenerators,
|
||||
MicroPythonFactoryGenerators,
|
||||
MicroPythonBlynkGenerators,
|
||||
MicroPythonNovaG1Generators,
|
||||
MicropythonESP32S3InoutGenerators,
|
||||
MicropythonESP32S3PinsGenerators
|
||||
);
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,187 @@
|
||||
# -*- coding: UTF-8 -*-
|
||||
import time
|
||||
from micropython import const
|
||||
|
||||
_ES_MODULE_ADC = const(0x01)
|
||||
_ES_MODULE_DAC = const(0x02)
|
||||
_ES_MODULE_ADC_DAC = const(0x03)
|
||||
_ES_MODULE_LINE = const(0x04)
|
||||
_BIT_LENGTH_16BITS = const(0x03)
|
||||
_FMT_I2S_NORMAL = const(0x00)
|
||||
_I2S_MODE_SLAVE = const(0x00)
|
||||
_ADC_INPUT_LINE = const(0x01)
|
||||
_DAC_OUTPUT_ALL = const(0x02)
|
||||
_LCLK_DIV = const(256)
|
||||
_MCLK_DIV = const(0x04)
|
||||
|
||||
class ES8374:
|
||||
def __init__(self, i2c_bus=None, i2c_addr=0x10, gain=5, pga_en=1):
|
||||
self.i2c_bus = i2c_bus
|
||||
self.i2c_addr = i2c_addr
|
||||
self.stop()
|
||||
self.init_reg(_I2S_MODE_SLAVE, ((_BIT_LENGTH_16BITS << 4) | _FMT_I2S_NORMAL), _DAC_OUTPUT_ALL, _ADC_INPUT_LINE)
|
||||
self.mic_gain(gain)
|
||||
self.pga_enable(pga_en)
|
||||
self.configI2SFormat(_ES_MODULE_ADC_DAC, _FMT_I2S_NORMAL)
|
||||
|
||||
def _readReg(self, regAddr):
|
||||
return self.i2c_bus.readfrom_mem(self.i2c_addr, regAddr, 1)[0]
|
||||
|
||||
def _writeReg(self, regAddr, data):
|
||||
self.i2c_bus.writeto_mem(self.i2c_addr, regAddr, data.to_bytes(1, 'little'))
|
||||
|
||||
def init_reg(self, ms_mode, fmt, out_channel, in_channel):
|
||||
self._writeReg(0x00, 0x3F)# IC Rst start
|
||||
self._writeReg(0x00, 0x03)# IC Rst stop
|
||||
self._writeReg(0x01, 0x7F)# IC clk on # M ORG 7F
|
||||
self._writeReg(0x0f, (self._readReg(0x0F) & 0x7f) | (ms_mode << 7))# CODEC IN I2S SLAVE MODE
|
||||
|
||||
self._writeReg(0x6F, 0xA0)# pll set:mode enable
|
||||
self._writeReg(0x72, 0x41)# pll set:mode set
|
||||
self._writeReg(0x09, 0x01)# pll set:reset on ,set start
|
||||
self._writeReg(0x0C, 0x22)# pll set:k
|
||||
self._writeReg(0x0D, 0x2E)# pll set:k
|
||||
self._writeReg(0x0E, 0xC6)# pll set:k
|
||||
self._writeReg(0x0A, 0x3A)# pll set:
|
||||
self._writeReg(0x0B, 0x07)# pll set:n
|
||||
self._writeReg(0x09, 0x41)# pll set:reset off ,set stop
|
||||
self.i2sConfigClock()
|
||||
self._writeReg(0x24, 0x08)# adc set
|
||||
self._writeReg(0x36, 0x00)# dac set
|
||||
self._writeReg(0x12, 0x30)# timming set
|
||||
self._writeReg(0x13, 0x20)# timming set
|
||||
self.configI2SFormat(_ES_MODULE_ADC, fmt)
|
||||
self.configI2SFormat(_ES_MODULE_DAC, fmt)
|
||||
self._writeReg(0x21, 0x50)# adc set: SEL LIN1 CH+PGAGAIN=0DB
|
||||
self._writeReg(0x22, 0xFF)# adc set: PGA GAIN=0DB
|
||||
self._writeReg(0x21, 0x14)# adc set: SEL LIN1 CH+PGAGAIN=18DB
|
||||
self._writeReg(0x22, 0x55)# pga = +15db
|
||||
self._writeReg(0x08, 0x21)# set class d divider = 33, to avoid the high frequency tone on laudspeaker
|
||||
self._writeReg(0x00, 0x80)# IC START
|
||||
time.sleep(0.05)
|
||||
self._writeReg(0x25, 0x00)# ADCVOLUME on
|
||||
self._writeReg(0x38, 0x00)# DACVOLUME on
|
||||
self._writeReg(0x14, 0x8A)# IC START
|
||||
self._writeReg(0x15, 0x40)# IC START
|
||||
self._writeReg(0x1A, 0xA0)# monoout set
|
||||
self._writeReg(0x1B, 0x19)# monoout set
|
||||
self._writeReg(0x1C, 0x90)# spk set
|
||||
self._writeReg(0x1D, 0x01)# spk set
|
||||
self._writeReg(0x1F, 0x00)# spk set
|
||||
self._writeReg(0x1E, 0x20)# spk on
|
||||
self._writeReg(0x28, 0x70)# alc set 0x70
|
||||
#self._writeReg(0x26, 0x4E)# alc set
|
||||
#self._writeReg(0x27, 0x10)# alc set
|
||||
#self._writeReg(0x29, 0x00)# alc set
|
||||
#self._writeReg(0x2B, 0x00)# alc set
|
||||
self._writeReg(0x25, 0x00)# ADCVOLUME on
|
||||
self._writeReg(0x38, 0x00)# DACVOLUME on
|
||||
self._writeReg(0x37, 0x30)# dac set
|
||||
self._writeReg(0x6D, 0x60)# SEL:GPIO1=DMIC CLK OUT+SEL:GPIO2=PLL CLK OUT
|
||||
self._writeReg(0x71, 0x05)# for automute setting
|
||||
self._writeReg(0x73, 0x70)
|
||||
self.configDACOutput(out_channel)# 0x3c Enable DAC and Enable Lout/Rout/1/2
|
||||
self.configADCInput(in_channel)# 0x00 LINSEL & RINSEL, LIN1/RIN1 as ADC Input DSSEL,use one DS Reg11 DSR, LINPUT1-RINPUT1
|
||||
self.voice_volume(95)
|
||||
self._writeReg(0x37, 0x00)# dac set
|
||||
'''
|
||||
reg = self._readReg(0x1a) # disable lout
|
||||
reg |= 0x08
|
||||
self._writeReg(0x1a, reg)
|
||||
reg &= 0xdf
|
||||
self._writeReg(0x1a, reg)
|
||||
self._writeReg(0x1D, 0x12) # mute speaker
|
||||
self._writeReg(0x1E, 0x20) # disable class d
|
||||
reg = self._readReg(0x15) # power up dac
|
||||
reg &= 0xdf
|
||||
self._writeReg(0x15, reg)
|
||||
reg = self._readReg(0x1a) # disable lout
|
||||
reg |= 0x20
|
||||
self._writeReg(0x1a, reg)
|
||||
reg &= 0xf7
|
||||
self._writeReg(0x1a, reg)
|
||||
self._writeReg(0x1D, 0x02) # mute speaker
|
||||
self._writeReg(0x1E, 0xa0) # disable class d
|
||||
self.voice_mute(0)
|
||||
'''
|
||||
def stop(self):
|
||||
self.voice_mute(1)
|
||||
self._writeReg(0x1a, self._readReg(0x1a)| 0x08)
|
||||
self._writeReg(0x1a, self._readReg(0x1a)& 0xdf)
|
||||
self._writeReg(0x1D, 0x12)# mute speaker
|
||||
self._writeReg(0x1E, 0x20)# disable class d
|
||||
self._writeReg(0x15, self._readReg(0x15)| 0x20)
|
||||
self._writeReg(0x10, self._readReg(0x10)| 0xc0)
|
||||
self._writeReg(0x21, self._readReg(0x21)| 0xc0)
|
||||
|
||||
def i2sConfigClock(self):
|
||||
self._writeReg(0x0f, (self._readReg(0x0F) & 0xe0) | _MCLK_DIV)
|
||||
self._writeReg(0x06, _LCLK_DIV >> 8)# ADCFsMode,singel SPEED,RATIO=256
|
||||
self._writeReg(0x07, _LCLK_DIV & 0xFF)# ADCFsMode,singel SPEED,RATIO=256
|
||||
|
||||
def configI2SFormat(self, mode, fmt):
|
||||
fmt_tmp = ((fmt & 0xf0) >> 4)
|
||||
fmt_i2s = fmt & 0x0f
|
||||
if (mode == _ES_MODULE_ADC or mode == _ES_MODULE_ADC_DAC):
|
||||
reg = self._readReg(0x10)
|
||||
reg &= 0xfc
|
||||
self._writeReg(0x10, (reg|fmt_i2s))
|
||||
self.setBitsPerSample(mode, 3)
|
||||
|
||||
if (mode == _ES_MODULE_DAC or mode == _ES_MODULE_ADC_DAC):
|
||||
reg = self._readReg(0x11)
|
||||
reg &= 0xfc
|
||||
self._writeReg(0x11, (reg|fmt_i2s))
|
||||
self.setBitsPerSample(mode, 3)
|
||||
|
||||
# set Bits Per Sample
|
||||
def setBitsPerSample(self, mode, bit_per_smaple):
|
||||
bits = bit_per_smaple & 0x0f
|
||||
if (mode == _ES_MODULE_ADC or mode == _ES_MODULE_ADC_DAC):
|
||||
reg = self._readReg(0x10)
|
||||
reg &= 0xe3
|
||||
self._writeReg(0x10, (reg| (bits << 2)))
|
||||
|
||||
if (mode == _ES_MODULE_DAC or mode == _ES_MODULE_ADC_DAC):
|
||||
reg = self._readReg(0x11)
|
||||
reg &= 0xe3
|
||||
self._writeReg(0x11, (reg| (bits << 2)))
|
||||
|
||||
def configDACOutput(self, output):
|
||||
self._writeReg(0x1d, 0x02)
|
||||
reg = self._readReg(0x1c) # set spk mixer
|
||||
reg |= 0x80
|
||||
self._writeReg(0x1c, reg)
|
||||
self._writeReg(0x1D, 0x02) # spk set
|
||||
self._writeReg(0x1F, 0x00) # spk set
|
||||
self._writeReg(0x1E, 0xA0) # spk on
|
||||
|
||||
def configADCInput(self, input):
|
||||
reg = self._readReg(0x21)
|
||||
reg = (reg & 0xcf) | 0x24
|
||||
self._writeReg( 0x21, reg)
|
||||
|
||||
def mic_volume(self, volume=None):
|
||||
if volume is None:
|
||||
return round(100 - self._readReg(0x25) * 100 / 192)
|
||||
else:
|
||||
self._writeReg(0x25, (100 - volume) * 192 // 100)
|
||||
|
||||
def voice_volume(self, volume=None):
|
||||
if volume is None:
|
||||
return round(100 - self._readReg(0x38) * 100 / 192)
|
||||
else:
|
||||
self._writeReg(0x38, (100 - volume) * 192 // 100)
|
||||
|
||||
def voice_mute(self, enable=None):
|
||||
if enable is None:
|
||||
return True if self._readReg(0x36) & 0x40 else False
|
||||
else:
|
||||
self._writeReg(0x36, (self._readReg(0x36)& 0xdf) | (enable << 5))
|
||||
|
||||
def mic_gain(self, gain):
|
||||
gain_n = max(min(gain, 15), 0)
|
||||
self._writeReg(0x22, (gain_n | (gain_n<<4))) # MIC PGA -3.5db ~ 24db
|
||||
|
||||
def pga_enable(self, enable):
|
||||
self._writeReg(0x21, (self._readReg(0x21) & 0xfb) | (enable << 2)) # MIC PGA 0db or 15db
|
||||
@@ -0,0 +1,329 @@
|
||||
"""
|
||||
mixgo_zero Zi Onboard resources
|
||||
|
||||
Micropython library for the mixgo_zero Zi Onboard resources
|
||||
=======================================================
|
||||
|
||||
#Preliminary composition 20231020
|
||||
#S3定时器ID(-1,0,1,2,3(led))
|
||||
|
||||
dahanzimin From the Mixly Team
|
||||
"""
|
||||
|
||||
from machine import *
|
||||
import time, gc, st7735, math
|
||||
|
||||
'''RTC'''
|
||||
rtc_clock = RTC()
|
||||
|
||||
'''I2C-onboard'''
|
||||
version = not Pin(13, Pin.IN, Pin.PULL_DOWN).value()
|
||||
onboard_i2c = SoftI2C(scl=Pin(36), sda=Pin(37), freq=400000)
|
||||
onboard_i2c_soft = SoftI2C(scl=Pin(36) if version else Pin(13), sda=Pin(15), freq=400000)
|
||||
onboard_i2c_scan = onboard_i2c.scan()
|
||||
|
||||
'''SPI-onboard'''
|
||||
try:
|
||||
import _boot
|
||||
onboard_spi = _boot.onboard_spi
|
||||
onboard_spi.init(baudrate=50000000)
|
||||
except:
|
||||
onboard_spi = SPI(1, baudrate=50000000, polarity=0, phase=0)
|
||||
|
||||
'''TFT/128*160'''
|
||||
onboard_tft = st7735.ST7735(onboard_spi, 160, 128, dc_pin=18, cs_pin=45, bl_pin=14, font_address=0x700000)
|
||||
|
||||
'''ACC-Sensor'''
|
||||
try :
|
||||
import mxc6655xa
|
||||
onboard_acc = mxc6655xa.MXC6655XA(onboard_i2c, front=True)
|
||||
except Exception as e:
|
||||
print("Warning: Failed to communicate with MXC6655XA (ACC) or",e)
|
||||
|
||||
'''ALS_PS-Sensor *2'''
|
||||
try :
|
||||
import ltr553als
|
||||
onboard_als_l = ltr553als.LTR_553ALS(onboard_i2c)
|
||||
except Exception as e:
|
||||
print("Warning: Failed to communicate with TR_553ALS (ALS&PS) or",e)
|
||||
|
||||
try :
|
||||
import ltr553als
|
||||
onboard_als_r = ltr553als.LTR_553ALS(onboard_i2c_soft)
|
||||
except Exception as e:
|
||||
print("Warning: Failed to communicate with TR_553ALS (ALS&PS) or",e)
|
||||
|
||||
'''BPS-Sensor'''
|
||||
if 0x76 in onboard_i2c_scan:
|
||||
try :
|
||||
import hp203x
|
||||
onboard_bps = hp203x.HP203X(onboard_i2c_soft)
|
||||
except Exception as e:
|
||||
print("Warning: Failed to communicate with HP203X (BPS) or",e)
|
||||
|
||||
'''THS-Sensor'''
|
||||
if 0x38 in onboard_i2c_scan:
|
||||
try :
|
||||
import ahtx0
|
||||
onboard_ths = ahtx0.AHTx0(onboard_i2c)
|
||||
except Exception as e:
|
||||
print("Warning: Failed to communicate with AHTx0 (THS) or",e)
|
||||
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)
|
||||
|
||||
'''RFID-Sensor'''
|
||||
try :
|
||||
import rc522
|
||||
onboard_rfid = rc522.RC522(onboard_i2c)
|
||||
except Exception as e:
|
||||
print("Warning: Failed to communicate with RC522 (RFID) or",e)
|
||||
|
||||
'''MGS-Sensor'''
|
||||
try :
|
||||
import mmc5603
|
||||
onboard_mgs = mmc5603.MMC5603(onboard_i2c)
|
||||
except Exception as e:
|
||||
print("Warning: Failed to communicate with MMC5603 (MGS) or",e)
|
||||
|
||||
'''2RGB_WS2812'''
|
||||
from ws2812 import NeoPixel
|
||||
onboard_rgb = NeoPixel(Pin(38), 4)
|
||||
|
||||
'''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):
|
||||
Pin(self.pin, Pin.IN).irq(handler = handler, trigger = trigger)
|
||||
|
||||
'''1KEY_Button'''
|
||||
class Button(KEYSensor):
|
||||
def __init__(self, pin):
|
||||
self.pin = pin
|
||||
self.key = Pin(pin, Pin.IN)
|
||||
self.flag = True
|
||||
|
||||
def _value(self):
|
||||
return not self.key.value()
|
||||
|
||||
B1key = Button(0)
|
||||
B2key = KEYSensor(17,0)
|
||||
A1key = KEYSensor(17,2900)
|
||||
A2key = KEYSensor(17,2300)
|
||||
A3key = KEYSensor(17,1650)
|
||||
A4key = KEYSensor(17,850)
|
||||
|
||||
'''2-TouchPad'''
|
||||
class Touch_Pad:
|
||||
__species = {}
|
||||
__first_init = True
|
||||
def __new__(cls, pin, *args, **kwargs):
|
||||
if pin not in cls.__species.keys():
|
||||
cls.__first_init = True
|
||||
cls.__species[pin]=object.__new__(cls)
|
||||
return cls.__species[pin]
|
||||
|
||||
def __init__(self, pin, default=30000):
|
||||
if self.__first_init:
|
||||
self.__first_init = False
|
||||
from machine import TouchPad
|
||||
self._pin = TouchPad(Pin(pin))
|
||||
self.raw = self._pin.read()
|
||||
if self.raw >= default * 1.5:
|
||||
self.raw = default
|
||||
|
||||
def touch(self,value=None ):
|
||||
return self._pin.read() > value if value else self._pin.read()
|
||||
|
||||
#Touch with function call
|
||||
def touched(pin,value=60000):
|
||||
return Touch_Pad(pin).touch(value)
|
||||
|
||||
def touch_slide(pina, pinb):
|
||||
return ((Touch_Pad(pina).touch() - Touch_Pad(pina).raw) - (Touch_Pad(pinb).touch() - Touch_Pad(pinb).raw)) // 10
|
||||
|
||||
'''2LED-Tristate'''
|
||||
class LED_T:
|
||||
def __init__(self, pin, timer_id=3):
|
||||
self._pin = pin
|
||||
self._pwm = 0
|
||||
self._index_pwm = [0,0]
|
||||
Timer(timer_id, freq=2500, mode=Timer.PERIODIC, callback=self.tim_callback)
|
||||
|
||||
def _cutonoff(self,val):
|
||||
if val == 0:
|
||||
Pin(self._pin, Pin.IN)
|
||||
elif val == 1:
|
||||
Pin(self._pin, Pin.OUT).value(1)
|
||||
elif val == -1:
|
||||
Pin(self._pin, Pin.OUT).value(0)
|
||||
|
||||
def tim_callback(self,tim):
|
||||
if self._pwm <= 25:
|
||||
if self._pwm * 4 < self._index_pwm[0]:
|
||||
self._cutonoff(1)
|
||||
else:
|
||||
self._cutonoff(0)
|
||||
else:
|
||||
if (self._pwm - 26) * 4 < self._index_pwm[1]:
|
||||
self._cutonoff(-1)
|
||||
else:
|
||||
self._cutonoff(0)
|
||||
self._pwm = self._pwm + 1 if self._pwm <= 51 else 0
|
||||
|
||||
def setbrightness(self,index,val):
|
||||
if not 0 <= val <= 100:
|
||||
raise ValueError("Brightness must be in the range: 0~100%")
|
||||
self._index_pwm[index-1] = val
|
||||
|
||||
def getbrightness(self,index):
|
||||
return self._index_pwm[index-1]
|
||||
|
||||
def setonoff(self,index,val):
|
||||
if(val == -1):
|
||||
if self._index_pwm[index-1] < 50:
|
||||
self._index_pwm[index-1] = 100
|
||||
else:
|
||||
self._index_pwm[index-1] = 0
|
||||
elif(val == 1):
|
||||
self._index_pwm[index-1] = 100
|
||||
elif(val == 0):
|
||||
self._index_pwm[index-1] = 0
|
||||
|
||||
def getonoff(self,index):
|
||||
return True if self._index_pwm[index-1] > 0 else False
|
||||
|
||||
'''2LED-Independent'''
|
||||
class LED_I:
|
||||
def __init__(self, pins=[]):
|
||||
self._pins = [PWM(Pin(pin), duty_u16=0) for pin in pins]
|
||||
self._brightness = [0 for _ in range(len(self._pins))]
|
||||
|
||||
def setbrightness(self, index, val):
|
||||
if not 0 <= val <= 100:
|
||||
raise ValueError("Brightness must be in the range: 0-100%")
|
||||
self._brightness[index - 1] = val
|
||||
self._pins[index - 1].duty_u16(val * 65535 // 100)
|
||||
|
||||
def getbrightness(self, index):
|
||||
return self._brightness[index - 1]
|
||||
|
||||
def setonoff(self, index, val):
|
||||
if val == -1:
|
||||
self.setbrightness(index, 100) if self.getbrightness(index) < 50 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.getbrightness(index) > 50 else False
|
||||
|
||||
onboard_led=LED_I(pins=[42, 13]) if version else LED_T(42, timer_id=3)
|
||||
|
||||
class Clock:
|
||||
def __init__(self, x, y, radius, color, oled=onboard_tft): #定义时钟中心点和半径
|
||||
self.display = oled
|
||||
self.xc = x
|
||||
self.yc = y
|
||||
self.r = radius
|
||||
self.color= color
|
||||
self.hour = 0
|
||||
self.min = 0
|
||||
self.sec = 0
|
||||
|
||||
def set_time(self, h, m, s): #设定时间
|
||||
self.hour = h
|
||||
self.min = m
|
||||
self.sec = s
|
||||
|
||||
def set_rtctime(self): #设定时间
|
||||
t = rtc_clock.datetime()
|
||||
self.hour = t[4]
|
||||
self.min = t[5]
|
||||
self.sec = t[6]
|
||||
|
||||
def drawDial(self,color): #画钟表刻度
|
||||
r_tic1 = self.r - 1
|
||||
r_tic2 = self.r - 2
|
||||
self.display.ellipse(self.xc, self.yc, self.r,self.r, self.color)
|
||||
self.display.ellipse(self.xc, self.yc, 2, 2, self.color,True)
|
||||
|
||||
for h in range(12):
|
||||
at = math.pi * 2.0 * h / 12.0
|
||||
x1 = round(self.xc + r_tic1 * math.sin(at))
|
||||
x2 = round(self.xc + r_tic2 * math.sin(at))
|
||||
y1 = round(self.yc - r_tic1 * math.cos(at))
|
||||
y2 = round(self.yc - r_tic2 * math.cos(at))
|
||||
self.display.line(x1, y1, x2, y2, color)
|
||||
|
||||
def drawHour(self,color): #画时针
|
||||
r_hour = int(self.r / 10.0 * 5)
|
||||
ah = math.pi * 2.0 * ((self.hour % 12) + self.min / 60.0) / 12.0
|
||||
xh = int(self.xc + r_hour * math.sin(ah))
|
||||
yh = int(self.yc - r_hour * math.cos(ah))
|
||||
self.display.line(self.xc, self.yc, xh, yh, color)
|
||||
|
||||
def drawMin(self,color): #画分针
|
||||
r_min = int(self.r / 10.0 * 7)
|
||||
am = math.pi * 2.0 * self.min / 60.0
|
||||
xm = round(self.xc + r_min * math.sin(am))
|
||||
ym = round(self.yc - r_min * math.cos(am))
|
||||
self.display.line(self.xc, self.yc, xm, ym, color)
|
||||
|
||||
def drawSec(self,color): #画秒针
|
||||
r_sec = int(self.r / 10.0 * 9)
|
||||
asec = math.pi * 2.0 * self.sec / 60.0
|
||||
xs = round(self.xc + r_sec * math.sin(asec))
|
||||
ys = round(self.yc - r_sec * math.cos(asec))
|
||||
self.display.line(self.xc, self.yc, xs, ys, color)
|
||||
|
||||
def draw_clock(self): #画完整钟表
|
||||
self.drawDial(self.color)
|
||||
self.drawHour(self.color)
|
||||
self.drawMin(self.color)
|
||||
self.drawSec(self.color)
|
||||
self.display.show()
|
||||
self.clear(0)
|
||||
|
||||
def clear(self,color=0): #清除
|
||||
self.drawHour(color)
|
||||
self.drawMin(color)
|
||||
self.drawSec(color)
|
||||
|
||||
'''Reclaim memory'''
|
||||
gc.collect()
|
||||
@@ -0,0 +1,89 @@
|
||||
"""
|
||||
mixgo_zero Zi Voice Onboard resources
|
||||
|
||||
Micropython library for the mixgo_zero Zi Onboard resources
|
||||
=======================================================
|
||||
|
||||
#Preliminary composition 20230818
|
||||
|
||||
dahanzimin From the Mixly Team
|
||||
"""
|
||||
import ustruct
|
||||
import time
|
||||
import music_spk
|
||||
import es8374
|
||||
|
||||
from machine import Pin, I2S
|
||||
from mixgo_nova import onboard_i2c
|
||||
|
||||
sample_rate = 22050
|
||||
ob_code = es8374.ES8374(onboard_i2c)
|
||||
time.sleep(0.2)
|
||||
|
||||
#ps 特殊改双全工i2s支持
|
||||
ob_audio = I2S(0, sck=Pin(34), ws=Pin(47), dout=Pin(48), din=Pin(33), mck=Pin(35), mode=I2S.RTX, bits=16, format=I2S.MONO, rate=sample_rate, ibuf=20000)
|
||||
|
||||
spk_midi = music_spk.MIDI(ob_audio, sample_rate)
|
||||
|
||||
def u2s(n):
|
||||
return n if n < (1 << 15) else n - (1 << 16)
|
||||
|
||||
def sound_level():
|
||||
buf = bytearray(100)
|
||||
values = []
|
||||
ob_audio.readinto(buf)
|
||||
for i in range(len(buf)//2):
|
||||
values.append(u2s(buf[i * 2] | buf[i * 2 + 1]<<8))
|
||||
return max(values) - min(values)
|
||||
|
||||
def play_audio(path):
|
||||
file = open(path, 'rb')
|
||||
header = file.read(44)
|
||||
if header[8:12] != b'WAVE':
|
||||
raise Error('not a WAVE file')
|
||||
_rate = ustruct.unpack('<I', header[24:28])[0]
|
||||
print("sample_rate", _rate)
|
||||
file.seek(44)
|
||||
ob_audio = I2S(0, sck=Pin(34), ws=Pin(47), dout=Pin(48), din=Pin(33), mck=Pin(35), mode=I2S.RTX, bits=16, format=I2S.MONO, rate=_rate, ibuf=20000)
|
||||
while True:
|
||||
block = file.read(1024)
|
||||
if not block:
|
||||
break
|
||||
ob_audio.write(block)
|
||||
ob_audio = I2S(0, sck=Pin(34), ws=Pin(47), dout=Pin(48), din=Pin(33), mck=Pin(35), mode=I2S.RTX, bits=16, format=I2S.MONO, rate=sample_rate, ibuf=20000)
|
||||
file.close()
|
||||
|
||||
def record_audio(path, seconds=5):
|
||||
ob_audio = I2S(0, sck=Pin(34), ws=Pin(47), dout=Pin(48), din=Pin(33), mck=Pin(35), mode=I2S.RTX, bits=16, format=I2S.MONO, rate=sample_rate*4, ibuf=20000)
|
||||
file_size = sample_rate * 16 * 1 * seconds // 8
|
||||
wav_header = bytearray(44)
|
||||
wav_header[0:4] = b'RIFF'
|
||||
ustruct.pack_into('<I', wav_header, 4, file_size + 36)
|
||||
wav_header[8:40] = b'WAVEfmt \x10\x00\x00\x00\x01\x00\x01\x00"V\x00\x00D\xac\x00\x00\x02\x00\x10\x00data'
|
||||
ustruct.pack_into('<I', wav_header, 40, file_size)
|
||||
|
||||
buf = bytearray(512)
|
||||
file = open(path, 'wb')
|
||||
file.write(wav_header)
|
||||
for _ in range(file_size // 512):
|
||||
ob_audio.readinto(buf)
|
||||
file.write(buf)
|
||||
ob_audio = I2S(0, sck=Pin(34), ws=Pin(47), dout=Pin(48), din=Pin(33), mck=Pin(35), mode=I2S.RTX, bits=16, format=I2S.MONO, rate=sample_rate, ibuf=20000)
|
||||
file.close()
|
||||
|
||||
def play_audio_url(url):
|
||||
import urequests
|
||||
response = urequests.get(url, stream=True)
|
||||
header = response.raw.read(44)
|
||||
if header[8:12] != b'WAVE':
|
||||
raise Error('not a WAVE file')
|
||||
_rate = ustruct.unpack('<I', header[24:28])[0]
|
||||
#print("sample_rate", _rate)
|
||||
ob_audio = I2S(0, sck=Pin(34), ws=Pin(47), dout=Pin(48), din=Pin(33), mck=Pin(35), mode=I2S.RTX, bits=16, format=I2S.MONO, rate=_rate, ibuf=20000)
|
||||
while True:
|
||||
block = response.raw.read(1024)
|
||||
if not block:
|
||||
break
|
||||
ob_audio.write(block)
|
||||
ob_audio = I2S(0, sck=Pin(34), ws=Pin(47), dout=Pin(48), din=Pin(33), mck=Pin(35), mode=I2S.RTX, bits=16, format=I2S.MONO, rate=sample_rate, ibuf=20000)
|
||||
response.close()
|
||||
@@ -0,0 +1,283 @@
|
||||
"""
|
||||
mixgo_zero Onboard resources
|
||||
|
||||
Micropython library for the mixgo_zero Onboard resources
|
||||
=======================================================
|
||||
|
||||
#Preliminary composition 20240110
|
||||
#S3定时器ID(-1,0,1,2,3)
|
||||
|
||||
@dahanzimin From the Mixly Team
|
||||
"""
|
||||
from machine import *
|
||||
import time, gc, st7789_bf, math
|
||||
|
||||
'''RTC'''
|
||||
rtc_clock = RTC()
|
||||
|
||||
'''I2C-onboard'''
|
||||
#onboard_i2c = I2C(0)
|
||||
onboard_i2c = SoftI2C(scl=Pin(47), sda=Pin(48), freq=400000)
|
||||
onboard_i2c_1 = SoftI2C(scl=Pin(47), sda=Pin(21), freq=400000)
|
||||
|
||||
'''SPI-onboard'''
|
||||
try:
|
||||
import _boot
|
||||
onboard_spi = _boot.onboard_spi
|
||||
onboard_spi.init(baudrate=50000000)
|
||||
except:
|
||||
onboard_spi = SPI(1, baudrate=50000000, polarity=0, phase=0)
|
||||
|
||||
'''TFT/320*240'''
|
||||
onboard_tft = st7789_bf.ST7789(onboard_spi, 320, 240, dc_pin=18, cs_pin=45, bl_pin=46, font_address=0xE00000)
|
||||
|
||||
'''ACC-Sensor'''
|
||||
try :
|
||||
import mxc6655xa
|
||||
onboard_acc = mxc6655xa.MXC6655XA(onboard_i2c, front=True)
|
||||
except Exception as e:
|
||||
print("Warning: Failed to communicate with MXC6655XA (ACC) or",e)
|
||||
|
||||
'''ALS_PS-Sensor *2'''
|
||||
try :
|
||||
import ltr553als
|
||||
onboard_als_l = ltr553als.LTR_553ALS(onboard_i2c)
|
||||
except Exception as e:
|
||||
print("Warning: Failed to communicate with TR_553ALS (ALS&PS) or",e)
|
||||
|
||||
try :
|
||||
import ltr553als
|
||||
onboard_als_r = ltr553als.LTR_553ALS(onboard_i2c_1)
|
||||
except Exception as e:
|
||||
print("Warning: Failed to communicate with TR_553ALS (ALS&PS) or",e)
|
||||
|
||||
'''THS-Sensor'''
|
||||
try :
|
||||
import shtc3
|
||||
onboard_ths = shtc3.SHTC3(onboard_i2c)
|
||||
except Exception as e:
|
||||
print("Warning: Failed to communicate with GXHTC3 (THS) or",e)
|
||||
|
||||
'''RFID-Sensor'''
|
||||
try :
|
||||
import rc522
|
||||
onboard_rfid = rc522.RC522(onboard_i2c)
|
||||
except Exception as e:
|
||||
print("Warning: Failed to communicate with RC522 (RFID) or",e)
|
||||
|
||||
'''MGS-Sensor'''
|
||||
try :
|
||||
import mmc5603
|
||||
onboard_mgs = mmc5603.MMC5603(onboard_i2c)
|
||||
except Exception as e:
|
||||
print("Warning: Failed to communicate with MMC5603 (MGS) or",e)
|
||||
|
||||
'''BPS-Sensor'''
|
||||
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)
|
||||
|
||||
'''2RGB_WS2812'''
|
||||
from ws2812 import NeoPixel
|
||||
onboard_rgb = NeoPixel(Pin(0), 6, multiplex=True, leds=2)
|
||||
|
||||
'''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):
|
||||
Pin(self.pin, Pin.IN).irq(handler = handler, trigger = trigger)
|
||||
|
||||
'''1KEY_Button'''
|
||||
class Button(KEYSensor):
|
||||
def __init__(self, pin):
|
||||
self.pin = pin
|
||||
self.key = Pin(pin, Pin.IN)
|
||||
self.flag = True
|
||||
|
||||
def _value(self):
|
||||
return not self.key.value()
|
||||
|
||||
B1key = Button(0)
|
||||
B2key = KEYSensor(13,0)
|
||||
A1key = KEYSensor(13,2900)
|
||||
A2key = KEYSensor(13,2300)
|
||||
A3key = KEYSensor(13,1650)
|
||||
A4key = KEYSensor(13,850)
|
||||
|
||||
'''2-TouchPad'''
|
||||
class Touch_Pad:
|
||||
__species = {}
|
||||
__first_init = True
|
||||
def __new__(cls, pin, *args, **kwargs):
|
||||
if pin not in cls.__species.keys():
|
||||
cls.__first_init = True
|
||||
cls.__species[pin]=object.__new__(cls)
|
||||
return cls.__species[pin]
|
||||
|
||||
def __init__(self, pin, default=30000):
|
||||
if self.__first_init:
|
||||
self.__first_init = False
|
||||
from machine import TouchPad
|
||||
self._pin = TouchPad(Pin(pin))
|
||||
self.raw = self._pin.read()
|
||||
if self.raw >= default * 1.5:
|
||||
self.raw = default
|
||||
|
||||
def touch(self,value=None ):
|
||||
return self._pin.read() > value if value else self._pin.read()
|
||||
|
||||
#Touch with function call
|
||||
def touched(pin,value=60000):
|
||||
return Touch_Pad(pin).touch(value)
|
||||
|
||||
def touch_slide(pina, pinb):
|
||||
return ((Touch_Pad(pina).touch() - Touch_Pad(pina).raw) - (Touch_Pad(pinb).touch() - Touch_Pad(pinb).raw)) // 10
|
||||
|
||||
'''2LED-WS2812'''
|
||||
class LED:
|
||||
def __init__(self, rgb, num=2, color=3):
|
||||
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.led_set(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.led_get(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):
|
||||
self._col[index-1] = color
|
||||
|
||||
def getcolor(self, index):
|
||||
return self._col[index-1]
|
||||
|
||||
onboard_led = LED(onboard_rgb)
|
||||
|
||||
class Clock:
|
||||
def __init__(self, x, y, radius, color, oled=onboard_tft): #定义时钟中心点和半径
|
||||
self.display = oled
|
||||
self.xc = x
|
||||
self.yc = y
|
||||
self.r = radius
|
||||
self.color= color
|
||||
self.hour = 0
|
||||
self.min = 0
|
||||
self.sec = 0
|
||||
|
||||
def set_time(self, h, m, s): #设定时间
|
||||
self.hour = h
|
||||
self.min = m
|
||||
self.sec = s
|
||||
|
||||
def set_rtctime(self): #设定时间
|
||||
t = rtc_clock.datetime()
|
||||
self.hour = t[4]
|
||||
self.min = t[5]
|
||||
self.sec = t[6]
|
||||
|
||||
def drawDial(self,color): #画钟表刻度
|
||||
r_tic1 = self.r - 1
|
||||
r_tic2 = self.r - 2
|
||||
|
||||
self.display.ellipse(self.xc, self.yc, self.r,self.r, self.color)
|
||||
self.display.ellipse(self.xc, self.yc, 2, 2, self.color,True)
|
||||
|
||||
for h in range(12):
|
||||
at = math.pi * 2.0 * h / 12.0
|
||||
x1 = round(self.xc + r_tic1 * math.sin(at))
|
||||
x2 = round(self.xc + r_tic2 * math.sin(at))
|
||||
y1 = round(self.yc - r_tic1 * math.cos(at))
|
||||
y2 = round(self.yc - r_tic2 * math.cos(at))
|
||||
self.display.line(x1, y1, x2, y2, color)
|
||||
|
||||
def drawHour(self,color): #画时针
|
||||
|
||||
r_hour = int(self.r / 10.0 * 5)
|
||||
ah = math.pi * 2.0 * ((self.hour % 12) + self.min / 60.0) / 12.0
|
||||
xh = int(self.xc + r_hour * math.sin(ah))
|
||||
yh = int(self.yc - r_hour * math.cos(ah))
|
||||
self.display.line(self.xc, self.yc, xh, yh, color)
|
||||
|
||||
def drawMin(self,color): #画分针
|
||||
|
||||
r_min = int(self.r / 10.0 * 7)
|
||||
am = math.pi * 2.0 * self.min / 60.0
|
||||
|
||||
xm = round(self.xc + r_min * math.sin(am))
|
||||
ym = round(self.yc - r_min * math.cos(am))
|
||||
self.display.line(self.xc, self.yc, xm, ym, color)
|
||||
|
||||
def drawSec(self,color): #画秒针
|
||||
|
||||
r_sec = int(self.r / 10.0 * 9)
|
||||
asec = math.pi * 2.0 * self.sec / 60.0
|
||||
xs = round(self.xc + r_sec * math.sin(asec))
|
||||
ys = round(self.yc - r_sec * math.cos(asec))
|
||||
self.display.line(self.xc, self.yc, xs, ys, color)
|
||||
|
||||
def draw_clock(self): #画完整钟表
|
||||
self.drawDial(self.color)
|
||||
self.drawHour(self.color)
|
||||
self.drawMin(self.color)
|
||||
self.drawSec(self.color)
|
||||
self.display.show()
|
||||
|
||||
def clear(self,color=0): #清除
|
||||
self.drawHour(color)
|
||||
self.drawMin(color)
|
||||
self.drawSec(color)
|
||||
|
||||
'''Reclaim memory'''
|
||||
gc.collect()
|
||||
@@ -0,0 +1,88 @@
|
||||
"""
|
||||
mixgo_zero Zi Voice Onboard resources
|
||||
|
||||
Micropython library for the mixgo_zero Zi Onboard resources
|
||||
=======================================================
|
||||
|
||||
#Preliminary composition 20230818
|
||||
|
||||
dahanzimin From the Mixly Team
|
||||
"""
|
||||
import ustruct
|
||||
import time
|
||||
import music_spk
|
||||
import es8374
|
||||
from machine import Pin, I2S
|
||||
from mixgo_zero import onboard_i2c
|
||||
|
||||
sample_rate = 22050
|
||||
ob_code = es8374.ES8374(onboard_i2c)
|
||||
time.sleep(0.2)
|
||||
|
||||
#ps 特殊改双全工i2s支持
|
||||
ob_audio = I2S(0, sck=Pin(39), ws=Pin(41), dout=Pin(42), din=Pin(40), mck=Pin(38), mode=I2S.RTX, bits=16, format=I2S.MONO, rate=sample_rate, ibuf=20000)
|
||||
|
||||
spk_midi = music_spk.MIDI(ob_audio, sample_rate)
|
||||
|
||||
def u2s(n):
|
||||
return n if n < (1 << 15) else n - (1 << 16)
|
||||
|
||||
def sound_level():
|
||||
buf = bytearray(100)
|
||||
values = []
|
||||
ob_audio.readinto(buf)
|
||||
for i in range(len(buf)//2):
|
||||
values.append(u2s(buf[i * 2] | buf[i * 2 + 1]<<8))
|
||||
return max(values) - min(values)
|
||||
|
||||
def play_audio(path):
|
||||
file = open(path, 'rb')
|
||||
header = file.read(44)
|
||||
if header[8:12] != b'WAVE':
|
||||
raise Error('not a WAVE file')
|
||||
_rate = ustruct.unpack('<I', header[24:28])[0]
|
||||
print("sample_rate", _rate)
|
||||
file.seek(44)
|
||||
ob_audio = I2S(0, sck=Pin(39), ws=Pin(41), dout=Pin(42), din=Pin(40), mck=Pin(38), mode=I2S.RTX, bits=16, format=I2S.MONO, rate=_rate, ibuf=20000)
|
||||
while True:
|
||||
block = file.read(1024)
|
||||
if not block:
|
||||
break
|
||||
ob_audio.write(block)
|
||||
ob_audio = I2S(0, sck=Pin(39), ws=Pin(41), dout=Pin(42), din=Pin(40), mck=Pin(38), mode=I2S.RTX, bits=16, format=I2S.MONO, rate=sample_rate, ibuf=20000)
|
||||
file.close()
|
||||
|
||||
def record_audio(path, seconds=5):
|
||||
ob_audio = I2S(0, sck=Pin(39), ws=Pin(41), dout=Pin(42), din=Pin(40), mck=Pin(38), mode=I2S.RTX, bits=16, format=I2S.MONO, rate=sample_rate*4, ibuf=20000)
|
||||
file_size = sample_rate * 16 * 1 * seconds // 8
|
||||
wav_header = bytearray(44)
|
||||
wav_header[0:4] = b'RIFF'
|
||||
ustruct.pack_into('<I', wav_header, 4, file_size + 36)
|
||||
wav_header[8:40] = b'WAVEfmt \x10\x00\x00\x00\x01\x00\x01\x00"V\x00\x00D\xac\x00\x00\x02\x00\x10\x00data'
|
||||
ustruct.pack_into('<I', wav_header, 40, file_size)
|
||||
|
||||
buf = bytearray(512)
|
||||
file = open(path, 'wb')
|
||||
file.write(wav_header)
|
||||
for _ in range(file_size // 512):
|
||||
ob_audio.readinto(buf)
|
||||
file.write(buf)
|
||||
ob_audio = I2S(0, sck=Pin(39), ws=Pin(41), dout=Pin(42), din=Pin(40), mck=Pin(38), mode=I2S.RTX, bits=16, format=I2S.MONO, rate=sample_rate, ibuf=20000)
|
||||
file.close()
|
||||
|
||||
def play_audio_url(url):
|
||||
import urequests
|
||||
response = urequests.get(url, stream=True)
|
||||
header = response.raw.read(44)
|
||||
if header[8:12] != b'WAVE':
|
||||
raise Error('not a WAVE file')
|
||||
_rate = ustruct.unpack('<I', header[24:28])[0]
|
||||
#print("sample_rate", _rate)
|
||||
ob_audio = I2S(0, sck=Pin(39), ws=Pin(41), dout=Pin(42), din=Pin(40), mck=Pin(38), mode=I2S.RTX, bits=16, format=I2S.MONO, rate=_rate, ibuf=20000)
|
||||
while True:
|
||||
block = response.raw.read(1024)
|
||||
if not block:
|
||||
break
|
||||
ob_audio.write(block)
|
||||
ob_audio = I2S(0, sck=Pin(39), ws=Pin(41), dout=Pin(42), din=Pin(40), mck=Pin(38), mode=I2S.RTX, bits=16, format=I2S.MONO, rate=sample_rate, ibuf=20000)
|
||||
response.close()
|
||||
@@ -0,0 +1,151 @@
|
||||
"""
|
||||
Music buzzer
|
||||
|
||||
Micropython library for the Music buzzer
|
||||
=======================================================
|
||||
|
||||
#Based on Author: qiren123(MIDI Music) 20220618
|
||||
#Make changes to instantiation 20220622
|
||||
#Increase level reversal selection 20220716
|
||||
|
||||
dahanzimin From the Mixly Team
|
||||
"""
|
||||
|
||||
import time
|
||||
import math
|
||||
import array,struct
|
||||
|
||||
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, i2s_bus, rate=22050):
|
||||
self.reset()
|
||||
self._rate = rate
|
||||
self.i2s_bus = i2s_bus
|
||||
|
||||
def _tone(self, frequency, run_ms=1000):
|
||||
# create a buffer containing the pure tone samples
|
||||
samples_per_cycle = self._rate // frequency
|
||||
sample_size_in_bytes = 16 // 8
|
||||
samples = bytearray(samples_per_cycle * sample_size_in_bytes)
|
||||
_range = 32768
|
||||
for i in range(samples_per_cycle):
|
||||
sample = _range + int((_range - 1) * math.sin(2 * math.pi * i / samples_per_cycle))
|
||||
struct.pack_into("<h", samples, i * sample_size_in_bytes, sample)
|
||||
|
||||
star = time.ticks_ms()
|
||||
while time.ticks_diff(time.ticks_ms(), star) <= run_ms:
|
||||
self.i2s_bus.write(samples)
|
||||
|
||||
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 = 20000
|
||||
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):
|
||||
if duration is None:
|
||||
self.set_default(tune[0])
|
||||
else:
|
||||
self.set_duration(duration)
|
||||
for tone in tune:
|
||||
tone = tone.upper()
|
||||
if tone[0] not in Letter:
|
||||
continue
|
||||
midi = self.midi(tone)
|
||||
self._tone(midi[0], midi[1])
|
||||
self._tone(20000, 1)
|
||||
time.sleep_ms(10)
|
||||
|
||||
def pitch(self, freq):
|
||||
pass
|
||||
|
||||
def pitch_time(self, freq, delay):
|
||||
self._tone(freq, delay)
|
||||
time.sleep_ms(10)
|
||||
|
||||
def stop(self):
|
||||
pass
|
||||
|
||||
DADADADUM=['r4:2','g','g','g','eb:8','r:2','f','f','f','d:8']
|
||||
ENTERTAINER=['d4:1','d#','e','c5:2','e4:1','c5:2','e4:1','c5:3','c:1','d','d#','e','c','d','e:2','b4:1','d5:2','c:4']
|
||||
PRELUDE=['c4:1','e','g','c5','e','g4','c5','e','c4','e','g','c5','e','g4','c5','e','c4','d','g','d5','f','g4','d5','f','c4','d','g','d5','f','g4','d5','f','b3','d4','g','d5','f','g4','d5','f','b3','d4','g','d5','f','g4','d5','f','c4','e','g','c5','e','g4','c5','e','c4','e','g','c5','e','g4','c5','e']
|
||||
ODE=['e4','e','f','g','g','f','e','d','c','c','d','e','e:6','d:2','d:8','e:4','e','f','g','g','f','e','d','c','c','d','e','d:6','c:2','c:8']
|
||||
NYAN=['f#5:1','g#','c#:1','d#:2','b4:1','d5:1','c#','b4:2','b','c#5','d','d:1','c#','b4:1','c#5:1','d#','f#','g#','d#','f#','c#','d','b4','c#5','b4','d#5:2','f#','g#:1','d#','f#','c#','d#','b4','d5','d#','d','c#','b4','c#5','d:2','b4:1','c#5','d#','f#','c#','d','c#','b4','c#5:2','b4','c#5','b4','f#:1','g#','b:2','f#:1','g#','b','c#5','d#','b4','e5','d#','e','f#','b4:2','b','f#:1','g#','b','f#','e5','d#','c#','b4','f#','d#','e','f#','b:2','f#:1','g#','b:2','f#:1','g#','b','b','c#5','d#','b4','f#','g#','f#','b:2','b:1','a#','b','f#','g#','b','e5','d#','e','f#','b4:2','c#5']
|
||||
RINGTONE=['c4:1','d','e:2','g','d:1','e','f:2','a','e:1','f','g:2','b','c5:4']
|
||||
FUNK=['c2:2','c','d#','c:1','f:2','c:1','f:2','f#','g','c','c','g','c:1','f#:2','c:1','f#:2','f','d#']
|
||||
BLUES=['c2:2','e','g','a','a#','a','g','e','c2:2','e','g','a','a#','a','g','e','f','a','c3','d','d#','d','c','a2','c2:2','e','g','a','a#','a','g','e','g','b','d3','f','f2','a','c3','d#','c2:2','e','g','e','g','f','e','d']
|
||||
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']
|
||||
WEDDING=['c4:4','f:3','f:1','f:8','c:4','g:3','e:1','f:8','c:4','f:3','a:1','c5:4','a4:3','f:1','f:4','e:3','f:1','g:8']
|
||||
FUNERAL=['c3:4','c:3','c:1','c:4','d#:3','d:1','d:3','c:1','c:3','b2:1','c3:4']
|
||||
PUNCHLINE=['c4:3','g3:1','f#','g','g#:3','g','r','b','c4']
|
||||
PYTHON=['d5:1','b4','r','b','b','a#','b','g5','r','d','d','r','b4','c5','r','c','c','r','d','e:5','c:1','a4','r','a','a','g#','a','f#5','r','e','e','r','c','b4','r','b','b','r','c5','d:5','d:1','b4','r','b','b','a#','b','b5','r','g','g','r','d','c#','r','a','a','r','a','a:5','g:1','f#:2','a:1','a','g#','a','e:2','a:1','a','g#','a','d','r','c#','d','r','c#','d:2','r:3']
|
||||
BADDY=['c3:3','r','d:2','d#','r','c','r','f#:8']
|
||||
CHASE=['a4:1','b','c5','b4','a:2','r','a:1','b','c5','b4','a:2','r','a:2','e5','d#','e','f','e','d#','e','b4:1','c5','d','c','b4:2','r','b:1','c5','d','c','b4:2','r','b:2','e5','d#','e','f','e','d#','e']
|
||||
BA_DING=['b5:1','e6:3']
|
||||
WAWAWAWAA=['e3:3','r:1','d#:3','r:1','d:4','r:1','c#:8']
|
||||
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']
|
||||
@@ -0,0 +1,111 @@
|
||||
"""
|
||||
NOVA_G1
|
||||
|
||||
Micropython library for the NOVA_G1(PWM*6, IO*2, ADC*1)
|
||||
=======================================================
|
||||
|
||||
#Preliminary composition 20240222
|
||||
|
||||
@dahanzimin From the Mixly Team
|
||||
"""
|
||||
from micropython import const
|
||||
from mixgo_nova import onboard_i2c
|
||||
|
||||
_NOVA_G1_ADDRESS = const(0x25)
|
||||
_NOVA_G1_ID = const(0x00)
|
||||
_NOVA_G1_ADC = const(0x01)
|
||||
_NOVA_G1_IO = const(0x03)
|
||||
_NOVA_G1_PWM = const(0x04)
|
||||
|
||||
class NOVA_G1:
|
||||
def __init__(self, i2c_bus, addr=_NOVA_G1_ADDRESS):
|
||||
self._i2c=i2c_bus
|
||||
self._addr = addr
|
||||
if self._rreg(_NOVA_G1_ID)!= 0x25:
|
||||
raise AttributeError("Cannot find a NOVA_G1")
|
||||
self.reset()
|
||||
|
||||
def _wreg(self, reg, val):
|
||||
'''Write memory address'''
|
||||
try:
|
||||
self._i2c.writeto_mem(self._addr, reg, val.to_bytes(1, 'little'))
|
||||
except:
|
||||
return 0
|
||||
|
||||
def _rreg(self, reg, nbytes=1):
|
||||
'''Read memory address'''
|
||||
try:
|
||||
self._i2c.writeto(self._addr, reg.to_bytes(1, 'little'))
|
||||
return self._i2c.readfrom(self._addr, nbytes)[0] if nbytes<=1 else self._i2c.readfrom(self._addr, nbytes)[0:nbytes]
|
||||
except:
|
||||
return 0
|
||||
|
||||
def reset(self):
|
||||
"""Reset all registers to default state"""
|
||||
for reg in range(_NOVA_G1_PWM,_NOVA_G1_PWM + 6):
|
||||
self._wreg(reg,0x00)
|
||||
|
||||
def varistor(self, ratio=100/1023):
|
||||
'''Read battery power'''
|
||||
_adc= self._rreg(_NOVA_G1_ADC) << 2 | self._rreg(_NOVA_G1_ADC+1) >> 6
|
||||
return round(_adc * ratio)
|
||||
|
||||
def pwm(self, index, duty=None):
|
||||
"""Motor*2*2 & USB*2 PWM duty cycle data register"""
|
||||
if duty is None:
|
||||
return self._rreg(_NOVA_G1_PWM + index)
|
||||
else:
|
||||
duty = min(255, max(0, duty))
|
||||
self._wreg(_NOVA_G1_PWM + index, duty)
|
||||
|
||||
def motor(self, index, action, speed=0):
|
||||
if not 0 <= index <= 1:
|
||||
raise ValueError("Motor port must be a number in the range: 0~1")
|
||||
speed = min(100, max(speed, -100))
|
||||
if action=="N":
|
||||
self.pwm(index * 2, 0)
|
||||
self.pwm(index * 2 + 1, 0)
|
||||
elif action=="P":
|
||||
self.pwm(index * 2, 255)
|
||||
self.pwm(index * 2 + 1, 255)
|
||||
elif action=="CW":
|
||||
if speed >= 0:
|
||||
self.pwm(index * 2, 0)
|
||||
self.pwm(index * 2 + 1, speed * 255 // 100)
|
||||
else:
|
||||
self.pwm(index * 2, 0)
|
||||
self.pwm(index * 2 + 1, - speed * 255 // 100)
|
||||
elif action=="CCW":
|
||||
if speed >= 0:
|
||||
self.pwm(index * 2, speed * 255 // 100)
|
||||
self.pwm(index * 2 + 1, 0)
|
||||
else:
|
||||
self.pwm(index * 2, - speed * 255 // 100)
|
||||
self.pwm(index * 2 + 1, 0)
|
||||
elif action=="NC":
|
||||
return round(self.pwm(index * 2) * 100 / 255), round(self.pwm(index * 2 + 1) * 100 / 255)
|
||||
else:
|
||||
raise ValueError('Invalid input, valid are "N","P","CW","CCW"')
|
||||
|
||||
def usb_pwm(self, index, duty=None):
|
||||
if not 0 <= index <= 1:
|
||||
raise ValueError("USB-2.0 port must be a number in the range: 0~1")
|
||||
if duty is None:
|
||||
return round((self.pwm(index + 4) * 100 / 255))
|
||||
else:
|
||||
self.pwm(index + 4, duty * 255 // 100)
|
||||
|
||||
def spk_en(self, onoff=True):
|
||||
if onoff:
|
||||
self._wreg(_NOVA_G1_IO, (self._rreg(_NOVA_G1_IO)) | 0x02)
|
||||
else:
|
||||
self._wreg(_NOVA_G1_IO, (self._rreg(_NOVA_G1_IO)) & 0xFD)
|
||||
|
||||
def ldo_en(self, onoff=True):
|
||||
if onoff:
|
||||
self._wreg(_NOVA_G1_IO, (self._rreg(_NOVA_G1_IO)) | 0x01)
|
||||
else:
|
||||
self._wreg(_NOVA_G1_IO, (self._rreg(_NOVA_G1_IO)) & 0xFE)
|
||||
|
||||
#Constructor
|
||||
ext_g1 = NOVA_G1(onboard_i2c)
|
||||
@@ -0,0 +1,231 @@
|
||||
"""
|
||||
MicroPython driver for SD cards using SPI bus.
|
||||
"""
|
||||
import time
|
||||
from machine import Pin
|
||||
from micropython import const
|
||||
|
||||
_CMD_TIMEOUT = const(100)
|
||||
_R1_IDLE_STATE = const(1 << 0)
|
||||
_R1_ILLEGAL_COMMAND = const(1 << 2)
|
||||
_TOKEN_CMD25 = const(0xFC)
|
||||
_TOKEN_STOP_TRAN = const(0xFD)
|
||||
_TOKEN_DATA = const(0xFE)
|
||||
|
||||
class SDCard:
|
||||
def __init__(self, spi, cs_pin, baudrate=50000000):
|
||||
self.spi = spi
|
||||
self.cs = Pin(cs_pin, Pin.OUT, value=1)
|
||||
self.cmdbuf = bytearray(6)
|
||||
self.dummybuf = bytearray(512)
|
||||
self.tokenbuf = bytearray(1)
|
||||
for i in range(512):
|
||||
self.dummybuf[i] = 0xFF
|
||||
self.dummybuf_memoryview = memoryview(self.dummybuf)
|
||||
# initialise the card
|
||||
self.init_card(baudrate)
|
||||
|
||||
def init_spi(self, baudrate):
|
||||
self.spi.init(baudrate=baudrate, phase=0, polarity=0)
|
||||
|
||||
def init_card(self, baudrate):
|
||||
# init SPI bus; use low data rate for initialisation
|
||||
self.init_spi(100000)
|
||||
# clock card at least 100 cycles with cs high
|
||||
for i in range(16):
|
||||
self.spi.write(b"\xff")
|
||||
# CMD0: init card; should return _R1_IDLE_STATE (allow 5 attempts)
|
||||
for _ in range(5):
|
||||
if self.cmd(0, 0, 0x95) == _R1_IDLE_STATE:
|
||||
break
|
||||
else:
|
||||
raise OSError("no SD card")
|
||||
# CMD8: determine card version
|
||||
r = self.cmd(8, 0x01AA, 0x87, 4)
|
||||
if r == _R1_IDLE_STATE:
|
||||
self.init_card_v2()
|
||||
elif r == (_R1_IDLE_STATE | _R1_ILLEGAL_COMMAND):
|
||||
self.init_card_v1()
|
||||
else:
|
||||
raise OSError("couldn't determine SD card version")
|
||||
# CMD9: response R2 (R1 byte + 16-byte block read)
|
||||
if self.cmd(9, 0, 0, 0, False) != 0:
|
||||
raise OSError("no response from SD card")
|
||||
csd = bytearray(16)
|
||||
self.readinto(csd)
|
||||
if csd[0] & 0xC0 == 0x40: # CSD version 2.0
|
||||
self.sectors = ((csd[8] << 8 | csd[9]) + 1) * 1024
|
||||
elif csd[0] & 0xC0 == 0x00: # CSD version 1.0 (old, <=2GB)
|
||||
c_size = (csd[6] & 0b11) << 10 | csd[7] << 2 | csd[8] >> 6
|
||||
c_size_mult = (csd[9] & 0b11) << 1 | csd[10] >> 7
|
||||
read_bl_len = csd[5] & 0b1111
|
||||
capacity = (c_size + 1) * (2 ** (c_size_mult + 2)) * (2**read_bl_len)
|
||||
self.sectors = capacity // 512
|
||||
else:
|
||||
raise OSError("SD card CSD format not supported")
|
||||
# CMD16: set block length to 512 bytes
|
||||
if self.cmd(16, 512, 0) != 0:
|
||||
raise OSError("can't set 512 block size")
|
||||
# set to high data rate now that it's initialised
|
||||
self.init_spi(baudrate)
|
||||
|
||||
def init_card_v1(self):
|
||||
for i in range(_CMD_TIMEOUT):
|
||||
time.sleep_ms(50)
|
||||
self.cmd(55, 0, 0)
|
||||
if self.cmd(41, 0, 0) == 0:
|
||||
# SDSC card, uses byte addressing in read/write/erase commands
|
||||
self.cdv = 512
|
||||
# print("[SDCard] v1 card")
|
||||
return
|
||||
raise OSError("timeout waiting for v1 card")
|
||||
|
||||
def init_card_v2(self):
|
||||
for i in range(_CMD_TIMEOUT):
|
||||
time.sleep_ms(50)
|
||||
self.cmd(58, 0, 0, 4)
|
||||
self.cmd(55, 0, 0)
|
||||
if self.cmd(41, 0x40000000, 0) == 0:
|
||||
self.cmd(58, 0, 0, -4) # 4-byte response, negative means keep the first byte
|
||||
ocr = self.tokenbuf[0] # get first byte of response, which is OCR
|
||||
if not ocr & 0x40:
|
||||
# SDSC card, uses byte addressing in read/write/erase commands
|
||||
self.cdv = 512
|
||||
else:
|
||||
# SDHC/SDXC card, uses block addressing in read/write/erase commands
|
||||
self.cdv = 1
|
||||
# print("[SDCard] v2 card")
|
||||
return
|
||||
raise OSError("timeout waiting for v2 card")
|
||||
|
||||
def cmd(self, cmd, arg, crc, final=0, release=True, skip1=False):
|
||||
self.cs(0)
|
||||
|
||||
# create and send the command
|
||||
buf = self.cmdbuf
|
||||
buf[0] = 0x40 | cmd
|
||||
buf[1] = arg >> 24
|
||||
buf[2] = arg >> 16
|
||||
buf[3] = arg >> 8
|
||||
buf[4] = arg
|
||||
buf[5] = crc
|
||||
self.spi.write(buf)
|
||||
|
||||
if skip1:
|
||||
self.spi.readinto(self.tokenbuf, 0xFF)
|
||||
# wait for the response (response[7] == 0)
|
||||
for i in range(_CMD_TIMEOUT):
|
||||
self.spi.readinto(self.tokenbuf, 0xFF)
|
||||
response = self.tokenbuf[0]
|
||||
if not (response & 0x80):
|
||||
if final < 0:
|
||||
self.spi.readinto(self.tokenbuf, 0xFF)
|
||||
final = -1 - final
|
||||
for j in range(final):
|
||||
self.spi.write(b"\xff")
|
||||
if release:
|
||||
self.cs(1)
|
||||
self.spi.write(b"\xff")
|
||||
return response
|
||||
self.cs(1)
|
||||
self.spi.write(b"\xff")
|
||||
return -1
|
||||
|
||||
def readinto(self, buf):
|
||||
self.cs(0)
|
||||
for i in range(_CMD_TIMEOUT):
|
||||
self.spi.readinto(self.tokenbuf, 0xFF)
|
||||
if self.tokenbuf[0] == _TOKEN_DATA:
|
||||
break
|
||||
time.sleep_ms(1)
|
||||
else:
|
||||
self.cs(1)
|
||||
raise OSError("timeout waiting for response")
|
||||
mv = self.dummybuf_memoryview
|
||||
if len(buf) != len(mv):
|
||||
mv = mv[: len(buf)]
|
||||
self.spi.write_readinto(mv, buf)
|
||||
self.spi.write(b"\xff")
|
||||
self.spi.write(b"\xff")
|
||||
self.cs(1)
|
||||
self.spi.write(b"\xff")
|
||||
|
||||
def write(self, token, buf):
|
||||
self.cs(0)
|
||||
self.spi.read(1, token)
|
||||
self.spi.write(buf)
|
||||
self.spi.write(b"\xff")
|
||||
self.spi.write(b"\xff")
|
||||
if (self.spi.read(1, 0xFF)[0] & 0x1F) != 0x05:
|
||||
self.cs(1)
|
||||
self.spi.write(b"\xff")
|
||||
return
|
||||
while self.spi.read(1, 0xFF)[0] == 0:
|
||||
pass
|
||||
self.cs(1)
|
||||
self.spi.write(b"\xff")
|
||||
|
||||
def write_token(self, token):
|
||||
self.cs(0)
|
||||
self.spi.read(1, token)
|
||||
self.spi.write(b"\xff")
|
||||
while self.spi.read(1, 0xFF)[0] == 0x00:
|
||||
pass
|
||||
self.cs(1)
|
||||
self.spi.write(b"\xff")
|
||||
|
||||
def readblocks(self, block_num, buf):
|
||||
# workaround for shared bus, required for (at least) some Kingston
|
||||
self.spi.write(b"\xff")
|
||||
|
||||
nblocks = len(buf) // 512
|
||||
assert nblocks and not len(buf) % 512, "Buffer length is invalid"
|
||||
if nblocks == 1:
|
||||
# CMD17: set read address for single block
|
||||
if self.cmd(17, block_num * self.cdv, 0, release=False) != 0:
|
||||
# release the card
|
||||
self.cs(1)
|
||||
raise OSError(5) # EIO
|
||||
# receive the data and release card
|
||||
self.readinto(buf)
|
||||
else:
|
||||
# CMD18: set read address for multiple blocks
|
||||
if self.cmd(18, block_num * self.cdv, 0, release=False) != 0:
|
||||
self.cs(1)
|
||||
raise OSError(5) # EIO
|
||||
offset = 0
|
||||
mv = memoryview(buf)
|
||||
while nblocks:
|
||||
self.readinto(mv[offset : offset + 512])
|
||||
offset += 512
|
||||
nblocks -= 1
|
||||
if self.cmd(12, 0, 0xFF, skip1=True):
|
||||
raise OSError(5) # EIO
|
||||
|
||||
def writeblocks(self, block_num, buf):
|
||||
# workaround for shared bus, required for (at least) some Kingston
|
||||
self.spi.write(b"\xff")
|
||||
nblocks, err = divmod(len(buf), 512)
|
||||
assert nblocks and not err, "Buffer length is invalid"
|
||||
if nblocks == 1:
|
||||
# CMD24: set write address for single block
|
||||
if self.cmd(24, block_num * self.cdv, 0) != 0:
|
||||
raise OSError(5) # EIO
|
||||
self.write(_TOKEN_DATA, buf)
|
||||
else:
|
||||
# CMD25: set write address for first block
|
||||
if self.cmd(25, block_num * self.cdv, 0) != 0:
|
||||
raise OSError(5) # EIO
|
||||
offset = 0
|
||||
mv = memoryview(buf)
|
||||
while nblocks:
|
||||
self.write(_TOKEN_CMD25, mv[offset : offset + 512])
|
||||
offset += 512
|
||||
nblocks -= 1
|
||||
self.write_token(_TOKEN_STOP_TRAN)
|
||||
|
||||
def ioctl(self, op, arg):
|
||||
if op == 4: # get number of blocks
|
||||
return self.sectors
|
||||
if op == 5: # get block size in bytes
|
||||
return 512
|
||||
@@ -0,0 +1,107 @@
|
||||
"""
|
||||
ST7789/FrameBuffer
|
||||
|
||||
MicroPython library for the ST7789(TFT-SPI)
|
||||
=======================================================
|
||||
#Preliminary composition 20240110
|
||||
|
||||
@dahanzimin From the Mixly Team
|
||||
"""
|
||||
import time, uframebuf
|
||||
from machine import Pin, PWM
|
||||
from micropython import const
|
||||
|
||||
_CMD_SWRESET = const(0x01)
|
||||
_CMD_SLPIN = const(0x10)
|
||||
_CMD_SLPOUT = const(0x11)
|
||||
_CMD_PTLON = const(0x12)
|
||||
_CMD_NORON = const(0x13)
|
||||
_CMD_INVOFF = const(0x20)
|
||||
_CMD_INVON = const(0x21)
|
||||
_CMD_DISPOFF = const(0x28)
|
||||
_CMD_DISPON = const(0x29)
|
||||
_CMD_CASET = const(0x2A)
|
||||
_CMD_RASET = const(0x2B)
|
||||
_CMD_RAMWR = const(0x2C)
|
||||
_CMD_RAMRD = const(0x2E)
|
||||
_CMD_PTLAR = const(0x30)
|
||||
_CMD_VSCRDEF = const(0x33)
|
||||
_CMD_COLMOD = const(0x3A)
|
||||
_CMD_MADCTL = const(0x36)
|
||||
|
||||
class ST7789(uframebuf.FrameBuffer_Uincode):
|
||||
def __init__(self, spi, width, height, dc_pin=None, cs_pin=None, bl_pin=None, font_address=0x700000):
|
||||
if height != 240 or width not in [320, 240, 135]:
|
||||
raise ValueError("Unsupported display. 320x240, 240x240 and 135x240 are supported.")
|
||||
self.spi = spi
|
||||
self.dc = Pin(dc_pin, Pin.OUT, value=1)
|
||||
self.cs = Pin(cs_pin, Pin.OUT, value=1)
|
||||
self._buffer = bytearray(width * height * 2)
|
||||
super().__init__(self._buffer, width, height, uframebuf.RGB565)
|
||||
self.font(font_address)
|
||||
self._init()
|
||||
self.show()
|
||||
time.sleep_ms(100)
|
||||
self._brightness = 0.6
|
||||
self.bl_led = PWM(Pin(bl_pin), duty_u16=int(self._brightness * 60000)) if bl_pin else None
|
||||
|
||||
def _write(self, cmd, dat = None):
|
||||
self.cs.off()
|
||||
self.dc.off()
|
||||
self.spi.write(bytearray([cmd]))
|
||||
self.cs.on()
|
||||
if dat is not None:
|
||||
self.cs.off()
|
||||
self.dc.on()
|
||||
self.spi.write(dat)
|
||||
self.cs.on()
|
||||
|
||||
def _init(self):
|
||||
"""Display initialization configuration"""
|
||||
for cmd, data, delay in [
|
||||
(_CMD_SWRESET, None, 150),
|
||||
(_CMD_SLPOUT, None, None),
|
||||
(_CMD_COLMOD, b'\x55', 50),
|
||||
(_CMD_MADCTL, b'\x60', 50),
|
||||
(_CMD_INVOFF, None, 10),
|
||||
(_CMD_NORON, None, 10),
|
||||
(_CMD_DISPON, None, 200),
|
||||
]:
|
||||
self._write(cmd, data)
|
||||
if delay:
|
||||
time.sleep_us(delay)
|
||||
|
||||
def _write(self, command=None, data=None):
|
||||
"""SPI write to the device: commands and data."""
|
||||
if command is not None:
|
||||
self.cs.off()
|
||||
self.dc.off()
|
||||
self.spi.write(bytes([command]))
|
||||
self.cs.on()
|
||||
if data is not None:
|
||||
self.cs.off()
|
||||
self.dc.on()
|
||||
self.spi.write(data)
|
||||
self.cs.on()
|
||||
|
||||
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.bl_led.duty_u16(int(brightness*60000))
|
||||
|
||||
def color(self, red, green=None, blue=None):
|
||||
""" Convert red, green and blue values (0-255) into a 16-bit 565 encoding."""
|
||||
if green is None or blue is None:
|
||||
return red
|
||||
else:
|
||||
return (red & 0xf8) << 8 | (green & 0xfc) << 3 | blue >> 3
|
||||
|
||||
def show(self):
|
||||
"""Refresh the display and show the changes."""
|
||||
self._write(_CMD_CASET, b'\x00\x00\x01\x3f')
|
||||
self._write(_CMD_RASET, b'\x00\x00\x00\xef')
|
||||
self._write(_CMD_RAMWR, self._buffer)
|
||||
99
boards/default_src/micropython_esp32s3/origin/config.json
Normal file
99
boards/default_src/micropython_esp32s3/origin/config.json
Normal file
@@ -0,0 +1,99 @@
|
||||
{
|
||||
"board": {
|
||||
"元控青春": "micropython:esp32s3:mixgo_nova",
|
||||
"元控": "micropython:esp32s3:mixgo_zero"
|
||||
},
|
||||
"language": "MicroPython",
|
||||
"burn": {
|
||||
"type": "command",
|
||||
"portSelect": "all",
|
||||
"micropython:esp32s3:mixgo_zero": {
|
||||
"command": "\"{esptool}\" --chip esp32s3 --port {com} --baud 460800 --before default_reset --after=no_reset_stub erase_flash && \"{esptool}\" --chip esp32s3 --port {com} --baud 460800 --after hard_reset write_flash 0x0 \"{indexPath}/build/Mixgo_Zero-v1.21.0.bin\" 0xE00000 \"{indexPath}/../micropython/build/HZK16.bin\""
|
||||
},
|
||||
"micropython:esp32s3:mixgo_nova": {
|
||||
"command": "\"{esptool}\" --chip esp32s3 --port {com} --baud 460800 --before default_reset --after=no_reset_stub erase_flash && \"{esptool}\" --chip esp32s3 --port {com} --baud 460800 --after hard_reset write_flash 0x0 \"{indexPath}/build/Mixgo_Nova-v1.21.0.bin\" 0x700000 \"{indexPath}/../micropython/build/HZK12.bin\""
|
||||
},
|
||||
"micropython:esp32s3:generic": {
|
||||
"command": "\"{esptool}\" --chip esp32s3 --port {com} --baud 460800 --after=no_reset_stub erase_flash && \"{esptool}\" --chip esp32s3 --port {com} --baud 460800 --after=no_reset write_flash 0x0 \"{indexPath}/build/Mixgo_Nova-v1.21.0.bin\""
|
||||
}
|
||||
},
|
||||
"upload": {
|
||||
"type": "command",
|
||||
"portSelect": "all",
|
||||
"libPath": [
|
||||
"{indexPath}/build/lib",
|
||||
"{indexPath}/../micropython/build/lib"
|
||||
],
|
||||
"command": "\"{ampy}\" -p {com} -d 1 -r \"{reset}\" put \"{indexPath}/build/upload\"",
|
||||
"filePath": "{indexPath}/build/upload/main.py",
|
||||
"copyLib": true,
|
||||
"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": true,
|
||||
"dtr": true
|
||||
},
|
||||
"lib": {
|
||||
"mixly": {
|
||||
"url": [
|
||||
"http://download.mixlylibs.cloud/mixly-packages/cloud-libs/micropython_esp32c3/libs.json"
|
||||
]
|
||||
}
|
||||
},
|
||||
"pythonToBlockly": false,
|
||||
"web": {
|
||||
"com": "serial",
|
||||
"burn": {
|
||||
"erase": true,
|
||||
"micropython:esp32s3:mixgo_zero": {
|
||||
"binFile": [
|
||||
{
|
||||
"offset": "0x0000",
|
||||
"path": "./build/Mixgo_Zero_lib-v1.21.0.bin"
|
||||
}, {
|
||||
"offset": "0xE00000",
|
||||
"path": "../micropython/build/HZK16.bin"
|
||||
}
|
||||
]
|
||||
},
|
||||
"micropython:esp32s3:mixgo_nova": {
|
||||
"binFile": [
|
||||
{
|
||||
"offset": "0x0000",
|
||||
"path": "./build/Mixgo_Nova_lib-v1.21.0.bin"
|
||||
}, {
|
||||
"offset": "0x700000",
|
||||
"path": "../micropython/build/HZK12.bin"
|
||||
}
|
||||
]
|
||||
},
|
||||
"micropython:esp32s3:generic": {
|
||||
"binFile": [
|
||||
{
|
||||
"offset": "0x0000",
|
||||
"path": "./build/Mixgo_Nova_lib-v1.21.0.bin"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"upload": {
|
||||
"reset": []
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-S3@元控青春"><block type="controls_whileUntil" id="nnv.DMl~P[m]PfY-LSOS" x="-1505" y="-699"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="k;Gm.1e/C_n,+;~3]3J$"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="onboard_tft_show_image" id="8:Ywp2I9I!|Xx-!ih~ZP"><value name="data"><shadow type="mpython_pbm_image" id="p!GamOAamCg;U~*p~!5="><field name="path">Heart</field></shadow></value><next><block type="onboard_tft_scroll_string" id="XA|8S7$Zs,~;hs6r0d.W"><value name="data"><shadow type="text" id="vCD)}Jhp1w6fvILKJ2H^"><field name="TEXT">你好,米思齐!</field></shadow></value></block></next></block></statement></block></xml><config>{}</config><code>ZnJvbSBtaXhnb19ub3ZhIGltcG9ydCBvbmJvYXJkX3RmdApmcm9tIGV4cHJlc3Npb25fcGljdHVyZSBpbXBvcnQgSGVhcnQKZnJvbSBtaXhnb19ub3ZhIGltcG9ydCBvbmJvYXJkX3RmdAoKCndoaWxlIFRydWU6CiAgICBvbmJvYXJkX3RmdC5pbWFnZShIZWFydCwgY29sb3I9MHhmZmZmKQogICAgb25ib2FyZF90ZnQuc2Nyb2xsKCfkvaDlpb3vvIznsbPmgJ3pvZDvvIEnLGNvbG9yPTB4ZmZmZikK</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-S3@元控青春"><block type="controls_whileUntil" id=":VBHQkLU!p;pF6.}YvGe" x="-1640" y="-807"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="s^HrS]jqffwcrDvn/1{m"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="onboard_tft_show_image" id="rdhJGs1r1fm2sc8-B7Rk"><value name="data"><shadow type="mpython_pbm_image" id="QYC[!jz*b`$5S3(5f3S*"><field name="path">Heart</field></shadow></value><next><block type="onboard_tft_clear" id="VhSK,7t;i^}yd(.4E7xV"><next><block type="onboard_tft_scroll_string_delay" id="F|)Io0{f!hw)#al4*R[^"><value name="data"><shadow type="text" id="@I?jlPP4[4{FZ`lLKgiL"><field name="TEXT">你好,米思齐!</field></shadow></value><value name="y"><shadow type="math_number" id="n_B1EgVDnznl$Pd)zdbA"><field name="NUM">32</field></shadow></value><value name="size"><shadow type="math_number" id="^[awH]X*@=`q)Qs@oBTZ"><field name="NUM">5</field></shadow></value><value name="space"><shadow type="math_number" id="OnCXZJ579~XC+ZU6]iVo"><field name="NUM">0</field></shadow></value><value name="time"><shadow type="math_number" id="znF)6UiEghQpK3IMa5Jh"><field name="NUM">5</field></shadow></value><value name="VAR"><shadow type="tuple_create_with_text_return" id="ddB2(I(7Q^Bw,1RVJ:23"><field name="TEXT">255,255,0</field></shadow><block type="display_color_seclet" id="aB+97N`.I$)hTHD?IsGx"><field name="COLOR">#ff0000</field></block></value></block></next></block></next></block></statement></block></xml><config>{}</config><code>ZnJvbSBtaXhnb19ub3ZhIGltcG9ydCBvbmJvYXJkX3RmdApmcm9tIGV4cHJlc3Npb25fcGljdHVyZSBpbXBvcnQgSGVhcnQKCgp3aGlsZSBUcnVlOgogICAgb25ib2FyZF90ZnQuaW1hZ2UoSGVhcnQsIGNvbG9yPTB4ZmZmZikKICAgIG9uYm9hcmRfdGZ0LmZpbGwoMCkKICAgIG9uYm9hcmRfdGZ0LnNob3coKQogICAgb25ib2FyZF90ZnQuc2Nyb2xsKCfkvaDlpb3vvIznsbPmgJ3pvZDvvIEnLHkgPSAzMixzaXplID0gNSxzcGVlZCA9NSxzcGFjZSA9IDAsY29sb3I9MHhmODAwKQo=</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-S3@元控青春"><block type="controls_whileUntil" id="hwt@vG;J|Ok_v86hQTOx" x="-851" y="-584"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="weV-6}Yd8bK.p1ciW?hF"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="onboard_tft_show_image" id="@D_:/Oo(iUL!JP?4_mOH"><value name="data"><shadow type="mpython_pbm_image" id="CGaiAs3R/vSa4Cb.O=RQ"><field name="path">Heart</field></shadow></value><next><block type="controls_delay_new" id="|TIquUXNTHI+!7-gU5xe"><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id="!G^AJH`3K:`~EONR`iI2"><field name="NUM">0.1</field></shadow></value><next><block type="onboard_tft_show_image" id="BmjEnV9^n([Y_fY1GjL@"><value name="data"><shadow type="mpython_pbm_image" id="Alvs^49@O=_w)=.mf3S7"><field name="path">Small_heart</field></shadow></value><next><block type="controls_delay_new" id="p9QNHG@7!;Jm;0y~L7mr"><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id="rhz#VK:nFB_nnjJ]?Noc"><field name="NUM">0.1</field></shadow></value></block></next></block></next></block></next></block></statement></block></xml><config>{}</config><code>ZnJvbSBtaXhnb19ub3ZhIGltcG9ydCBvbmJvYXJkX3RmdApmcm9tIGV4cHJlc3Npb25fcGljdHVyZSBpbXBvcnQgSGVhcnQKaW1wb3J0IHRpbWUKZnJvbSBleHByZXNzaW9uX3BpY3R1cmUgaW1wb3J0IFNtYWxsX2hlYXJ0CgoKd2hpbGUgVHJ1ZToKICAgIG9uYm9hcmRfdGZ0LmltYWdlKEhlYXJ0LCBjb2xvcj0weGZmZmYpCiAgICB0aW1lLnNsZWVwKDAuMSkKICAgIG9uYm9hcmRfdGZ0LmltYWdlKFNtYWxsX2hlYXJ0LCBjb2xvcj0weGZmZmYpCiAgICB0aW1lLnNsZWVwKDAuMSkK</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-S3@元控青春"><block type="display_show_image_or_string_delay" id="7A?Ci{tC[:V^}V;dC-e5" x="-918" y="-558"><field name="center">True</field><value name="data"><shadow type="text" id="-CBlkEbP`9jiOK!f!ph}"><field name="TEXT">米思齐</field></shadow></value><value name="space"><shadow type="math_number" id="TBM#tP!]!8ah^fI2neho"><field name="NUM">0</field></shadow></value><next><block type="controls_delay_new" id="1#qQ_rYQ|Np^~bp#Kl34"><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id="P__RG+5o0K15UK7O,0;o"><field name="NUM">1</field></shadow></value><next><block type="controls_whileUntil" id="~Oye7Oy*-LB70R-ejA@f"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="jr{1rwlXrGj8n;gbx``q"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="onboard_tft_show_image" id="4?6;S7`IQ4jHAezLprmt"><value name="data"><shadow type="mpython_pbm_image" id="S0_:.)VY7mX=W{I5kdcp"><field name="path">Heart</field></shadow></value><next><block type="controls_delay_new" id="VKlzrIzF63:W6UrL~+0#"><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id="#1HDYe4G~mH8zVIg:2(1"><field name="NUM">0.1</field></shadow></value><next><block type="onboard_tft_show_image" id="YxT1o,s{L2UbM+.3W`(m"><value name="data"><shadow type="mpython_pbm_image" id="8(`nNvU!LA0l1,YrmJAu"><field name="path">Small_heart</field></shadow></value><next><block type="controls_delay_new" id="{!Yf)C6*L.Fze_hp@K:$"><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id="?@b`Uc:xDA6M?sK~sR)A"><field name="NUM">0.1</field></shadow></value></block></next></block></next></block></next></block></statement></block></next></block></next></block></xml><config>{}</config><code>ZnJvbSBtaXhnb19ub3ZhIGltcG9ydCBvbmJvYXJkX3RmdAppbXBvcnQgdGltZQpmcm9tIGV4cHJlc3Npb25fcGljdHVyZSBpbXBvcnQgSGVhcnQKZnJvbSBleHByZXNzaW9uX3BpY3R1cmUgaW1wb3J0IFNtYWxsX2hlYXJ0CgoKb25ib2FyZF90ZnQuc2hvd3MoJ+exs+aAnem9kCcsc3BhY2UgPSAwLGNlbnRlciA9IFRydWUpCnRpbWUuc2xlZXAoMSkKd2hpbGUgVHJ1ZToKICAgIG9uYm9hcmRfdGZ0LmltYWdlKEhlYXJ0LCBjb2xvcj0weGZmZmYpCiAgICB0aW1lLnNsZWVwKDAuMSkKICAgIG9uYm9hcmRfdGZ0LmltYWdlKFNtYWxsX2hlYXJ0LCBjb2xvcj0weGZmZmYpCiAgICB0aW1lLnNsZWVwKDAuMSkK</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-S3@元控青春"><block type="controls_whileUntil" id="LXJ[dK]~2#qw3}:+QdMO" x="-1017" y="-593"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="TX+JU|A{x0r(8gj7,HZ;"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="controls_if" id="2zF.Wz#;v@$av6?C2333"><mutation else="1"></mutation><value name="IF0"><block type="sensor_mixgo_button_is_pressed" id="S2Zn9*=cq8E;;!,NfP$h"><value name="btn"><shadow type="pins_button" id="G]W~StEC9$`7T8y.30*7"><field name="PIN">B1key</field></shadow></value></block></value><statement name="DO0"><block type="onboard_tft_show_image" id="Mk}8sfGDguJ]Gzk_t.wx"><value name="data"><shadow type="mpython_pbm_image" id="-S::#5I^QMKDQBvG/=|I"><field name="path">Heart</field></shadow></value></block></statement><statement name="ELSE"><block type="onboard_tft_show_image" id="TNC;JZbiX*mj8g4gL2A]"><value name="data"><shadow type="mpython_pbm_image" id="0wR]q32t?fi`WF**Uw3c"><field name="path">Small_heart</field></shadow></value></block></statement></block></statement></block></xml><config>{}</config><code>aW1wb3J0IG1peGdvX25vdmEKZnJvbSBtaXhnb19ub3ZhIGltcG9ydCBvbmJvYXJkX3RmdApmcm9tIGV4cHJlc3Npb25fcGljdHVyZSBpbXBvcnQgSGVhcnQKZnJvbSBleHByZXNzaW9uX3BpY3R1cmUgaW1wb3J0IFNtYWxsX2hlYXJ0CgoKd2hpbGUgVHJ1ZToKICAgIGlmIG1peGdvX25vdmEuQjFrZXkuaXNfcHJlc3NlZCgpOgogICAgICAgIG9uYm9hcmRfdGZ0LmltYWdlKEhlYXJ0LCBjb2xvcj0weGZmZmYpCiAgICBlbHNlOgogICAgICAgIG9uYm9hcmRfdGZ0LmltYWdlKFNtYWxsX2hlYXJ0LCBjb2xvcj0weGZmZmYpCg==</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-S3@元控青春"><block type="controls_whileUntil" id="icdSPR{CobT;lHAIu,k}" x="-1059" y="-724"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="BL5w;dN|zob!A#X(gK6L"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="controls_if" id="kYFp8iqT3OJt7K};[jp["><mutation elseif="2" else="1"></mutation><value name="IF0"><block type="logic_operation" id="q2?u)xNHKwL1_=uLASX,"><field name="OP">AND</field><value name="A"><block type="sensor_mixgo_button_is_pressed" id="v7*w4`LC!8.I*^HMqq$6"><value name="btn"><shadow type="pins_button" id="6iPz[M?lBO}gha~5C/fs"><field name="PIN">B1key</field></shadow></value></block></value><value name="B"><block type="sensor_mixgo_button_is_pressed" id="!tIUpb*1A{d0)L3ZdT+V"><value name="btn"><shadow type="pins_button" id="x{CR(j+@*^_nsG@suWgN"><field name="PIN">B2key</field></shadow></value></block></value></block></value><statement name="DO0"><block type="onboard_tft_show_image" id="YDq+6?gE{6lH)jXvClZ["><value name="data"><shadow type="mpython_pbm_image" id="yCq52EFeYOQN~0OS.]HG"><field name="path">Sad</field></shadow></value></block></statement><value name="IF1"><block type="sensor_mixgo_button_is_pressed" id="VAFQ^+g.r4YF:WCk77BS"><value name="btn"><shadow type="pins_button" id="vOQlBM$l_zQG:HI(jihv"><field name="PIN">B1key</field></shadow></value></block></value><statement name="DO1"><block type="onboard_tft_show_image" id="lOhLZ?Y6jA?NMeWj8^M3"><value name="data"><shadow type="mpython_pbm_image" id="?IqljO!j925/y,O;r?h;"><field name="path">Heart</field></shadow></value></block></statement><value name="IF2"><block type="sensor_mixgo_button_is_pressed" id="rp0z9-Uul(Rea)B-B|4)"><value name="btn"><shadow type="pins_button" id="`ynK+cCxPEkT8YJ`kxnb"><field name="PIN">B2key</field></shadow></value></block></value><statement name="DO2"><block type="onboard_tft_show_image" id="kh@[JK}L66I-PVlc~_}a"><value name="data"><shadow type="mpython_pbm_image" id="OrT!()j3`B5o`7HWtd@2"><field name="path">Small_heart</field></shadow></value></block></statement><statement name="ELSE"><block type="onboard_tft_show_image" id="f+`_4ELM!3S*Z4WVK:{`"><value name="data"><shadow type="mpython_pbm_image" id="[eY^[s!EKpNCjgsvmgH`"><field name="path">Smile</field></shadow></value></block></statement></block></statement></block></xml><config>{}</config><code>aW1wb3J0IG1peGdvX25vdmEKZnJvbSBtaXhnb19ub3ZhIGltcG9ydCBvbmJvYXJkX3RmdApmcm9tIGV4cHJlc3Npb25fcGljdHVyZSBpbXBvcnQgU2FkCmZyb20gZXhwcmVzc2lvbl9waWN0dXJlIGltcG9ydCBIZWFydApmcm9tIGV4cHJlc3Npb25fcGljdHVyZSBpbXBvcnQgU21hbGxfaGVhcnQKZnJvbSBleHByZXNzaW9uX3BpY3R1cmUgaW1wb3J0IFNtaWxlCgoKd2hpbGUgVHJ1ZToKICAgIGlmIG1peGdvX25vdmEuQjFrZXkuaXNfcHJlc3NlZCgpIGFuZCBtaXhnb19ub3ZhLkIya2V5LmlzX3ByZXNzZWQoKToKICAgICAgICBvbmJvYXJkX3RmdC5pbWFnZShTYWQsIGNvbG9yPTB4ZmZmZikKICAgIGVsaWYgbWl4Z29fbm92YS5CMWtleS5pc19wcmVzc2VkKCk6CiAgICAgICAgb25ib2FyZF90ZnQuaW1hZ2UoSGVhcnQsIGNvbG9yPTB4ZmZmZikKICAgIGVsaWYgbWl4Z29fbm92YS5CMmtleS5pc19wcmVzc2VkKCk6CiAgICAgICAgb25ib2FyZF90ZnQuaW1hZ2UoU21hbGxfaGVhcnQsIGNvbG9yPTB4ZmZmZikKICAgIGVsc2U6CiAgICAgICAgb25ib2FyZF90ZnQuaW1hZ2UoU21pbGUsIGNvbG9yPTB4ZmZmZikK</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-S3@元控青春"><block type="controls_whileUntil" id="A$)iJiQph=+{S]yU`+jQ" x="-1059" y="-724"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="#cQ*-49$1fS{7UylRE*P"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="controls_forEach" id="Tr#19|7lhNC@jB1WCzdK"><value name="LIST"><shadow type="list_many_input" id="Ls$7o9ho$C@nG3jKNMh!"><field name="CONTENT">0,1,2,3</field></shadow><block type="controls_range" id="}{XMV*Wp{Qn{Q9l87(UJ"><value name="FROM"><shadow type="math_number" id="-bPRG{e/s,xD*r2yj#P|"><field name="NUM">0</field></shadow></value><value name="TO"><shadow type="math_number" id="kzi$2C|***,|z`f{(OG|"><field name="NUM">4</field></shadow></value><value name="STEP"><shadow type="math_number" id="FAA1CIx.o[ZgNQhdXZ8a"><field name="NUM">1</field></shadow></value></block></value><value name="VAR"><shadow type="variables_get" id="fBX@Lv}7O9`9im5yoxCl"><field name="VAR">i</field></shadow></value><statement name="DO"><block type="actuator_onboard_neopixel_rgb" id="E/ezAc4UF]Leqxw,z#J2"><value name="_LED_"><shadow type="math_number" id="ff|f4yeqLiq_nWr#U6@l"><field name="NUM">0</field></shadow><block type="variables_get" id="Z|QJi/,1`p9|F$}lh1Hu"><field name="VAR">i</field></block></value><value name="RVALUE"><shadow type="math_number" id="|rnVH;AK|,{3=5FxDsnI"><field name="NUM">0</field></shadow></value><value name="GVALUE"><shadow type="math_number" id="q=;]i.Bb/4zT;tO!8ADK"><field name="NUM">0</field></shadow></value><value name="BVALUE"><shadow type="math_number" id="UMy/)/KT@QJ.PV7FyN_5"><field name="NUM">25</field></shadow></value><next><block type="actuator_onboard_neopixel_write" id="[tOsjG$fyzu}QqEirgY)"><next><block type="controls_delay_new" id=";LnBaY=PQR$:C(uMAEx8"><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id="G{5UTr{TGna~!aH^#,_-"><field name="NUM">0.5</field></shadow></value></block></next></block></next></block></statement><next><block type="actuator_onboard_neopixel_rgb_all" id="sGulusBvD84R0SxfSW4C"><value name="RVALUE"><shadow type="math_number" id="subxwx|=7PzoX0J66);z"><field name="NUM">0</field></shadow></value><value name="GVALUE"><shadow type="math_number" id=",Ge8)x4V96r+J7L!P60b"><field name="NUM">0</field></shadow></value><value name="BVALUE"><shadow type="math_number" id="r}Ohg1:|o^vvoWM?46J-"><field name="NUM">0</field></shadow></value><next><block type="actuator_onboard_neopixel_write" id="b;PI[oUr*mohw_YgVn1:"><next><block type="controls_delay_new" id="#C)u01!^,xfU~ly50C;S"><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id="N2a|KTZVXORx~0^w)`ZX"><field name="NUM">1</field></shadow></value></block></next></block></next></block></next></block></statement></block></xml><config>{}</config><code>ZnJvbSBtaXhnb19ub3ZhIGltcG9ydCBvbmJvYXJkX3JnYgppbXBvcnQgdGltZQoKCndoaWxlIFRydWU6CiAgICBmb3IgaSBpbiByYW5nZSgwLCA0LCAxKToKICAgICAgICBvbmJvYXJkX3JnYltpXSA9ICgwLCAwLCAyNSkKICAgICAgICBvbmJvYXJkX3JnYi53cml0ZSgpCiAgICAgICAgdGltZS5zbGVlcCgwLjUpCiAgICBvbmJvYXJkX3JnYi5maWxsKCgwLCAwLCAwKSkKICAgIG9uYm9hcmRfcmdiLndyaXRlKCkKICAgIHRpbWUuc2xlZXAoMSkK</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-S3@元控青春"><block type="controls_whileUntil" id="9Z#4Fy+7UJgyW-``vLpA" x="-1059" y="-724"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="hfUlwBBd{ts[a/c^)!*w"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="controls_forEach" id="]ti}O]ktx_~W{UL4ETo#"><value name="LIST"><shadow type="list_many_input" id="2}VSh@*U*d=1vNY,?^JW"><field name="CONTENT">0,1,2,3</field></shadow><block type="controls_range" id="4}o`NWi])p9z7Kzm}9H6"><value name="FROM"><shadow type="math_number" id="Ni9o,x@q~`KDTZU|jm|`"><field name="NUM">0</field></shadow></value><value name="TO"><shadow type="math_number" id="3]XqwzW2cUgm5@4K~ojj"><field name="NUM">4</field></shadow></value><value name="STEP"><shadow type="math_number" id="~Hd0]y$CKni$f,Q+!AQi"><field name="NUM">1</field></shadow></value></block></value><value name="VAR"><shadow type="variables_get" id="zTCdL7YK3q|K|H=yyxZO"><field name="VAR">i</field></shadow></value><statement name="DO"><block type="actuator_onboard_neopixel_rgb_all" id="^J{ipTmqa@0ctF[/n`4h"><value name="RVALUE"><shadow type="math_number" id="T0YR?k;}mSViWY8T,[.!"><field name="NUM">0</field></shadow></value><value name="GVALUE"><shadow type="math_number" id="LA@G?)6$0)BILMkQiaxN"><field name="NUM">0</field></shadow></value><value name="BVALUE"><shadow type="math_number" id="TiNS7tes17[H0O^#s*(?"><field name="NUM">0</field></shadow></value><next><block type="actuator_onboard_neopixel_rgb" id="yfrxhpP-_6]rQbX2C/ys"><value name="_LED_"><shadow type="math_number" id="T?aN5sVT9#H!4KA+$;]U"><field name="NUM">0</field></shadow><block type="variables_get" id="2WvuP*Z4ht=H[;Y.mL}("><field name="VAR">i</field></block></value><value name="RVALUE"><shadow type="math_number" id="}ks#G`-0*lEN}N41V9*/"><field name="NUM">0</field></shadow></value><value name="GVALUE"><shadow type="math_number" id="qw-tPCsgMI+zG#7U|iLA"><field name="NUM">0</field></shadow></value><value name="BVALUE"><shadow type="math_number" id="bI9(t(cOgm;FQg,*!Yq#"><field name="NUM">25</field></shadow></value><next><block type="actuator_onboard_neopixel_write" id="3a2JQm,gkEHm{!cvC@aI"><next><block type="controls_delay_new" id="+IpsBbGHx54~Vc39($=F"><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id="aMmN#WBm/~1i=VvQz!V5"><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="Y,Xmc=Ms55^tuHk4b/LN"><value name="RVALUE"><shadow type="math_number" id="B[RCQ:R[L#R.+DF,*PB_"><field name="NUM">0</field></shadow></value><value name="GVALUE"><shadow type="math_number" id="|dL{`GYNH1Ba$/*__Se{"><field name="NUM">0</field></shadow></value><value name="BVALUE"><shadow type="math_number" id="nyo3[,]ke7S5OE})JH/n"><field name="NUM">0</field></shadow></value><next><block type="actuator_onboard_neopixel_write" id=".)dlSZ;+i;k5[`][Hh$g"><next><block type="controls_delay_new" id="U~Eh7+j;!-nes7b3tB=a"><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id="9CCvI=Wae.Y^isbix?hu"><field name="NUM">1</field></shadow></value></block></next></block></next></block></next></block></statement></block></xml><config>{}</config><code>ZnJvbSBtaXhnb19ub3ZhIGltcG9ydCBvbmJvYXJkX3JnYgppbXBvcnQgdGltZQoKCndoaWxlIFRydWU6CiAgICBmb3IgaSBpbiByYW5nZSgwLCA0LCAxKToKICAgICAgICBvbmJvYXJkX3JnYi5maWxsKCgwLCAwLCAwKSkKICAgICAgICBvbmJvYXJkX3JnYltpXSA9ICgwLCAwLCAyNSkKICAgICAgICBvbmJvYXJkX3JnYi53cml0ZSgpCiAgICAgICAgdGltZS5zbGVlcCgwLjUpCiAgICBvbmJvYXJkX3JnYi5maWxsKCgwLCAwLCAwKSkKICAgIG9uYm9hcmRfcmdiLndyaXRlKCkKICAgIHRpbWUuc2xlZXAoMSkK</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-S3@元控青春"><block type="controls_whileUntil" id="hwUhO/Y5rgdDudDN|VW/" x="-1059" y="-724"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="D.R)MbaN)0weiv=X;SCP"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="controls_if" id="cS/t0/fL,rhTvPt1ktsF"><value name="IF0"><block type="sensor_mixgo_button_was_pressed" id="]V|#O=U_#8D!f[4grazK"><value name="btn"><shadow type="pins_button" id="/rm6aSa7w~6_~*o:FHKy"><field name="PIN">B1key</field></shadow></value></block></value><statement name="DO0"><block type="onboard_tft_show_image" id="kbtf?x++.B3$b5l_S$q="><value name="data"><shadow type="mpython_pbm_image" id=":63~b9u7lT]ounnfq{Qf"><field name="path">Heart</field></shadow></value></block></statement><next><block type="controls_if" id="O;cd(5}AK#*(=kn+86?e"><value name="IF0"><block type="sensor_mixgo_button_was_pressed" id="habKMUyK]H]mg?aBj{e{"><value name="btn"><shadow type="pins_button" id="PLUd?,ef`dqvsBAJr.cE"><field name="PIN">B2key</field></shadow></value></block></value><statement name="DO0"><block type="onboard_tft_clear" id="1L!JhC*82DNGGfL25i;r"></block></statement></block></next></block></statement></block></xml><config>{}</config><code>aW1wb3J0IG1peGdvX25vdmEKZnJvbSBtaXhnb19ub3ZhIGltcG9ydCBvbmJvYXJkX3RmdApmcm9tIGV4cHJlc3Npb25fcGljdHVyZSBpbXBvcnQgSGVhcnQKCgp3aGlsZSBUcnVlOgogICAgaWYgbWl4Z29fbm92YS5CMWtleS53YXNfcHJlc3NlZCgpOgogICAgICAgIG9uYm9hcmRfdGZ0LmltYWdlKEhlYXJ0LCBjb2xvcj0weGZmZmYpCiAgICBpZiBtaXhnb19ub3ZhLkIya2V5Lndhc19wcmVzc2VkKCk6CiAgICAgICAgb25ib2FyZF90ZnQuZmlsbCgwKQogICAgICAgIG9uYm9hcmRfdGZ0LnNob3coKQo=</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-S3@元控青春"><block type="controls_whileUntil" id="eRQ`j)|RsUp6-s[D4Z5k" x="-1437" y="-624"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="ePF{XP=Fx#s{-Gj8lpsr"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="controls_if" id="S]kt9lMKbr_7zL9)~a21"><value name="IF0"><block type="sensor_mixgo_button_was_pressed" id="-A8SIj|(/V#HxNIH0M[C"><value name="btn"><shadow type="pins_button" id="59dFYmK6wqtfI_)s=F]u"><field name="PIN">B1key</field></shadow></value></block></value><statement name="DO0"><block type="do_while" id="r@M0XID(d4Je7t|*!ce:"><field name="type">true</field><statement name="input_data"><block type="onboard_tft_show_image" id="QbcFQ9|MIXuHmpeY!K4v"><value name="data"><shadow type="mpython_pbm_image" id=",l(#T{+d@}+Vmi22-lS2"><field name="path">Heart</field></shadow></value></block></statement><value name="select_data"><block type="sensor_mixgo_button_was_pressed" id="K]W]gq+i@w?]OX)wr?j)"><value name="btn"><shadow type="pins_button" id="UECfyEI4]l8bN{ZN.{|o"><field name="PIN">B1key</field></shadow></value></block></value><next><block type="onboard_tft_clear" id="e]1N~UA:MVk!6Q/#Ox5_"></block></next></block></statement></block></statement></block></xml><config>{}</config><code>aW1wb3J0IG1peGdvX25vdmEKZnJvbSBtaXhnb19ub3ZhIGltcG9ydCBvbmJvYXJkX3RmdApmcm9tIGV4cHJlc3Npb25fcGljdHVyZSBpbXBvcnQgSGVhcnQKCgp3aGlsZSBUcnVlOgogICAgaWYgbWl4Z29fbm92YS5CMWtleS53YXNfcHJlc3NlZCgpOgogICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgIG9uYm9hcmRfdGZ0LmltYWdlKEhlYXJ0LCBjb2xvcj0weGZmZmYpCiAgICAgICAgICAgIGlmIChtaXhnb19ub3ZhLkIxa2V5Lndhc19wcmVzc2VkKCkpOgogICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICBvbmJvYXJkX3RmdC5maWxsKDApCiAgICAgICAgb25ib2FyZF90ZnQuc2hvdygpCg==</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-S3@元控青春"><block type="variables_set" id="DNnC=f`W3WQDrK@~?=vL" x="-1054" y="-758"><field name="VAR">显示</field><value name="VALUE"><block type="logic_boolean" id="JutE!`i;3kYj.{v}i9y~"><field name="BOOL">FALSE</field></block></value><next><block type="controls_whileUntil" id="u6ugJuXEKK10uWAyB5ci"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="j#p2=o+KdM@fli:vl9wO"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="controls_if" id="}9Uq5[dW:u0xZw$qzW88"><value name="IF0"><block type="sensor_mixgo_button_was_pressed" id="qR:-Wmb.DUzAc|$~Fq/I"><value name="btn"><shadow type="pins_button" id="rBxif_lHg95y#C(P4OrP"><field name="PIN">B1key</field></shadow></value></block></value><statement name="DO0"><block type="variables_set" id="i!XCuz}1(@v/T$3ZJV=8"><field name="VAR">显示</field><value name="VALUE"><block type="logic_negate" id="}87S[xGVZYV,emaDO/v$"><value name="BOOL"><block type="variables_get" id="/hkI?@?g!j9h}^7VlB3+"><field name="VAR">显示</field></block></value></block></value></block></statement><next><block type="controls_if" id="K3UbvK1njno8gGY]1DhA"><mutation else="1"></mutation><value name="IF0"><block type="variables_get" id="^*Yf+uGu(azM.;#,D8iL"><field name="VAR">显示</field></block></value><statement name="DO0"><block type="onboard_tft_show_image" id="?K/YCiG$d:^cBo$ScM~b"><value name="data"><shadow type="mpython_pbm_image" id="r.Ff8kc^4~-,qzWlEnc8"><field name="path">Heart</field></shadow></value></block></statement><statement name="ELSE"><block type="onboard_tft_clear" id="tVS@6Ze#wY6{D6.n$F,["></block></statement></block></next></block></statement></block></next></block></xml><config>{}</config><code>aW1wb3J0IG1peGdvX25vdmEKZnJvbSBtaXhnb19ub3ZhIGltcG9ydCBvbmJvYXJkX3RmdApmcm9tIGV4cHJlc3Npb25fcGljdHVyZSBpbXBvcnQgSGVhcnQKCgpfRTZfOThfQkVfRTdfQTRfQkEgPSBGYWxzZQp3aGlsZSBUcnVlOgogICAgaWYgbWl4Z29fbm92YS5CMWtleS53YXNfcHJlc3NlZCgpOgogICAgICAgIF9FNl85OF9CRV9FN19BNF9CQSA9IG5vdCBfRTZfOThfQkVfRTdfQTRfQkEKICAgIGlmIF9FNl85OF9CRV9FN19BNF9CQToKICAgICAgICBvbmJvYXJkX3RmdC5pbWFnZShIZWFydCwgY29sb3I9MHhmZmZmKQogICAgZWxzZToKICAgICAgICBvbmJvYXJkX3RmdC5maWxsKDApCiAgICAgICAgb25ib2FyZF90ZnQuc2hvdygpCg==</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-S3@元控青春"><block type="controls_whileUntil" id="T1,*Ct29B^B1jG@vQm,{" x="-1669" y="-816"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="0E)8XLydVm@8|c.!xUkQ"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="system_print" id="fv|CRRB]icWKcK:Ao9n@"><value name="VAR"><shadow type="text" id="12cW7h}Kk0Kzz_*m3N=C"><field name="TEXT">Mixly</field></shadow><block type="sensor_sound" id="/bD;u8(f,CmoCmHjD1R["></block></value><next><block type="controls_delay_new" id="?pHX9dihf^xP`f87PYuh"><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id="ub,9=Vl6PRrw.({V{E{O"><field name="NUM">0.01</field></shadow></value></block></next></block></statement></block></xml><config>{}</config><code>aW1wb3J0IG1hY2hpbmUKZnJvbSBtaXhnb19ub3ZhX3ZvaWNlIGltcG9ydCBzb3VuZF9sZXZlbAppbXBvcnQgdGltZQoKCndoaWxlIFRydWU6CiAgICBwcmludChzb3VuZF9sZXZlbCgpKQogICAgdGltZS5zbGVlcCgwLjAxKQo=</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-S3@元控青春"><block type="controls_whileUntil" id="7z^1B=9:NFiIxm5=.wfs" x="-1526" y="-836"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="+2UGVri)pq,Ly@@1v9F["><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="onboard_tft_clear" id="H:{i64+*bQXn|-J@!1ig"><next><block type="controls_forEach" id="/yhy0X[z;F5wNFNRhmx]"><value name="LIST"><shadow type="list_many_input" id="#^$[B3Hfq}~cpj.[_]0J"><field name="CONTENT">0,1,2,3</field></shadow><block type="controls_range" id="^Vpc.EQ2P;/;CpX67_7X"><value name="FROM"><shadow type="math_number" id="Temx|b]8Q,RPh07U][y."><field name="NUM">0</field></shadow></value><value name="TO"><shadow type="math_number" id="[+D[e~9F3jUyQr.`Vty6"><field name="NUM">160</field></shadow></value><value name="STEP"><shadow type="math_number" id="9K[Vfu?$UcGXh.08{[L("><field name="NUM">1</field></shadow></value></block></value><value name="VAR"><shadow type="variables_get" id="e{F0T^pUoSkOL4Gi)#I-"><field name="VAR">x</field></shadow></value><statement name="DO"><block type="onboard_tft_display_line" id="mMSVXAsl=0!BKkJiN|Un"><value name="x1"><shadow type="math_number" id="?k_-48)Cm}Chue5K=tGm"><field name="NUM">x</field></shadow></value><value name="y1"><shadow type="math_number" id="R(,@Ek#H{JZLC!:3m?(n"><field name="NUM">127</field></shadow></value><value name="x2"><shadow type="math_number" id="t_s-D3[jUVQ2IpL8q$F:"><field name="NUM">x</field></shadow></value><value name="y2"><shadow type="math_number" id="ksWZ)0tOx#WcMt9$JWU]"><field name="NUM">50</field></shadow><block type="math_arithmetic" id="k9_EIPs6lW:XkK[bX6=B"><field name="OP">MINUS</field><value name="A"><shadow type="math_number" id="/[0s_=$-e4@;ULBP}t/-"><field name="NUM">127</field></shadow></value><value name="B"><shadow type="math_number" id="f4QInD7wFxtsh7b97C~V"><field name="NUM">1</field></shadow><block type="text_to_number" id="Srn$**1FD?wwd`$0|9~3"><field name="TOWHAT">int</field><value name="VAR"><shadow type="variables_get" id="R*?:xAId=|f{yWvlCkfw"><field name="VAR">x</field></shadow><block type="math_map" id="~$3G+6iT#_jvphh^mKa)" inline="false"><value name="NUM"><shadow type="math_number" id="OU]ab1Vpcq7VQ50]*Dr}"><field name="NUM">50</field></shadow><block type="sensor_sound" id="Y)aFA=Q2aMQyLsWmf9eR"></block></value><value name="fromLow"><shadow type="math_number" id="P-RTi*msiaN167o|UM,{"><field name="NUM">0</field></shadow></value><value name="fromHigh"><shadow type="math_number" id="6E[jDi(Bs)i7!cu6j_LD"><field name="NUM">30000</field></shadow></value><value name="toLow"><shadow type="math_number" id="M$cP0`cJo]?eEGB!+^@D"><field name="NUM">0</field></shadow></value><value name="toHigh"><shadow type="math_number" id="3c6xmi,]Ua#gz*CZAG4W"><field name="NUM">127</field></shadow></value></block></value></block></value></block></value><value name="VAR"><shadow type="tuple_create_with_text_return" id="M?Q7hZ@.CAGQ-PE7fs],"><field name="TEXT">255,255,0</field></shadow><block type="display_color_seclet" id="qwL0|,JMw}t:08ps1~)Y"><field name="COLOR">#ffffff</field></block></value><next><block type="onboard_tft_shift" id="jGr=fC-+W2c|[!.#E$I3" disabled="true"><field name="OP">shift_left</field><value name="val"><shadow type="math_number" id="DSy7_IcEeP`d,P2U;PEm"><field name="NUM">1</field></shadow></value></block></next></block></statement></block></next></block></statement></block></xml><config>{}</config><code>ZnJvbSBtaXhnb19ub3ZhIGltcG9ydCBvbmJvYXJkX3RmdApmcm9tIG1peGdvX25vdmFfdm9pY2UgaW1wb3J0IHNvdW5kX2xldmVsCmZyb20gbWl4cHkgaW1wb3J0IG1hdGhfbWFwCgoKd2hpbGUgVHJ1ZToKICAgIG9uYm9hcmRfdGZ0LmZpbGwoMCkKICAgIG9uYm9hcmRfdGZ0LnNob3coKQogICAgZm9yIHggaW4gcmFuZ2UoMCwgMTYwLCAxKToKICAgICAgICBvbmJvYXJkX3RmdC5saW5lKHgsIDEyNywgeCwgKDEyNyAtIGludCgobWF0aF9tYXAoc291bmRfbGV2ZWwoKSwgMCwgMzAwMDAsIDAsIDEyNykpKSksIDB4ZmZmZikKICAgICAgICBvbmJvYXJkX3RmdC5zaG93KCkK</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-S3@元控青春"><block type="controls_whileUntil" id="6|9[I,IRWwpuC`jvuJYr" x="-1518" y="-902"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="$1[me6mMvAOt3!2)QUUZ"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="system_print_many" id="#|:^{qI@$iIC#5yKZ=P9"><mutation items="2"></mutation><value name="ADD0"><block type="sensor_mixgo_nova_LTR308" id="uZ+Yi+]h]qnJsuDA8kN#"><field name="direction">l</field></block></value><value name="ADD1"><block type="sensor_mixgo_nova_LTR308" id="pN9;=;Ib!2GE3gHU?ZzC"><field name="direction">r</field></block></value><next><block type="onboard_tft_clear" id="PfTDs5*#lkGpt+p@w@vB"><next><block type="onboard_tft_show_image_or_string_delay" id="Lkr]#Dfup+?-MgSN6YG4"><field name="center">True</field><value name="data"><shadow type="text" id="r?@R:Z1I.R#Albo7=rZ_"><field name="TEXT">Mixly</field></shadow><block type="number_to_text" id="!MjxMFCwyLc(Fpz/vIl`"><value name="VAR"><shadow type="variables_get" id="BU=]~d,{nEPf|c:hs8It"><field name="VAR">x</field></shadow><block type="sensor_mixgo_nova_LTR308" id="ZGq^U]U[!Y4CTXJkgn-N"><field name="direction">l</field></block></value></block></value><value name="x"><shadow type="math_number" id="coNZJPBw@,~NzppMeSu_"><field name="NUM">0</field></shadow></value><value name="y"><shadow type="math_number" id="b;vxJw/d6C_qx1$KUW#$"><field name="NUM">32</field></shadow></value><value name="size"><shadow type="math_number" id="}2uL{Xy_GZsW|FlK`hN0"><field name="NUM">3</field></shadow></value><value name="space"><shadow type="math_number" id="_!KuB:OmvfV,MSn:`S7A"><field name="NUM">0</field></shadow></value><value name="VAR"><shadow type="tuple_create_with_text_return" id="E=|E-6^oG/dPK|3dCmdr"><field name="TEXT">255,255,0</field></shadow><block type="display_color_seclet" id="!Lc!uy1IAN^AW$QjDOBv"><field name="COLOR">#ffffff</field></block></value><next><block type="onboard_tft_show_image_or_string_delay" id="FY?Jo]KO~*Eiod0t_z:w"><field name="center">True</field><value name="data"><shadow type="text" id="cuZ3Oo8.pCKAHB+$lBgv"><field name="TEXT">Mixly</field></shadow><block type="number_to_text" id="W,ERJkwUc].7Kvkf8kp`"><value name="VAR"><shadow type="variables_get" id="BU=]~d,{nEPf|c:hs8It"><field name="VAR">x</field></shadow><block type="sensor_mixgo_nova_LTR308" id="1P=t(BYa+}iH]Z#0iJ@x"><field name="direction">r</field></block></value></block></value><value name="x"><shadow type="math_number" id="c2N9.fdp}bEbq}!XaawG"><field name="NUM">0</field></shadow></value><value name="y"><shadow type="math_number" id="t7KT`2~pTyoABZDMpa!X"><field name="NUM">80</field></shadow></value><value name="size"><shadow type="math_number" id="lqMlo29;rHV0xg0hhK}1"><field name="NUM">3</field></shadow></value><value name="space"><shadow type="math_number" id=".:0vnejO(z+Y~r;}HxjT"><field name="NUM">0</field></shadow></value><value name="VAR"><shadow type="tuple_create_with_text_return" id="E=|E-6^oG/dPK|3dCmdr"><field name="TEXT">255,255,0</field></shadow><block type="display_color_seclet" id=";*_Ur*KO!d{{Z`du)?H`"><field name="COLOR">#ffffff</field></block></value><next><block type="controls_delay_new" id="bHXNG$RiXT0(SYGNF+ET"><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id="{(1GQ3w62c?i29?7p#[G"><field name="NUM">0.1</field></shadow></value></block></next></block></next></block></next></block></next></block></statement></block></xml><config>{}</config><code>ZnJvbSBtaXhnb19ub3ZhIGltcG9ydCBvbmJvYXJkX2Fsc19sCmZyb20gbWl4Z29fbm92YSBpbXBvcnQgb25ib2FyZF9hbHNfcgpmcm9tIG1peGdvX25vdmEgaW1wb3J0IG9uYm9hcmRfdGZ0CmltcG9ydCB0aW1lCgoKd2hpbGUgVHJ1ZToKICAgIHByaW50KG9uYm9hcmRfYWxzX2wuYWxzX3ZpcygpLCBvbmJvYXJkX2Fsc19yLmFsc192aXMoKSkKICAgIG9uYm9hcmRfdGZ0LmZpbGwoMCkKICAgIG9uYm9hcmRfdGZ0LnNob3coKQogICAgb25ib2FyZF90ZnQuc2hvd3Moc3RyKG9uYm9hcmRfYWxzX2wuYWxzX3ZpcygpKSx4ID0gMCx5ID0gMzIsc2l6ZSA9IDMsc3BhY2UgPSAwLGNlbnRlciA9IFRydWUsY29sb3I9MHhmZmZmKQogICAgb25ib2FyZF90ZnQuc2hvd3Moc3RyKG9uYm9hcmRfYWxzX3IuYWxzX3ZpcygpKSx4ID0gMCx5ID0gODAsc2l6ZSA9IDMsc3BhY2UgPSAwLGNlbnRlciA9IFRydWUsY29sb3I9MHhmZmZmKQogICAgdGltZS5zbGVlcCgwLjEpCg==</code>
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-S3@元控青春"><block type="variables_set" id="-HFL9}GgRX2E/Td!E6(/" x="-1538" y="-819"><field name="VAR">接近距离</field><value name="VALUE"><block type="math_number" id=")u.a*[o320tBLhCv.O@W"><field name="NUM">0</field></block></value><next><block type="controls_whileUntil" id=")Qf2?dm_QbknZVH+.C.u"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="nENg6)T`@asSwyF:Dmy4"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="variables_set" id="6s0M;MV=._=_Hjbwp+8-"><field name="VAR">接近距离</field><value name="VALUE"><block type="text_to_number" id="Yjs]nHk#1HqpSZI@c}gT"><field name="TOWHAT">int</field><value name="VAR"><shadow type="variables_get" id="oJGu=/`O-#:;;tx,4D4B"><field name="VAR">x</field></shadow><block type="sensor_mixgo_nova_pin_near" id="O]jSI0oArCp`90MGs_SA"><field name="direction">l</field></block></value></block></value><next><block type="system_print" id="lqWQ^84Rq_nm#C3MCXv("><value name="VAR"><shadow type="text" id="ArVFmXH~e48+G_*#LnhO"><field name="TEXT">Mixly</field></shadow><block type="variables_get" id="/+.bR[{.SLP19jU!OI^:"><field name="VAR">接近距离</field></block></value><next><block type="display_show_image_or_string_delay" id="hkK5R[SWM^^QhQ^s)0Eb"><field name="center">True</field><value name="data"><shadow type="text" id="C8*ajqwb7o14|7CMB33C"><field name="TEXT">Mixly</field></shadow><block type="number_to_text" id="yV`eUr$h-B[-@,GuzX8)"><value name="VAR"><shadow type="variables_get" id="f]W1/vn;Y1/-G/J?BG{$"><field name="VAR">x</field></shadow><block type="variables_get" id="^ESpPPx,64!GZs/zH2R5"><field name="VAR">接近距离</field></block></value></block></value><value name="space"><shadow type="math_number" id="ZJZSRH7HJrz,zK;c72BZ"><field name="NUM">0</field></shadow></value><next><block type="controls_delay_new" id="Z)z8k?[0]05@=kc-Y[q,"><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id="lJ?/Kt~_?qCMPZRjz*pS"><field name="NUM">1</field></shadow></value></block></next></block></next></block></next></block></statement></block></next></block></xml><config>{}</config><code>ZnJvbSBtaXhnb19ub3ZhIGltcG9ydCBvbmJvYXJkX2Fsc19sCmltcG9ydCBtYWNoaW5lCmZyb20gbWl4Z29fbm92YSBpbXBvcnQgb25ib2FyZF90ZnQKaW1wb3J0IHRpbWUKCgpfRTZfOEVfQTVfRThfQkZfOTFfRThfQjdfOURfRTdfQTZfQkIgPSAwCndoaWxlIFRydWU6CiAgICBfRTZfOEVfQTVfRThfQkZfOTFfRThfQjdfOURfRTdfQTZfQkIgPSBpbnQob25ib2FyZF9hbHNfbC5wc19ubCgpKQogICAgcHJpbnQoX0U2XzhFX0E1X0U4X0JGXzkxX0U4X0I3XzlEX0U3X0E2X0JCKQogICAgb25ib2FyZF90ZnQuc2hvd3Moc3RyKF9FNl84RV9BNV9FOF9CRl85MV9FOF9CN185RF9FN19BNl9CQiksc3BhY2UgPSAwLGNlbnRlciA9IFRydWUpCiAgICB0aW1lLnNsZWVwKDEpCg==</code>
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-S3@元控青春"><block type="controls_whileUntil" id="{3LwN#`JbvyQS~9PaP/V" x="-1405" y="-729"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="faNh2bLzcCMfAxiTE_;)"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="system_print" id="b;Pv,RK(gNjikB`Lg^|0"><value name="VAR"><shadow type="text" id=":~kGhMTy|lGhHr3$dpr!"><field name="TEXT">Mixly</field></shadow><block type="sensor_get_acceleration" id="QE|~P(V]Q{z]UfJq4pl`"><field name="key"></field></block></value><next><block type="controls_delay_new" id="SzU$|N7:1T,781Ffnvw["><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id="d*z));Fbzq`J335],fF@"><field name="NUM">1</field></shadow></value></block></next></block></statement></block></xml><config>{}</config><code>aW1wb3J0IG1hY2hpbmUKZnJvbSBtaXhnb19ub3ZhIGltcG9ydCBvbmJvYXJkX2FjYwppbXBvcnQgdGltZQoKCndoaWxlIFRydWU6CiAgICBwcmludChvbmJvYXJkX2FjYy5hY2NlbGVyYXRpb24oKSkKICAgIHRpbWUuc2xlZXAoMSkK</code>
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-S3@元控青春"><block type="controls_whileUntil" id="dC!@D5_JL8EtVw}5$8y3" x="-1881" y="-819"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="f_X]|=o=y-(_r=Id+u]5"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="display_show_image_or_string_delay" id="WBrL^=s`.e$n$)hKr1@R"><field name="center">True</field><value name="data"><shadow type="text" id="P|B,g`r)pC[;/E6h=D})"><field name="TEXT">Mixly</field></shadow><block type="text_join" id="VFzxY(Zvc9VF$NbNU@+M"><value name="A"><shadow type="text" id="D,GgCxj18}p;Lu{w+#h["><field name="TEXT">T:</field></shadow></value><value name="B"><shadow type="text" id="9u0-#U[k4b(doRHd3Z4N"><field name="TEXT">Mixly</field></shadow><block type="number_to_text" id="1l?L)3el.I.d|0@:o=Kz"><value name="VAR"><shadow type="variables_get" id="xzPL7W$$l3!$Jv8o`^;8"><field name="VAR">x</field></shadow><block type="text_to_number" id="=8:pr{}vEV8p{Q;@_@~T"><field name="TOWHAT">int</field><value name="VAR"><shadow type="variables_get" id="{4ke19/!pnpsmsN(g13D"><field name="VAR">x</field></shadow><block type="sensor_aht11" id="]Xk/QbN#zqjg_e*)KGg]"><field name="key">temperature</field></block></value></block></value></block></value></block></value><value name="space"><shadow type="math_number" id="S@K(Kx1JxmarCh~W2;Q_"><field name="NUM">0</field></shadow></value><next><block type="controls_delay_new" id="j^uZ|Uzmh{6Z;?~py^av"><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id="}OCKxw`)N,OALb-P1.`Y"><field name="NUM">1</field></shadow></value><next><block type="display_show_image_or_string_delay" id="*Mhmwq{7t9}hi}rDPFTP"><field name="center">True</field><value name="data"><shadow type="text" id="|.g~y-0{J;NVm4^?vy=K"><field name="TEXT">Mixly</field></shadow><block type="text_join" id="RvY3x562h_,fu|[CHp|["><value name="A"><shadow type="text" id="$1HmiaHBP/p^e?^VR,=("><field name="TEXT">H:</field></shadow></value><value name="B"><shadow type="text" id="2XU!7(96b8s5I$HNMrE!"><field name="TEXT">Mixly</field></shadow><block type="number_to_text" id="lX0Fr3:O-GK+pB_z_OaI"><value name="VAR"><shadow type="variables_get" id="A]Ot,pg0@BN}~lG`f{3="><field name="VAR">x</field></shadow><block type="text_to_number" id="gu`AAoQ/z*23+Pe~5(I:"><field name="TOWHAT">int</field><value name="VAR"><shadow type="variables_get" id="a8dyd/{NZMT=#m@qiO`p"><field name="VAR">x</field></shadow><block type="sensor_aht11" id="]CAF[ITixnR]Ep38.V-{"><field name="key">humidity</field></block></value></block></value></block></value></block></value><value name="space"><shadow type="math_number" id="oAGef5DTi8Mvp4oK25Z;"><field name="NUM">0</field></shadow></value><next><block type="controls_delay_new" id="!fDl8XJYC+u*og+.$_:("><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id="bY`1+7_$)4PfHdq#mH^{"><field name="NUM">1</field></shadow></value></block></next></block></next></block></next></block></statement></block></xml><config>{}</config><code>ZnJvbSBtaXhnb19ub3ZhIGltcG9ydCBvbmJvYXJkX3Rocwpmcm9tIG1peGdvX25vdmEgaW1wb3J0IG9uYm9hcmRfdGZ0CmltcG9ydCB0aW1lCgoKd2hpbGUgVHJ1ZToKICAgIG9uYm9hcmRfdGZ0LnNob3dzKCdUOicgKyBzdHIoaW50KG9uYm9hcmRfdGhzLnRlbXBlcmF0dXJlKCkpKSxzcGFjZSA9IDAsY2VudGVyID0gVHJ1ZSkKICAgIHRpbWUuc2xlZXAoMSkKICAgIG9uYm9hcmRfdGZ0LnNob3dzKCdIOicgKyBzdHIoaW50KG9uYm9hcmRfdGhzLmh1bWlkaXR5KCkpKSxzcGFjZSA9IDAsY2VudGVyID0gVHJ1ZSkKICAgIHRpbWUuc2xlZXAoMSkK</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-S3@元控青春"><block type="controls_whileUntil" id="x:N!6yF)Eu*9=7GJ01ZG" x="-1833" y="-789"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="G:Je8m|ld$v.4Q9D(bo["><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="display_show_image_or_string_delay" id="Y;=9W/#D7,]YSicuu}~{"><field name="center">True</field><value name="data"><shadow type="text" id="3b#!MCu2F]ebr`K|`fff"><field name="TEXT">Mixly</field></shadow><block type="number_to_text" id=":;hVu;Y2k[:~Bdz9`7`["><value name="VAR"><shadow type="variables_get" id="CtOT~{aIrK1Bp_u`MM_p"><field name="VAR">x</field></shadow><block type="sensor_mixgo_cc_mmc5603_get_magnetic" id="UI]ana[zEkRF`yp6Bc0r"><field name="key">all</field></block></value></block></value><value name="space"><shadow type="math_number" id="j3p9Y6G$KhUOw;~+KFp|"><field name="NUM">0</field></shadow></value><next><block type="controls_if" id="T_pJ$,!2hJE-r`@Ohl{B"><value name="IF0"><block type="logic_compare" id="5RwC3r^@:.=QYSBa,5$P"><field name="OP">GT</field><value name="A"><block type="sensor_mixgo_cc_mmc5603_get_magnetic" id="nN$+h70;Q9[t4-9N~xP6"><field name="key">all</field></block></value><value name="B"><block type="math_number" id="W?`kLW|GSZ.KSBvTH1bY"><field name="NUM">2000</field></block></value></block></value><statement name="DO0"><block type="esp32_onboard_music_pitch_with_time" id="3be.:WtV9_J06EE$a,jE"><value name="pitch"><shadow type="pins_tone_notes" id="^mhQLCd8-kJY;+S9X-TF"><field name="PIN">659</field></shadow></value><value name="time"><shadow type="math_number" id="k=]_8sPzN#w9Dj7VJ#EI"><field name="NUM">100</field></shadow></value></block></statement></block></next></block></statement></block></xml><config>{}</config><code>ZnJvbSBtaXhnb19ub3ZhIGltcG9ydCBvbmJvYXJkX21ncwpmcm9tIG1peGdvX25vdmEgaW1wb3J0IG9uYm9hcmRfdGZ0CmZyb20gbWl4Z29fbm92YV92b2ljZSBpbXBvcnQgc3BrX21pZGkKCgp3aGlsZSBUcnVlOgogICAgb25ib2FyZF90ZnQuc2hvd3Moc3RyKG9uYm9hcmRfbWdzLmdldHN0cmVuZ3RoKCkpLHNwYWNlID0gMCxjZW50ZXIgPSBUcnVlKQogICAgaWYgb25ib2FyZF9tZ3MuZ2V0c3RyZW5ndGgoKSA+IDIwMDA6CiAgICAgICAgc3BrX21pZGkucGl0Y2hfdGltZSg2NTksIDEwMCkK</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-S3@元控青春"><block type="controls_whileUntil" id="*}+VX1!TBVLC9rX8c|w8" x="-1881" y="-819"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id=".NwNQdoUQ|j=.]9f+HB`"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="actuator_onboard_neopixel_rgb" id="#6(dEwdPDW*d9q9)m0H!"><value name="_LED_"><shadow type="math_number" id="R-=rS*e^x/8pveTjlRii"><field name="NUM">0</field></shadow></value><value name="RVALUE"><shadow type="math_number" id="~?|I,Kl.7m9-E]12zAIY"><field name="NUM">0</field></shadow></value><value name="GVALUE"><shadow type="math_number" id="#ArPj--1z$*FHk/^esDo"><field name="NUM">0</field></shadow></value><value name="BVALUE"><shadow type="math_number" id="1~V_lye)Cm7hDB8w8vU1"><field name="NUM">0</field></shadow><block type="math_arithmetic" id="1Jk-UXg9WDX{@A$cO0eR"><field name="OP">MULTIPLY</field><value name="A"><shadow type="math_number" id="J7y1|6g6u;QJ4-Tk/LcS"><field name="NUM">20</field></shadow></value><value name="B"><shadow type="math_number" id="8]_t~iVL~tnBoSL[`,Z~"><field name="NUM">1</field></shadow><block type="sensor_mixgoce_pin_pressed" id="ss7zA~bq6E5f,0ZB}ngD"><value name="button"><shadow type="number6" id="2V2rPE?n=v4PC@rvvd9I"><field name="op">3</field></shadow></value></block></value></block></value><next><block type="actuator_onboard_neopixel_rgb" id="9,,PnM/,U9Rs;uzFSxu$"><value name="_LED_"><shadow type="math_number" id="CURXx42pF1c8.^CGKye`"><field name="NUM">1</field></shadow></value><value name="RVALUE"><shadow type="math_number" id="2/gI|v*$bo:30@YGNqth"><field name="NUM">0</field></shadow></value><value name="GVALUE"><shadow type="math_number" id="|QCQH[Oxyhu,1zMz0*XT"><field name="NUM">0</field></shadow></value><value name="BVALUE"><shadow type="math_number" id="1~V_lye)Cm7hDB8w8vU1"><field name="NUM">0</field></shadow><block type="math_arithmetic" id="LEO8A)E-`E)j@P{sg1cC"><field name="OP">MULTIPLY</field><value name="A"><shadow type="math_number" id="Q7TY[UhfQCr}O/RHU*mD"><field name="NUM">20</field></shadow></value><value name="B"><shadow type="math_number" id="8]_t~iVL~tnBoSL[`,Z~"><field name="NUM">1</field></shadow><block type="sensor_mixgoce_pin_pressed" id="LPka^0toobcn[AAk:*f)"><value name="button"><shadow type="number6" id="hPmJplB#|]ELTkhmb?!b"><field name="op">4</field></shadow></value></block></value></block></value><next><block type="actuator_onboard_neopixel_write" id="gMo#o~NK}B7=`kuL{L7W"></block></next></block></next></block></statement></block></xml><config>{}</config><code>ZnJvbSBtaXhnb19ub3ZhIGltcG9ydCBvbmJvYXJkX3JnYgppbXBvcnQgbWl4Z29fbm92YQoKCndoaWxlIFRydWU6CiAgICBvbmJvYXJkX3JnYlswXSA9ICgwLCAwLCAoMjAgKiBtaXhnb19ub3ZhLnRvdWNoZWQoMykpKQogICAgb25ib2FyZF9yZ2JbMV0gPSAoMCwgMCwgKDIwICogbWl4Z29fbm92YS50b3VjaGVkKDQpKSkKICAgIG9uYm9hcmRfcmdiLndyaXRlKCkK</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-S3@元控青春"><block type="controls_whileUntil" id="*}+VX1!TBVLC9rX8c|w8" x="-1881" y="-819"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id=".NwNQdoUQ|j=.]9f+HB`"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="system_print" id="2UvDM_)k@yB(!ZHW8ec+"><value name="VAR"><shadow type="text" id="9DpPwc,(P?qeBdK3KoX/"><field name="TEXT">Mixly</field></shadow><block type="sensor_mixgo_touch_slide" id="7nL-kELsFm;:wmB]_ovu"></block></value><next><block type="actuator_onboard_neopixel_rgb" id="#6(dEwdPDW*d9q9)m0H!"><value name="_LED_"><shadow type="math_number" id="R-=rS*e^x/8pveTjlRii"><field name="NUM">0</field></shadow></value><value name="RVALUE"><shadow type="math_number" id="~?|I,Kl.7m9-E]12zAIY"><field name="NUM">0</field></shadow></value><value name="GVALUE"><shadow type="math_number" id="#ArPj--1z$*FHk/^esDo"><field name="NUM">0</field></shadow></value><value name="BVALUE"><shadow type="math_number" id="1~V_lye)Cm7hDB8w8vU1"><field name="NUM">0</field></shadow><block type="math_to_int" id="jObJv(o0?iLz;D-0pYw+"><field name="OP">round</field><value name="A"><shadow type="math_number" id="e;O#GYr(+`Z*5RaNEwS*"><field name="NUM">0.998</field></shadow><block type="math_map" id="!-5S$=}pKC$MHIhjJ.qg"><value name="NUM"><shadow type="math_number" id="p#D.Md8V7w1b@1u`9SBr"><field name="NUM">50</field></shadow><block type="sensor_mixgo_touch_slide" id="7VJ]lWTv/o3G9BD;~NM7"></block></value><value name="fromLow"><shadow type="math_number" id="$^#}QkI=6tk$kNiFGJD*"><field name="NUM">-15000</field></shadow></value><value name="fromHigh"><shadow type="math_number" id="K,Y^hdKq)4PVQ-VgUp2|"><field name="NUM">0</field></shadow></value><value name="toLow"><shadow type="math_number" id=",$0cOGZ=8I,abTJ[B{Et"><field name="NUM">255</field></shadow></value><value name="toHigh"><shadow type="math_number" id="`=}{LEy6/i-p$K~cy*Mf"><field name="NUM">0</field></shadow></value></block></value></block></value><next><block type="actuator_onboard_neopixel_rgb" id="9,,PnM/,U9Rs;uzFSxu$"><value name="_LED_"><shadow type="math_number" id="CURXx42pF1c8.^CGKye`"><field name="NUM">1</field></shadow></value><value name="RVALUE"><shadow type="math_number" id="2/gI|v*$bo:30@YGNqth"><field name="NUM">0</field></shadow></value><value name="GVALUE"><shadow type="math_number" id="|QCQH[Oxyhu,1zMz0*XT"><field name="NUM">0</field></shadow></value><value name="BVALUE"><shadow type="math_number" id="=x]-[s1m$`pPhLTH0qDd"><field name="NUM">0</field></shadow><block type="math_to_int" id="!Tqct)}ex]L9)^Mg7IXm"><field name="OP">round</field><value name="A"><shadow type="math_number" id="e;O#GYr(+`Z*5RaNEwS*"><field name="NUM">0.998</field></shadow><block type="math_map" id="oC2I2VP(Aphai8osqVD`"><value name="NUM"><shadow type="math_number" id="p#D.Md8V7w1b@1u`9SBr"><field name="NUM">50</field></shadow><block type="sensor_mixgo_touch_slide" id="o,;gJ,_-t[PqM*oBCo`R"></block></value><value name="fromLow"><shadow type="math_number" id="6+PDTedef88GXind[+d/"><field name="NUM">0</field></shadow></value><value name="fromHigh"><shadow type="math_number" id="sUMD}1BH8UQ7bM_uJ7y{"><field name="NUM">15000</field></shadow></value><value name="toLow"><shadow type="math_number" id="S.-y,PF:XCE;2G56=i.p"><field name="NUM">0</field></shadow></value><value name="toHigh"><shadow type="math_number" id="2~sRULKL1UtN{fW@+HOD"><field name="NUM">255</field></shadow></value></block></value></block></value><next><block type="actuator_onboard_neopixel_write" id="gMo#o~NK}B7=`kuL{L7W"></block></next></block></next></block></next></block></statement></block></xml><config>{}</config><code>aW1wb3J0IG1hY2hpbmUKaW1wb3J0IG1peGdvX25vdmEKZnJvbSBtaXhnb19ub3ZhIGltcG9ydCBvbmJvYXJkX3JnYgpmcm9tIG1peHB5IGltcG9ydCBtYXRoX21hcAoKCndoaWxlIFRydWU6CiAgICBwcmludChtaXhnb19ub3ZhLnRvdWNoX3NsaWRlKDMsNCkpCiAgICBvbmJvYXJkX3JnYlswXSA9ICgwLCAwLCByb3VuZChtYXRoX21hcChtaXhnb19ub3ZhLnRvdWNoX3NsaWRlKDMsNCksICgtMTUwMDApLCAwLCAyNTUsIDApKSkKICAgIG9uYm9hcmRfcmdiWzFdID0gKDAsIDAsIHJvdW5kKG1hdGhfbWFwKG1peGdvX25vdmEudG91Y2hfc2xpZGUoMyw0KSwgMCwgMTUwMDAsIDAsIDI1NSkpKQogICAgb25ib2FyZF9yZ2Iud3JpdGUoKQo=</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-S3@元控青春"><block type="onboard_RTC_set_datetime" id=",-m!z-D#[EEoO`|1$mjo" inline="true" x="-2075" y="-934"><value name="year"><shadow type="math_number" id="ZqF5_iWSy.bC-`V]2XJ7"><field name="NUM">2024</field></shadow></value><value name="month"><shadow type="math_number" id="fyob_g)SdIAG@OK,bFKZ"><field name="NUM">4</field></shadow></value><value name="day"><shadow type="math_number" id="qO0c`I]yI4n~B3puO0KY"><field name="NUM">2</field></shadow></value><value name="hour"><shadow type="math_number" id="Z7[Nq.VeWL~vsj-CJ_Qy"><field name="NUM">21</field></shadow></value><value name="minute"><shadow type="math_number" id="F:Gx473P8!A5V[k#hxRt"><field name="NUM">04</field></shadow></value><value name="second"><shadow type="math_number" id="t[-k?o43#K(F,053bj1P"><field name="NUM">45</field></shadow></value><next><block type="controls_whileUntil" id="ffJ=|wf!lbRmd$V8_4JM"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="FLc8Yz|ob$2/xHZbp(l?"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="system_print" id="`;F.#xg}tSD$6N`LP`wG"><value name="VAR"><shadow type="text" id="cb5?0HpdmQ(4_L0!sNs0"><field name="TEXT">Mixly</field></shadow><block type="onboard_RTC_get_time" id="iG[/TfXN6kS19]Xa+=$}"></block></value><next><block type="controls_delay_new" id="@3m7M`-rh`Y+h;JdXCxm"><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id="t+cgSzT6NFE*v$M!H.x2"><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-S3@元控青春"><block type="onboard_tft_clock_init" id="z}Mq.LddZX*#~E}xXnt[" x="-2454" y="-855"><value name="SUB"><shadow type="variables_get" id="C4;.!0@|ltQhNSGJ,a~j"><field name="VAR">new_clock</field></shadow></value><value name="x"><shadow type="math_number" id="M+k+Xur=:Fq]HD.z^F5e"><field name="NUM">80</field></shadow></value><value name="y"><shadow type="math_number" id="pC|T_|(AL[M2-I=n?Lxb"><field name="NUM">64</field></shadow></value><value name="size"><shadow type="math_number" id=";kfByBA3)zRvx)]uu1fB"><field name="NUM">40</field></shadow></value><value name="VAR"><shadow type="tuple_create_with_text_return" id="x=.km0h|/k3Hf`u{(oQg"><field name="TEXT">255,255,0</field></shadow><block type="display_color_seclet" id="cgEkqzYTotPP.9-_a`_1"><field name="COLOR">#ffffff</field></block></value><next><block type="onboard_RTC_set_datetime" id="o$=m@Gu/#=PN9,GqkqeE" inline="true"><value name="year"><shadow type="math_number" id="Z`U#_]ho`EkdY*/WR?+?"><field name="NUM">2024</field></shadow></value><value name="month"><shadow type="math_number" id="^`~xeX,L}V`gnS|@dnSs"><field name="NUM">4</field></shadow></value><value name="day"><shadow type="math_number" id=":HolxX~EnNV9WRb|z9Y."><field name="NUM">2</field></shadow></value><value name="hour"><shadow type="math_number" id="#WtF#xZxD;-|M:D1?2)w"><field name="NUM">21</field></shadow></value><value name="minute"><shadow type="math_number" id="`TVMXCD24yT3E|_5q0[`"><field name="NUM">04</field></shadow></value><value name="second"><shadow type="math_number" id="3^nwob!9v(t/`.a|(!L."><field name="NUM">45</field></shadow></value><next><block type="controls_whileUntil" id="xf.D,D|XKxYHp/i^Lt-C"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="EqNKm*p8J=H1#zWsLDdF"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="onboard_tft_clock_get_rtctime" id="^e897Fw!vRgW0y`^4NUE"><value name="SUB"><shadow type="variables_get" id="q|O[0Q$$xFsIYhlY(zxi"><field name="VAR">new_clock</field></shadow></value><next><block type="onboard_tft_clock_clear" id="EvdlA0+ULB0*+n:j9RL+"><value name="SUB"><shadow type="variables_get" id="g^q6ivTJY.qP-M^TAKvF"><field name="VAR">new_clock</field></shadow></value><value name="VAR"><shadow type="tuple_create_with_text_return" id="n:qcGx_SGKO!:r*.f2u!"><field name="TEXT">0,0,0</field></shadow><block type="display_color_seclet" id="@yXNyBk2g))k`h/BDon~"><field name="COLOR">#000000</field></block></value><next><block type="onboard_tft_clock_draw" id="[(-PfUsf$qf(L7;19KNu"><value name="SUB"><shadow type="variables_get" id="2JV!0-?d(ala:q!i(:+7"><field name="VAR">new_clock</field></shadow></value><next><block type="controls_delay_new" id="Ljv1$LOIg!hIGm!zZ;C7"><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id=")0)fL:R3Ydz)y}SH|mtu"><field name="NUM">1</field></shadow></value></block></next></block></next></block></next></block></statement></block></next></block></next></block></xml><config>{}</config><code>ZnJvbSBtaXhnb19ub3ZhIGltcG9ydCBDbG9jawppbXBvcnQgbnRwdGltZQppbXBvcnQgdGltZQoKCm5ld19jbG9jaz1DbG9jayg4MCw2NCw0MCwweGZmZmYpCm50cHRpbWUuc2V0dGltZSgoMjAyNCw0LDIsMjEsMDQsNDUsMCwwKSkKd2hpbGUgVHJ1ZToKICAgIG5ld19jbG9jay5zZXRfcnRjdGltZSgpCiAgICBuZXdfY2xvY2suY2xlYXIoMHgwKQogICAgbmV3X2Nsb2NrLmRyYXdfY2xvY2soKQogICAgdGltZS5zbGVlcCgxKQo=</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-S3@元控青春"><block type="variables_set" id="|?@0+H#0;*T87aeJDxA_" x="-2314" y="-914"><field name="VAR">按下时刻</field><value name="VALUE"><block type="math_number" id="n`Mqz5Td,?8m2W|eY0:k"><field name="NUM">0</field></block></value><next><block type="variables_set" id="Wyn}enrWdwWYu[BJOtTb"><field name="VAR">抬起时刻</field><value name="VALUE"><block type="math_number" id="7~aQhb.ZUK9C2QxAuc|S"><field name="NUM">0</field></block></value><next><block type="controls_whileUntil" id="n(E+3OP1pI7|{CbrGISM"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="s.pcKl{EJ#!0],v5q@Xr"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="controls_if" id="##~9.C==1(k_=UO?wvKZ"><value name="IF0"><block type="sensor_mixgo_button_is_pressed" id="xk`Fa|if?JFT6uIRf0{M"><value name="btn"><shadow type="pins_button" id="(6b-a[.p+|]a0:8~b$5S"><field name="PIN">B1key</field></shadow></value></block></value><statement name="DO0"><block type="variables_set" id="I50=t[SQwd65UbV,r0~+"><field name="VAR">按下时刻</field><value name="VALUE"><block type="controls_millis" id="[D0s~$Ih{ChUgS]yu5vS"><field name="Time">ms</field></block></value><next><block type="do_while" id=")n)i6ua!Tc;g9uGsr|Yu"><field name="type">true</field><value name="select_data"><block type="logic_negate" id="ocg]LmVIhs5HQtX1t`fr"><value name="BOOL"><block type="sensor_mixgo_button_is_pressed" id="pkdUti}EN0m?yu:IkTj8"><value name="btn"><shadow type="pins_button" id="e}x+ffq(/3Y^+.Z+vNm^"><field name="PIN">B1key</field></shadow></value></block></value></block></value><next><block type="variables_set" id="([=gs9T:R3,Uxmoh,;:-"><field name="VAR">抬起时刻</field><value name="VALUE"><block type="controls_millis" id="bUybqgoveF,qR~*~dlYa"><field name="Time">ms</field></block></value><next><block type="system_print" id="G1:d,wz./915Bp9Z.E;h"><value name="VAR"><shadow type="text" id="tp|$NKg_j=ABM*kaXivZ"><field name="TEXT">Mixly</field></shadow><block type="math_arithmetic" id="Ly{2b0lFdY/AKwc=EHgX"><field name="OP">MINUS</field><value name="A"><shadow type="math_number" id="A}0YSKn+u+GYTdY^,VH2"><field name="NUM">1</field></shadow><block type="variables_get" id="QJgxlC^|T2yBruW~}-;("><field name="VAR">抬起时刻</field></block></value><value name="B"><shadow type="math_number" id="E5i29:?!AzbRS80;V+7c"><field name="NUM">1</field></shadow><block type="variables_get" id="W2b0A(3X27ZV,45],#J|"><field name="VAR">按下时刻</field></block></value></block></value><next><block type="display_show_image_or_string_delay" id="GM$ay3He[8tnU`$0d/rl"><field name="center">True</field><value name="data"><shadow type="text" id="3005K6lW2#N8thttcLb8"><field name="TEXT">Mixly</field></shadow><block type="number_to_text" id="u^w)Fmpw+*RyS:TW.tn{"><value name="VAR"><shadow type="variables_get" id="7/{Mdoyf}+6)OtNMm:{3"><field name="VAR">x</field></shadow><block type="math_arithmetic" id="|:aX5q7XYMfJ1FL2*f;`"><field name="OP">MINUS</field><value name="A"><shadow type="math_number" id="fdu{.$(@@Rq0#Up4}u9?"><field name="NUM">1</field></shadow><block type="variables_get" id="YsCw`xp(?pddY-b8lC10"><field name="VAR">抬起时刻</field></block></value><value name="B"><shadow type="math_number" id="##NnlO6YI.neJ]N$Gz`g"><field name="NUM">1</field></shadow><block type="variables_get" id="[!])wI8Dgpe~7{=Wl+i+"><field name="VAR">按下时刻</field></block></value></block></value></block></value><value name="space"><shadow type="math_number" id="j|3M(ZHyK]LG5_,T)nN="><field name="NUM">0</field></shadow></value></block></next></block></next></block></next></block></next></block></statement></block></statement></block></next></block></next></block></xml><config>{}</config><code>aW1wb3J0IG1peGdvX25vdmEKaW1wb3J0IHRpbWUKaW1wb3J0IG1hY2hpbmUKZnJvbSBtaXhnb19ub3ZhIGltcG9ydCBvbmJvYXJkX3RmdAoKCl9FNl84Q184OV9FNF9COF84Ql9FNl85N19CNl9FNV84OF9CQiA9IDAKX0U2XzhBX0FDX0U4X0I1X0I3X0U2Xzk3X0I2X0U1Xzg4X0JCID0gMAp3aGlsZSBUcnVlOgogICAgaWYgbWl4Z29fbm92YS5CMWtleS5pc19wcmVzc2VkKCk6CiAgICAgICAgX0U2XzhDXzg5X0U0X0I4XzhCX0U2Xzk3X0I2X0U1Xzg4X0JCID0gdGltZS50aWNrc19tcygpCiAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgaWYgKG5vdCBtaXhnb19ub3ZhLkIxa2V5LmlzX3ByZXNzZWQoKSk6CiAgICAgICAgICAgICAgICBicmVhawogICAgICAgIF9FNl84QV9BQ19FOF9CNV9CN19FNl85N19CNl9FNV84OF9CQiA9IHRpbWUudGlja3NfbXMoKQogICAgICAgIHByaW50KChfRTZfOEFfQUNfRThfQjVfQjdfRTZfOTdfQjZfRTVfODhfQkIgLSBfRTZfOENfODlfRTRfQjhfOEJfRTZfOTdfQjZfRTVfODhfQkIpKQogICAgICAgIG9uYm9hcmRfdGZ0LnNob3dzKHN0cigoX0U2XzhBX0FDX0U4X0I1X0I3X0U2Xzk3X0I2X0U1Xzg4X0JCIC0gX0U2XzhDXzg5X0U0X0I4XzhCX0U2Xzk3X0I2X0U1Xzg4X0JCKSksc3BhY2UgPSAwLGNlbnRlciA9IFRydWUpCg==</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-S3@元控青春"><block type="controls_whileUntil" id="V/~@l1Ew/q4EI{uQ)2Lz" x="-3056" y="-956"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="}^qv*!=4+]Xd7o54rZOW"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="actuator_led_bright" id=";ualVbJ!B^SKa!HK1*?K"><value name="led"><shadow type="number" id="HV]l8`p}cO^~wo$uFVy#"><field name="op">2</field></shadow></value><value name="bright"><shadow type="ledswitch" id="cc$VZweTHf:H54R=c7#$"><field name="flag">1</field></shadow></value><next><block type="controls_delay_new" id="25`~fU+lsNBH`xJ:+sX;"><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id="Eha+|LmdcW_LwvTmxgg5"><field name="NUM">0.5</field></shadow></value><next><block type="actuator_led_bright" id="w/P_@~]bFqaLJA?#8=)h"><value name="led"><shadow type="number" id="*T3fOe^b9aj9B`oiK|gc"><field name="op">2</field></shadow></value><value name="bright"><shadow type="ledswitch" id="IV(YWV_y=RTeNiimTx8G"><field name="flag">0</field></shadow></value><next><block type="controls_delay_new" id="PkP6PuyF{a=$kShbv6$D"><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id="J?Cfj54?]ZyL4;VX(RLD"><field name="NUM">0.5</field></shadow></value><next><block type="controls_if" id="a/P(/7(Ut4)Nt#LP*DkX"><value name="IF0"><block type="sensor_mixgo_button_was_pressed" id="!qJ}qR|jW-qE=g?BoF9U"><value name="btn"><shadow type="pins_button" id="tt#=zG][9d3(B@dIfV;U"><field name="PIN">B1key</field></shadow></value></block></value><statement name="DO0"><block type="actuator_onboard_neopixel_rgb_all" id="j,h0:A9+};S/F|]g@S@Z"><value name="RVALUE"><shadow type="math_number" id="v;-^?n1L$[5pp9=c,ibs"><field name="NUM">10</field></shadow></value><value name="GVALUE"><shadow type="math_number" id="kHP#rI2_.mE}e=_f|/Of"><field name="NUM">10</field></shadow></value><value name="BVALUE"><shadow type="math_number" id="8s`u)g-*sW(gRxx(VR$5"><field name="NUM">10</field></shadow></value><next><block type="actuator_onboard_neopixel_write" id="+ex`6{y4MQyCt`-U2q`x"></block></next></block></statement><next><block type="controls_if" id="3e[l3!oQwA{SCFW`?o75"><value name="IF0"><block type="sensor_mixgo_button_was_pressed" id="NH@S+k+X;O6^Tvw-l.}+"><value name="btn"><shadow type="pins_button" id="pW_N/Yt{FFARrXjS3I?s"><field name="PIN">B2key</field></shadow></value></block></value><statement name="DO0"><block type="actuator_onboard_neopixel_rgb_all" id="d}:J}/7=x#MvW{OK2[$Z"><value name="RVALUE"><shadow type="math_number" id="G=.-uRf.P$,}{NG[qRz7"><field name="NUM">0</field></shadow></value><value name="GVALUE"><shadow type="math_number" id="kazdY:@{L)e)K[5A;p.X"><field name="NUM">0</field></shadow></value><value name="BVALUE"><shadow type="math_number" id="4y40sA_#g~^XAJB$GPCL"><field name="NUM">0</field></shadow></value><next><block type="actuator_onboard_neopixel_write" id=",H@(J8],1vh|oo])bslg"></block></next></block></statement></block></next></block></next></block></next></block></next></block></next></block></statement></block></xml><config>{}</config><code>ZnJvbSBtaXhnb19ub3ZhIGltcG9ydCBvbmJvYXJkX2xlZAppbXBvcnQgdGltZQppbXBvcnQgbWl4Z29fbm92YQpmcm9tIG1peGdvX25vdmEgaW1wb3J0IG9uYm9hcmRfcmdiCgoKd2hpbGUgVHJ1ZToKICAgIG9uYm9hcmRfbGVkLnNldG9ub2ZmKDIsMSkKICAgIHRpbWUuc2xlZXAoMC41KQogICAgb25ib2FyZF9sZWQuc2V0b25vZmYoMiwwKQogICAgdGltZS5zbGVlcCgwLjUpCiAgICBpZiBtaXhnb19ub3ZhLkIxa2V5Lndhc19wcmVzc2VkKCk6CiAgICAgICAgb25ib2FyZF9yZ2IuZmlsbCgoMTAsIDEwLCAxMCkpCiAgICAgICAgb25ib2FyZF9yZ2Iud3JpdGUoKQogICAgaWYgbWl4Z29fbm92YS5CMmtleS53YXNfcHJlc3NlZCgpOgogICAgICAgIG9uYm9hcmRfcmdiLmZpbGwoKDAsIDAsIDApKQogICAgICAgIG9uYm9hcmRfcmdiLndyaXRlKCkK</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-S3@元控青春"><variables><variable id="kujED6C|3`}2*o!`dvF;">x</variable></variables><block type="sensor_mixgo_button_attachInterrupt" id="==NDWRFQ#?8Zal38f(r}" x="-2776" y="-1011"><field name="mode">machine.Pin.IRQ_RISING</field><value name="btn"><shadow type="pins_button" id="$?J3f4kB}bv=U!X2V2CT"><field name="PIN">B1key</field></shadow></value><value name="DO"><shadow type="factory_block_return" id="$N8L!.qw|]4cUQk+K+I2"><field name="VALUE">attachInterrupt_func</field></shadow></value><next><block type="sensor_mixgo_button_attachInterrupt" id="-do*@bIKGDr(*CU(Nf1E"><field name="mode">machine.Pin.IRQ_RISING</field><value name="btn"><shadow type="pins_button" id="v=uR81j}aH4^rl5iJkiX"><field name="PIN">B2key</field></shadow></value><value name="DO"><shadow type="factory_block_return" id="arf~@a4Jjr?0C`2V1/Xu"><field name="VALUE">attachInterrupt_func2</field></shadow></value><next><block type="controls_whileUntil" id="O7/1Nd@3Hbi9,sKQb~i:"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="AK=MjK22p7vcyp7vX2Yz"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="actuator_led_bright" id=";JYhM6i:,{LHy_o?dlZF"><value name="led"><shadow type="number" id="9W/,sj}LkEcXe$JLXNG5"><field name="op">2</field></shadow></value><value name="bright"><shadow type="ledswitch" id="9ZIX7z04v+xM9[5k$PKZ"><field name="flag">1</field></shadow></value><next><block type="controls_delay_new" id="amVU)_-A{Ba`Bsd6-$)v"><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id="+GsUe:@_)pn#0+Zv,lRG"><field name="NUM">0.5</field></shadow></value><next><block type="actuator_led_bright" id="+;hW[ed}/UO4zf)YT5:q"><value name="led"><shadow type="number" id="R/2bSvAwDcpIQiNAPFKC"><field name="op">2</field></shadow></value><value name="bright"><shadow type="ledswitch" id="eW7J$@jY2dNFTvV]vFzd"><field name="flag">0</field></shadow></value><next><block type="controls_delay_new" id="Z[$}on|lL2Z#?;-ylIT4"><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id="X)ss/K_K-~6JyS_KoU_I"><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="`pVyaq!H^yAY|3)-@_m0" x="-2951" y="-653"><mutation><arg name="x" varid="kujED6C|3`}2*o!`dvF;"></arg></mutation><field name="NAME">attachInterrupt_func</field><statement name="STACK"><block type="actuator_onboard_neopixel_rgb_all" id="4+SPyOo7os4co{Ixkuc["><value name="RVALUE"><shadow type="math_number" id="D*SYbH__BFO!.mH)s;.o"><field name="NUM">10</field></shadow></value><value name="GVALUE"><shadow type="math_number" id="xW],hF0wn_?_yrsZFeQ~"><field name="NUM">10</field></shadow></value><value name="BVALUE"><shadow type="math_number" id="6;9+d@IH`Rw|of:e9]s#"><field name="NUM">10</field></shadow></value><next><block type="actuator_onboard_neopixel_write" id="_x7a;?^rMoTQ~JJ(]XLf"></block></next></block></statement></block><block type="procedures_defnoreturn" id="~hC1K;MTw!.ZGJ5b~nl)" x="-2523" y="-626"><mutation><arg name="x" varid="kujED6C|3`}2*o!`dvF;"></arg></mutation><field name="NAME">attachInterrupt_func2</field><statement name="STACK"><block type="actuator_onboard_neopixel_rgb_all" id="@2:]~qZ~7(vEg3@G2!.]"><value name="RVALUE"><shadow type="math_number" id=",kre|rxEy]e{,H7KUx)x"><field name="NUM">0</field></shadow></value><value name="GVALUE"><shadow type="math_number" id="Ci8l#Wb;ul4p.HVRxjPo"><field name="NUM">0</field></shadow></value><value name="BVALUE"><shadow type="math_number" id="O.9N$x9H/:;XVI|4(BM)"><field name="NUM">0</field></shadow></value><next><block type="actuator_onboard_neopixel_write" id="DFo7IaJ+B/fU*B:=3Nq:"></block></next></block></statement></block></xml><config>{}</config><code>aW1wb3J0IG1hY2hpbmUKaW1wb3J0IG1peGdvX25vdmEKZnJvbSBtaXhnb19ub3ZhIGltcG9ydCBvbmJvYXJkX2xlZAppbXBvcnQgdGltZQpmcm9tIG1peGdvX25vdmEgaW1wb3J0IG9uYm9hcmRfcmdiCgpkZWYgYXR0YWNoSW50ZXJydXB0X2Z1bmMoeCk6CiAgICBvbmJvYXJkX3JnYi5maWxsKCgxMCwgMTAsIDEwKSkKICAgIG9uYm9hcmRfcmdiLndyaXRlKCkKCmRlZiBhdHRhY2hJbnRlcnJ1cHRfZnVuYzIoeCk6CiAgICBvbmJvYXJkX3JnYi5maWxsKCgwLCAwLCAwKSkKICAgIG9uYm9hcmRfcmdiLndyaXRlKCkKCgoKbWl4Z29fbm92YS5CMWtleS5pcnEoaGFuZGxlciA9IGF0dGFjaEludGVycnVwdF9mdW5jLCB0cmlnZ2VyID0gbWFjaGluZS5QaW4uSVJRX1JJU0lORykKbWl4Z29fbm92YS5CMmtleS5pcnEoaGFuZGxlciA9IGF0dGFjaEludGVycnVwdF9mdW5jMiwgdHJpZ2dlciA9IG1hY2hpbmUuUGluLklSUV9SSVNJTkcpCndoaWxlIFRydWU6CiAgICBvbmJvYXJkX2xlZC5zZXRvbm9mZigyLDEpCiAgICB0aW1lLnNsZWVwKDAuNSkKICAgIG9uYm9hcmRfbGVkLnNldG9ub2ZmKDIsMCkKICAgIHRpbWUuc2xlZXAoMC41KQo=</code>
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-S3@元控青春"><variables><variable id="ok:ro0iEW(eJAtg/iAsj">tim</variable></variables><block type="variables_set" id="$Dr7Y9;pUIW8itBsgv-G" x="-2908" y="-1031"><field name="VAR">开始</field><value name="VALUE"><block type="logic_boolean" id="_fi?dZ7NH/uYzJ|x_Cz!"><field name="BOOL">FALSE</field></block></value><next><block type="variables_set" id="3OvprsQJ6l=5Ybl{L5Hn"><field name="VAR">计时</field><value name="VALUE"><block type="math_number" id="@}*:w7V-c@tr2_H?|0LK"><field name="NUM">0</field></block></value><next><block type="system_timer_init" id="4_ITMs{@rHw5GVTg78*a"><value name="SUB"><shadow type="variables_get" id="=ka7CBSF$CV~,BaLLX=o"><field name="VAR">tim</field></shadow></value><next><block type="system_timer" id="**gm5Uw#^A}0^BS0(.8@"><field name="mode">PERIODIC</field><value name="VAR"><shadow type="variables_get" id=".hz]U@BC#[Je8_5}R@.T"><field name="VAR">tim</field></shadow></value><value name="period"><shadow type="math_number" id="jo^oTq{6XwcBC:x^(}W-"><field name="NUM">100</field></shadow></value><value name="callback"><shadow type="factory_block_return" id="b4)eenxQFk_eZrhc27G$"><field name="VALUE">tim_callback</field></shadow></value><next><block type="controls_whileUntil" id="pa+5wq[[}$f$z-fOYsI."><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id=";1f`yP{?N^eF^R=6:;kD"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="controls_if" id="r43Boa*7afZp|CSQ#o)V"><value name="IF0"><block type="sensor_mixgo_button_was_pressed" id="T}voj{o=z5~6akBcT3_:"><value name="btn"><shadow type="pins_button" id="^y^x~aoLxc|q_6BsY+l."><field name="PIN">B1key</field></shadow></value></block></value><statement name="DO0"><block type="variables_set" id="W5PdlsJnq!J4$B.vgY#8"><field name="VAR">开始</field><value name="VALUE"><block type="logic_negate" id="6T0a~BqWwkq+512gOn]W"><value name="BOOL"><block type="variables_get" id="(HSU7(wxwIR_=alymkAj"><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="3z8ONJ1pg|`*VJ3`m(5." x="-2911" y="-737"><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="fIU`*qIj*eJ(U}j*iHmn"><value name="VAR"><block type="variables_get" id="D^/JD@?f9?:IgKs=LT;c"><field name="VAR">计时</field></block></value><next><block type="variables_global" id="bpe4v|_D-U64@;v8N31O"><value name="VAR"><block type="variables_get" id=",)*Wy0F(V=q#-a,@~4Ws"><field name="VAR">开始</field></block></value><next><block type="controls_if" id="Rb[V{V`lJA:V*DA)azJE"><value name="IF0"><block type="variables_get" id="60s.W4s9.Fpy?u~3JIsZ"><field name="VAR">开始</field></block></value><statement name="DO0"><block type="math_selfcalcu" id="]5pQQN?Prsw9uz.$w8Q("><field name="OP">ADD</field><value name="A"><shadow type="variables_get" id="B6^Gm$UB(N}~T$?UJsni"><field name="VAR">a</field></shadow><block type="variables_get" id="IjSj*fNLxI$QXOhN}Iuw"><field name="VAR">计时</field></block></value><value name="B"><shadow type="math_number" id="it3E_MYl7~Ie-ljLFLl3"><field name="NUM">1</field></shadow></value><next><block type="display_show_image_or_string_delay" id="o0FJ3}CRx:/=No6J[zw_"><field name="center">True</field><value name="data"><shadow type="text" id="N|O:(qp}ob#Xab;!k2,X"><field name="TEXT">Mixly</field></shadow><block type="number_to_text" id="=[Y@o|Yh66_S}_*Z,QQc"><value name="VAR"><shadow type="variables_get" id="YUyKG)i@3(h-2)][?}`)"><field name="VAR">x</field></shadow><block type="variables_get" id="b[Lr|!-3p(FK$gh!i@q9"><field name="VAR">计时</field></block></value></block></value><value name="space"><shadow type="math_number" id="!Uo_AW3aDm;m2_w,)ii6"><field name="NUM">0</field></shadow></value></block></next></block></statement></block></next></block></next></block></statement></block></xml><config>{}</config><code>aW1wb3J0IG1hY2hpbmUKaW1wb3J0IG1peGdvX25vdmEKZnJvbSBtaXhnb19ub3ZhIGltcG9ydCBvbmJvYXJkX3RmdAoKZGVmIHRpbV9jYWxsYmFjayh0aW0pOgogICAgZ2xvYmFsIF9FOF9BRV9BMV9FNl85N19CNgogICAgZ2xvYmFsIF9FNV9CQ184MF9FNV9BN184QgogICAgaWYgX0U1X0JDXzgwX0U1X0E3XzhCOgogICAgICAgIF9FOF9BRV9BMV9FNl85N19CNiArPSAxCiAgICAgICAgb25ib2FyZF90ZnQuc2hvd3Moc3RyKF9FOF9BRV9BMV9FNl85N19CNiksc3BhY2UgPSAwLGNlbnRlciA9IFRydWUpCgoKCl9FNV9CQ184MF9FNV9BN184QiA9IEZhbHNlCl9FOF9BRV9BMV9FNl85N19CNiA9IDAKdGltID0gbWFjaGluZS5UaW1lcigwKQp0aW0uaW5pdChwZXJpb2QgPSAxMDAsIG1vZGUgPSBtYWNoaW5lLlRpbWVyLlBFUklPRElDLCBjYWxsYmFjayA9IHRpbV9jYWxsYmFjaykKd2hpbGUgVHJ1ZToKICAgIGlmIG1peGdvX25vdmEuQjFrZXkud2FzX3ByZXNzZWQoKToKICAgICAgICBfRTVfQkNfODBfRTVfQTdfOEIgPSBub3QgX0U1X0JDXzgwX0U1X0E3XzhCCg==</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-S3@元控青春"><block type="controls_whileUntil" id="sD_^On/[0]d|EJMNo**s" x="-3074" y="-1055"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="|?O8rDSrqCT`EQG+(O*r"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="actuator_led_bright" id="dvG2j_@dRL-ri,f[F9/e"><value name="led"><shadow type="number" id="-g57zn`xE_L!y*eLB$P5"><field name="op">2</field></shadow></value><value name="bright"><shadow type="ledswitch" id="3);YyW-Quuf8d2Yhay)2"><field name="flag">1</field></shadow></value><next><block type="controls_delay_new" id=";dZGuHaRwCX!j?TbtbUL"><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id="8|4nRw~DQ[6e{d!sT:aV"><field name="NUM">0.5</field></shadow></value><next><block type="actuator_led_bright" id="Z*@quTOH!ohEN:Y5${iP"><value name="led"><shadow type="number" id="TKIN55~T?DWT7S(Vc`M*"><field name="op">2</field></shadow></value><value name="bright"><shadow type="ledswitch" id="#ct)(BCa-qE:|A,^z*{s"><field name="flag">0</field></shadow></value><next><block type="controls_delay_new" id="@sMSX4evM*XU|5)::Iv{"><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id="-BJNGP)sr:303bb1AF#K"><field name="NUM">0.5</field></shadow></value><next><block type="variables_set" id="00HVf{7w]VVMEEl:5g4X"><field name="VAR">错误变量</field><value name="VALUE"><block type="logic_negate" id="O07Xael3bhs_W`sWJp|L"><value name="BOOL"><block type="variables_get" id="7NL.E`MnB$zRQ[#w,RA9"><field name="VAR">错误变量</field></block></value></block></value></block></next></block></next></block></next></block></next></block></statement></block></xml><config>{}</config><code>ZnJvbSBtaXhnb19ub3ZhIGltcG9ydCBvbmJvYXJkX2xlZAppbXBvcnQgdGltZQoKCndoaWxlIFRydWU6CiAgICBvbmJvYXJkX2xlZC5zZXRvbm9mZigyLDEpCiAgICB0aW1lLnNsZWVwKDAuNSkKICAgIG9uYm9hcmRfbGVkLnNldG9ub2ZmKDIsMCkKICAgIHRpbWUuc2xlZXAoMC41KQogICAgX0U5Xzk0Xzk5X0U4X0FGX0FGX0U1XzhGXzk4X0U5Xzg3XzhGID0gbm90IF9FOV85NF85OV9FOF9BRl9BRl9FNV84Rl85OF9FOV84N184Rgo=</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-S3@元控青春"><block type="controls_whileUntil" id=".2MP?p:vJ8?hu6zpjpXq" x="-3074" y="-1055"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="EOxOkUQi2MVsIlJI8=/t"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="actuator_led_bright" id="Va26GZBsN`Nir3Vzl7bi"><value name="led"><shadow type="number" id="eaF|)7[|v_uw+*GH_O_y"><field name="op">2</field></shadow></value><value name="bright"><shadow type="ledswitch" id="8ll23jmC(73X8Eu7RZ$7"><field name="flag">1</field></shadow></value><next><block type="controls_delay_new" id="0DYssL9)eJI*7^P/py2e"><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id=",vF;-6*J:31{~g(/G8Fe"><field name="NUM">0.5</field></shadow></value><next><block type="actuator_led_bright" id="6^(3dD`GrdJ(/{O,(qT4"><value name="led"><shadow type="number" id="xgT+Hp3^06xjH*T-@d(V"><field name="op">2</field></shadow></value><value name="bright"><shadow type="ledswitch" id="~Ci:r1tPPLl5TVt#QKLG"><field name="flag">0</field></shadow></value><next><block type="controls_delay_new" id="(Gxr.nu}$9,LFltccf.I"><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id="wYp{,rev9x}3McU3yl~7"><field name="NUM">0.5</field></shadow></value><next><block type="controls_try_finally" id="c^;--L#^Ohb.k_8p*1rD"><mutation elseif="1"></mutation><statement name="try"><block type="variables_set" id="H9xrM~9vzD/R7xFyn?LR"><field name="VAR">错误变量</field><value name="VALUE"><block type="logic_negate" id="Z;p#=PpG?[S=C0rZ/^Tz"><value name="BOOL"><block type="variables_get" id=".pHd/MkLYD2MV(7skb!!"><field name="VAR">错误变量</field></block></value></block></value></block></statement><value name="IF1"><shadow type="factory_block_return" id="|]4!j#YlEt`mUS]lM_rX"><field name="VALUE">Exception as e</field></shadow></value><statement name="DO1"><block type="system_print" id="]_$x/M;,O5M:~xRoaU(7" disabled="true"><value name="VAR"><block type="variables_get" id="fH+Fzoo3A]iQ.R*mZ@ic"><field name="VAR">e</field></block></value></block></statement></block></next></block></next></block></next></block></next></block></statement></block></xml><config>{}</config><code>ZnJvbSBtaXhnb19ub3ZhIGltcG9ydCBvbmJvYXJkX2xlZAppbXBvcnQgdGltZQoKCndoaWxlIFRydWU6CiAgICBvbmJvYXJkX2xlZC5zZXRvbm9mZigyLDEpCiAgICB0aW1lLnNsZWVwKDAuNSkKICAgIG9uYm9hcmRfbGVkLnNldG9ub2ZmKDIsMCkKICAgIHRpbWUuc2xlZXAoMC41KQogICAgdHJ5OgogICAgICAgIF9FOV85NF85OV9FOF9BRl9BRl9FNV84Rl85OF9FOV84N184RiA9IG5vdCBfRTlfOTRfOTlfRThfQUZfQUZfRTVfOEZfOThfRTlfODdfOEYKICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICBwYXNzCg==</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-S3@元控青春"><block type="controls_whileUntil" id="?@vOeeg`@o5~EpW;fJvP" x="-3394" y="-997"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="x5z448AvI!)f6tooS{aB"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="system_print" id="f+8V47-TfN`1(+ou$M2v"><value name="VAR"><shadow type="text" id="Rt+E)0-J_k0/2|bCGoE1"><field name="TEXT">Mixly</field></shadow><block type="rfid_readid" id="D1sR9f:qTkQK2Cy(=LI5"></block></value><next><block type="controls_delay_new" id="#q2Kl5hNFgnZSNLr=e}4"><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id="O-LG)`nE~@uR?;Ri:Az["><field name="NUM">1</field></shadow></value></block></next></block></statement></block></xml><config>{}</config><code>aW1wb3J0IG1hY2hpbmUKZnJvbSBtaXhnb19ub3ZhIGltcG9ydCBvbmJvYXJkX3JmaWQKaW1wb3J0IHRpbWUKCgp3aGlsZSBUcnVlOgogICAgcHJpbnQob25ib2FyZF9yZmlkLnJlYWRfY2FyZCgwLCB4PSJpZCIpKQogICAgdGltZS5zbGVlcCgxKQo=</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-S3@元控青春"><block type="variables_set" id="+z`,j#JP0Oqu3k@EF+@d" x="-3403" y="-1132"><field name="VAR">id</field><value name="VALUE"><block type="math_number" id="E1e:3sA2{yc8d(;G!f{1"><field name="NUM">0</field></block></value><next><block type="controls_whileUntil" id="-~L_+!7r7V,;gb|m)Alq"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="q2#h[l[sj|)dqyqWWeC#"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="variables_set" id="yD2#tl/wE*e~#rB^OW9q"><field name="VAR">id</field><value name="VALUE"><block type="rfid_readid" id="Q!y{X;Ws3hcXZCOw`X~S"></block></value><next><block type="controls_if" id="f)]cv4Dv=(B{{KxV1?C6"><value name="IF0"><block type="logic_compare" id="!OW_,W`,q)TB-:~+Hx;E"><field name="OP">NEQ</field><value name="A"><block type="number_to_text" id="9n=c?-rgSA+tn7Q[9Y:U"><value name="VAR"><shadow type="variables_get" id="#$/LC.N4B!rnCVMWYDcu"><field name="VAR">x</field></shadow><block type="variables_get" id="A_xo^|*d}mym6-z=;K[^"><field name="VAR">id</field></block></value></block></value><value name="B"><block type="text" id="gAD3IpL)]Fo933A-A*Nu"><field name="TEXT">None</field></block></value></block></value><statement name="DO0"><block type="esp32_onboard_music_pitch_with_time" id="#r9|JOuGQDV1J`Qh.9xu"><value name="pitch"><shadow type="pins_tone_notes" id="~r/;LtgB^:,fM]XgB`Im"><field name="PIN">659</field></shadow></value><value name="time"><shadow type="math_number" id="Yp3C`,[IggbMi@Ee7+Q0"><field name="NUM">100</field></shadow></value><next><block type="system_print" id="e}sU{wbE:dh?]cLSQqG3"><value name="VAR"><shadow type="text" id="Y/Nm@{/4[W6axXM;inO,"><field name="TEXT">Mixly</field></shadow><block type="variables_get" id="LuVUVXv=Ml;9`M^GP#Yg"><field name="VAR">id</field></block></value><next><block type="onboard_tft_show_image_or_string_delay" id="#7FNQUC!#^XyEE[ID0RG"><field name="center">True</field><value name="data"><shadow type="text" id="#f=PsW}ibW.`NqcsdB9W"><field name="TEXT">Mixly</field></shadow><block type="number_to_text" id="6zlwL!FP.`LOzVuG.QPq"><value name="VAR"><shadow type="variables_get" id="0y2C;e=isb`T=gEe1pIQ"><field name="VAR">x</field></shadow><block type="variables_get" id="?8[kP(DY^`)gD@-0HP7l"><field name="VAR">id</field></block></value></block></value><value name="x"><shadow type="math_number" id="$8+Njx^kKfD+^/])tmKR"><field name="NUM">0</field></shadow></value><value name="y"><shadow type="math_number" id="A1BdvP`FNag_hCNQzc*|"><field name="NUM">64</field></shadow></value><value name="size"><shadow type="math_number" id="s0}yW.]b,7j*eDR?ap*e"><field name="NUM">1</field></shadow></value><value name="space"><shadow type="math_number" id="d?Cd4|L}]oGC@K2X*L#="><field name="NUM">0</field></shadow></value><value name="VAR"><shadow type="tuple_create_with_text_return" id="wB7UF`lB5!C[SE|5LIa5"><field name="TEXT">255,255,0</field></shadow><block type="display_color_seclet" id=";2)k7.oy5S!,e$(HkEBN"><field name="COLOR">#ffffff</field></block></value></block></next></block></next></block></statement></block></next></block></statement></block></next></block></xml><config>{}</config><code>ZnJvbSBtaXhnb19ub3ZhIGltcG9ydCBvbmJvYXJkX3JmaWQKZnJvbSBtaXhnb19ub3ZhX3ZvaWNlIGltcG9ydCBzcGtfbWlkaQppbXBvcnQgbWFjaGluZQpmcm9tIG1peGdvX25vdmEgaW1wb3J0IG9uYm9hcmRfdGZ0CgoKaWQyID0gMAp3aGlsZSBUcnVlOgogICAgaWQyID0gb25ib2FyZF9yZmlkLnJlYWRfY2FyZCgwLCB4PSJpZCIpCiAgICBpZiBzdHIoaWQyKSAhPSAnTm9uZSc6CiAgICAgICAgc3BrX21pZGkucGl0Y2hfdGltZSg2NTksIDEwMCkKICAgICAgICBwcmludChpZDIpCiAgICAgICAgb25ib2FyZF90ZnQuc2hvd3Moc3RyKGlkMikseCA9IDAseSA9IDY0LHNpemUgPSAxLHNwYWNlID0gMCxjZW50ZXIgPSBUcnVlLGNvbG9yPTB4ZmZmZikK</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
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-S3@元控青春"><block type="espnow_radio_channel" id=";Y3YHhan`3x*apX-}(AE" x="-912" y="-519"><value name="CHNL"><shadow type="espnow_channel" id="YNs|h#@tO;(=Mj?I^k#i"><field name="PIN">10</field></shadow></value><next><block type="espnow_radio_on_off" id="rMFwK_@.?rB$8~c_?Cyc"><field name="on_off">True</field><next><block type="controls_whileUntil" id="~TgA}`FL1$s*R7/-7x(="><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id=")2(x_*=G;nOj37c~a4NG"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="controls_if" id="OC2ewWBDHaoii0jM]OtZ"><value name="IF0"><block type="sensor_mixgo_button_was_pressed" id="40$d]1lCy1w}L;(i/~lc"><value name="btn"><shadow type="pins_button" id="qKp[YC)4nyu}Q48|F:jB"><field name="PIN">B1key</field></shadow></value></block></value><statement name="DO0"><block type="espnow_radio_send" id="XCXq3a)/d7`I0co(h4XU"><value name="send"><shadow type="text" id="0hJ}7,NJ*0`o;wH@D$Xj"><field name="TEXT">LEFT</field></shadow></value></block></statement><next><block type="controls_if" id="F7pcyZn.$ALi(_Pd2T5g"><value name="IF0"><block type="sensor_mixgo_button_was_pressed" id="DZ]R#yf(Tu7efG6(}^)5"><value name="btn"><shadow type="pins_button" id="-37hOKc*b2}kGsu+{1eo"><field name="PIN">B2key</field></shadow></value></block></value><statement name="DO0"><block type="espnow_radio_send" id="u_Kx^wz{o(jevdV.*+CP"><value name="send"><shadow type="text" id="2//7NHs?*@5UvGeqR.^0"><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="p-W8a_~DJ79V#.q4@jsD" x="-894" y="-189"><statement name="DO"><block type="system_print" id=";9X107_:V{pYX~iUX;2:"><value name="VAR"><block type="espnow_radio_recv_msg" id="x_iJ`7d8sFo~nclqSE{i"></block></value></block></statement></block><block type="espnow_radio_recv_certain_msg_new" id="h6*N0P8i^S;7z9+HTG-8" x="-892" y="-108"><field name="msg">LEFT</field><statement name="DO"><block type="display_show_image_or_string_delay" id="oUd]@s_fftDK0T79BIiv"><field name="center">True</field><value name="data"><shadow type="text" id="WQ5{KrsUs?iBP|DhpqQ1"><field name="TEXT">LEFT</field></shadow></value><value name="space"><shadow type="math_number" id="O@LDpt`V*?cqUcx+B3b^"><field name="NUM">0</field></shadow></value></block></statement></block><block type="espnow_radio_recv_certain_msg_new" id="`~7`G]NkY-$+^xd8gnvY" x="-893" y="-14"><field name="msg">RIGHT</field><statement name="DO"><block type="display_show_image_or_string_delay" id="8KjtI9bXLEF1u_Jb6G{="><field name="center">True</field><value name="data"><shadow type="text" id="$qx{6r+=MqJRt$2;x]+O"><field name="TEXT">RIGHT</field></shadow></value><value name="space"><shadow type="math_number" id="|w4mPJRpA`_Fpdv5ka*V"><field name="NUM">0</field></shadow></value></block></statement></block></xml><config>{}</config><code>aW1wb3J0IHJhZGlvCkVTUE5vd19yYWRpbz1yYWRpby5FU1BOb3coKQppbXBvcnQgbWl4Z29fbm92YQpoYW5kbGVfbGlzdD1bXQppbXBvcnQgbWFjaGluZQpkZWYgRVNQTm93X3JhZGlvX3JlY3YobWFjLEVTUE5vd19yYWRpb19tc2cpOgogICAgcHJpbnQoRVNQTm93X3JhZGlvX21zZykKCmlmIG5vdCBFU1BOb3dfcmFkaW9fcmVjdiBpbiBoYW5kbGVfbGlzdDoKICAgIGhhbmRsZV9saXN0LmFwcGVuZChFU1BOb3dfcmFkaW9fcmVjdikKRVNQTm93X3JhZGlvLnJlY3ZfY2IoaGFuZGxlX2xpc3QpCgpmcm9tIG1peGdvX25vdmEgaW1wb3J0IG9uYm9hcmRfdGZ0CmRlZiBFU1BOb3dfcmFkaW9fcmVjdl9fTEVGVChtYWMsRVNQTm93X3JhZGlvX21zZyk6CiAgICBvbmJvYXJkX3RmdC5zaG93cygnTEVGVCcsc3BhY2UgPSAwLGNlbnRlciA9IFRydWUpCgppZiBub3QgRVNQTm93X3JhZGlvX3JlY3ZfX0xFRlQgaW4gaGFuZGxlX2xpc3Q6CiAgICBoYW5kbGVfbGlzdC5hcHBlbmQoRVNQTm93X3JhZGlvX3JlY3ZfX0xFRlQpCkVTUE5vd19yYWRpby5yZWN2X2NiKGhhbmRsZV9saXN0KQoKZGVmIEVTUE5vd19yYWRpb19yZWN2X19SSUdIVChtYWMsRVNQTm93X3JhZGlvX21zZyk6CiAgICBvbmJvYXJkX3RmdC5zaG93cygnUklHSFQnLHNwYWNlID0gMCxjZW50ZXIgPSBUcnVlKQoKaWYgbm90IEVTUE5vd19yYWRpb19yZWN2X19SSUdIVCBpbiBoYW5kbGVfbGlzdDoKICAgIGhhbmRsZV9saXN0LmFwcGVuZChFU1BOb3dfcmFkaW9fcmVjdl9fUklHSFQpCkVTUE5vd19yYWRpby5yZWN2X2NiKGhhbmRsZV9saXN0KQoKCgpFU1BOb3dfcmFkaW8uc2V0X2NoYW5uZWwoY2hhbm5lbD0xMCkKRVNQTm93X3JhZGlvLmFjdGl2ZShUcnVlKQp3aGlsZSBUcnVlOgogICAgaWYgbWl4Z29fbm92YS5CMWtleS53YXNfcHJlc3NlZCgpOgogICAgICAgIEVTUE5vd19yYWRpby5zZW5kKCJmZmZmZmZmZmZmZmYiLCdMRUZUJykKICAgIGlmIG1peGdvX25vdmEuQjJrZXkud2FzX3ByZXNzZWQoKToKICAgICAgICBFU1BOb3dfcmFkaW8uc2VuZCgiZmZmZmZmZmZmZmZmIiwnUklHSFQnKQo=</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-S3@元控青春"><block type="variables_set" id=";@Z?*.5C3@,9e40=sjfC" x="-557" y="-442"><field name="VAR">lastmsgtime</field><value name="VALUE"><block type="controls_millis" id=")7X+j6F$HsJm{JfUC*Q,"><field name="Time">ms</field></block></value><next><block type="espnow_radio_channel" id="AXUEb1CD!Pv(guA0oN6c"><value name="CHNL"><shadow type="espnow_channel" id="TG6OrbJt,*R)*i5u_;F^"><field name="PIN">10</field></shadow></value><next><block type="espnow_radio_on_off" id="f*-J=ZTfFZ1J}AWL=D,I"><field name="on_off">True</field><next><block type="controls_whileUntil" id="LfWsis]IwG*|)VR`m^_,"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="IS)f;yttt5^YZuP@4}If"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="controls_delay_new" id="EKJn]yTgrL8Mz#2Pf[m0"><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id="e1E{F0pm4#DJ;z/Jv4Tb"><field name="NUM">2</field></shadow></value><next><block type="espnow_radio_send" id=";Ye+ceA2vo+P9}WugBA,"><value name="send"><shadow type="text" id="7x4S8I7YY/M}f+JuEG_R"><field name="TEXT">Mixly</field></shadow><block type="number_to_text" id="[?.DOW=SRH._g;y#:2)B"><value name="VAR"><shadow type="variables_get" id="Hcj+nS6ex^fh:Bb0O=`|"><field name="VAR">x</field></shadow><block type="controls_millis" id="P2G[K{0|tCNa#Uncs+:0"><field name="Time">ms</field></block></value></block></value><next><block type="controls_if" id="(}RaBXPJ6p(Auoi~HSw|"><value name="IF0"><block type="logic_compare" id="aCu`9:O`.pIi!xO,sHz@"><field name="OP">GT</field><value name="A"><block type="math_arithmetic" id="xrmhPx:,f1aK[T~U`+y|"><field name="OP">MINUS</field><value name="A"><shadow type="math_number" id="^/}(1Tps!f_+|*$=,Ji["><field name="NUM">1</field></shadow><block type="controls_millis" id="ZfWFtVk.WtFfzx/2z0L="><field name="Time">ms</field></block></value><value name="B"><shadow type="math_number" id="pkvr0{vNT#|c)-[(x06J"><field name="NUM">1</field></shadow><block type="variables_get" id="+f~W823Ct:Y~rPFC(Z6i"><field name="VAR">lastmsgtime</field></block></value></block></value><value name="B"><block type="math_number" id="l[{~yxN}c3:1z(k^.b#V"><field name="NUM">10000</field></block></value></block></value><statement name="DO0"><block type="display_show_image_or_string_delay" id="Lm3xW[?3r4snABO;EL?C"><field name="center">True</field><value name="data"><shadow type="text" id="?A5/O*:=Icwau;)41#42"><field name="TEXT">NO</field></shadow></value><value name="space"><shadow type="math_number" id="5UO{j)P=9mOFGyycCaVR"><field name="NUM">0</field></shadow></value><next><block type="esp32_onboard_music_play_list" id="NvQq8Sy?Ke/9@$4v@+q4"><value name="LIST"><shadow type="pins_playlist" id="7epM!26ThFK;(SYoM[`B"><field name="PIN">spk_midi.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="AgR!1TPM|r~#sl~gHgd#" x="-534" y="-34"><statement name="DO"><block type="variables_global" id="kGEGoI[c^P.zi}9^4]fo"><value name="VAR"><block type="variables_get" id="MAT}F9H-4_@Ol{Wybix*"><field name="VAR">lastmsgtime</field></block></value><next><block type="display_show_image_or_string_delay" id="Y8H.Z8X5-?w]6S~{y!XL"><field name="center">True</field><value name="data"><shadow type="text" id="Tz~H+|8L$9I:3$X+Y677"><field name="TEXT">YES</field></shadow></value><value name="space"><shadow type="math_number" id="66uzX:S7KrvOT81QWZG?"><field name="NUM">0</field></shadow></value><next><block type="variables_set" id="TfUv(}Oa24v{nFYNdT2O"><field name="VAR">lastmsgtime</field><value name="VALUE"><block type="controls_millis" id="8UZuQW?XXKN(L}qh2hl*"><field name="Time">ms</field></block></value></block></next></block></next></block></statement></block></xml><config>{}</config><code>aW1wb3J0IHRpbWUKaW1wb3J0IHJhZGlvCkVTUE5vd19yYWRpbz1yYWRpby5FU1BOb3coKQpmcm9tIG1peGdvX25vdmEgaW1wb3J0IG9uYm9hcmRfdGZ0CmZyb20gbWl4Z29fbm92YV92b2ljZSBpbXBvcnQgc3BrX21pZGkKaGFuZGxlX2xpc3Q9W10KZGVmIEVTUE5vd19yYWRpb19yZWN2KG1hYyxFU1BOb3dfcmFkaW9fbXNnKToKICAgIGdsb2JhbCBsYXN0bXNndGltZQogICAgb25ib2FyZF90ZnQuc2hvd3MoJ1lFUycsc3BhY2UgPSAwLGNlbnRlciA9IFRydWUpCiAgICBsYXN0bXNndGltZSA9IHRpbWUudGlja3NfbXMoKQoKaWYgbm90IEVTUE5vd19yYWRpb19yZWN2IGluIGhhbmRsZV9saXN0OgogICAgaGFuZGxlX2xpc3QuYXBwZW5kKEVTUE5vd19yYWRpb19yZWN2KQpFU1BOb3dfcmFkaW8ucmVjdl9jYihoYW5kbGVfbGlzdCkKCgoKbGFzdG1zZ3RpbWUgPSB0aW1lLnRpY2tzX21zKCkKRVNQTm93X3JhZGlvLnNldF9jaGFubmVsKGNoYW5uZWw9MTApCkVTUE5vd19yYWRpby5hY3RpdmUoVHJ1ZSkKd2hpbGUgVHJ1ZToKICAgIHRpbWUuc2xlZXAoMikKICAgIEVTUE5vd19yYWRpby5zZW5kKCJmZmZmZmZmZmZmZmYiLHN0cih0aW1lLnRpY2tzX21zKCkpKQogICAgaWYgdGltZS50aWNrc19tcygpIC0gbGFzdG1zZ3RpbWUgPiAxMDAwMDoKICAgICAgICBvbmJvYXJkX3RmdC5zaG93cygnTk8nLHNwYWNlID0gMCxjZW50ZXIgPSBUcnVlKQogICAgICAgIHNwa19taWRpLnBsYXkoc3BrX21pZGkuREFEQURBRFVNKQo=</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-S3@元控青春"><variables><variable id="F6AZf]?TTBrVz3!HK,|p">cmd</variable><variable id="9evLpxY)q7CIC6uw4yKm">addr</variable><variable id="=T.Z=tj(7{K$1-8-Jmp|">raw</variable><variable id="bY/n=T#mN)b(Cy}6c4qY">pulses</variable></variables><block type="communicate_ir_recv_init" id="`//Eo^}-ncjO9?vrI}](" x="-1349" y="-446"><field name="type">0</field><value name="PIN"><shadow type="pins_digital_pin" id="WDQaQm7-WYi($N3B0Vly"><field name="PIN">16</field></shadow></value><value name="SUB"><shadow type="factory_block_return" id="7YGwD~IU8|:aH`Z/}^N:"><field name="VALUE">callback</field></shadow></value><next><block type="communicate_ir_send_init" id="HO?h7_F^})i}|)lXUdEj"><field name="type">False</field><value name="PIN"><shadow type="pins_digital_pin" id="8-[Ydd?hg*u-,n:q#((t"><field name="PIN">21</field></shadow></value><value name="power"><shadow type="math_number" id="YP,1Dq~u/p2u2a4z-]4n"><field name="NUM">100</field></shadow></value><next><block type="controls_whileUntil" id="A|[kmYrLcKIgEWu:_aSu"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="J2v9bjC4yq5?,!*N:S?T"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="controls_if" id="`~E/3R~31j2F;wi](H};"><value name="IF0"><block type="sensor_mixgo_button_was_pressed" id="B!L+-pAiVZ1-q9S3w/7Z"><value name="btn"><shadow type="pins_button" id="YY8;jXRh_f6cqIDsRWIv"><field name="PIN">B1key</field></shadow></value></block></value><statement name="DO0"><block type="ir_transmit_raw_code" id=".dq6#.R|DbiGg/_$Q$WM"><value name="raw"><shadow type="math_number" id="C?v9=|X$/dZ{WLu$uyA7"><field name="NUM">0x1234</field></shadow></value></block></statement><next><block type="controls_if" id="ih|@FiDl@3is!ENBjqfE"><value name="IF0"><block type="sensor_mixgo_button_was_pressed" id="IlXJ-KjM2f(k]v!VS=KS"><value name="btn"><shadow type="pins_button" id="?[qQ5o:Tnl:p/WYAj.)!"><field name="PIN">B2key</field></shadow></value></block></value><statement name="DO0"><block type="ir_transmit_raw_code" id="OI|r[gnL6hvSjAoo10d_"><value name="raw"><shadow type="math_number" id="aqzUdY=n(dv2DAI|3^yu"><field name="NUM">0xABCD</field></shadow></value></block></statement></block></next></block></statement></block></next></block></next></block><block type="procedures_defnoreturn" id="^l=6/A=X3^q*0C9~F4C+" x="-1242" y="-95"><mutation><arg name="cmd" varid="F6AZf]?TTBrVz3!HK,|p"></arg><arg name="addr" varid="9evLpxY)q7CIC6uw4yKm"></arg><arg name="raw" varid="=T.Z=tj(7{K$1-8-Jmp|"></arg><arg name="pulses" varid="bY/n=T#mN)b(Cy}6c4qY"></arg></mutation><field name="NAME">callback</field><statement name="STACK"><block type="system_print_many" id="(A=hL-ghKMb88.O]n/hf"><mutation items="4"></mutation><value name="ADD0"><block type="variables_get" id="b7_K./Y3X.]vuaAh[)B`"><field name="VAR">cmd</field></block></value><value name="ADD1"><block type="variables_get" id="E^p!XP6?Q7AsrM`r`u4Z"><field name="VAR">addr</field></block></value><value name="ADD2"><block type="math_number_base_conversion" id="0RU:=P:/mx7cBEj(N^-S"><field name="OP">ten</field><field name="OP2">sixteen</field><value name="NUM"><shadow type="math_number" id="tZoC#F!E182HY05IT.Xq"><field name="NUM">1010</field></shadow><block type="variables_get" id="PvTsC/wvx]A([AX@YzH-"><field name="VAR">raw</field></block></value></block></value><value name="ADD3"><block type="variables_get" id="ka(c.qZ1sYlQB8,^-r]o"><field name="VAR">pulses</field></block></value></block></statement></block></xml><config>{}</config><code>aW1wb3J0IGlycmVtb3RlCmltcG9ydCBtaXhnb19ub3ZhCmltcG9ydCBtYXRoCgpkZWYgY2FsbGJhY2soY21kLCBhZGRyLCByYXcsIHB1bHNlcyk6CiAgICBwcmludChjbWQsIGFkZHIsIGhleChpbnQoc3RyKHJhdyksIDEwKSksIHB1bHNlcykKCgoKaXJfcnggPSBpcnJlbW90ZS5ORUNfUlgoMTYsMCxjYWxsYmFjaykKaXJfdHggPSBpcnJlbW90ZS5ORUNfVFgoMjEsRmFsc2UsMTAwKQp3aGlsZSBUcnVlOgogICAgaWYgbWl4Z29fbm92YS5CMWtleS53YXNfcHJlc3NlZCgpOgogICAgICAgIGlyX3R4LnRyYW5zbWl0KHJhdz0weDEyMzQpCiAgICBpZiBtaXhnb19ub3ZhLkIya2V5Lndhc19wcmVzc2VkKCk6CiAgICAgICAgaXJfdHgudHJhbnNtaXQocmF3PTB4QUJDRCkK</code>
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-S3@元控青春"><block type="communicate_ir_recv_init" id="u}8nFi`_g^C1U[RD:r(S" x="-961" y="-259"><field name="type">0</field><value name="PIN"><shadow type="pins_digital_pin" id="WCAi$bu!*uf;[_FvU/go"><field name="PIN">16</field></shadow></value><value name="SUB"><shadow type="factory_block_return" id="TJgS(#t_]w1H#J[ZABmC"><field name="VALUE"></field></shadow></value><next><block type="variables_set" id="7(7X1+ruuGtSip;hKR5|"><field name="VAR">万能遥控码1</field><value name="VALUE"><block type="list_many_input" id="~];{5dA(IVM~KWskYW^3"><field name="CONTENT">9400,4500,560,560</field></block></value><next><block type="controls_whileUntil" id="2bBF2vLd)5]UY1TL2@YM"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="`Tx#Iw-dS|!uHa72$}V0"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="controls_if" id="5`hG6Zi;i6LRY{BT,xd["><value name="IF0"><block type="ir_whether_recv" id="{^QS-8vTrcaXQcou)xTU"></block></value><statement name="DO0"><block type="variables_set" id="_d2=qG^OLeB}`7wxg+Fp"><field name="VAR">万能遥控码1</field><value name="VALUE"><block type="internal_variable" id="H=Sx7}Ry7ZrtIplTP@=Q"><field name="index">3</field></block></value><next><block type="system_print_many" id=":Heuu~W@RcReRYRdh@0C"><mutation items="3"></mutation><value name="ADD0"><block type="math_dec" id="[s+q;F$7/DMx0gj_+L+j"><field name="OP">hex</field><value name="NUM"><shadow type="math_number" id="fRMYQd9Trq_{o4~gw8sa"><field name="NUM">15</field></shadow><block type="internal_variable" id="VtWM=X_6d.1BZN~]h4m^"><field name="index">2</field></block></value></block></value><value name="ADD1"><block type="list_trig" id="i5JadXbk0QFQXk6/F@i#"><field name="OP">LEN</field><value name="data"><shadow type="variables_get" id="4gS=N9*a$V$}(!.HUJW,"><field name="VAR">mylist</field></shadow><block type="internal_variable" id="]s=0}(~h84].bOs3.L~a"><field name="index">3</field></block></value></block></value><value name="ADD2"><block type="list_tolist" id="J*S#D8z{]K~j!o6lOBjB"><value name="VAR"><shadow type="variables_get" id="PPPJ)OJH7.1$+q8:VLs^"><field name="VAR">x</field></shadow><block type="internal_variable" id="wr#d6{_a[2]`LrZx{@n1"><field name="index">3</field></block></value></block></value></block></next></block></statement></block></statement></block></next></block></next></block></xml><config>{}</config><code>aW1wb3J0IGlycmVtb3RlCmltcG9ydCBtYXRoCgoKaXJfcnggPSBpcnJlbW90ZS5ORUNfUlgoMTYsMCkKX0U0X0I4Xzg3X0U4XzgzX0JEX0U5XzgxX0E1X0U2XzhFX0E3X0U3X0EwXzgxMSA9IFs5NDAwLDQ1MDAsNTYwLDU2MF0Kd2hpbGUgVHJ1ZToKICAgIGlmIGlyX3J4LmFueSgpOgogICAgICAgIF9FNF9COF84N19FOF84M19CRF9FOV84MV9BNV9FNl84RV9BN19FN19BMF84MTEgPSBpcl9yeC5jb2RlWzNdCiAgICAgICAgcHJpbnQoaGV4KGlyX3J4LmNvZGVbMl0pLCBsZW4oaXJfcnguY29kZVszXSksIGxpc3QoaXJfcnguY29kZVszXSkpCg==</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
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-S3@元控青春"><block type="iot_wifi_connect" id="KLM$+5#jl=dSZCG9)Nhh" x="-1261" y="-422"><value name="WIFINAME"><shadow type="text" id="yp?WsDIE0Q+$h(?I2-b]"><field name="TEXT">fuhua3</field></shadow></value><value name="PASSWORD"><shadow type="text" id="SBM@7kAo!f/6w^IOd~;h"><field name="TEXT">1234567890</field></shadow></value><next><block type="display_show_image_or_string_delay" id="C0^7?VCU:u$@--JZF3Z*"><field name="center">True</field><value name="data"><shadow type="text" id="DQ6W7}l?c4:IsJ^7;:Yx"><field name="TEXT">WO</field></shadow></value><value name="space"><shadow type="math_number" id="/M9Ihdr$uH?+3]AX|GSR"><field name="NUM">0</field></shadow></value><next><block type="IOT_EMQX_INIT_AND_CONNECT_BY_MIXLY_CODE" id="*,NpWbX2c)27lIuO31Ra"><value name="SERVER"><shadow type="text" id="rx,nurA{f3lSeGM^*Jr="><field name="TEXT">mixio.mixly.cn</field></shadow></value><value name="KEY"><shadow type="iot_mixly_key" id="A73m5i*!t+2:Z|zSuYPH"><field name="VISITOR_ID">4OG7811O</field></shadow></value><next><block type="display_show_image_or_string_delay" id="L9mW|~`iieRi,;?!mR@s"><field name="center">True</field><value name="data"><shadow type="text" id="|5_5RNh.[t_SK]Sv!iH?"><field name="TEXT">MO</field></shadow></value><value name="space"><shadow type="math_number" id="H/7dvO:zhEU[RChQT$7]"><field name="NUM">0</field></shadow></value><next><block type="controls_whileUntil" id="*?.,fu#ix#xDUSE;`xji"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="xZmuG2M_t(z#kjHsf7CC"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="display_show_image_or_string_delay" id="[u,pS8w{+JvtHtYz=tjN"><field name="center">True</field><value name="data"><shadow type="text" id="1W6Wk9EZ_/UPWGYUH0VQ"><field name="TEXT">MO</field></shadow><block type="number_to_text" id="Z1qH3N4/3m1wWj}[g,HZ"><value name="VAR"><shadow type="variables_get" id="@nRbFC7MQgK+X:o^VO/g"><field name="VAR">x</field></shadow><block type="sensor_mixgo_nova_LTR308" id="2:[;H7h-uLq/IiyGDFE0"><field name="direction">l</field></block></value></block></value><value name="space"><shadow type="math_number" id="gEAo~_q)J2;LS??FEbD="><field name="NUM">0</field></shadow></value><next><block type="IOT_MIXIO_PUBLISH" id="V]1hS$+pIN1)6AP`oemF"><value name="TOPIC"><shadow type="text" id="e?ykt@Jh,O|{i!aCVofw"><field name="TEXT">光照</field></shadow></value><value name="MSG"><shadow type="text" id="tOB07ccnX[!9-u+bR1o/"><field name="TEXT">msg</field></shadow><block type="sensor_mixgo_nova_LTR308" id="h[]?TCEh5~Ol,^TpuHx!"><field name="direction">l</field></block></value><next><block type="controls_delay_new" id="xr(7r;xU~Qom_tC=:C]@"><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id="c)OP;!+H3TbXzrQk$Rdf"><field name="NUM">5</field></shadow></value></block></next></block></next></block></statement></block></next></block></next></block></next></block></next></block></xml><config>{}</config><code>aW1wb3J0IG1peGlvdApmcm9tIG1peGdvX25vdmEgaW1wb3J0IG9uYm9hcmRfdGZ0CmltcG9ydCBtYWNoaW5lCmZyb20gdWJpbmFzY2lpIGltcG9ydCBoZXhsaWZ5CmZyb20gbWl4Z29fbm92YSBpbXBvcnQgb25ib2FyZF9hbHNfbAppbXBvcnQgdGltZQoKCm1peGlvdC53bGFuX2Nvbm5lY3QoJ2Z1aHVhMycsJzEyMzQ1Njc4OTAnKQpvbmJvYXJkX3RmdC5zaG93cygnV08nLHNwYWNlID0gMCxjZW50ZXIgPSBUcnVlKQpNUVRUX1VTUl9QUkogPSAiTWl4SU8vNE9HNzgxMU8vZGVmYXVsdC8iCm1xdHRfY2xpZW50ID0gbWl4aW90LmluaXRfTVFUVF9jbGllbnQoJ21peGlvLm1peGx5LmNuJywgIk1peElPX3B1YmxpYyIsICJNaXhJT19wdWJsaWMiLCBNUVRUX1VTUl9QUkopCm9uYm9hcmRfdGZ0LnNob3dzKCdNTycsc3BhY2UgPSAwLGNlbnRlciA9IFRydWUpCndoaWxlIFRydWU6CiAgICBvbmJvYXJkX3RmdC5zaG93cyhzdHIob25ib2FyZF9hbHNfbC5hbHNfdmlzKCkpLHNwYWNlID0gMCxjZW50ZXIgPSBUcnVlKQogICAgbXF0dF9jbGllbnQucHVibGlzaChNUVRUX1VTUl9QUkogKyAn5YWJ54WnJywgb25ib2FyZF9hbHNfbC5hbHNfdmlzKCkpCiAgICB0aW1lLnNsZWVwKDUpCg==</code>
|
||||
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-S3@元控青春"><block type="iot_wifi_connect" id="S5rKJDI8p,{ik#:rYDy," x="-1378" y="-423"><value name="WIFINAME"><shadow type="text" id="L$UMyX1ET_Tg]$s#f8?("><field name="TEXT">fuhua3</field></shadow></value><value name="PASSWORD"><shadow type="text" id="Yw42^O^dfoVF#-)YAL:t"><field name="TEXT">1234567890</field></shadow></value><next><block type="display_show_image_or_string_delay" id="d2?p_udU^tEFkki3$RNr"><field name="center">True</field><value name="data"><shadow type="text" id="$OPj3?z_h3{:AE[[tPcW"><field name="TEXT">WO</field></shadow></value><value name="space"><shadow type="math_number" id="~vTuhH[L1Z)J`RuRItja"><field name="NUM">0</field></shadow></value><next><block type="IOT_EMQX_INIT_AND_CONNECT_BY_MIXLY_CODE" id="u(JLm:wMr{X8VEf[AID`"><value name="SERVER"><shadow type="text" id="+7k/VM;9v=s}?AaO@+ox"><field name="TEXT">mixio.mixly.cn</field></shadow></value><value name="KEY"><shadow type="iot_mixly_key" id="NY6Q[V:6(4PlBTF5`!A?"><field name="VISITOR_ID">4OG7811O</field></shadow></value><next><block type="display_show_image_or_string_delay" id="ce,4vdXFApAr0d.Os[RS"><field name="center">True</field><value name="data"><shadow type="text" id="KBTM;G|okxDi9z9+-]}P"><field name="TEXT">MO</field></shadow></value><value name="space"><shadow type="math_number" id="4wBapa{!aANW1~!mg5m,"><field name="NUM">0</field></shadow></value><next><block type="controls_whileUntil" id="?Rg`UEW}KAXIHWba(prr"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="OGpCVm-wM^fo9xk9z1Ay"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="controls_delay_new" id="m4I5F86MLMKPtGUu-_{?"><field name="Time">s</field><value name="DELAY_TIME"><shadow type="math_number" id="(8yjA_DQt7w.QK]zoeRF"><field name="NUM">5</field></shadow></value><next><block type="IOT_MIXIO_PUBLISH" id="$0KCX.YG{{_X|Cpt:I,B"><value name="TOPIC"><shadow type="text" id="|[+{@Tt02^pJe6I5ZYR|"><field name="TEXT">环境</field></shadow></value><value name="MSG"><shadow type="text" id="y@]H3$J=I6w[}9IhJjx4"><field name="TEXT">msg</field></shadow><block type="IOT_FORMAT_STRING" id=":4Dc`xF?S`B)[ELZpWz$"><value name="VAR"><block type="dicts_create_with_noreturn" id="OE:_)$v.8J@(I(F}ubn," inline="false"><mutation items="3"></mutation><field name="KEY0">"光照"</field><field name="KEY1">"声音"</field><field name="KEY2">"震动"</field><value name="ADD0"><block type="sensor_mixgo_nova_LTR308" id="3SbMW[l^{puFn-8D[JSe"><field name="direction">l</field></block></value><value name="ADD1"><block type="sensor_sound" id=")jpN)YT3GB*8a;$U:f=Z"></block></value><value name="ADD2"><block type="sensor_get_acceleration" id="-Yx0mO/lZmlI.gAlp;qH"><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>aW1wb3J0IG1peGlvdApmcm9tIG1peGdvX25vdmEgaW1wb3J0IG9uYm9hcmRfdGZ0CmltcG9ydCBtYWNoaW5lCmZyb20gdWJpbmFzY2lpIGltcG9ydCBoZXhsaWZ5CmltcG9ydCB0aW1lCmltcG9ydCBtaXhweQpmcm9tIG1peGdvX25vdmEgaW1wb3J0IG9uYm9hcmRfYWxzX2wKZnJvbSBtaXhnb19ub3ZhX3ZvaWNlIGltcG9ydCBzb3VuZF9sZXZlbApmcm9tIG1peGdvX25vdmEgaW1wb3J0IG9uYm9hcmRfYWNjCgoKbWl4aW90LndsYW5fY29ubmVjdCgnZnVodWEzJywnMTIzNDU2Nzg5MCcpCm9uYm9hcmRfdGZ0LnNob3dzKCdXTycsc3BhY2UgPSAwLGNlbnRlciA9IFRydWUpCk1RVFRfVVNSX1BSSiA9ICJNaXhJTy80T0c3ODExTy9kZWZhdWx0LyIKbXF0dF9jbGllbnQgPSBtaXhpb3QuaW5pdF9NUVRUX2NsaWVudCgnbWl4aW8ubWl4bHkuY24nLCAiTWl4SU9fcHVibGljIiwgIk1peElPX3B1YmxpYyIsIE1RVFRfVVNSX1BSSikKb25ib2FyZF90ZnQuc2hvd3MoJ01PJyxzcGFjZSA9IDAsY2VudGVyID0gVHJ1ZSkKd2hpbGUgVHJ1ZToKICAgIHRpbWUuc2xlZXAoNSkKICAgIG1xdHRfY2xpZW50LnB1Ymxpc2goTVFUVF9VU1JfUFJKICsgJ+eOr+WigycsIG1peHB5LmZvcm1hdF9zdHIoeyLlhYnnhaciOm9uYm9hcmRfYWxzX2wuYWxzX3ZpcygpLCAi5aOw6Z+zIjpzb3VuZF9sZXZlbCgpLCAi6ZyH5YqoIjpvbmJvYXJkX2FjYy5zdHJlbmd0aCgpfSkpCg==</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-S3@元控青春"><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="bT/:3{_!mMLqgco)=Iln" x="-2026" y="-593"><value name="WIFINAME"><shadow type="text" id="J/Mh/Juyz}f^Y/xyOeY^"><field name="TEXT">fuhua3</field></shadow></value><value name="PASSWORD"><shadow type="text" id="xdMSva4MsIMU.c?rPX4c"><field name="TEXT">1234567890</field></shadow></value><next><block type="IOT_EMQX_INIT_AND_CONNECT_BY_MIXLY_CODE" id="Z.7h1X^w(QOZxQ@1^U[a"><value name="SERVER"><shadow type="text" id="FLDy/q`TaxV61IQ=uSW]"><field name="TEXT">mixio.mixly.cn</field></shadow></value><value name="KEY"><shadow type="iot_mixly_key" id="S5y[rgVap,$(*/{{fLyx"><field name="VISITOR_ID">4OG7811O</field></shadow></value><next><block type="IOT_MIXIO_SUBSCRIBE" id="{B=nG[l#MyN~iFB-(jF?"><value name="TOPIC"><shadow type="text" id="6k||iGel+0}bjRpp8S7a"><field name="TEXT">亮灯</field></shadow></value><value name="METHOD"><shadow type="factory_block_return" id="e=KV,HOF#bGbfwS]bAJ2"><field name="VALUE">method</field></shadow></value><next><block type="controls_whileUntil" id="Z4=8uD7unYlWdmNzX?~P"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="+I{!.@aML}^4@8Q5PmN?"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="iot_mixio_check" id="Lz$rfC_!23g2,_HQ05F7"></block></statement></block></next></block></next></block></next></block><block type="procedures_defnoreturn" id="uC,C*G#@zb@cXaZaz=[}" 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="bbcDC{,3Ms_,fDG5t(/{"><value name="IF0"><block type="logic_compare" id="G7@IobutFArEIOhU+p*p"><field name="OP">EQ</field><value name="A"><block type="variables_get" id="v|/[Kg@F.._H)MG3;,D*"><field name="VAR">msg</field></block></value><value name="B"><block type="text" id="cmTC[Z|ibUUgu]!@CH?c"><field name="TEXT">1</field></block></value></block></value><statement name="DO0"><block type="actuator_onboard_neopixel_rgb_all" id="3NoBv`]nueo]xi()2,.V"><value name="RVALUE"><shadow type="math_number" id="Sh4CK^X+R?uG@zuBLLmA"><field name="NUM">25</field></shadow></value><value name="GVALUE"><shadow type="math_number" id="EJ{Rm*iOj|rWR_l.+2:s"><field name="NUM">25</field></shadow></value><value name="BVALUE"><shadow type="math_number" id="EI^!Ue.gJu(Y]_NJ*p0w"><field name="NUM">25</field></shadow></value><next><block type="actuator_onboard_neopixel_write" id="B3byFcP4u_NwX5!uZS=I"></block></next></block></statement><next><block type="controls_if" id="A.Ut96hvYz{)15PzJBC,"><value name="IF0"><block type="logic_compare" id="P*gWjp01szPgx+|Nv+S:"><field name="OP">EQ</field><value name="A"><block type="variables_get" id=",C;rKW;MjSn8)_pQ(!Y,"><field name="VAR">msg</field></block></value><value name="B"><block type="text" id="3:RG*,k@8{1@auvdUd6)"><field name="TEXT">0</field></block></value></block></value><statement name="DO0"><block type="actuator_onboard_neopixel_rgb_all" id="gF|AGVy-EWi!W~z/83?A"><value name="RVALUE"><shadow type="math_number" id="mOY*,lDVho]rX*hsayju"><field name="NUM">0</field></shadow></value><value name="GVALUE"><shadow type="math_number" id="P##p?aC~F:du7}vtJ?WF"><field name="NUM">0</field></shadow></value><value name="BVALUE"><shadow type="math_number" id="@vkMaK`WI}@r1fy;I}wV"><field name="NUM">0</field></shadow></value><next><block type="actuator_onboard_neopixel_write" id="9]hP``r])Y(-wPTh:yl{"></block></next></block></statement></block></next></block></statement></block></xml><config>{}</config><code>aW1wb3J0IG1peGlvdAppbXBvcnQgbWFjaGluZQpmcm9tIHViaW5hc2NpaSBpbXBvcnQgaGV4bGlmeQpmcm9tIG1peGdvX25vdmEgaW1wb3J0IG9uYm9hcmRfcmdiCgpkZWYgbWV0aG9kKGNsaWVudCwgdG9waWMsIG1zZyk6CiAgICBpZiBtc2cgPT0gJzEnOgogICAgICAgIG9uYm9hcmRfcmdiLmZpbGwoKDI1LCAyNSwgMjUpKQogICAgICAgIG9uYm9hcmRfcmdiLndyaXRlKCkKICAgIGlmIG1zZyA9PSAnMCc6CiAgICAgICAgb25ib2FyZF9yZ2IuZmlsbCgoMCwgMCwgMCkpCiAgICAgICAgb25ib2FyZF9yZ2Iud3JpdGUoKQoKCgptaXhpb3Qud2xhbl9jb25uZWN0KCdmdWh1YTMnLCcxMjM0NTY3ODkwJykKTVFUVF9VU1JfUFJKID0gIk1peElPLzRPRzc4MTFPL2RlZmF1bHQvIgptcXR0X2NsaWVudCA9IG1peGlvdC5pbml0X01RVFRfY2xpZW50KCdtaXhpby5taXhseS5jbicsICJNaXhJT19wdWJsaWMiLCAiTWl4SU9fcHVibGljIiwgTVFUVF9VU1JfUFJKKQptcXR0X2NsaWVudC5zZXRfY2FsbGJhY2soJ+S6rueBrycsbWV0aG9kLCBNUVRUX1VTUl9QUkopCm1xdHRfY2xpZW50LnN1YnNjcmliZShNUVRUX1VTUl9QUkogKyAn5Lqu54GvJykKd2hpbGUgVHJ1ZToKICAgIG1xdHRfY2xpZW50LmNoZWNrX21zZygpCg==</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
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-S3@元控青春"><block type="system_print" id="Gxke?S:vR{7qyoy_o1`L" x="-1372" y="-566"><value name="VAR"><shadow type="text" id="Q~=$2kpUS/m_:5@joizI"><field name="TEXT">Mixly</field></shadow><block type="storage_list_all_files" id="MFBi?m@}:hes3-NicObS"></block></value><next><block type="system_print" id="FO8P01s8uT1D]zd~NV6o"><value name="VAR"><shadow type="text" id="O[im*);=5{2Lo|#5|nkH"><field name="TEXT">Mixly</field></shadow><block type="storage_get_current_dir" id="j:XTW62qr_.{`;RwFR_@"></block></value><next><block type="variables_set" id="pt8_AfNSp9Zf|(Ds0|g,"><field name="VAR">s</field><value name="VALUE"><block type="storage_list_all_files" id="/_hcB`DJ8.[`#|+7V0P1"></block></value><next><block type="controls_forEach" id="6U-9NSahM8W~kKO}JCwy"><value name="LIST"><shadow type="list_many_input" id="U|f:1]wi@GYDAo]crasc"><field name="CONTENT">0,1,2,3</field></shadow><block type="controls_range" id="pm}yZ4^;9,sfn]62s7uR"><value name="FROM"><shadow type="math_number" id="^:BL}EQ|jR+_Xli96.h?"><field name="NUM">0</field></shadow></value><value name="TO"><shadow type="math_number" id="Z9~2)9tnR0_|q,/Lz49#"><field name="NUM">5</field></shadow><block type="list_trig" id="{J19=go;V}x{:,/1c/^N"><field name="OP">LEN</field><value name="data"><shadow type="variables_get" id="ZrA:uE/!1KB3*^SUclH1"><field name="VAR">s</field></shadow></value></block></value><value name="STEP"><shadow type="math_number" id=")Z]8^T~`kHF3o$^@${(_"><field name="NUM">1</field></shadow></value></block></value><value name="VAR"><shadow type="variables_get" id="2-*hOgwZVc|]wYFNO_E+"><field name="VAR">i</field></shadow></value><statement name="DO"><block type="onboard_tft_show_image_or_string_delay" id=")$^e.)+.Fn0Lmb*{IQYq"><field name="center">False</field><value name="data"><shadow type="text" id="l[Mz:uRHOoQlJnG|7[HL"><field name="TEXT">Mixly</field></shadow><block type="lists_get_index" id="2!^wU7vY8z_]dlby=o5r"><value name="LIST"><shadow type="variables_get" id="OsrncMvoeEk|rM.8X)D("><field name="VAR">s</field></shadow></value><value name="AT"><shadow type="math_number" id="O^P+d8z{V:k8Yu7cZHVt"><field name="NUM">0</field></shadow><block type="variables_get" id="aq$X^N~*WPnmp3vus(7S"><field name="VAR">i</field></block></value></block></value><value name="x"><shadow type="math_number" id="#nWwrKjc(r~y`rYws8{*"><field name="NUM">0</field></shadow></value><value name="y"><shadow type="math_number" id="qi)[p.3jA-!Jdw[JO/F+"><field name="NUM">0</field></shadow><block type="math_arithmetic" id="CkRC#|szk+ybL8i*xVn9"><field name="OP">MULTIPLY</field><value name="A"><shadow type="math_number" id="ER{){q$DVrr~],R(n;e3"><field name="NUM">1</field></shadow><block type="variables_get" id="$TEdz!o)N9pO`9/E_)aQ"><field name="VAR">i</field></block></value><value name="B"><shadow type="math_number" id="}.QzmvHi*YFZE0oh#nHa"><field name="NUM">12</field></shadow></value></block></value><value name="size"><shadow type="math_number" id="l)rDs72j7ap],C~~=_)U"><field name="NUM">1</field></shadow></value><value name="space"><shadow type="math_number" id="q5D)K!hl_`*MpQF[cp$N"><field name="NUM">0</field></shadow></value><value name="VAR"><shadow type="tuple_create_with_text_return" id="!Lk[h!I{[0)p2Q+37fe?"><field name="TEXT">255,255,0</field></shadow><block type="display_color_seclet" id="wm_itA!kr53/8gr+1AuW"><field name="COLOR">#ffffff</field></block></value></block></statement></block></next></block></next></block></next></block></xml><config>{}</config><code>aW1wb3J0IG1hY2hpbmUKaW1wb3J0IG9zCmltcG9ydCBtYXRoCmZyb20gbWl4Z29fbm92YSBpbXBvcnQgb25ib2FyZF90ZnQKCgpwcmludChvcy5saXN0ZGlyKCkpCnByaW50KG9zLmdldGN3ZCgpKQpzID0gb3MubGlzdGRpcigpCmZvciBpIGluIHJhbmdlKDAsIGxlbihzKSwgMSk6CiAgICBvbmJvYXJkX3RmdC5zaG93cyhzW2ldLHggPSAwLHkgPSBpICogMTIsc2l6ZSA9IDEsc3BhY2UgPSAwLGNlbnRlciA9IEZhbHNlLGNvbG9yPTB4ZmZmZikK</code>
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
<xml version="Mixly 2.0 rc4" board="Python ESP32-S3@元控青春"><block type="storage_fileopen" id="B!dgJ#@NFrZpbXr.GHCb" x="-1453" y="-501"><field name="MODE">w</field><value name="FILENAME"><shadow type="text" id="`@sgqz:o@JzIt$1#*0z6"><field name="TEXT">test.txt</field></shadow></value><value name="FILE"><shadow type="variables_get" id="QR^NMQ_;*sE)^8U.,do]"><field name="VAR">f</field></shadow></value><next><block type="controls_forEach" id="G.:df/aGpCodaM@HgzFV"><value name="LIST"><shadow type="list_many_input" id=",+doun6:hvd}K|6ZalmB"><field name="CONTENT">0,1,2,3</field></shadow><block type="controls_range" id="7NUb5e@;P:i~_=(|k}*#"><value name="FROM"><shadow type="math_number" id="DZ*uzo.kp6|/Ej;c~_Wb"><field name="NUM">0</field></shadow></value><value name="TO"><shadow type="math_number" id="B-]R[xPxmP-6b_;~5UJP"><field name="NUM">100</field></shadow></value><value name="STEP"><shadow type="math_number" id="m)`lqK9tgU3y_n|CeR1W"><field name="NUM">1</field></shadow></value></block></value><value name="VAR"><shadow type="variables_get" id="!dg^[Lk@Cqa]]WlvW{TA"><field name="VAR">i</field></shadow></value><statement name="DO"><block type="storage_file_write" id="{/u^s{NFG3es@xShasCe"><value name="data"><shadow type="text" id="7v)rRSRLQJ8QjsB/xNe="><field name="TEXT">Mixly</field></shadow><block type="number_to_text" id="x*]_y1@jLsr/]J/a8)IE"><value name="VAR"><shadow type="variables_get" id="#ckYzru7qp7BV.NZg=l`"><field name="VAR">x</field></shadow><block type="variables_get" id="jtv-,v|wJ2^s2UJCm|D-"><field name="VAR">i</field></block></value></block></value><value name="FILE"><shadow type="variables_get" id="httJw9Z}5P`64s:JQ|jp"><field name="VAR">f</field></shadow></value><next><block type="storage_file_write" id="zKgUpp#QJH!/@O9jGOd+"><value name="data"><shadow type="text" id="7v)rRSRLQJ8QjsB/xNe="><field name="TEXT">Mixly</field></shadow><block type="ascii_to_char" id="=|.MSB;dz}aI,(li|C6a"><value name="VAR"><shadow type="math_number" id="z|4ZWrJ.c-bT))j^=GtX"><field name="NUM">13</field></shadow></value></block></value><value name="FILE"><shadow type="variables_get" id="{2]M]fU^D)6lfi)@jatM"><field name="VAR">f</field></shadow></value></block></next></block></statement><next><block type="storage_close_file" id="_aM],j(5l,`V}tLS6*0K"><value name="FILE"><shadow type="variables_get" id="Q(]5AfIH9]LY|dTq5{go"><field name="VAR">f</field></shadow></value><next><block type="storage_fileopen" id="!!w#J6zQ-q@_f7A)5|Hj"><field name="MODE">r</field><value name="FILENAME"><shadow type="text" id="`W23]hfu;$p[y7XdUaBs"><field name="TEXT">test.txt</field></shadow></value><value name="FILE"><shadow type="variables_get" id="^]u*VBv{jl3hobGB,I9d"><field name="VAR">f</field></shadow></value><next><block type="variables_set" id="A#I@gCdHY7r|7;l;_OB$"><field name="VAR">s</field><value name="VALUE"><block type="storage_get_contents_without_para" id="r)TFE8~c_Y,FG$FGNyFU"><field name="MODE">readline</field><value name="FILE"><shadow type="variables_get" id="$m!{Ju`77pbCt7C1IVdz"><field name="VAR">f</field></shadow></value></block></value><next><block type="controls_whileUntil" id="x0.8EcDpcp2#7w_5m[gl"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="$BHf8u@5(5;(mq8JIY7F"><field name="BOOL">TRUE</field></shadow><block type="variables_get" id="Cb)az{M34i9H)~q9fDbt"><field name="VAR">s</field></block></value><statement name="DO"><block type="system_print" id="]MswUIWJn{_?KqR!l(DF"><value name="VAR"><shadow type="text" id="IweC+,qh!]*k{/:ED{L3"><field name="TEXT">Mixly</field></shadow><block type="variables_get" id="p)@.{HEI[eKl,db3)L/W"><field name="VAR">s</field></block></value><next><block type="variables_set" id="x!2@,xIlFcu)VjrdcQp}"><field name="VAR">s</field><value name="VALUE"><block type="storage_get_contents_without_para" id="s(AgxWdgIY/JPLRaA42g"><field name="MODE">readline</field><value name="FILE"><shadow type="variables_get" id="FyN1kyXa,+GZdaX:EuXw"><field name="VAR">f</field></shadow></value></block></value></block></next></block></statement><next><block type="storage_close_file" id=";.HY?U2g]/YHq]]pKPcL"><value name="FILE"><shadow type="variables_get" id="AC0SBpQ,7wR#*v[n9o7U"><field name="VAR">f</field></shadow></value></block></next></block></next></block></next></block></next></block></next></block></next></block></xml><config>{}</config><code>aW1wb3J0IG1hY2hpbmUKCgpmID0gb3BlbigndGVzdC50eHQnLCAndycpCmZvciBpIGluIHJhbmdlKDAsIDEwMCwgMSk6CiAgICBmLndyaXRlKHN0cihpKSkKICAgIGYud3JpdGUoY2hyKDEzKSkKZi5jbG9zZSgpCmYgPSBvcGVuKCd0ZXN0LnR4dCcsICdyJykKcyA9IGYucmVhZGxpbmUoKQp3aGlsZSBzOgogICAgcHJpbnQocykKICAgIHMgPSBmLnJlYWRsaW5lKCkKZi5jbG9zZSgpCg==</code>
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user