初始化提交

This commit is contained in:
王立帮
2024-07-19 10:16:00 +08:00
parent 4c7b571f20
commit 4a2d56dcc4
7084 changed files with 741212 additions and 63 deletions

View File

@@ -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

View File

@@ -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()

View File

@@ -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()

View File

@@ -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()

View File

@@ -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()

View File

@@ -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']

View File

@@ -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)

View File

@@ -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

View File

@@ -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)

View 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": []
}
}
}

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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

View File

@@ -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>

View File

@@ -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

View File

@@ -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

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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

View File

@@ -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>

View File

@@ -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>

View File

@@ -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

View File

@@ -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

View File

@@ -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>

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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>

View File

@@ -0,0 +1 @@
<xml version="Mixly 2.0 rc4" board="Python ESP32-S3@元控青春"><block type="storage_fileopen" id="B!dgJ#@NFrZpbXr.GHCb" x="-1699" y="-580"><field name="MODE">w</field><value name="FILENAME"><shadow type="text" id="`@sgqz:o@JzIt$1#*0z6"><field name="TEXT">test.bin</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="z@4G!d:7UmWS24lpQ*yc"><value name="LIST"><shadow type="list_many_input" id=";=I|;Lv`952q?Ac]y35("><field name="CONTENT">0,1,2,3</field></shadow><block type="controls_range" id="Y/tW0G$aA*C79uX;]H1E"><value name="FROM"><shadow type="math_number" id="[bcL#B^onX[aWPz0E=-P"><field name="NUM">0</field></shadow></value><value name="TO"><shadow type="math_number" id="t#wqm-)bkpcw^DrCzx$r"><field name="NUM">100</field></shadow></value><value name="STEP"><shadow type="math_number" id="j|3mr]BL4[}42Mo059/G"><field name="NUM">1</field></shadow></value></block></value><value name="VAR"><shadow type="variables_get" id="e;gN+kJKZ_ojr.0j#W+D"><field name="VAR">i</field></shadow></value><statement name="DO"><block type="storage_file_write" id="5MLcsk1I}vLq9d2D1EuF"><value name="data"><shadow type="text" id="Qar`ySl(@9s3#o6$yLGa"><field name="TEXT">Mixly</field></shadow><block type="number_to_text" id="b~20/!]B69$b?0WKm6uJ"><value name="VAR"><shadow type="variables_get" id="$@U0AAHyeX{ht+n8$-Ao"><field name="VAR">x</field></shadow><block type="sensor_sound" id="6F7ex(z7R`jZ)r*4{_hm"></block></value></block></value><value name="FILE"><shadow type="variables_get" id="uP-7Pn(zExSFcuk!(Mzt"><field name="VAR">f</field></shadow></value><next><block type="storage_file_write" id="t07S}:T|+jin=I2=MfX+"><value name="data"><shadow type="text" id="Qar`ySl(@9s3#o6$yLGa"><field name="TEXT">Mixly</field></shadow><block type="ascii_to_char" id="0w0,5hFk.zX`Tky|a8WF"><value name="VAR"><shadow type="math_number" id="25Yj)Zn`0MfIbbcjOvi}"><field name="NUM">13</field></shadow></value></block></value><value name="FILE"><shadow type="variables_get" id="Z9#hB8VIKWbDc(#fN]Lm"><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.bin</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="(kFlq~,T36BtTc,_?0O."><field name="MODE">readline</field><value name="FILE"><shadow type="variables_get" id="tlF`_!_/pO)*_6)}?36c"><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="Q:O(taktczxM0i75em9-"><field name="VAR">s</field><value name="VALUE"><block type="storage_get_contents_without_para" id=".hPiIQxq]Zr=J(wdX!VB"><field name="MODE">readline</field><value name="FILE"><shadow type="variables_get" id="eWxt#y)1I;j2FmN0[C@{"><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>ZnJvbSBtaXhnb19ub3ZhX3ZvaWNlIGltcG9ydCBzb3VuZF9sZXZlbAppbXBvcnQgbWFjaGluZQoKCmYgPSBvcGVuKCd0ZXN0LmJpbicsICd3JykKZm9yIGkgaW4gcmFuZ2UoMCwgMTAwLCAxKToKICAgIGYud3JpdGUoc3RyKHNvdW5kX2xldmVsKCkpKQogICAgZi53cml0ZShjaHIoMTMpKQpmLmNsb3NlKCkKZiA9IG9wZW4oJ3Rlc3QuYmluJywgJ3InKQpzID0gZi5yZWFkbGluZSgpCndoaWxlIHM6CiAgICBwcmludChzKQogICAgcyA9IGYucmVhZGxpbmUoKQpmLmNsb3NlKCkK</code>

View File

@@ -0,0 +1 @@
<xml version="Mixly 2.0 rc4" board="Python ESP32-S3@元控青春"><block type="actuator_mixgo_nova_record_audio" id="jI[/nYwAg1hz!AX_~-II" x="-1810" y="-511"><value name="PATH"><shadow type="text" id="y;z=Z6sL=|![sd/)VHTf"><field name="TEXT">/1.wav</field></shadow></value><value name="TIME"><shadow type="math_number" id="~`f#zW;!Bf2Ukk;0CvRr"><field name="NUM">5</field></shadow></value><next><block type="actuator_mixgo_nova_record_audio" id="8VbJVmoR)zUqCmG+AalJ"><value name="PATH"><shadow type="text" id="+1?`|Tk6*rkQEyglo!}c"><field name="TEXT">/1.wav</field></shadow></value><value name="TIME"><shadow type="math_number" id="b8r={1~XVzAa=X$+HCjW"><field name="NUM">5</field></shadow></value><next><block type="storage_fileopen" id="RoI^M;fdi|CKepHsu^u$"><field name="MODE">rb</field><value name="FILENAME"><shadow type="text" id="-K@C0`7!!37fA[c,VCH$"><field name="TEXT">/1.wav</field></shadow></value><value name="FILE"><shadow type="variables_get" id="GNjWz8Fzls{b[L7c64m!"><field name="VAR">f</field></shadow></value><next><block type="variables_set" id="9J/K_h(pt:)UuQA73#@W"><field name="VAR">d</field><value name="VALUE"><block type="storage_get_contents" id=")cQm0w8mgXg;7.lr-[f:"><field name="MODE">read</field><value name="FILE"><shadow type="variables_get" id="dh^kazKF[}IyjjWgkJQ)"><field name="VAR">f</field></shadow></value><value name="SIZE"><shadow type="math_number" id="eK7|E3N;kKe4EQYi)X+*"><field name="NUM">100</field></shadow></value></block></value><next><block type="controls_whileUntil" id="_oQV9s@jOhh~Bnzl(tVQ"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="48@@}cW=g9+WxIh7U67#"><field name="BOOL">TRUE</field></shadow><block type="variables_get" id="T#f-i?V@c!Db5.1ZXlp1"><field name="VAR">d</field></block></value><statement name="DO"><block type="system_print" id="V$XXFY*z+B_lVl8vj#BL"><value name="VAR"><shadow type="text" id="q3@5D`H!Y+M[)*f77SP4"><field name="TEXT">Mixly</field></shadow><block type="variables_get" id="$rDOfOkb5u^BAg!BGYe2"><field name="VAR">d</field></block></value><next><block type="variables_set" id="5[rUy_6[0[c.XN/r/]k="><field name="VAR">d</field><value name="VALUE"><block type="storage_get_contents" id=":R0;Vt!rfa61#!6US,;h"><field name="MODE">read</field><value name="FILE"><shadow type="variables_get" id="?k7680PAH95YX+!XP}qB"><field name="VAR">f</field></shadow></value><value name="SIZE"><shadow type="math_number" id="|Kdc;1[a8/[6MZ/2!7$-"><field name="NUM">100</field></shadow></value></block></value></block></next></block></statement><next><block type="storage_close_file" id="#zMX)3F_sqjyJM;UF;-y"><value name="FILE"><shadow type="variables_get" id="8Wi3B2o8S`8DtY($v_-]"><field name="VAR">f</field></shadow></value></block></next></block></next></block></next></block></next></block></next></block></xml><config>{}</config><code>ZnJvbSBtaXhnb19ub3ZhX3ZvaWNlIGltcG9ydCByZWNvcmRfYXVkaW8KaW1wb3J0IG1hY2hpbmUKCgpyZWNvcmRfYXVkaW8oJy8xLndhdicsIDUpCnJlY29yZF9hdWRpbygnLzEud2F2JywgNSkKZiA9IG9wZW4oJy8xLndhdicsICdyYicpCmQgPSBmLnJlYWQoMTAwKQp3aGlsZSBkOgogICAgcHJpbnQoZCkKICAgIGQgPSBmLnJlYWQoMTAwKQpmLmNsb3NlKCkK</code>

View File

@@ -0,0 +1 @@
<xml version="Mixly 2.0 rc4" board="Python ESP32-S3@元控青春"><block type="display_show_image_or_string_delay" id="hD`B(oc]1rwMtw8$F@3t" x="-1857" y="-710"><field name="center">True</field><value name="data"><shadow type="text" id="!!d=(e;/}s!g,Ky;B7Ru"><field name="TEXT">B1录B2放</field></shadow></value><value name="space"><shadow type="math_number" id="C~O1()U0[eB:+3P)7.yT"><field name="NUM">0</field></shadow></value><next><block type="controls_whileUntil" id="Aj?/:btKCC+3m5~`_USF"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="ZtIgS[QvldWWi,9Of}{g"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="controls_if" id="n~7L]4Z-)KwCj-xXS.Ky"><value name="IF0"><block type="sensor_mixgo_button_was_pressed" id="h*fp_a.R(2en+*.jyIlX"><value name="btn"><shadow type="pins_button" id="p7|Xr-Hx[i(EH~ua9)`6"><field name="PIN">B1key</field></shadow></value></block></value><statement name="DO0"><block type="display_show_image_or_string_delay" id="?+`OPc2*)LrF(s#f1|Fc"><field name="center">True</field><value name="data"><shadow type="text" id="],,L?DH]-Df2torowjs/"><field name="TEXT">录</field></shadow></value><value name="space"><shadow type="math_number" id=":pPwDrp[**~sMzUt[o~e"><field name="NUM">0</field></shadow></value><next><block type="actuator_mixgo_nova_record_audio" id="jI[/nYwAg1hz!AX_~-II"><value name="PATH"><shadow type="text" id="y;z=Z6sL=|![sd/)VHTf"><field name="TEXT">/1.wav</field></shadow></value><value name="TIME"><shadow type="math_number" id="~`f#zW;!Bf2Ukk;0CvRr"><field name="NUM">5</field></shadow></value><next><block type="onboard_tft_clear" id="z(WI9NNG.Lp9x~g1Y^Z_"></block></next></block></next></block></statement><next><block type="controls_if" id="f**r0(};O1y[5gb#SjqK"><value name="IF0"><block type="sensor_mixgo_button_was_pressed" id="lK=m}/n*,zP-~@UnvK{^"><value name="btn"><shadow type="pins_button" id="(,j/ma1BN+9yXPo!F_}U"><field name="PIN">B2key</field></shadow></value></block></value><statement name="DO0"><block type="display_show_image_or_string_delay" id="|p(@Kpep=k)4PucPU*n0"><field name="center">True</field><value name="data"><shadow type="text" id="?`ZQD(1I_$#HKGu:qRkf"><field name="TEXT">放</field></shadow></value><value name="space"><shadow type="math_number" id="2T#Fdau{IL,9;SZr6P0c"><field name="NUM">0</field></shadow></value><next><block type="actuator_mixgo_nova_play_audio" id=":WFS=7Cl^x}qcj!=Gx:s"><value name="PATH"><shadow type="text" id=";T[j]zobqcI*610wGzGK"><field name="TEXT">/1.wav</field></shadow></value><next><block type="onboard_tft_clear" id="AqeRVxzste5gxXROr$0-"></block></next></block></next></block></statement></block></next></block></statement></block></next></block></xml><config>{}</config><code>ZnJvbSBtaXhnb19ub3ZhIGltcG9ydCBvbmJvYXJkX3RmdAppbXBvcnQgbWl4Z29fbm92YQpmcm9tIG1peGdvX25vdmFfdm9pY2UgaW1wb3J0IHJlY29yZF9hdWRpbwpmcm9tIG1peGdvX25vdmFfdm9pY2UgaW1wb3J0IHBsYXlfYXVkaW8KCgpvbmJvYXJkX3RmdC5zaG93cygnQjHlvZVCMuaUvicsc3BhY2UgPSAwLGNlbnRlciA9IFRydWUpCndoaWxlIFRydWU6CiAgICBpZiBtaXhnb19ub3ZhLkIxa2V5Lndhc19wcmVzc2VkKCk6CiAgICAgICAgb25ib2FyZF90ZnQuc2hvd3MoJ+W9lScsc3BhY2UgPSAwLGNlbnRlciA9IFRydWUpCiAgICAgICAgcmVjb3JkX2F1ZGlvKCcvMS53YXYnLCA1KQogICAgICAgIG9uYm9hcmRfdGZ0LmZpbGwoMCkKICAgICAgICBvbmJvYXJkX3RmdC5zaG93KCkKICAgIGlmIG1peGdvX25vdmEuQjJrZXkud2FzX3ByZXNzZWQoKToKICAgICAgICBvbmJvYXJkX3RmdC5zaG93cygn5pS+JyxzcGFjZSA9IDAsY2VudGVyID0gVHJ1ZSkKICAgICAgICBwbGF5X2F1ZGlvKCcvMS53YXYnKQogICAgICAgIG9uYm9hcmRfdGZ0LmZpbGwoMCkKICAgICAgICBvbmJvYXJkX3RmdC5zaG93KCkK</code>

View File

@@ -0,0 +1 @@
<xml version="Mixly 2.0 rc4" board="Python ESP32-S3@元控青春"><block type="display_show_image_or_string_delay" id="hD`B(oc]1rwMtw8$F@3t" x="-1857" y="-710"><field name="center">True</field><value name="data"><shadow type="text" id="!!d=(e;/}s!g,Ky;B7Ru"><field name="TEXT">B1录B2放</field></shadow></value><value name="space"><shadow type="math_number" id="C~O1()U0[eB:+3P)7.yT"><field name="NUM">0</field></shadow></value><next><block type="controls_whileUntil" id="Aj?/:btKCC+3m5~`_USF"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="ZtIgS[QvldWWi,9Of}{g"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="controls_if" id="n~7L]4Z-)KwCj-xXS.Ky"><value name="IF0"><block type="sensor_mixgo_button_was_pressed" id="h*fp_a.R(2en+*.jyIlX"><value name="btn"><shadow type="pins_button" id="p7|Xr-Hx[i(EH~ua9)`6"><field name="PIN">B1key</field></shadow></value></block></value><statement name="DO0"><block type="display_show_image_or_string_delay" id="?+`OPc2*)LrF(s#f1|Fc"><field name="center">True</field><value name="data"><shadow type="text" id="],,L?DH]-Df2torowjs/"><field name="TEXT">录</field></shadow></value><value name="space"><shadow type="math_number" id=":pPwDrp[**~sMzUt[o~e"><field name="NUM">0</field></shadow></value><next><block type="actuator_mixgo_nova_record_audio" id="jI[/nYwAg1hz!AX_~-II"><value name="PATH"><shadow type="text" id="y;z=Z6sL=|![sd/)VHTf"><field name="TEXT">/sd/1.wav</field></shadow></value><value name="TIME"><shadow type="math_number" id="~`f#zW;!Bf2Ukk;0CvRr"><field name="NUM">5</field></shadow></value><next><block type="onboard_tft_clear" id="z(WI9NNG.Lp9x~g1Y^Z_"></block></next></block></next></block></statement><next><block type="controls_if" id="f**r0(};O1y[5gb#SjqK"><value name="IF0"><block type="sensor_mixgo_button_was_pressed" id="lK=m}/n*,zP-~@UnvK{^"><value name="btn"><shadow type="pins_button" id="(,j/ma1BN+9yXPo!F_}U"><field name="PIN">B2key</field></shadow></value></block></value><statement name="DO0"><block type="display_show_image_or_string_delay" id="|p(@Kpep=k)4PucPU*n0"><field name="center">True</field><value name="data"><shadow type="text" id="?`ZQD(1I_$#HKGu:qRkf"><field name="TEXT">放</field></shadow></value><value name="space"><shadow type="math_number" id="2T#Fdau{IL,9;SZr6P0c"><field name="NUM">0</field></shadow></value><next><block type="actuator_mixgo_nova_play_audio" id=":WFS=7Cl^x}qcj!=Gx:s"><value name="PATH"><shadow type="text" id=";T[j]zobqcI*610wGzGK"><field name="TEXT">/sd/1.wav</field></shadow></value><next><block type="onboard_tft_clear" id="AqeRVxzste5gxXROr$0-"></block></next></block></next></block></statement></block></next></block></statement></block></next></block></xml><config>{}</config><code>ZnJvbSBtaXhnb19ub3ZhIGltcG9ydCBvbmJvYXJkX3RmdAppbXBvcnQgbWl4Z29fbm92YQpmcm9tIG1peGdvX25vdmFfdm9pY2UgaW1wb3J0IHJlY29yZF9hdWRpbwpmcm9tIG1peGdvX25vdmFfdm9pY2UgaW1wb3J0IHBsYXlfYXVkaW8KCgpvbmJvYXJkX3RmdC5zaG93cygnQjHlvZVCMuaUvicsc3BhY2UgPSAwLGNlbnRlciA9IFRydWUpCndoaWxlIFRydWU6CiAgICBpZiBtaXhnb19ub3ZhLkIxa2V5Lndhc19wcmVzc2VkKCk6CiAgICAgICAgb25ib2FyZF90ZnQuc2hvd3MoJ+W9lScsc3BhY2UgPSAwLGNlbnRlciA9IFRydWUpCiAgICAgICAgcmVjb3JkX2F1ZGlvKCcvc2QvMS53YXYnLCA1KQogICAgICAgIG9uYm9hcmRfdGZ0LmZpbGwoMCkKICAgICAgICBvbmJvYXJkX3RmdC5zaG93KCkKICAgIGlmIG1peGdvX25vdmEuQjJrZXkud2FzX3ByZXNzZWQoKToKICAgICAgICBvbmJvYXJkX3RmdC5zaG93cygn5pS+JyxzcGFjZSA9IDAsY2VudGVyID0gVHJ1ZSkKICAgICAgICBwbGF5X2F1ZGlvKCcvc2QvMS53YXYnKQogICAgICAgIG9uYm9hcmRfdGZ0LmZpbGwoMCkKICAgICAgICBvbmJvYXJkX3RmdC5zaG93KCkK</code>

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,334 @@
{
"MixGo Nova": {
"01-1-快速入门-你好世界.mix": {
"__file__": true,
"__name__": "01-1-快速入门-你好世界.mix"
},
"01-2-快速入门-你好世界2.mix": {
"__file__": true,
"__name__": "01-2-快速入门-你好世界2.mix"
},
"02-1-快速入门-跳动的心.mix": {
"__file__": true,
"__name__": "02-1-快速入门-跳动的心.mix"
},
"02-2-快速入门-为你心动.mix": {
"__file__": true,
"__name__": "02-2-快速入门-为你心动.mix"
},
"03-1-快速入门-心随我动.mix": {
"__file__": true,
"__name__": "03-1-快速入门-心随我动.mix"
},
"03-2-快速入门-心随我动2.mix": {
"__file__": true,
"__name__": "03-2-快速入门-心随我动2.mix"
},
"04-1-快速入门-流动的灯.mix": {
"__file__": true,
"__name__": "04-1-快速入门-流动的灯.mix"
},
"04-2-快速入门-流动的灯2.mix": {
"__file__": true,
"__name__": "04-2-快速入门-流动的灯2.mix"
},
"05-1-过程控制-双键开关.mix": {
"__file__": true,
"__name__": "05-1-过程控制-双键开关.mix"
},
"05-2-过程控制-单键开关.mix": {
"__file__": true,
"__name__": "05-2-过程控制-单键开关.mix"
},
"05-3-过程控制-IPO概念.mix": {
"__file__": true,
"__name__": "05-3-过程控制-IPO概念.mix"
},
"06-1-过程控制-声音采集.mix": {
"__file__": true,
"__name__": "06-1-过程控制-声音采集.mix"
},
"06-2-过程控制-看见声音.mix": {
"__file__": true,
"__name__": "06-2-过程控制-看见声音.mix"
},
"07-1-过程控制-光强采集.mix": {
"__file__": true,
"__name__": "07-1-过程控制-光强采集.mix"
},
"07-2-过程控制-自动补光.mix": {
"__file__": true,
"__name__": "07-2-过程控制-自动补光.mix"
},
"08-1-过程控制-接近检测.mix": {
"__file__": true,
"__name__": "08-1-过程控制-接近检测.mix"
},
"08-2-过程控制-入侵报警.mix": {
"__file__": true,
"__name__": "08-2-过程控制-入侵报警.mix"
},
"09-1-输入输出-加速度.mix": {
"__file__": true,
"__name__": "09-1-输入输出-加速度.mix"
},
"09-2-输入输出-平衡仪.mix": {
"__file__": true,
"__name__": "09-2-输入输出-平衡仪.mix"
},
"10-1-输入输出-温湿度.mix": {
"__file__": true,
"__name__": "10-1-输入输出-温湿度.mix"
},
"10-2-输入输出-地磁金属探测.mix": {
"__file__": true,
"__name__": "10-2-输入输出-地磁金属探测.mix"
},
"11-1-输入输出-数字触摸.mix": {
"__file__": true,
"__name__": "11-1-输入输出-数字触摸.mix"
},
"11-2-输入输出-模拟触摸.mix": {
"__file__": true,
"__name__": "11-2-输入输出-模拟触摸.mix"
},
"12-1-输入输出-实时时钟.mix": {
"__file__": true,
"__name__": "12-1-输入输出-实时时钟.mix"
},
"12-2-输入输出-实时时钟2.mix": {
"__file__": true,
"__name__": "12-2-输入输出-实时时钟2.mix"
},
"13-1-逻辑计算-手速测试.mix": {
"__file__": true,
"__name__": "13-1-逻辑计算-手速测试.mix"
},
"13-2-逻辑计算-手速测试2.mix": {
"__file__": true,
"__name__": "13-2-逻辑计算-手速测试2.mix"
},
"14-1-逻辑计算-反应测试.mix": {
"__file__": true,
"__name__": "14-1-逻辑计算-反应测试.mix"
},
"14-2-逻辑计算-反应测试2.mix": {
"__file__": true,
"__name__": "14-2-逻辑计算-反应测试2.mix"
},
"15-1-逻辑计算-简单打地鼠.mix": {
"__file__": true,
"__name__": "15-1-逻辑计算-简单打地鼠.mix"
},
"15-2-逻辑计算-计时打地鼠.mix": {
"__file__": true,
"__name__": "15-2-逻辑计算-计时打地鼠.mix"
},
"16-1-逻辑计算-开始打地鼠.mix": {
"__file__": true,
"__name__": "16-1-逻辑计算-开始打地鼠.mix"
},
"16-2-逻辑计算-循环打地鼠.mix": {
"__file__": true,
"__name__": "16-2-逻辑计算-循环打地鼠.mix"
},
"17-0-复杂控制-非中断效果.mix": {
"__file__": true,
"__name__": "17-0-复杂控制-非中断效果.mix"
},
"17-1-复杂控制-双键中断.mix": {
"__file__": true,
"__name__": "17-1-复杂控制-双键中断.mix"
},
"17-2-复杂控制-单键中断.mix": {
"__file__": true,
"__name__": "17-2-复杂控制-单键中断.mix"
},
"18-1-复杂控制-定时计时.mix": {
"__file__": true,
"__name__": "18-1-复杂控制-定时计时.mix"
},
"18-2-复杂控制-循环计时.mix": {
"__file__": true,
"__name__": "18-2-复杂控制-循环计时.mix"
},
"19-1-复杂控制-多线程.mix": {
"__file__": true,
"__name__": "19-1-复杂控制-多线程.mix"
},
"19-2-复杂控制-多线程与中断.mix": {
"__file__": true,
"__name__": "19-2-复杂控制-多线程与中断.mix"
},
"20-1-复杂控制-异常.mix": {
"__file__": true,
"__name__": "20-1-复杂控制-异常.mix"
},
"20-2-复杂控制-异常处理.mix": {
"__file__": true,
"__name__": "20-2-复杂控制-异常处理.mix"
},
"21-1-射频识别-读取测试.mix": {
"__file__": true,
"__name__": "21-1-射频识别-读取测试.mix"
},
"21-2-射频识别-读取卡号.mix": {
"__file__": true,
"__name__": "21-2-射频识别-读取卡号.mix"
},
"22-1-射频识别-写卡测试.mix": {
"__file__": true,
"__name__": "22-1-射频识别-写卡测试.mix"
},
"22-2-射频识别-持续写卡.mix": {
"__file__": true,
"__name__": "22-2-射频识别-持续写卡.mix"
},
"23-1-蓝牙通讯-主机模式.mix": {
"__file__": true,
"__name__": "23-1-蓝牙通讯-主机模式.mix"
},
"23-1-蓝牙通讯-从机模式.mix": {
"__file__": true,
"__name__": "23-1-蓝牙通讯-从机模式.mix"
},
"24-1-无线广播-通讯测试.mix": {
"__file__": true,
"__name__": "24-1-无线广播-通讯测试.mix"
},
"24-2-无线广播-防丢检测.mix": {
"__file__": true,
"__name__": "24-2-无线广播-防丢检测.mix"
},
"25-1-红外遥控-收发测试.mix": {
"__file__": true,
"__name__": "25-1-红外遥控-收发测试.mix"
},
"25-2-红外遥控-遥控点灯.mix": {
"__file__": true,
"__name__": "25-2-红外遥控-遥控点灯.mix"
},
"26-1-红外遥控-学习编码.mix": {
"__file__": true,
"__name__": "26-1-红外遥控-学习编码.mix"
},
"26-2-红外遥控-万能遥控.mix": {
"__file__": true,
"__name__": "26-2-红外遥控-万能遥控.mix"
},
"27-1-红外接近-挥手速度.mix": {
"__file__": true,
"__name__": "27-1-红外接近-挥手速度.mix"
},
"27-2-红外接近-双挥手速度.mix": {
"__file__": true,
"__name__": "27-2-红外接近-双挥手速度.mix"
},
"28-1-红外接近-双门人数统计.mix": {
"__file__": true,
"__name__": "28-1-红外接近-双门人数统计.mix"
},
"28-2-红外接近-单门人数统计.mix": {
"__file__": true,
"__name__": "28-2-红外接近-单门人数统计.mix"
},
"29-1-物联网-简单数据定时上报.mix": {
"__file__": true,
"__name__": "29-1-物联网-简单数据定时上报.mix"
},
"29-2-物联网-复杂数据定时上报.mix": {
"__file__": true,
"__name__": "29-2-物联网-复杂数据定时上报.mix"
},
"30-1-物联网-简单数据按需上报.mix": {
"__file__": true,
"__name__": "30-1-物联网-简单数据按需上报.mix"
},
"30-2-物联网-高级数据按需上报.mix": {
"__file__": true,
"__name__": "30-2-物联网-高级数据按需上报.mix"
},
"31-1-物联网-单主题数据订阅.mix": {
"__file__": true,
"__name__": "31-1-物联网-单主题数据订阅.mix"
},
"31-2-物联网-单主题数据订阅2.mix": {
"__file__": true,
"__name__": "31-2-物联网-单主题数据订阅2.mix"
},
"32-1-物联网-多主题数据订.mix": {
"__file__": true,
"__name__": "32-1-物联网-多主题数据订.mix"
},
"32-2-物联网-多主题数据订2.mix": {
"__file__": true,
"__name__": "32-2-物联网-多主题数据订2.mix"
},
"33-1-课堂互动-自由签到.mix": {
"__file__": true,
"__name__": "33-1-课堂互动-自由签到.mix"
},
"33-2-课堂互动-按需签到.mix": {
"__file__": true,
"__name__": "33-2-课堂互动-按需签到.mix"
},
"34-1-课堂互动-一人抢答.mix": {
"__file__": true,
"__name__": "34-1-课堂互动-一人抢答.mix"
},
"34-2-课堂互动-多人抢答.mix": {
"__file__": true,
"__name__": "34-2-课堂互动-多人抢答.mix"
},
"35-1-课堂互动-单选答题.mix": {
"__file__": true,
"__name__": "35-1-课堂互动-单选答题.mix"
},
"35-2-课堂互动-多选答题.mix": {
"__file__": true,
"__name__": "35-2-课堂互动-多选答题.mix"
},
"36-1-课堂互动-点名答题.mix": {
"__file__": true,
"__name__": "36-1-课堂互动-点名答题.mix"
},
"36-2-课堂互动-多人点答.mix": {
"__file__": true,
"__name__": "36-2-课堂互动-多人点答.mix"
},
"37-1-文件操作-列出文件.mix": {
"__file__": true,
"__name__": "37-1-文件操作-列出文件.mix"
},
"37-2-文件操作-列出文件2.mix": {
"__file__": true,
"__name__": "37-2-文件操作-列出文件2.mix"
},
"38-1-文件操作-文件读写.mix": {
"__file__": true,
"__name__": "38-1-文件操作-文件读写.mix"
},
"38-2-文件操作-文件读写2.mix": {
"__file__": true,
"__name__": "38-2-文件操作-文件读写2.mix"
},
"39-1-文件操作-录音播放.mix": {
"__file__": true,
"__name__": "39-1-文件操作-录音播放.mix"
},
"39-1-文件操作-录音播放2.mix": {
"__file__": true,
"__name__": "39-1-文件操作-录音播放2.mix"
},
"40-1-文件操作-SD录音播放2.mix": {
"__file__": true,
"__name__": "40-1-文件操作-SD录音播放2.mix"
},
"40-2-文件操作-SD采集重现.mix": {
"__file__": true,
"__name__": "40-2-文件操作-SD采集重现.mix"
},
"__file__": false,
"__name__": "MixGo Nova"
}
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 206 KiB

Some files were not shown because too many files have changed in this diff Show More