初始化提交
This commit is contained in:
3
boards/default_src/micropython/.npmignore
Normal file
3
boards/default_src/micropython/.npmignore
Normal file
@@ -0,0 +1,3 @@
|
||||
node_modules
|
||||
build
|
||||
origin
|
||||
482
boards/default_src/micropython/blocks/actuator.js
Normal file
482
boards/default_src/micropython/blocks/actuator.js
Normal file
@@ -0,0 +1,482 @@
|
||||
import * as Blockly from 'blockly/core';
|
||||
|
||||
const ACTUATOR_HUE = 100;
|
||||
|
||||
//Servo
|
||||
export const servo_move = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_HUE);
|
||||
this.appendValueInput("PIN", Number)
|
||||
.appendField(Blockly.Msg.MIXLY_SERVO)
|
||||
.appendField(Blockly.Msg.MIXLY_PIN)
|
||||
.setCheck(Number);
|
||||
this.appendValueInput("DEGREE", Number)
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.MIXLY_DEGREE_0_180);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_SERVO_MOVE);
|
||||
}
|
||||
};
|
||||
|
||||
//LED
|
||||
export const number = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
["1", "1"],
|
||||
["2", "2"]
|
||||
]), 'op')
|
||||
this.setOutput(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const ledswitch = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.MIXLY_ESP32_ON, "1"],
|
||||
[Blockly.Msg.MIXLY_ESP32_OFF, "0"],
|
||||
[Blockly.Msg.MIXLY_ESP32_TOGGLE, "-1"]
|
||||
]), "flag");
|
||||
this.setOutput(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_INOUT_HIGHLOW);
|
||||
}
|
||||
};
|
||||
|
||||
export const actuator_extern_led_bright = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_SETTING)
|
||||
.appendField(Blockly.Msg.MIXLY_EXTERN_LED)
|
||||
this.appendValueInput("PIN", Number)
|
||||
.appendField(Blockly.Msg.MIXLY_PIN)
|
||||
.setCheck(Number);
|
||||
this.appendValueInput('bright')
|
||||
.appendField(Blockly.Msg.MIXLY_PULSEIN_STAT)
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_EXTERN_LED_SETONOFF);
|
||||
}
|
||||
};
|
||||
|
||||
export const actuator_extern_get_led_bright = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)
|
||||
.appendField(Blockly.Msg.MIXLY_EXTERN_LED)
|
||||
this.appendValueInput("PIN", Number)
|
||||
.appendField(Blockly.Msg.MIXLY_PIN)
|
||||
.setCheck(Number);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_PULSEIN_STAT)
|
||||
this.setOutput(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_EXTERN_LED_GETONOFF);
|
||||
}
|
||||
};
|
||||
|
||||
export const actuator_extern_led_brightness = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_SETTING)
|
||||
.appendField(Blockly.Msg.MIXLY_EXTERN_LED)
|
||||
this.appendValueInput("PIN", Number)
|
||||
.appendField(Blockly.Msg.MIXLY_PIN)
|
||||
.setCheck(Number);
|
||||
this.appendValueInput('bright')
|
||||
.appendField(Blockly.Msg.MIXLY_BRIGHTNESS)
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_EXTERN_LED_SETBRIGHT);
|
||||
}
|
||||
};
|
||||
|
||||
export const actuator_led_bright = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_SETTING);
|
||||
this.appendValueInput('led')
|
||||
.appendField(Blockly.Msg.MIXLY_BUILDIN_LED)
|
||||
this.appendValueInput('bright')
|
||||
.appendField(Blockly.Msg.MIXLY_PULSEIN_STAT)
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_LED_SETONOFF);
|
||||
}
|
||||
};
|
||||
|
||||
export const actuator_get_led_bright = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET);
|
||||
this.appendValueInput('led')
|
||||
.appendField(Blockly.Msg.MIXLY_BUILDIN_LED)
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_PULSEIN_STAT)
|
||||
this.setOutput(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_LED_GETONOFF);
|
||||
}
|
||||
};
|
||||
|
||||
export const actuator_led_brightness = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_SETTING);
|
||||
this.appendValueInput('led')
|
||||
.appendField(Blockly.Msg.MIXLY_BUILDIN_LED)
|
||||
this.appendValueInput('bright')
|
||||
.appendField(Blockly.Msg.MIXLY_BRIGHTNESS)
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_LED_SETBRIGHT);
|
||||
}
|
||||
};
|
||||
|
||||
//music
|
||||
export const esp32_music_pitch = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_HUE);
|
||||
this.appendValueInput("PIN", Number)
|
||||
.appendField(Blockly.Msg.MIXLY_TONE)
|
||||
.appendField(Blockly.Msg.MIXLY_PIN)
|
||||
.setCheck(Number);
|
||||
this.appendValueInput('pitch')
|
||||
.setCheck(Number)
|
||||
.appendField(Blockly.Msg.MIXLY_FREQUENCY);
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_BLOCKGROUP_TONE);
|
||||
}
|
||||
};
|
||||
|
||||
export const esp32_music_pitch_with_time = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_HUE);
|
||||
this.appendValueInput("PIN", Number)
|
||||
.appendField(Blockly.Msg.MIXLY_TONE)
|
||||
.appendField(Blockly.Msg.MIXLY_PIN)
|
||||
.setCheck(Number);
|
||||
this.appendValueInput('pitch')
|
||||
.setCheck(Number)
|
||||
.appendField(Blockly.Msg.MIXLY_FREQUENCY);
|
||||
this.appendValueInput('time')
|
||||
.setCheck(Number)
|
||||
.appendField(Blockly.Msg.MIXLY_DURATION);
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_BLOCKGROUP_TONE2);
|
||||
}
|
||||
};
|
||||
|
||||
export const esp32_music_stop = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_HUE);
|
||||
this.appendValueInput("PIN", Number)
|
||||
.appendField(Blockly.Msg.MIXLY_NOTONE)
|
||||
.appendField(Blockly.Msg.MIXLY_PIN)
|
||||
.setCheck(Number);
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const esp32_music_set_tempo = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_HUE);
|
||||
this.appendValueInput('TICKS')
|
||||
.setCheck(Number)
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_JS_SET_TEMPO)
|
||||
.appendField(Blockly.Msg.MICROBIT_ACTUATOR_ticks);
|
||||
this.appendValueInput('BPM')
|
||||
.setCheck(Number)
|
||||
.appendField(Blockly.Msg.MIXLY_SPEED);
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_MUSIC_SET_TEMPO);
|
||||
}
|
||||
}
|
||||
|
||||
export const esp32_music_get_tempo = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_Get_current_tempo)
|
||||
this.setOutput(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_MUSIC_GET_TEMPO);
|
||||
}
|
||||
}
|
||||
|
||||
export const esp32_music_reset = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_Reset_music)
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_MUSIC_RESET);
|
||||
}
|
||||
}
|
||||
|
||||
export const esp32_onboard_music_pitch = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_TONE);
|
||||
this.appendValueInput('pitch')
|
||||
.setCheck(Number)
|
||||
.appendField(Blockly.Msg.MIXLY_FREQUENCY);
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_BLOCKGROUP_TONE);
|
||||
}
|
||||
};
|
||||
|
||||
export const esp32_onboard_music_pitch_with_time = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_TONE);
|
||||
this.appendValueInput('pitch')
|
||||
.setCheck(Number)
|
||||
.appendField(Blockly.Msg.MIXLY_FREQUENCY);
|
||||
this.appendValueInput('time')
|
||||
.setCheck(Number)
|
||||
.appendField(Blockly.Msg.MIXLY_DURATION);
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_BLOCKGROUP_TONE2);
|
||||
}
|
||||
};
|
||||
|
||||
export const esp32_onboard_music_stop = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_NOTONE);
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const esp32_onboard_music_play_list = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_HUE);
|
||||
this.appendValueInput('LIST')
|
||||
.appendField(Blockly.Msg.MIXLY_ESP32_MUSIC_PLAY_LISTS)
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_MUSIC_PLAY_LISTS);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
export const esp32_music_play_list = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_HUE);
|
||||
this.appendValueInput('LIST')
|
||||
.appendField(Blockly.Msg.MIXLY_ESP32_MUSIC_PLAY_LISTS)
|
||||
this.appendValueInput('PIN')
|
||||
.setCheck(Number)
|
||||
.appendField(Blockly.Msg.MIXLY_PIN);
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_MUSIC_PLAY_LISTS);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
export const esp32_mixgo_music_play_list_show = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_HUE);
|
||||
this.appendValueInput('LIST')
|
||||
.appendField(Blockly.Msg.MIXLY_ESP32_MUSIC_PLAY_LISTS)
|
||||
this.appendValueInput('PIN')
|
||||
.setCheck(Number)
|
||||
.appendField(Blockly.Msg.MIXLY_PIN);
|
||||
// this.appendValueInput('DISPLAY')
|
||||
// .appendField(Blockly.Msg.MIXLY_ESP32_MIXGO_MUSIC_SHOW_IN);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_ESP32_MIXGO_MUSIC_PLAY_TONE);
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_MUSIC_PLAYSHOW)
|
||||
}
|
||||
}
|
||||
//RGB
|
||||
export const actuator_neopixel_init = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_RGB)
|
||||
this.appendValueInput('SUB')
|
||||
.appendField(Blockly.Msg.MIXLY_SETUP)
|
||||
.setCheck("var");
|
||||
this.appendValueInput("PIN", Number)
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.MIXLY_PIN);
|
||||
this.appendValueInput("LEDCOUNT")
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.MIXLY_RGB_COUNT);
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_RGB_PIN_COUNT);
|
||||
}
|
||||
};
|
||||
|
||||
export const actuator_neopixel_rgb = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_RGB)
|
||||
this.appendValueInput('SUB')
|
||||
.setCheck("var");
|
||||
// .appendField(Blockly.Msg.MIXLY_SETUP)
|
||||
this.appendValueInput("_LED_")
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.MIXLY_RGB_NUM);
|
||||
this.appendValueInput("RVALUE")
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.MIXLY_RGB_R);
|
||||
this.appendValueInput("GVALUE")
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.MIXLY_RGB_G);
|
||||
this.appendValueInput("BVALUE")
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.MIXLY_RGB_B);
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setTooltip('');
|
||||
this.setTooltip(Blockly.Msg.MIXLY_RGB_NUM_R_G_B);
|
||||
}
|
||||
};
|
||||
|
||||
export const actuator_neopixel_write = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_RGB)
|
||||
// this.appendValueInput("PIN", Number)
|
||||
// .setCheck(Number)
|
||||
// .setAlign(Blockly.inputs.Align.RIGHT)
|
||||
// .appendField(Blockly.Msg.MIXLY_PIN);
|
||||
this.appendValueInput('SUB')
|
||||
.setCheck("var");
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_ESP32_RGB_WRITE)
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setTooltip('');
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_MUSIC_WRI);
|
||||
}
|
||||
};
|
||||
|
||||
export const actuator_onboard_neopixel_rgb = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_RGB)
|
||||
this.appendValueInput("_LED_")
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.MIXLY_RGB_NUM);
|
||||
this.appendValueInput("RVALUE")
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.MIXLY_RGB_R);
|
||||
this.appendValueInput("GVALUE")
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.MIXLY_RGB_G);
|
||||
this.appendValueInput("BVALUE")
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.MIXLY_RGB_B);
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setTooltip('');
|
||||
this.setTooltip(Blockly.Msg.MIXLY_RGB_NUM_R_G_B);
|
||||
}
|
||||
};
|
||||
|
||||
export const actuator_onboard_neopixel_rgb_all = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_RGB)
|
||||
this.appendValueInput("RVALUE")
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.MIXLY_RGB_R);
|
||||
this.appendValueInput("GVALUE")
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.MIXLY_RGB_G);
|
||||
this.appendValueInput("BVALUE")
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.MIXLY_RGB_B);
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setTooltip('');
|
||||
this.setTooltip(Blockly.Msg.MIXLY_RGB_NUM_R_G_B);
|
||||
}
|
||||
};
|
||||
|
||||
export const actuator_onboard_neopixel_write = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_RGB)
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_ESP32_RGB_WRITE)
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setTooltip('');
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_MUSIC_WRI);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
export const led_light = actuator_led_bright;
|
||||
export const get_led_bright = actuator_get_led_bright;
|
||||
export const led_brightness = actuator_led_brightness;
|
||||
947
boards/default_src/micropython/blocks/actuator_extern.js
Normal file
947
boards/default_src/micropython/blocks/actuator_extern.js
Normal file
@@ -0,0 +1,947 @@
|
||||
import * as Blockly from 'blockly/core';
|
||||
import { Profile } from 'mixly';
|
||||
|
||||
const ACTUATOR_EXTERN_HUE = '#74A55B';
|
||||
|
||||
//music
|
||||
export const esp32_music_pitch_init = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_EXTERN_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_MIDI)
|
||||
this.appendValueInput('SUB')
|
||||
.appendField(Blockly.Msg.MIXLY_SETUP)
|
||||
.setCheck("var");
|
||||
this.appendValueInput("PIN", Number)
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.MIXLY_PIN);
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_RGB_PIN_COUNT);
|
||||
}
|
||||
};
|
||||
|
||||
export const esp32_music_pitch = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_EXTERN_HUE);
|
||||
this.appendValueInput('SUB')
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_TONE)
|
||||
this.appendValueInput('pitch')
|
||||
.setCheck(Number)
|
||||
.appendField(Blockly.Msg.MIXLY_FREQUENCY);
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_BLOCKGROUP_TONE);
|
||||
}
|
||||
};
|
||||
|
||||
export const esp32_music_pitch_with_time = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_EXTERN_HUE);
|
||||
this.appendValueInput('SUB')
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_TONE)
|
||||
this.appendValueInput('pitch')
|
||||
.setCheck(Number)
|
||||
.appendField(Blockly.Msg.MIXLY_FREQUENCY);
|
||||
this.appendValueInput('time')
|
||||
.setCheck(Number)
|
||||
.appendField(Blockly.Msg.MIXLY_DURATION);
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_BLOCKGROUP_TONE2);
|
||||
}
|
||||
};
|
||||
|
||||
export const esp32_music_play_list = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_EXTERN_HUE);
|
||||
this.appendValueInput('SUB')
|
||||
this.appendValueInput('LIST')
|
||||
.appendField(Blockly.Msg.MIXLY_ESP32_MUSIC_PLAY_LISTS)
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_MUSIC_PLAY_LISTS);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
export const esp32_music_set_tempo_extern = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_EXTERN_HUE);
|
||||
this.appendValueInput('SUB')
|
||||
this.appendValueInput('TICKS')
|
||||
.setCheck(Number)
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_JS_SET_TEMPO)
|
||||
.appendField(Blockly.Msg.MICROBIT_ACTUATOR_ticks);
|
||||
this.appendValueInput('BPM')
|
||||
.setCheck(Number)
|
||||
.appendField(Blockly.Msg.MIXLY_SPEED);
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_MUSIC_SET_TEMPO);
|
||||
}
|
||||
}
|
||||
|
||||
export const esp32_music_get_tempo_extern = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_EXTERN_HUE);
|
||||
this.appendValueInput('SUB')
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_Get_current_tempo)
|
||||
this.setOutput(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_MUSIC_GET_TEMPO);
|
||||
}
|
||||
}
|
||||
|
||||
export const esp32_music_reset_extern = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_EXTERN_HUE);
|
||||
this.appendValueInput('SUB')
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_Reset_music)
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_MUSIC_RESET);
|
||||
}
|
||||
}
|
||||
|
||||
export const esp32_music_stop = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_EXTERN_HUE);
|
||||
this.appendValueInput('SUB')
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_NOTONE)
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const actuator_extern_led_bright = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_EXTERN_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_SETTING)
|
||||
.appendField(Blockly.Msg.MIXLY_EXTERN_LED)
|
||||
this.appendValueInput("PIN", Number)
|
||||
.appendField(Blockly.Msg.MIXLY_PIN)
|
||||
.setCheck(Number);
|
||||
this.appendValueInput('bright')
|
||||
.appendField(Blockly.Msg.MIXLY_PULSEIN_STAT)
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_EXTERN_LED_SETONOFF);
|
||||
}
|
||||
};
|
||||
|
||||
export const actuator_extern_get_led_bright = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_EXTERN_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)
|
||||
.appendField(Blockly.Msg.MIXLY_EXTERN_LED)
|
||||
this.appendValueInput("PIN", Number)
|
||||
.appendField(Blockly.Msg.MIXLY_PIN)
|
||||
.setCheck(Number);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_BRIGHTNESS)
|
||||
this.setOutput(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_EXTERN_LED_GETONOFF);
|
||||
}
|
||||
};
|
||||
|
||||
export const actuator_extern_get_led_state = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_EXTERN_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)
|
||||
.appendField(Blockly.Msg.MIXLY_EXTERN_LED)
|
||||
this.appendValueInput("PIN", Number)
|
||||
.appendField(Blockly.Msg.MIXLY_PIN)
|
||||
.setCheck(Number);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_PULSEIN_STAT)
|
||||
this.setOutput(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_EXTERN_LED_GETONOFF);
|
||||
}
|
||||
};
|
||||
|
||||
export const actuator_extern_led_brightness = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_EXTERN_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_SETTING)
|
||||
.appendField(Blockly.Msg.MIXLY_EXTERN_LED)
|
||||
this.appendValueInput("PIN", Number)
|
||||
.appendField(Blockly.Msg.MIXLY_PIN)
|
||||
.setCheck(Number);
|
||||
this.appendValueInput('bright')
|
||||
.appendField(Blockly.Msg.MIXLY_BRIGHTNESS)
|
||||
this.appendDummyInput()
|
||||
.appendField('%')
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_EXTERN_LED_SETBRIGHT);
|
||||
}
|
||||
};
|
||||
|
||||
//Servo
|
||||
export const servo_init = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_EXTERN_HUE);
|
||||
this.appendValueInput("VAR")
|
||||
.appendField(Blockly.Msg.MIXLY_SETUP + Blockly.Msg.MIXLY_SERVO)
|
||||
this.appendValueInput("PIN", Number)
|
||||
.appendField(Blockly.Msg.MIXLY_PIN)
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const servo_move = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_EXTERN_HUE);
|
||||
this.appendValueInput("PIN", Number)
|
||||
.appendField(Blockly.Msg.MIXLY_SERVO)
|
||||
.appendField(Blockly.Msg.MIXLY_PIN)
|
||||
.setCheck(Number);
|
||||
this.appendValueInput("DEGREE", Number)
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.MIXLY_DEGREE_0_180);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_SERVO_MOVE);
|
||||
}
|
||||
};
|
||||
|
||||
export const servo_speed_360 = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_EXTERN_HUE);
|
||||
this.appendValueInput("VAR")
|
||||
.appendField("360°" + Blockly.Msg.MIXLY_SERVO)
|
||||
this.appendValueInput("SPEED", Number)
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.MIXLY_SETTING + Blockly.Msg.blockpy_turtle_rotate + Blockly.Msg.MIXLY_SPEED + " (-10~10)");
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_SERVO_360_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
//Servo
|
||||
export const servo_set_angle = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_EXTERN_HUE);
|
||||
this.appendValueInput("PIN", Number)
|
||||
.appendField('180°' + Blockly.Msg.MIXLY_SERVO)
|
||||
.appendField(Blockly.Msg.MIXLY_PIN)
|
||||
.setCheck(Number);
|
||||
this.appendValueInput("NUM", Number)
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_JS_BY_ANGLE);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_SERVO_MOVE);
|
||||
}
|
||||
};
|
||||
|
||||
export const servo_set_speed = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_EXTERN_HUE);
|
||||
this.appendValueInput("PIN", Number)
|
||||
.appendField('360°' + Blockly.Msg.MIXLY_SERVO)
|
||||
.appendField(Blockly.Msg.MIXLY_PIN)
|
||||
.setCheck(Number);
|
||||
this.appendValueInput("NUM", Number)
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.MIXLY_SPEED);
|
||||
this.appendDummyInput()
|
||||
.appendField('%');
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_SERVO_SPEED_TOOLIPS);
|
||||
}
|
||||
};
|
||||
|
||||
export const servo_get_angle = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_EXTERN_HUE);
|
||||
this.appendValueInput("PIN", Number)
|
||||
.appendField('180°' + Blockly.Msg.MIXLY_SERVO)
|
||||
.appendField(Blockly.Msg.MIXLY_PIN)
|
||||
.setCheck(Number);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_GET + Blockly.Msg.MIXLY_MICROBIT_JS_BY_ANGLE);
|
||||
this.setOutput(true, Number);
|
||||
this.setInputsInline(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const servo_get_speed = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_EXTERN_HUE);
|
||||
this.appendValueInput("PIN", Number)
|
||||
.appendField('360°' + Blockly.Msg.MIXLY_SERVO)
|
||||
.appendField(Blockly.Msg.MIXLY_PIN)
|
||||
.setCheck(Number);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_GET + Blockly.Msg.MIXLY_SPEED);
|
||||
this.setOutput(true, Number);
|
||||
this.setInputsInline(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const actuator_ms32006_init = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_EXTERN_HUE);
|
||||
this.appendValueInput('SUB')
|
||||
.appendField("初始化")
|
||||
.setCheck("var");
|
||||
this.appendDummyInput()
|
||||
.appendField("电机驱动");
|
||||
this.appendDummyInput()
|
||||
.appendField("地址")
|
||||
.appendField(new Blockly.FieldDropdown([['A', 'ms32006.ADDRESS_A'], ['B', 'ms32006.ADDRESS_B']]), 'mode');
|
||||
this.appendValueInput('SUB1')
|
||||
.setCheck("var")
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField("通信");
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip("初始化MS32006电机驱动,使用I2C通信");
|
||||
}
|
||||
};
|
||||
|
||||
export const actuator_ms32006_dcmotor = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_EXTERN_HUE);
|
||||
this.appendValueInput('SUB')
|
||||
.appendField("直流电机")
|
||||
.setCheck("var");
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_Direction)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.CLOCKWISE, "ms32006.MOT_CW"],
|
||||
[Blockly.Msg.ANTI_CLOCKWISE, "ms32006.MOT_CCW"],
|
||||
[Blockly.Msg.MOTOR_N, "ms32006.MOT_N"],
|
||||
[Blockly.Msg.MOTOR_P, "ms32006.MOT_P"]
|
||||
]), "direction");
|
||||
this.appendValueInput('speed')
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.MIXLY_STEPPER_SET_SPEED);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip("设置直流电机的状态及转速(0-100)");
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
export const actuator_ms32006_stepper = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_EXTERN_HUE);
|
||||
this.appendValueInput('SUB')
|
||||
.appendField("步进电机")
|
||||
.setCheck("var");
|
||||
this.appendDummyInput()
|
||||
.appendField("选择")
|
||||
.appendField(new Blockly.FieldDropdown([['A', 'ms32006.MOT_A'], ['B', 'ms32006.MOT_B']]), 'mode');
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_Direction)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.CLOCKWISE, "ms32006.MOT_CW"],
|
||||
[Blockly.Msg.ANTI_CLOCKWISE, "ms32006.MOT_CCW"]
|
||||
]), "direction");
|
||||
this.appendValueInput('speed')
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField("转速");
|
||||
this.appendValueInput('steps')
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField("步数");
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip("设置步进电机的状态、转速、步数(0-2047)");
|
||||
}
|
||||
};
|
||||
|
||||
//rgb
|
||||
export const actuator_neopixel_init = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_EXTERN_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_RGB)
|
||||
this.appendValueInput('SUB')
|
||||
.appendField(Blockly.Msg.MIXLY_SETUP)
|
||||
.setCheck("var");
|
||||
this.appendValueInput("PIN", Number)
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.MIXLY_PIN);
|
||||
this.appendValueInput("LEDCOUNT")
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.MIXLY_RGB_COUNT);
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_RGB_PIN_COUNT);
|
||||
}
|
||||
};
|
||||
|
||||
export const actuator_neopixel_rgb = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_EXTERN_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_RGB)
|
||||
this.appendValueInput('SUB')
|
||||
.setCheck("var");
|
||||
// .appendField(Blockly.Msg.MIXLY_SETUP)
|
||||
this.appendValueInput("_LED_")
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.MIXLY_RGB_NUM);
|
||||
this.appendValueInput("RVALUE")
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.MIXLY_RGB_R);
|
||||
this.appendValueInput("GVALUE")
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.MIXLY_RGB_G);
|
||||
this.appendValueInput("BVALUE")
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.MIXLY_RGB_B);
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setTooltip('');
|
||||
this.setTooltip(Blockly.Msg.MIXLY_RGB_NUM_R_G_B_MP);
|
||||
}
|
||||
};
|
||||
|
||||
export const actuator_neopixel_rgb_all = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_EXTERN_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_RGB)
|
||||
this.appendValueInput('SUB')
|
||||
.setCheck("var");
|
||||
this.appendValueInput("RVALUE")
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.MIXLY_RGB_R);
|
||||
this.appendValueInput("GVALUE")
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.MIXLY_RGB_G);
|
||||
this.appendValueInput("BVALUE")
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.MIXLY_RGB_B);
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setTooltip('');
|
||||
this.setTooltip(Blockly.Msg.MIXLY_RGB_ALL_R_G_B_MIXGOCC);
|
||||
}
|
||||
};
|
||||
|
||||
export const actuator_neopixel_write = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_EXTERN_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_RGB)
|
||||
// this.appendValueInput("PIN", Number)
|
||||
// .setCheck(Number)
|
||||
// .setAlign(Blockly.inputs.Align.RIGHT)
|
||||
// .appendField(Blockly.Msg.MIXLY_PIN);
|
||||
this.appendValueInput('SUB')
|
||||
.setCheck("var");
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_ESP32_RGB_WRITE)
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setTooltip('');
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_MUSIC_WRI);
|
||||
}
|
||||
};
|
||||
|
||||
export const actuator_use_uart_init = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_EXTERN_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.CONTROLS_FOR_INPUT_WITH + "uart")
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
["uart1", "uart1"],
|
||||
["uart2", "uart2"]
|
||||
]), "key");
|
||||
this.appendValueInput('SUB')
|
||||
.appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE)
|
||||
.setCheck("var");
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_SETUP + Blockly.Msg.LISTS_SET_INDEX_INPUT_TO + 'SYN6288' + Blockly.Msg.MIXLY_AipSpeech_synthesis)
|
||||
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setFieldValue("LTR308", "key");
|
||||
}
|
||||
};
|
||||
|
||||
export const syn6288_set_voice = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_EXTERN_HUE);
|
||||
this.appendValueInput('SUB')
|
||||
.appendField('SYN6288')
|
||||
this.appendValueInput('VOICE')
|
||||
.setCheck(Number)
|
||||
.appendField(Blockly.Msg.MIXLY_SET_VOLUME);
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_SET_VOLUME_TOOLTIP);
|
||||
}
|
||||
}
|
||||
|
||||
export const syn6288_get_voice = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_EXTERN_HUE);
|
||||
this.appendValueInput('SUB')
|
||||
.appendField('SYN6288')
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_GET_VOLUME)
|
||||
this.setOutput(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_SET_VOLUME_TOOLTIP);
|
||||
}
|
||||
}
|
||||
|
||||
export const syn6288_builtin_voice = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_EXTERN_HUE);
|
||||
this.appendValueInput('SUB')
|
||||
.appendField('SYN6288')
|
||||
this.appendValueInput('VOICE')
|
||||
.setCheck(Number)
|
||||
.appendField(Blockly.Msg.MIXLY_PLAY_HINTS);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_PROGRAM_BLOCK)
|
||||
.appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_TURTLE_WRITE_MOVE_TRUE, 'True'], [Blockly.Msg.MIXLY_TURTLE_WRITE_MOVE_FALSE, 'False']]), 'mode');
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_PLAY_HINTS_TOOLTIP);
|
||||
}
|
||||
}
|
||||
|
||||
export const syn6288_tts_play = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_EXTERN_HUE);
|
||||
this.appendValueInput('SUB')
|
||||
.appendField('SYN6288')
|
||||
this.appendValueInput('data')
|
||||
.setCheck(String)
|
||||
.appendField(Blockly.Msg.MIXLY_AipSpeech_synthesis);
|
||||
this.appendValueInput('VOICE')
|
||||
.setCheck(Number)
|
||||
.appendField(Blockly.Msg.MIXLY_BACKGROUND_MUSIC);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_PROGRAM_BLOCK)
|
||||
.appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_TURTLE_WRITE_MOVE_TRUE, 'True'], [Blockly.Msg.MIXLY_TURTLE_WRITE_MOVE_FALSE, 'False']]), 'mode');
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_PLAY_TTS_TOOLTIP);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//mixbot extern
|
||||
export const mixbot_addr_extern = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_EXTERN_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.extern_addr), 'PIN');
|
||||
this.setOutput(true, Number);
|
||||
}
|
||||
};
|
||||
|
||||
export const robot_motor_extern = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_EXTERN_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.ME_GO_MOTOR_EXTERN + Blockly.Msg.MIXLY_MOTOR)
|
||||
.appendField(Blockly.Msg.PIN_NUMBERING)
|
||||
.appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_LEFT, "0"], [Blockly.Msg.MIXLY_RIGHT, "1"]]), "mode");
|
||||
this.appendValueInput('speed')
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.MIXLY_SPEED);
|
||||
this.appendDummyInput()
|
||||
.appendField('%')
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_MIXBOT_MOTOR_EXTERN_TOOLTIP);
|
||||
}
|
||||
}
|
||||
|
||||
export const robot_motor_extern_get_speed = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_EXTERN_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.ME_GO_MOTOR_EXTERN + Blockly.Msg.MIXLY_MOTOR)
|
||||
.appendField(Blockly.Msg.PIN_NUMBERING)
|
||||
.appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_LEFT, "0"], [Blockly.Msg.MIXLY_RIGHT, "1"]]), "mode");
|
||||
this.appendDummyInput()
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.MIXLY_GET + Blockly.Msg.MIXLY_SPEED);
|
||||
this.setOutput(true, Number);
|
||||
this.setInputsInline(true);
|
||||
}
|
||||
}
|
||||
|
||||
export const robot_traffic_light_extern = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_EXTERN_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.ME_GO_MOTOR_EXTERN + Blockly.Msg.MIXLY_TRAFFIC_LIGHT)
|
||||
.appendField(Blockly.Msg.PIN_NUMBERING)
|
||||
.appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_LEFT, "0"], [Blockly.Msg.MIXLY_RIGHT, "1"]]), "mode");
|
||||
this.appendDummyInput()
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.LISTS_SET_INDEX_SET)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.MIXLY_MICROBIT_Turn_off_display, '0'],
|
||||
[Blockly.Msg.MIXLY_TRAFFIC_LIGHT_RED_ON, '1'],
|
||||
[Blockly.Msg.MIXLY_TRAFFIC_LIGHT_RED_BLINK, '2'],
|
||||
[Blockly.Msg.MIXLY_TRAFFIC_LIGHT_YELLOW_ON, '3'],
|
||||
[Blockly.Msg.MIXLY_TRAFFIC_LIGHT_YELLOW_BLINK, '4'],
|
||||
[Blockly.Msg.MIXLY_TRAFFIC_LIGHT_GREEN_ON, '5'],
|
||||
[Blockly.Msg.MIXLY_TRAFFIC_LIGHT_GREEN_BLINK, '6']
|
||||
]), "light");
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
}
|
||||
}
|
||||
|
||||
export const robot_led_extern = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_EXTERN_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.ME_GO_MOTOR_EXTERN)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.COLOUR_RGB_WHITE, 'W'],
|
||||
[Blockly.Msg.COLOUR_RGB_RED, 'R'],
|
||||
[Blockly.Msg.COLOUR_RGB_YELLOW, 'Y'],
|
||||
[Blockly.Msg.COLOUR_RGB_GREEN, 'G'],
|
||||
[Blockly.Msg.COLOUR_RGB_BLUE, 'B']
|
||||
]), "color")
|
||||
.appendField("LED")
|
||||
.appendField(Blockly.Msg.PIN_NUMBERING)
|
||||
.appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_LEFT, "0"], [Blockly.Msg.MIXLY_RIGHT, "1"]]), "mode");
|
||||
this.appendValueInput('value')
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.BRIGHTNESS);
|
||||
this.appendDummyInput()
|
||||
.appendField('%')
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
}
|
||||
}
|
||||
|
||||
export const robot_led_extern_get_value = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_EXTERN_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.ME_GO_MOTOR_EXTERN)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.COLOUR_RGB_WHITE, 'W'],
|
||||
[Blockly.Msg.COLOUR_RGB_RED, 'R'],
|
||||
[Blockly.Msg.COLOUR_RGB_YELLOW, 'Y'],
|
||||
[Blockly.Msg.COLOUR_RGB_GREEN, 'G'],
|
||||
[Blockly.Msg.COLOUR_RGB_BLUE, 'B']
|
||||
]), "color")
|
||||
.appendField("LED")
|
||||
.appendField(Blockly.Msg.PIN_NUMBERING)
|
||||
.appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_LEFT, "0"], [Blockly.Msg.MIXLY_RIGHT, "1"]]), "mode");
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_GET + Blockly.Msg.BRIGHTNESS)
|
||||
this.setOutput(true, Number);
|
||||
this.setInputsInline(true);
|
||||
}
|
||||
}
|
||||
|
||||
export const robot_servo_extern_get_status = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_EXTERN_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.ME_GO_MOTOR_EXTERN + Blockly.Msg.MIXLY_SERVO_MOTOR)
|
||||
.appendField(Blockly.Msg.PIN_NUMBERING)
|
||||
.appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_LEFT, "0"], [Blockly.Msg.MIXLY_RIGHT, "1"]]), "mode");
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_GET)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.MIXLY_MICROBIT_JS_BLE_POWER, '[0]'],
|
||||
[Blockly.Msg.MIXLY_SPEED, '[1]'],
|
||||
[Blockly.Msg.MATH_SINGLE_OP_ABSOLUTE + Blockly.Msg.MIXLY_MICROBIT_JS_BY_ANGLE, '[2]'],
|
||||
[Blockly.Msg.MIXLY_RELATIVE + Blockly.Msg.MIXLY_MICROBIT_JS_BY_ANGLE, '[3]'],
|
||||
[Blockly.Msg.MIXLY_MIXBOT_SERVO_BLOCK_OR_NOT, '[4]'],
|
||||
[Blockly.Msg.MIXLY_MIXBOT_SERVO_FINISH_OR_NOT, '[5]'],
|
||||
[Blockly.Msg.MIXLY_ALL, '']
|
||||
]), "status");
|
||||
this.setOutput(true, Number);
|
||||
this.setInputsInline(true);
|
||||
}
|
||||
}
|
||||
|
||||
export const robot_servo_extern_stop_mode = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_EXTERN_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.ME_GO_MOTOR_EXTERN + Blockly.Msg.MIXLY_SERVO_MOTOR)
|
||||
.appendField(Blockly.Msg.PIN_NUMBERING)
|
||||
.appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_LEFT, "0"], [Blockly.Msg.MIXLY_RIGHT, "1"]]), "mode");
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_MIXBOT_SERVO_SET_STOP_MODE)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.MIXLY_MIXBOT_SERVO_STOP_MODE_KEEP, '0'],
|
||||
[Blockly.Msg.MIXLY_MIXBOT_SERVO_STOP_MODE_COAST, '1'],
|
||||
[Blockly.Msg.MIXLY_MIXBOT_SERVO_STOP_MODE_BRAKE, '2']
|
||||
]), "status");
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
}
|
||||
}
|
||||
|
||||
export const robot_servo_extern_stop = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_EXTERN_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.ME_GO_MOTOR_EXTERN + Blockly.Msg.MIXLY_SERVO_MOTOR)
|
||||
.appendField(Blockly.Msg.PIN_NUMBERING)
|
||||
.appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_LEFT, "0"], [Blockly.Msg.MIXLY_RIGHT, "1"]]), "mode");
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_STOP)
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
}
|
||||
}
|
||||
|
||||
export const robot_servo_extern_absolute_run = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_EXTERN_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.ME_GO_MOTOR_EXTERN + Blockly.Msg.MIXLY_SERVO_MOTOR)
|
||||
.appendField(Blockly.Msg.MATH_SINGLE_OP_ABSOLUTE + Blockly.Msg.MIXLY_MICROBIT_JS_BY_ANGLE + Blockly.Msg.MSG.run)
|
||||
.appendField(Blockly.Msg.PIN_NUMBERING)
|
||||
.appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_LEFT, "0"], [Blockly.Msg.MIXLY_RIGHT, "1"]]), "mode");
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_MODE)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.MIXLY_SPEED + Blockly.Msg.MIXLY_MODE, '0'],
|
||||
[Blockly.Msg.MIXLY_MICROBIT_JS_BLE_POWER + Blockly.Msg.MIXLY_MODE, '1']
|
||||
]), "status");
|
||||
this.appendValueInput('speed')
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.MIXLY_PARAMS);
|
||||
this.appendDummyInput()
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField('%')
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_MIXBOT_SERVO_TURN_DIRECTION)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.CLOCKWISE, '0'],
|
||||
[Blockly.Msg.MIXLY_MIXBOT_SERVO_NEAREST_PATH, '1'],
|
||||
[Blockly.Msg.ANTI_CLOCKWISE, '2']
|
||||
]), "direction");
|
||||
this.appendValueInput('angle')
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.MIXLY_DISPLAY_MATRIX_ROTATE + Blockly.Msg.MIXLY_MICROBIT_JS_BY_ANGLE);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_MIXBOT_SERVO_ABSOLUTE_ANGLE_TOOLTIP);
|
||||
}
|
||||
}
|
||||
|
||||
export const robot_servo_extern_relative_origin = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_EXTERN_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.ME_GO_MOTOR_EXTERN + Blockly.Msg.MIXLY_SERVO_MOTOR)
|
||||
.appendField(Blockly.Msg.MIXLY_RELATIVE + Blockly.Msg.MIXLY_MICROBIT_JS_BY_ANGLE + Blockly.Msg.MSG.run)
|
||||
.appendField(Blockly.Msg.PIN_NUMBERING)
|
||||
.appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_LEFT, "0"], [Blockly.Msg.MIXLY_RIGHT, "1"]]), "mode");
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_MIXBOT_SERVO_RELATIVE_ORIGIN_PATH)
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
}
|
||||
}
|
||||
|
||||
export const robot_servo_extern_relative_run = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_EXTERN_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.ME_GO_MOTOR_EXTERN + Blockly.Msg.MIXLY_SERVO_MOTOR)
|
||||
.appendField(Blockly.Msg.MIXLY_RELATIVE + Blockly.Msg.MIXLY_MICROBIT_JS_BY_ANGLE + Blockly.Msg.MSG.run)
|
||||
.appendField("(" + Blockly.Msg.MIXLY_MIXBOT_SERVO_LIKE_ENCODING_MOTOR + ")")
|
||||
.appendField(Blockly.Msg.PIN_NUMBERING)
|
||||
.appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_LEFT, "0"], [Blockly.Msg.MIXLY_RIGHT, "1"]]), "mode");
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_MODE)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.MIXLY_SPEED + Blockly.Msg.MIXLY_MODE, '0'],
|
||||
[Blockly.Msg.MIXLY_MICROBIT_JS_BLE_POWER + Blockly.Msg.MIXLY_MODE, '1']
|
||||
]), "status");
|
||||
this.appendValueInput('speed')
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.MIXLY_PARAMS);
|
||||
this.appendDummyInput()
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField('%')
|
||||
this.appendValueInput('angle')
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.MIXLY_DISPLAY_MATRIX_ROTATE + Blockly.Msg.MIXLY_MICROBIT_JS_BY_ANGLE);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_MIXBOT_SERVO_RELATIVE_ANGLE_TOOLTIP);
|
||||
}
|
||||
}
|
||||
|
||||
export const robot_servo_extern_relative_continue = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_EXTERN_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.ME_GO_MOTOR_EXTERN + Blockly.Msg.MIXLY_SERVO_MOTOR)
|
||||
.appendField(Blockly.Msg.MIXLY_RELATIVE + Blockly.Msg.MIXLY_MICROBIT_JS_BY_ANGLE + Blockly.Msg.MSG.run)
|
||||
.appendField("(" + Blockly.Msg.MIXLY_MIXBOT_SERVO_LIKE_ORDINARY_MOTOR + ")")
|
||||
.appendField(Blockly.Msg.PIN_NUMBERING)
|
||||
.appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_LEFT, "0"], [Blockly.Msg.MIXLY_RIGHT, "1"]]), "mode");
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_MODE)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.MIXLY_SPEED + Blockly.Msg.MIXLY_MODE, '0'],
|
||||
[Blockly.Msg.MIXLY_MICROBIT_JS_BLE_POWER + Blockly.Msg.MIXLY_MODE, '1']
|
||||
]), "status");
|
||||
this.appendValueInput('speed')
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.MIXLY_PARAMS);
|
||||
this.appendDummyInput()
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField('%')
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_MIXBOT_SERVO_TURN_DIRECTION)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.CLOCKWISE, '0'],
|
||||
[Blockly.Msg.ANTI_CLOCKWISE, '2']
|
||||
]), "direction");
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
}
|
||||
}
|
||||
|
||||
export const mixbot_actuator_extern_get_addr = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_EXTERN_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXBOT)
|
||||
.appendField(Blockly.Msg.ME_GO_MOTOR_EXTERN)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.MIXLY_MOTOR, 'ext_motor'],
|
||||
[Blockly.Msg.MIXLY_TRAFFIC_LIGHT, 'ext_traffic'],
|
||||
[Blockly.Msg.COLOUR_RGB_WHITE + "LED", 'W_LED'],
|
||||
[Blockly.Msg.COLOUR_RGB_RED + "LED", 'R_LED'],
|
||||
[Blockly.Msg.COLOUR_RGB_YELLOW + "LED", 'Y_LED'],
|
||||
[Blockly.Msg.COLOUR_RGB_GREEN + "LED", 'G_LED'],
|
||||
[Blockly.Msg.COLOUR_RGB_BLUE + "LED", 'B_LED'],
|
||||
[Blockly.Msg.MIXLY_SERVO_MOTOR, 'ext_servo']
|
||||
]), "name")
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_MIXBOT_EXTERN_GET_ADDR)
|
||||
this.setOutput(true);
|
||||
this.setInputsInline(true);
|
||||
}
|
||||
}
|
||||
|
||||
export const mixbot_actuator_extern_set_addr = {
|
||||
init: function () {
|
||||
this.setColour(ACTUATOR_EXTERN_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXBOT)
|
||||
.appendField(Blockly.Msg.ME_GO_MOTOR_EXTERN)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.MIXLY_MOTOR, 'ext_motor'],
|
||||
[Blockly.Msg.MIXLY_TRAFFIC_LIGHT, 'ext_traffic'],
|
||||
[Blockly.Msg.COLOUR_RGB_WHITE + "LED", 'W_LED'],
|
||||
[Blockly.Msg.COLOUR_RGB_RED + "LED", 'R_LED'],
|
||||
[Blockly.Msg.COLOUR_RGB_YELLOW + "LED", 'Y_LED'],
|
||||
[Blockly.Msg.COLOUR_RGB_GREEN + "LED", 'G_LED'],
|
||||
[Blockly.Msg.COLOUR_RGB_BLUE + "LED", 'B_LED'],
|
||||
[Blockly.Msg.MIXLY_SERVO_MOTOR, 'ext_servo']
|
||||
]), "name")
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_MIXBOT_EXTERN_SET_ADDR)
|
||||
this.appendValueInput('old')
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_JS_CURRENT_GESTURE);
|
||||
this.appendValueInput('new')
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.MIXLY_UPDATE);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
}
|
||||
}
|
||||
1001
boards/default_src/micropython/blocks/actuator_onboard.js
Normal file
1001
boards/default_src/micropython/blocks/actuator_onboard.js
Normal file
File diff suppressed because it is too large
Load Diff
68
boards/default_src/micropython/blocks/ai.js
Normal file
68
boards/default_src/micropython/blocks/ai.js
Normal file
@@ -0,0 +1,68 @@
|
||||
import * as Blockly from 'blockly/core';
|
||||
|
||||
const AI_HUE = 205;
|
||||
|
||||
export const MICROPYTHON_AI_client = {
|
||||
init: function () {
|
||||
this.setColour(AI_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_SETUP)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.MIXLY_AipSpeech_asr, "ASR"],
|
||||
[Blockly.Msg.MIXLY_AI_UNIT, "UNIT"]
|
||||
]), 'CTYPE')
|
||||
this.appendValueInput('SUB')
|
||||
.appendField(Blockly.Msg.MIXLY_Client)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT);
|
||||
this.appendValueInput('API_KEY')
|
||||
.appendField('API_KEY')
|
||||
.setAlign(Blockly.inputs.Align.RIGHT);
|
||||
this.appendValueInput('SECRET_KEY')
|
||||
.appendField('SECRET_KEY')
|
||||
.setAlign(Blockly.inputs.Align.RIGHT);
|
||||
this.setInputsInline(false);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
}
|
||||
};
|
||||
|
||||
export const MICROPYTHON_AI_Speech_unit = { // AI_TYPE_FUNC
|
||||
init: function () {
|
||||
this.setColour(AI_HUE);
|
||||
this.appendValueInput('SUB')
|
||||
.appendField(Blockly.Msg.MIXLY_AI_UNIT)
|
||||
.appendField(Blockly.Msg.MIXLY_Client)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT);
|
||||
this.appendValueInput('ID')
|
||||
.appendField('ID')
|
||||
.setAlign(Blockly.inputs.Align.RIGHT);
|
||||
this.appendValueInput('STR')
|
||||
.appendField(Blockly.Msg.OLED_STRING)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT);
|
||||
this.setInputsInline(true);
|
||||
this.setOutput(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const MICROPYTHON_AI_Speech_asr = { // AI_TYPE_FUNC
|
||||
init: function () {
|
||||
this.setColour(AI_HUE);
|
||||
this.appendValueInput('SUB')
|
||||
.appendField(Blockly.Msg.MIXLY_AipSpeech_asr)
|
||||
.appendField(Blockly.Msg.MIXLY_Client)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT);
|
||||
this.appendValueInput('FILE')
|
||||
.appendField(Blockly.Msg.MIXPY_AI_AUDIO_TIME)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT);
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_LANGUAGE)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.MIXLY_AI_LANGUAGE_CHINESE, "1537"],
|
||||
[Blockly.Msg.MIXLY_AI_LANGUAGE_ENGLISH, "1737"],
|
||||
[Blockly.Msg.MIXLY_AI_LANGUAGE_CANTONESE, "1637"]
|
||||
]), 'LANGUAGE')
|
||||
this.setInputsInline(true);
|
||||
this.setOutput(true);
|
||||
}
|
||||
};
|
||||
|
||||
746
boards/default_src/micropython/blocks/ai_sensor.js
Normal file
746
boards/default_src/micropython/blocks/ai_sensor.js
Normal file
@@ -0,0 +1,746 @@
|
||||
import * as Blockly from 'blockly/core';
|
||||
|
||||
const AI_SENSOR_HUE = '#90A244'; //'#9e77c9'//40;
|
||||
|
||||
|
||||
export const ai_sensor_use_uart_init = {
|
||||
init: function () {
|
||||
this.setColour(AI_SENSOR_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.CONTROLS_FOR_INPUT_WITH + "uart")
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
["uart1", "uart1"],
|
||||
["uart2", "uart2"]
|
||||
]), "key");
|
||||
this.appendValueInput('SUB')
|
||||
.appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE)
|
||||
.setCheck("var");
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_SETUP + Blockly.Msg.LISTS_SET_INDEX_INPUT_TO + 'MixGo AI' + Blockly.Msg.MSG.catSensor)
|
||||
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
}
|
||||
};
|
||||
|
||||
export const ai_sensor_qrcode = {
|
||||
init: function () {
|
||||
this.setColour(AI_SENSOR_HUE);
|
||||
this.appendValueInput('VAR')
|
||||
.appendField(Blockly.Msg.MIXLY_QR_CODE + Blockly.Msg.MIXPY_OBJECT)
|
||||
.setCheck("var");
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_ALL_CODE_ANALYSIS);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_GET)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.OLED_STRING, "info1"],
|
||||
[Blockly.Msg.MIXLY_POSITION_XY + "-xywh", "rect"],
|
||||
["x" + Blockly.Msg.MIXLY_POSITION_XY, "rect[0]"],
|
||||
["y" + Blockly.Msg.MIXLY_POSITION_XY, "rect[1]"],
|
||||
["w" + Blockly.Msg.MIXLY_POSITION_XY, "rect[2]"],
|
||||
["h" + Blockly.Msg.MIXLY_POSITION_XY, "rect[3]"],
|
||||
[Blockly.Msg.MICROPYTHON_HUSKYLENS_X_CENTERED + Blockly.Msg.MIXLY_POSITION_XY, "xc"],
|
||||
[Blockly.Msg.MICROPYTHON_HUSKYLENS_Y_CENTERED + Blockly.Msg.MIXLY_POSITION_XY, "yc"]
|
||||
]), "key");
|
||||
this.setOutput(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_QR_CODE_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const ai_sensor_qrcode_lite = {
|
||||
init: function () {
|
||||
this.setColour(AI_SENSOR_HUE);
|
||||
this.appendValueInput('VAR')
|
||||
.setCheck("var");
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_GET)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.MIXLY_QR_CODE + Blockly.Msg.MIXPY_OBJECT, "qrcode"],
|
||||
[Blockly.Msg.MIXLY_BAR_CODE + Blockly.Msg.MIXPY_OBJECT, "barcode"],
|
||||
[Blockly.Msg.MIXLY_TAG + Blockly.Msg.MIXPY_OBJECT, "apriltag"]
|
||||
]), "TYPE");
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_ANALYSIS_RESULT);
|
||||
this.setOutput(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip();
|
||||
}
|
||||
};
|
||||
|
||||
export const ai_sensor_find_qrcodes = {
|
||||
init: function () {
|
||||
this.setColour(AI_SENSOR_HUE);
|
||||
this.appendValueInput('SUB')
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_QR_CODE_RECOGNTITION);
|
||||
this.appendDummyInput()
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.PROCEDURES_DEFRETURN_RETURN + "[qrcode]");
|
||||
this.setOutput(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_QR_CODE_RECOGNTITION_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const ai_sensor_config = {
|
||||
init: function () {
|
||||
this.setColour(AI_SENSOR_HUE);
|
||||
this.appendValueInput('SUB')
|
||||
this.appendValueInput("RX")
|
||||
.appendField(Blockly.Msg.MIXLY_SETTING + Blockly.Msg.MIXLY_ETHERNET_CLINET_PORT)
|
||||
.appendField("RX#")
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT);
|
||||
this.appendValueInput("TX")
|
||||
.appendField("TX#")
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.SOFT_RESET + Blockly.Msg.MIXLY_ESP32_RGB_WRITE)
|
||||
.appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_TURTLE_WRITE_MOVE_TRUE, 'True'], [Blockly.Msg.MIXLY_TURTLE_WRITE_MOVE_FALSE, 'False']]), 'mode')
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_CONFIG_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const ai_sensor_rgb = {
|
||||
init: function () {
|
||||
this.setColour(AI_SENSOR_HUE);
|
||||
this.appendValueInput('SUB')
|
||||
this.appendValueInput("led1")
|
||||
.appendField(Blockly.Msg.MIXLY_SETTING)
|
||||
.appendField("RGB1")
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT);
|
||||
this.appendValueInput("led2")
|
||||
.appendField("RGB2")
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_CONFIG_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const ai_sensor_barcode = {
|
||||
init: function () {
|
||||
this.setColour(AI_SENSOR_HUE);
|
||||
this.appendValueInput('VAR')
|
||||
.appendField(Blockly.Msg.MIXLY_BAR_CODE + Blockly.Msg.MIXPY_OBJECT)
|
||||
.setCheck("var");
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_ALL_CODE_ANALYSIS);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_GET)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.OLED_STRING, "info1"],
|
||||
[Blockly.Msg.MIXLY_POSITION_XY + "-xywh", "rect"],
|
||||
["x" + Blockly.Msg.MIXLY_POSITION_XY, "rect[0]"],
|
||||
["y" + Blockly.Msg.MIXLY_POSITION_XY, "rect[1]"],
|
||||
["w" + Blockly.Msg.MIXLY_POSITION_XY, "rect[2]"],
|
||||
["h" + Blockly.Msg.MIXLY_POSITION_XY, "rect[3]"],
|
||||
[Blockly.Msg.MICROPYTHON_HUSKYLENS_X_CENTERED + Blockly.Msg.MIXLY_POSITION_XY, "xc"],
|
||||
[Blockly.Msg.MICROPYTHON_HUSKYLENS_Y_CENTERED + Blockly.Msg.MIXLY_POSITION_XY, "yc"]
|
||||
]), "key");
|
||||
this.setOutput(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_BAR_CODE_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const ai_sensor_find_barcodes = {
|
||||
init: function () {
|
||||
this.setColour(AI_SENSOR_HUE);
|
||||
this.appendValueInput('SUB')
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_BAR_CODE_RECOGNTITION);
|
||||
this.appendDummyInput()
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.PROCEDURES_DEFRETURN_RETURN + "[barcode]");
|
||||
this.setOutput(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_BAR_CODE_RECOGNTITION_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const ai_sensor_tag = {
|
||||
init: function () {
|
||||
this.setColour(AI_SENSOR_HUE);
|
||||
this.appendValueInput('VAR')
|
||||
.appendField(Blockly.Msg.MIXLY_TAG + Blockly.Msg.MIXPY_OBJECT)
|
||||
.setCheck("var");
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_ALL_CODE_ANALYSIS);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_GET)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.OLED_STRING, "info1"],
|
||||
[Blockly.Msg.blockpy_turtle_rotate + Blockly.Msg.MIXLY_MICROBIT_JS_BY_ANGLE, "info2"],
|
||||
[Blockly.Msg.MIXLY_POSITION_XY + "-xywh", "rect"],
|
||||
["x" + Blockly.Msg.MIXLY_POSITION_XY, "rect[0]"],
|
||||
["y" + Blockly.Msg.MIXLY_POSITION_XY, "rect[1]"],
|
||||
["w" + Blockly.Msg.MIXLY_POSITION_XY, "rect[2]"],
|
||||
["h" + Blockly.Msg.MIXLY_POSITION_XY, "rect[3]"],
|
||||
[Blockly.Msg.MICROPYTHON_HUSKYLENS_X_CENTERED + Blockly.Msg.MIXLY_POSITION_XY, "xc"],
|
||||
[Blockly.Msg.MICROPYTHON_HUSKYLENS_Y_CENTERED + Blockly.Msg.MIXLY_POSITION_XY, "yc"]
|
||||
]), "key");
|
||||
this.setOutput(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_TAG_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const ai_sensor_find_tags = {
|
||||
init: function () {
|
||||
this.setColour(AI_SENSOR_HUE);
|
||||
this.appendValueInput('SUB')
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_TAG_RECOGNTITION);
|
||||
this.appendDummyInput()
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.PROCEDURES_DEFRETURN_RETURN + "[tag]");
|
||||
this.setOutput(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_TAG_RECOGNTITION_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const ai_sensor_line = {
|
||||
init: function () {
|
||||
this.setColour(AI_SENSOR_HUE);
|
||||
this.appendValueInput('VAR')
|
||||
.appendField(Blockly.Msg.MIXLY_LINE + Blockly.Msg.MIXPY_OBJECT)
|
||||
.setCheck("var");
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_ALL_CODE_ANALYSIS);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_GET)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.MIXLY_LINE_ANGLE, "info1"],
|
||||
[Blockly.Msg.MIXLY_POSITION_XY + "-x1x2y1y2", "rect"],
|
||||
["x1" + Blockly.Msg.MIXLY_POSITION_XY, "rect[0]"],
|
||||
["x2" + Blockly.Msg.MIXLY_POSITION_XY, "rect[1]"],
|
||||
["y1" + Blockly.Msg.MIXLY_POSITION_XY, "rect[2]"],
|
||||
["y2" + Blockly.Msg.MIXLY_POSITION_XY, "rect[3]"]
|
||||
]), "key");
|
||||
this.setOutput(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_LINE_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const ai_sensor_find_lines = {
|
||||
init: function () {
|
||||
this.setColour(AI_SENSOR_HUE);
|
||||
this.appendValueInput('SUB')
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_LINE_RECOGNTITION);
|
||||
this.appendValueInput("VAR1")
|
||||
.appendField(Blockly.Msg.MIXLY_ESP32_THRESHOLD)
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT);
|
||||
this.appendValueInput("VAR2")
|
||||
.appendField(Blockly.Msg.MIXLY_LINE_RECOGNTITION_ANGLE)
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT);
|
||||
this.appendValueInput("VAR3")
|
||||
.appendField(Blockly.Msg.MIXLY_LINE_RECOGNTITION_SLOPE)
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT);
|
||||
this.appendDummyInput()
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.PROCEDURES_DEFRETURN_RETURN + "[line]");
|
||||
this.setOutput(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_LINE_RECOGNTITION_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const ai_sensor_circle = {
|
||||
init: function () {
|
||||
this.setColour(AI_SENSOR_HUE);
|
||||
this.appendValueInput('VAR')
|
||||
.appendField(Blockly.Msg.MIXLY_CIRCLE + Blockly.Msg.MIXPY_OBJECT)
|
||||
.setCheck("var");
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_ALL_CODE_ANALYSIS);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_GET)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.MIXLY_CIRCLE_AREA, "info1"],
|
||||
[Blockly.Msg.MIXLY_POSITION_XY + "-xywh", "rect"],
|
||||
["x" + Blockly.Msg.MIXLY_POSITION_XY, "rect[0]"],
|
||||
["y" + Blockly.Msg.MIXLY_POSITION_XY, "rect[1]"],
|
||||
["w" + Blockly.Msg.MIXLY_POSITION_XY, "rect[2]"],
|
||||
["h" + Blockly.Msg.MIXLY_POSITION_XY, "rect[3]"],
|
||||
[Blockly.Msg.MICROPYTHON_HUSKYLENS_X_CENTERED + Blockly.Msg.MIXLY_POSITION_XY, "xc"],
|
||||
[Blockly.Msg.MICROPYTHON_HUSKYLENS_Y_CENTERED + Blockly.Msg.MIXLY_POSITION_XY, "yc"]
|
||||
]), "key");
|
||||
this.setOutput(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_CIRCLE_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const ai_sensor_find_circles = {
|
||||
init: function () {
|
||||
this.setColour(AI_SENSOR_HUE);
|
||||
this.appendValueInput('SUB')
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_CIRCLE_RECOGNTITION);
|
||||
this.appendValueInput("VAR1")
|
||||
.appendField(Blockly.Msg.MIXLY_ESP32_THRESHOLD)
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT);
|
||||
this.appendValueInput("VAR2")
|
||||
.appendField(Blockly.Msg.MIXLY_CIRCLE_RECOGNTITION_MIN)
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT);
|
||||
this.appendValueInput("VAR3")
|
||||
.appendField(Blockly.Msg.MIXLY_CIRCLE_RECOGNTITION_MAX)
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT);
|
||||
this.appendDummyInput()
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.PROCEDURES_DEFRETURN_RETURN + "[circle]");
|
||||
this.setOutput(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_CIRCLE_RECOGNTITION_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const ai_sensor_rect = {
|
||||
init: function () {
|
||||
this.setColour(AI_SENSOR_HUE);
|
||||
this.appendValueInput('VAR')
|
||||
.appendField(Blockly.Msg.MIXLY_RECT + Blockly.Msg.MIXPY_OBJECT)
|
||||
.setCheck("var");
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_ALL_CODE_ANALYSIS);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_GET)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.MIXLY_CIRCLE_AREA, "info1"],
|
||||
[Blockly.Msg.MIXLY_POSITION_XY + "-xywh", "rect"],
|
||||
["x" + Blockly.Msg.MIXLY_POSITION_XY, "rect[0]"],
|
||||
["y" + Blockly.Msg.MIXLY_POSITION_XY, "rect[1]"],
|
||||
["w" + Blockly.Msg.MIXLY_POSITION_XY, "rect[2]"],
|
||||
["h" + Blockly.Msg.MIXLY_POSITION_XY, "rect[3]"],
|
||||
[Blockly.Msg.MICROPYTHON_HUSKYLENS_X_CENTERED + Blockly.Msg.MIXLY_POSITION_XY, "xc"],
|
||||
[Blockly.Msg.MICROPYTHON_HUSKYLENS_Y_CENTERED + Blockly.Msg.MIXLY_POSITION_XY, "yc"]
|
||||
]), "key");
|
||||
this.setOutput(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_RECT_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const ai_sensor_find_rects = {
|
||||
init: function () {
|
||||
this.setColour(AI_SENSOR_HUE);
|
||||
this.appendValueInput('SUB')
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_RECT_RECOGNTITION);
|
||||
this.appendValueInput("VAR1")
|
||||
.appendField(Blockly.Msg.MIXLY_ESP32_THRESHOLD)
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT);
|
||||
this.appendDummyInput()
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.PROCEDURES_DEFRETURN_RETURN + "[rect]");
|
||||
this.setOutput(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_COLOR_RECOGNTITION_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const ai_sensor_color = {
|
||||
init: function () {
|
||||
this.setColour(AI_SENSOR_HUE);
|
||||
this.appendValueInput('VAR')
|
||||
.appendField(Blockly.Msg.HTML_COLOUR + Blockly.Msg.MIXPY_OBJECT)
|
||||
.setCheck("var");
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_COLOR_ANALYSIS);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_GET)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
['RGB' + Blockly.Msg.HTML_COLOUR, "[0]"],
|
||||
['LAB' + Blockly.Msg.MIXLY_COLOR_LAB, "[1]"]
|
||||
]), "key");
|
||||
this.setOutput(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_COLOR_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const ai_sensor_find_colors = {
|
||||
init: function () {
|
||||
this.setColour(AI_SENSOR_HUE);
|
||||
this.appendValueInput('SUB')
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_COLOR_RECOGNTITION);
|
||||
this.appendDummyInput()
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.PROCEDURES_DEFRETURN_RETURN + "color");
|
||||
this.setOutput(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_COLOR_RECOGNTITION_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const ai_sensor_color_chases_result = {
|
||||
init: function () {
|
||||
this.setColour(AI_SENSOR_HUE);
|
||||
this.appendValueInput('VAR')
|
||||
.appendField(Blockly.Msg.MIXLY_COLOR_CHASE + Blockly.Msg.MIXPY_OBJECT)
|
||||
.setCheck("var");
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_COLOR_CHASE_ANALYSIS);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_GET)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.MIXLY_CIRCLE_AREA, "info1"],
|
||||
[Blockly.Msg.MIXLY_POSITION_XY + "-xywh", "rect"],
|
||||
["x" + Blockly.Msg.MIXLY_POSITION_XY, "rect[0]"],
|
||||
["y" + Blockly.Msg.MIXLY_POSITION_XY, "rect[1]"],
|
||||
["w" + Blockly.Msg.MIXLY_POSITION_XY, "rect[2]"],
|
||||
["h" + Blockly.Msg.MIXLY_POSITION_XY, "rect[3]"],
|
||||
[Blockly.Msg.MICROPYTHON_HUSKYLENS_X_CENTERED + Blockly.Msg.MIXLY_POSITION_XY, "xc"],
|
||||
[Blockly.Msg.MICROPYTHON_HUSKYLENS_Y_CENTERED + Blockly.Msg.MIXLY_POSITION_XY, "yc"]
|
||||
]), "key");
|
||||
this.setOutput(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_CIRCLE_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const ai_sensor_color_chases = {
|
||||
init: function () {
|
||||
this.setColour(AI_SENSOR_HUE);
|
||||
this.appendValueInput('SUB')
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_COLOR_CHASE);
|
||||
this.appendValueInput("VAR1")
|
||||
.appendField('LAB' + Blockly.Msg.MIXLY_COLOR_LAB)
|
||||
|
||||
.setAlign(Blockly.inputs.Align.RIGHT);
|
||||
this.appendValueInput("VAR2")
|
||||
.appendField(Blockly.Msg.MIXLY_ESP32_THRESHOLD)
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT);
|
||||
this.appendValueInput("VAR3")
|
||||
.appendField(Blockly.Msg.MIXLY_COLOR_CHASE_MERGE)
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT);
|
||||
this.appendDummyInput()
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.PROCEDURES_DEFRETURN_RETURN + "[colors]");
|
||||
this.setOutput(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_CIRCLE_RECOGNTITION_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const ai_sensor_ailocal_train = {
|
||||
init: function () {
|
||||
this.setColour(AI_SENSOR_HUE);
|
||||
this.appendValueInput('SUB')
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_LOCAL_TRAIN);
|
||||
this.appendValueInput("VAR1")
|
||||
.appendField(Blockly.Msg.MIXLY_OBJECT_LIST)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT);
|
||||
this.appendValueInput("VAR2")
|
||||
.appendField(Blockly.Msg.MICROPYTHON_HUSKYLENS_SAVE_AS + Blockly.Msg.MIXLY_MODEL_NAME)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT);
|
||||
this.appendValueInput("VAR3")
|
||||
.appendField(Blockly.Msg.MIXLY_TRAIN_TIME)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT);
|
||||
this.appendValueInput("VAR4")
|
||||
.appendField(Blockly.Msg.MIXLY_AipNlp_Topic_Title)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_LOCAL_TRAIN_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const ai_sensor_ailocal_class = {
|
||||
init: function () {
|
||||
this.setColour(AI_SENSOR_HUE);
|
||||
this.appendValueInput('SUB')
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_LOCAL_CLASS);
|
||||
this.appendValueInput("VAR1")
|
||||
.appendField(Blockly.Msg.MIXLY_OBJECT_LIST)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT);
|
||||
this.appendValueInput("VAR2")
|
||||
.appendField(Blockly.Msg.MIXLY_MODEL_NAME)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT);
|
||||
this.appendValueInput("VAR4")
|
||||
.appendField(Blockly.Msg.MIXLY_AipNlp_Topic_Title)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT);
|
||||
this.appendDummyInput()
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.PROCEDURES_DEFRETURN_RETURN + "[objects]");
|
||||
this.setOutput(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_MODEL_NAME_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const ai_sensor_ailocal_class_result = {
|
||||
init: function () {
|
||||
this.setColour(AI_SENSOR_HUE);
|
||||
this.appendValueInput('VAR')
|
||||
.appendField(Blockly.Msg.MIXLY_LOCAL_CLASS + Blockly.Msg.MIXPY_OBJECT)
|
||||
.setCheck("var");
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_COLOR_CHASE_ANALYSIS);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_GET)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
['ID', "info1"],
|
||||
[Blockly.Msg.MIXLY_CONFIDENCE_DEGREE, "info2"],
|
||||
]), "key");
|
||||
this.setOutput(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_LOCAL_CLASS_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const ai_sensor_audio_record = {
|
||||
init: function () {
|
||||
this.setColour(AI_SENSOR_HUE);
|
||||
this.appendValueInput('SUB')
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_MUSIC_RECORD);
|
||||
this.appendValueInput("VAR1")
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_THE_PATH)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT);
|
||||
this.appendValueInput("VAR2")
|
||||
.appendField(Blockly.Msg.MIXPY_AI_AUDIO_TIME)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_MUSIC_RECORD_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const ai_sensor_audio_play = {
|
||||
init: function () {
|
||||
this.setColour(AI_SENSOR_HUE);
|
||||
this.appendValueInput('SUB')
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_MUSIC_PLAY);
|
||||
this.appendValueInput("VAR1")
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_THE_PATH)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT);
|
||||
this.appendValueInput("VAR2")
|
||||
.appendField(Blockly.Msg.MIXLY_MP3_VOL)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT);
|
||||
this.appendDummyInput()
|
||||
.appendField('%')
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
export const ai_sensor_yolo_recognize = {
|
||||
init: function () {
|
||||
this.setColour(AI_SENSOR_HUE);
|
||||
this.appendValueInput('SUB')
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_YOLO_RECOGNIZE);
|
||||
this.appendValueInput("VAR1")
|
||||
.appendField(Blockly.Msg.MIXLY_ANCHOR)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT);
|
||||
this.appendValueInput("VAR2")
|
||||
.appendField(Blockly.Msg.MIXLY_MODEL_PATH)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT);
|
||||
this.appendValueInput("VAR4")
|
||||
.appendField(Blockly.Msg.MIXLY_AipNlp_Topic_Title)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT);
|
||||
this.appendDummyInput()
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.PROCEDURES_DEFRETURN_RETURN + "[objects]");
|
||||
this.setOutput(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_YOLO_RECOGNIZE_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const ai_sensor_yolo_recognize_result = {
|
||||
init: function () {
|
||||
this.setColour(AI_SENSOR_HUE);
|
||||
this.appendValueInput('VAR')
|
||||
.appendField(Blockly.Msg.MIXLY_YOLO_RECOGNIZE + Blockly.Msg.MIXPY_OBJECT)
|
||||
.setCheck("var");
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_COLOR_CHASE_ANALYSIS);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_GET)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
['ID', "info1"],
|
||||
[Blockly.Msg.MIXLY_CONFIDENCE_DEGREE, "info2"],
|
||||
[Blockly.Msg.MIXLY_POSITION_XY + "-xywh", "rect"],
|
||||
["x" + Blockly.Msg.MIXLY_POSITION_XY, "rect[0]"],
|
||||
["y" + Blockly.Msg.MIXLY_POSITION_XY, "rect[1]"],
|
||||
["w" + Blockly.Msg.MIXLY_POSITION_XY, "rect[2]"],
|
||||
["h" + Blockly.Msg.MIXLY_POSITION_XY, "rect[3]"],
|
||||
[Blockly.Msg.MICROPYTHON_HUSKYLENS_X_CENTERED + Blockly.Msg.MIXLY_POSITION_XY, "xc"],
|
||||
[Blockly.Msg.MICROPYTHON_HUSKYLENS_Y_CENTERED + Blockly.Msg.MIXLY_POSITION_XY, "yc"]
|
||||
]), "key");
|
||||
this.setOutput(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_YOLO_RECOGNIZE_RESULT_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const ai_sensor_asr_recognize = {
|
||||
init: function () {
|
||||
this.setColour(AI_SENSOR_HUE);
|
||||
this.appendValueInput('SUB')
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_AipSpeech_asr);
|
||||
this.appendValueInput("VAR1")
|
||||
.appendField(Blockly.Msg.MIXLY_AI_SENSOR_ASR_RECOGNISE_CORPUS)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT);
|
||||
this.appendValueInput("VAR2")
|
||||
.appendField(Blockly.Msg.MIXLY_ESP32_THRESHOLD)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT);
|
||||
this.setOutput(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_ASR_RECOGNISE_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const ai_sensor_licenseplate = {
|
||||
init: function () {
|
||||
this.setColour(AI_SENSOR_HUE);
|
||||
this.appendValueInput('VAR')
|
||||
.appendField(Blockly.Msg.MIXLY_LICENSEPLATE + Blockly.Msg.MIXPY_OBJECT)
|
||||
.setCheck("var");
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_ALL_CODE_ANALYSIS);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_GET)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
['ID', "info1"],
|
||||
[Blockly.Msg.MIXLY_POSITION_XY + "-xywh", "rect"],
|
||||
["x" + Blockly.Msg.MIXLY_POSITION_XY, "rect[0]"],
|
||||
["y" + Blockly.Msg.MIXLY_POSITION_XY, "rect[1]"],
|
||||
["w" + Blockly.Msg.MIXLY_POSITION_XY, "rect[2]"],
|
||||
["h" + Blockly.Msg.MIXLY_POSITION_XY, "rect[3]"]
|
||||
]), "key");
|
||||
this.setOutput(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_LICENSEPLATE_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const ai_sensor_find_licenseplates = {
|
||||
init: function () {
|
||||
this.setColour(AI_SENSOR_HUE);
|
||||
this.appendValueInput('SUB')
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_AipOcr_licensePlate);
|
||||
this.appendDummyInput()
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.PROCEDURES_DEFRETURN_RETURN + "[licensePlate]");
|
||||
this.setOutput(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_LICENSEPLATE_RECOGNTITION_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const ai_sensor_face = {
|
||||
init: function () {
|
||||
this.setColour(AI_SENSOR_HUE);
|
||||
this.appendValueInput('VAR')
|
||||
.appendField(Blockly.Msg.MIXLY_FACE + Blockly.Msg.MIXPY_OBJECT)
|
||||
.setCheck("var");
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_ALL_CODE_ANALYSIS);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_GET)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
["ID", "info1"],
|
||||
[Blockly.Msg.MIXLY_CONFIDENCE_DEGREE, "info2"],
|
||||
[Blockly.Msg.MIXLY_POSITION_XY + "-xywh", "rect"],
|
||||
["x" + Blockly.Msg.MIXLY_POSITION_XY, "rect[0]"],
|
||||
["y" + Blockly.Msg.MIXLY_POSITION_XY, "rect[1]"],
|
||||
["w" + Blockly.Msg.MIXLY_POSITION_XY, "rect[2]"],
|
||||
["h" + Blockly.Msg.MIXLY_POSITION_XY, "rect[3]"]
|
||||
]), "key");
|
||||
this.setOutput(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_FACE_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const ai_sensor_classifier_faces = {
|
||||
init: function () {
|
||||
this.setColour(AI_SENSOR_HUE);
|
||||
this.appendValueInput('SUB')
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_AipFace);
|
||||
this.appendDummyInput()
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.PROCEDURES_DEFRETURN_RETURN + "[face]");
|
||||
this.setOutput(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_BAR_FACE_CLASSIFIER_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const ai_sensor_20object = {
|
||||
init: function () {
|
||||
this.setColour(AI_SENSOR_HUE);
|
||||
this.appendValueInput('VAR')
|
||||
.appendField(Blockly.Msg.MIXLY_20OBJECTS + Blockly.Msg.MIXPY_OBJECT)
|
||||
.setCheck("var");
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_ALL_CODE_ANALYSIS);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_GET)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
['ID', "info1"],
|
||||
[Blockly.Msg.MIXLY_CONFIDENCE_DEGREE, "info2"],
|
||||
[Blockly.Msg.MIXLY_POSITION_XY + "-xywh", "rect"],
|
||||
["x" + Blockly.Msg.MIXLY_POSITION_XY, "rect[0]"],
|
||||
["y" + Blockly.Msg.MIXLY_POSITION_XY, "rect[1]"],
|
||||
["w" + Blockly.Msg.MIXLY_POSITION_XY, "rect[2]"],
|
||||
["h" + Blockly.Msg.MIXLY_POSITION_XY, "rect[3]"]
|
||||
]), "key");
|
||||
this.setOutput(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_20OBJECTS_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const ai_sensor_find_20objects = {
|
||||
init: function () {
|
||||
this.setColour(AI_SENSOR_HUE);
|
||||
this.appendValueInput('SUB')
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_FIND_20OBJECTS);
|
||||
this.appendDummyInput()
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.PROCEDURES_DEFRETURN_RETURN + "[20objects]");
|
||||
this.setOutput(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_AI_SENSOR_BAR_FIND_20OBJECTS_TOOLTIP);
|
||||
}
|
||||
};
|
||||
368
boards/default_src/micropython/blocks/blynk.js
Normal file
368
boards/default_src/micropython/blocks/blynk.js
Normal file
@@ -0,0 +1,368 @@
|
||||
import * as Blockly from 'blockly/core';
|
||||
|
||||
/******************* Blynk *****************/
|
||||
const BLYNK_HUE = '#2FAD7A';
|
||||
|
||||
|
||||
// 自定义终端部件 Terminal Blynk
|
||||
export const mpython_blynk_terminal_widget_vpin = {
|
||||
init: function () {
|
||||
this.jsonInit({
|
||||
"inputsInline": true,
|
||||
"nextStatement": null,
|
||||
"previousStatement": null,
|
||||
"colour": BLYNK_HUE,
|
||||
"helpUrl": Blockly.Msg.MPYTHON_BLYNK_TERMINAL_WIDGET_VPIN_HELPURL,
|
||||
"tooltip": Blockly.Msg.MPYTHON_BLYNK_TERMINAL_WIDGET_VPIN_TOOLTIP,
|
||||
"message0": Blockly.Msg.MPYTHON_BLYNK_TERMINAL_WIDGET_VPIN_MESSAGE0,
|
||||
"args0": [
|
||||
{
|
||||
"check": Number,
|
||||
"type": "input_value",
|
||||
"name": "virtual_pin"
|
||||
}
|
||||
]
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
// 同步虚拟管脚的状态 Blynk
|
||||
export const mpython_blynk_sync_virtual = {
|
||||
init: function () {
|
||||
this.jsonInit({
|
||||
"inputsInline": true,
|
||||
"nextStatement": null,
|
||||
"previousStatement": null,
|
||||
"colour": BLYNK_HUE,
|
||||
"helpUrl": Blockly.Msg.MPYTHON_BLYNK_SYNC_VIRTUAL_HELPURL,
|
||||
"tooltip": Blockly.Msg.MPYTHON_BLYNK_SYNC_VIRTUAL_TOOLTIP,
|
||||
"message0": Blockly.Msg.MPYTHON_BLYNK_SYNC_VIRTUAL_MESSAGE0,
|
||||
"args0": [
|
||||
{
|
||||
"check": Number,
|
||||
"type": "input_value",
|
||||
"name": "virtual_pin"
|
||||
}
|
||||
]
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
// 斷開连接 Blynk
|
||||
export const mpython_blynk_on_disconnected = {
|
||||
init: function () {
|
||||
this.jsonInit({
|
||||
"inputsInline": true,
|
||||
// "nextStatement": null,
|
||||
// "previousStatement": null,
|
||||
"colour": BLYNK_HUE,
|
||||
"helpUrl": Blockly.Msg.MPYTHON_BLYNK_ON_DISCONNECTED_HELPURL,
|
||||
"tooltip": Blockly.Msg.MPYTHON_BLYNK_ON_DISCONNECTED_TOOLTIP,
|
||||
"message0": Blockly.Msg.MPYTHON_BLYNK_ON_DISCONNECTED_MESSAGE0
|
||||
});
|
||||
this.appendStatementInput('DO')
|
||||
.appendField(Blockly.CONTROLS_REPEAT_INPUT_DO);
|
||||
}
|
||||
};
|
||||
|
||||
// 连接上 Blynk
|
||||
export const mpython_blynk_on_connected = {
|
||||
init: function () {
|
||||
this.jsonInit({
|
||||
"inputsInline": true,
|
||||
// "nextStatement": null,
|
||||
// "previousStatement": null,
|
||||
"colour": BLYNK_HUE,
|
||||
"helpUrl": Blockly.Msg.MPYTHON_BLYNK_ON_CONNECTED_HELPURL,
|
||||
"tooltip": Blockly.Msg.MPYTHON_BLYNK_ON_CONNECTED_TOOLTIP,
|
||||
"message0": Blockly.Msg.MPYTHON_BLYNK_ON_CONNECTED_MESSAGE0
|
||||
});
|
||||
this.appendStatementInput('DO')
|
||||
.appendField(Blockly.CONTROLS_REPEAT_INPUT_DO);
|
||||
}
|
||||
};
|
||||
|
||||
// Blynk 定时器的进程生效并运行
|
||||
export const mpython_blynktimer_run = {
|
||||
init: function () {
|
||||
this.jsonInit({
|
||||
"inputsInline": true,
|
||||
"nextStatement": null,
|
||||
"previousStatement": null,
|
||||
"colour": BLYNK_HUE,
|
||||
"helpUrl": Blockly.Msg.MPYTHON_BLYNKTIMER_RUN_HELPURL,
|
||||
"tooltip": Blockly.Msg.MPYTHON_BLYNKTIMER_RUN_TOOLTIP,
|
||||
"message0": Blockly.Msg.MPYTHON_BLYNKTIMER_RUN_MESSAGE0
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
// Blynk 进程生效并运行
|
||||
export const mpython_blynk_run = {
|
||||
init: function () {
|
||||
this.jsonInit({
|
||||
"inputsInline": true,
|
||||
"nextStatement": null,
|
||||
"previousStatement": null,
|
||||
"colour": BLYNK_HUE,
|
||||
"helpUrl": Blockly.Msg.MPYTHON_BLYNK_RUN_HELPURL,
|
||||
"tooltip": Blockly.Msg.MPYTHON_BLYNK_RUN_TOOLTIP,
|
||||
"message0": Blockly.Msg.MPYTHON_BLYNK_RUN_MESSAGE0
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
// Blynk APP 显示通知
|
||||
export const mpython_blynk_app_notify = {
|
||||
init: function () {
|
||||
this.jsonInit({
|
||||
"inputsInline": true,
|
||||
"nextStatement": null,
|
||||
"previousStatement": null,
|
||||
"colour": BLYNK_HUE,
|
||||
"helpUrl": Blockly.Msg.MPYTHON_BLYNK_APP_NOTIFY_HELPURL,
|
||||
"tooltip": Blockly.Msg.MPYTHON_BLYNK_APP_NOTIFY_TOOLTIP,
|
||||
"message0": Blockly.Msg.MPYTHON_BLYNK_APP_NOTIFY_MESSAGE0,
|
||||
"args0": [
|
||||
{
|
||||
"check": String,
|
||||
"type": "input_value",
|
||||
"name": "notification"
|
||||
}
|
||||
]
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
// 停止 Blynk 定时器 %1
|
||||
export const mpython_blynk_stop_timers = {
|
||||
init: function () {
|
||||
this.jsonInit({
|
||||
"inputsInline": true,
|
||||
"nextStatement": null,
|
||||
"previousStatement": null,
|
||||
// "output": null,
|
||||
"colour": BLYNK_HUE,
|
||||
"helpUrl": Blockly.Msg.MPYTHON_BLYNK_STOP_TIMERS_HELPURL,
|
||||
"tooltip": Blockly.Msg.MPYTHON_BLYNKTIMER_TOOLTIP,
|
||||
"message0": Blockly.Msg.MPYTHON_BLYNK_STOP_TIMERS_MESSAGE0,
|
||||
"args0": [
|
||||
{
|
||||
"check": Number,
|
||||
"type": "input_value",
|
||||
"name": "timer_num"
|
||||
}
|
||||
]
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
// 给虚拟管脚添加 属性 %1 值 %2
|
||||
export const mpython_blynk_set_property = {
|
||||
init: function () {
|
||||
this.jsonInit({
|
||||
"inputsInline": true,
|
||||
"nextStatement": null,
|
||||
"previousStatement": null,
|
||||
// "output": null,
|
||||
"colour": BLYNK_HUE,
|
||||
"helpUrl": Blockly.Msg.MPYTHON_BLYNK_SET_PROPERTY_HELPURL,
|
||||
"tooltip": Blockly.Msg.MPYTHON_BLYNK_SET_PROPERTY_TOOLTIP,
|
||||
"message0": Blockly.Msg.MPYTHON_BLYNK_SET_PROPERTY_MESSAGE0,
|
||||
"args0": [
|
||||
{
|
||||
"check": String,
|
||||
"type": "input_value",
|
||||
"name": "attribute_name"
|
||||
}
|
||||
,
|
||||
{
|
||||
// "check":String,
|
||||
"type": "input_value",
|
||||
"name": "attribute_value"
|
||||
}
|
||||
]
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
// 向 %1 发邮件 主题 %2 正文 %3
|
||||
export const mpython_blynk_email = {
|
||||
init: function () {
|
||||
this.jsonInit({
|
||||
"inputsInline": true,
|
||||
"nextStatement": null,
|
||||
"previousStatement": null,
|
||||
// "output": null,
|
||||
"colour": BLYNK_HUE,
|
||||
"helpUrl": Blockly.Msg.MPYTHON_BLYNK_EMAIL_HELPURL,
|
||||
"tooltip": Blockly.Msg.MPYTHON_BLYNK_EMAIL_TOOLTIP,
|
||||
"message0": Blockly.Msg.MPYTHON_BLYNK_EMAIL_MESSAGE0,
|
||||
"args0": [
|
||||
{
|
||||
"check": String,
|
||||
"type": "input_value",
|
||||
"name": "TargetEmail"
|
||||
}
|
||||
,
|
||||
{
|
||||
"check": String,
|
||||
"type": "input_value",
|
||||
"name": "subject"
|
||||
}
|
||||
,
|
||||
{
|
||||
"check": String,
|
||||
"type": "input_value",
|
||||
"name": "body"
|
||||
}
|
||||
]
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
// 可用的 Blynk 定时器
|
||||
export const mpython_blynk_get_timers = {
|
||||
init: function () {
|
||||
this.jsonInit({
|
||||
"inputsInline": true,
|
||||
// "nextStatement": null,
|
||||
// "previousStatement": null,
|
||||
"output": null,
|
||||
"colour": BLYNK_HUE,
|
||||
"helpUrl": Blockly.Msg.MPYTHON_BLYNK_GET_TIMERS_HELPURL,
|
||||
"tooltip": Blockly.Msg.MPYTHON_BLYNK_GET_TIMERS_TOOLTIP,
|
||||
"message0": Blockly.Msg.MPYTHON_BLYNK_GET_TIMERS_MESSAGE0,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
//blynk定时器
|
||||
export const mpython_blynktimer = {
|
||||
init: function () {
|
||||
this.jsonInit({
|
||||
"message0": Blockly.Msg.MPYTHON_BLYNKTIMER_MESSAGE0,
|
||||
// "nextStatement": null,
|
||||
// "previousStatement": null,
|
||||
"colour": BLYNK_HUE,
|
||||
"helpUrl": Blockly.Msg.MPYTHON_BLYNKTIMER_HELPURL,
|
||||
"tooltip": Blockly.Msg.MPYTHON_BLYNKTIMER_TOOLTIP,
|
||||
"args0": [
|
||||
{
|
||||
"check": Number,
|
||||
"type": "input_value",
|
||||
"name": "Num"
|
||||
}
|
||||
,
|
||||
{
|
||||
"options": [
|
||||
[Blockly.Msg.MIXLY_PYTHON_PERIODIC, 'False'],
|
||||
[Blockly.Msg.MIXLY_PYTHON_ONE_SHOT, 'True']
|
||||
],
|
||||
"type": "field_dropdown",
|
||||
"name": "Timer_mode"
|
||||
}
|
||||
,
|
||||
{
|
||||
"check": Number,
|
||||
"type": "input_value",
|
||||
"name": "period"
|
||||
}
|
||||
]
|
||||
});
|
||||
this.appendStatementInput('DO')
|
||||
.appendField(Blockly.CONTROLS_REPEAT_INPUT_DO);
|
||||
}
|
||||
};
|
||||
|
||||
// 发送数据 %1 到 Bylnk APP 的虚拟管脚 %2
|
||||
export const mpython_blynk_sensor_data_to_app = {
|
||||
init: function () {
|
||||
this.jsonInit({
|
||||
"inputsInline": true,
|
||||
"nextStatement": null,
|
||||
"previousStatement": null,
|
||||
"colour": BLYNK_HUE,
|
||||
"helpUrl": Blockly.Msg.MPYTHON_BLYNK_SENSOR_DATA_TO_APP_HELPURL,
|
||||
"tooltip": Blockly.Msg.MPYTHON_BLYNK_SENSOR_DATA_TO_APP_TOOLTIP,
|
||||
"message0": Blockly.Msg.MPYTHON_BLYNK_SENSOR_DATA_TO_APP_MESSAGE0,
|
||||
"args0": [
|
||||
{
|
||||
"type": "input_value",
|
||||
"name": "sensor_data"
|
||||
}
|
||||
,
|
||||
{
|
||||
"check": Number,
|
||||
"type": "input_value",
|
||||
"name": "virtual_pin"
|
||||
}
|
||||
]
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
// 从 Bylnk APP 获取虚拟管脚 %1 的值
|
||||
export const mpython_blynk_app_data = {
|
||||
init: function () {
|
||||
this.jsonInit({
|
||||
"inputsInline": true,
|
||||
// "nextStatement": null,
|
||||
// "previousStatement": null,
|
||||
// "output":null,
|
||||
"colour": BLYNK_HUE,
|
||||
"helpUrl": Blockly.Msg.MPYTHON_BLYNK_APP_DATA_HELPURL,
|
||||
"tooltip": Blockly.Msg.MPYTHON_BLYNK_SENSOR_DATA_TO_APP_TOOLTIP,
|
||||
"message0": Blockly.Msg.MPYTHON_BLYNK_APP_DATA_MESSAGE0,
|
||||
"args0": [
|
||||
{
|
||||
"check": Number,
|
||||
"type": "input_value",
|
||||
"name": "virtual_pin"
|
||||
}
|
||||
,
|
||||
{
|
||||
"type": "input_value",
|
||||
"name": "virtual_pin_val"
|
||||
}
|
||||
]
|
||||
});
|
||||
this.appendStatementInput('DO')
|
||||
.appendField(Blockly.CONTROLS_REPEAT_INPUT_DO);
|
||||
}
|
||||
};
|
||||
|
||||
// Bylnk设置
|
||||
export const mpython_blynk_setup = {
|
||||
init: function () {
|
||||
this.jsonInit({
|
||||
// "inputsInline": true,
|
||||
"nextStatement": null,
|
||||
"previousStatement": null,
|
||||
"colour": BLYNK_HUE,
|
||||
"helpUrl": Blockly.Msg.MPYTHON_BLYNK_SETUP_HELPURL,
|
||||
"tooltip": Blockly.Msg.MPYTHON_BLYNK_SETUP_TOOLTIP,
|
||||
"message0": Blockly.Msg.MPYTHON_BLYNK_SETUP_MESSAGE0,
|
||||
"args0": [
|
||||
{
|
||||
"type": "input_dummy"
|
||||
},
|
||||
{
|
||||
"check": String,
|
||||
"type": "input_value",
|
||||
"name": "server"
|
||||
},
|
||||
{
|
||||
"check": Number,
|
||||
"type": "input_value",
|
||||
"name": "port"
|
||||
},
|
||||
{
|
||||
"check": String,
|
||||
"type": "input_value",
|
||||
"name": "auth"
|
||||
}
|
||||
]
|
||||
});
|
||||
}
|
||||
};
|
||||
81
boards/default_src/micropython/blocks/cc_g1.js
Normal file
81
boards/default_src/micropython/blocks/cc_g1.js
Normal file
@@ -0,0 +1,81 @@
|
||||
import * as Blockly from 'blockly/core';
|
||||
|
||||
const CCG1_HUE = 40;
|
||||
|
||||
export const cc_g1_init = {
|
||||
init: function () {
|
||||
this.setColour(CCG1_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_SETUP + " CC_G1");
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
var thisBlock = this;
|
||||
this.setTooltip(function () {
|
||||
var mode = thisBlock.getFieldValue('key');
|
||||
var TOOLTIPS = {
|
||||
"temperature": Blockly.Msg.MIXLY_MICROBIT_SENSOR_SHT_temperature_TOOLTIP,
|
||||
"relative_humidity": Blockly.Msg.MIXLY_MICROBIT_SENSOR_SHT_HUM_TOOLTIP
|
||||
};
|
||||
return TOOLTIPS[mode]
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
export const cc_g1_read_bat = {
|
||||
init: function () {
|
||||
this.setColour(CCG1_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_GET_BATTERY);
|
||||
this.setOutput(true, Number);
|
||||
this.setInputsInline(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const cc_g1_read_joystick = {
|
||||
init: function () {
|
||||
this.setColour(CCG1_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_GET_JOYSTICK)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
["x", "[0]"],
|
||||
["y", "[1]"],
|
||||
["(x,y)", ""]
|
||||
]), "VAR");
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_DATA);
|
||||
this.setOutput(true, Number);
|
||||
this.setInputsInline(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const cc_g1_read_key = {
|
||||
init: function () {
|
||||
this.setColour(CCG1_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_BUTTON)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
["A", "0"],
|
||||
["B", "1"],
|
||||
["C", "2"],
|
||||
["D", "3"],
|
||||
["POWER", "4"],
|
||||
["SELECT", "5"]
|
||||
]), "VAR");
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.WHETHER_IS_PRESSED);
|
||||
this.setOutput(true, Number);
|
||||
this.setInputsInline(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const cc_g1_turnoff = {
|
||||
init: function () {
|
||||
this.setColour(CCG1_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_HANDLE_SHUTDOWN);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
}
|
||||
};
|
||||
318
boards/default_src/micropython/blocks/ce_go.js
Normal file
318
boards/default_src/micropython/blocks/ce_go.js
Normal file
@@ -0,0 +1,318 @@
|
||||
import * as Blockly from 'blockly/core';
|
||||
|
||||
const MEGO_HUE = 100;
|
||||
|
||||
//LED
|
||||
export const ce_go_light_number = {
|
||||
init: function () {
|
||||
this.setColour(MEGO_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.MIXGO_LEFT_FRONT + Blockly.Msg.COLOUR_RGB_GREEN + Blockly.Msg.MIXLY_EXTERN_LED, "GLED[0]"],
|
||||
[Blockly.Msg.MIXGO_RIGHT_FRONT + Blockly.Msg.COLOUR_RGB_GREEN + Blockly.Msg.MIXLY_EXTERN_LED, "GLED[1]"],
|
||||
[Blockly.Msg.MIXGO_LEFT_BACK + Blockly.Msg.COLOUR_RGB_GREEN + Blockly.Msg.MIXLY_EXTERN_LED, "GLED[3]"],
|
||||
[Blockly.Msg.MIXGO_RIGHT_BACK + Blockly.Msg.COLOUR_RGB_GREEN + Blockly.Msg.MIXLY_EXTERN_LED, "GLED[2]"],
|
||||
[Blockly.Msg.MIXGO_LEFT_FRONT + Blockly.Msg.COLOUR_RGB_RED + Blockly.Msg.MIXLY_EXTERN_LED, "RLED[0]"],
|
||||
[Blockly.Msg.MIXGO_RIGHT_FRONT + Blockly.Msg.COLOUR_RGB_RED + Blockly.Msg.MIXLY_EXTERN_LED, "RLED[1]"],
|
||||
[Blockly.Msg.MIXGO_LEFT_BACK + Blockly.Msg.COLOUR_RGB_RED + Blockly.Msg.MIXLY_EXTERN_LED, "RLED[3]"],
|
||||
[Blockly.Msg.MIXGO_RIGHT_BACK + Blockly.Msg.COLOUR_RGB_RED + Blockly.Msg.MIXLY_EXTERN_LED, "RLED[2]"],
|
||||
[Blockly.Msg.ME_GO_LIGHT_HEADLIGHT, "WLED"]
|
||||
]), 'op')
|
||||
this.setOutput(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const ce_go_led_bright = {
|
||||
init: function () {
|
||||
this.setColour(MEGO_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_SETTING);
|
||||
this.appendValueInput('led')
|
||||
.appendField('ME GO')
|
||||
this.appendValueInput('bright')
|
||||
.appendField(Blockly.Msg.MIXLY_PULSEIN_STAT)
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_LED_SETONOFF);
|
||||
}
|
||||
};
|
||||
|
||||
export const ce_go_get_led_bright = {
|
||||
init: function () {
|
||||
this.setColour(MEGO_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET);
|
||||
this.appendValueInput('led')
|
||||
.appendField('ME GO')
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_BRIGHTNESS)
|
||||
this.setOutput(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_LED_GETONOFF);
|
||||
}
|
||||
};
|
||||
|
||||
export const ce_go_get_led_state = {
|
||||
init: function () {
|
||||
this.setColour(MEGO_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET);
|
||||
this.appendValueInput('led')
|
||||
.appendField('ME GO')
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_PULSEIN_STAT)
|
||||
this.setOutput(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_LED_GETONOFF);
|
||||
}
|
||||
};
|
||||
|
||||
export const ce_go_led_brightness = {
|
||||
init: function () {
|
||||
this.setColour(MEGO_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_SETTING);
|
||||
this.appendValueInput('led')
|
||||
.appendField('ME GO')
|
||||
this.appendValueInput('bright')
|
||||
.appendField(Blockly.Msg.MIXLY_BRIGHTNESS)
|
||||
this.appendDummyInput("")
|
||||
.appendField("%")
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_SETTING + Blockly.Msg.MIXLY_BUILDIN_LED + Blockly.Msg.MIXLY_BRIGHTNESS + '(0-10)');
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
export const ce_go_stepper_keep = {
|
||||
init: function () {
|
||||
this.setColour(MEGO_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField("ME GO")
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.blockpy_forward, "F"],
|
||||
[Blockly.Msg.blockpy_backward, "B"],
|
||||
[Blockly.Msg.blockpy_left, "L"],
|
||||
[Blockly.Msg.blockpy_right, "R"]
|
||||
]), "VAR");
|
||||
this.appendValueInput('speed')
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.MIXLY_STEPPER_SET_SPEED);
|
||||
this.appendDummyInput("")
|
||||
.appendField("%")
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
}
|
||||
}
|
||||
|
||||
export const ce_go_stepper_stop = {
|
||||
init: function () {
|
||||
this.setColour(MEGO_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField("ME GO")
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.MOTOR_P, "P"],
|
||||
[Blockly.Msg.MOTOR_N, "N"]
|
||||
]), "VAR");
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
}
|
||||
}
|
||||
|
||||
export const ce_go_dc_motor = {
|
||||
init: function () {
|
||||
this.setColour(MEGO_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField("ME GO")
|
||||
.appendField(Blockly.Msg.MOTOR_DC)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.MIXLYCAR_WHEEL_LEFT, "0"],
|
||||
[Blockly.Msg.MIXLYCAR_WHEEL_RIGHT, "1"],
|
||||
[Blockly.Msg.ME_GO_MOTOR_EXTERN, "2"]
|
||||
]), "wheel");
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_Direction)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.ROTATION_FORWARD, "CW"],
|
||||
[Blockly.Msg.ROTATION_BACKWARD, "CCW"],
|
||||
[Blockly.Msg.MOTOR_P, "P"],
|
||||
[Blockly.Msg.MOTOR_N, "N"]
|
||||
]), "direction");
|
||||
this.appendValueInput('speed')
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.MIXLY_STEPPER_SET_SPEED);
|
||||
this.appendDummyInput("")
|
||||
.appendField("%")
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
}
|
||||
}
|
||||
|
||||
export const ce_go_hall_attachInterrupt = {
|
||||
init: function () {
|
||||
this.setColour(MEGO_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_ESP32_INTERRUPT)
|
||||
.appendField(Blockly.Msg.ME_GO_HALL_SENSOR)
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown([[Blockly.Msg.TEXT_TRIM_LEFT, "A"], [Blockly.Msg.TEXT_TRIM_RIGHT, "B"]]), "mode");
|
||||
this.appendValueInput('DO')
|
||||
.appendField(Blockly.Msg.MIXLY_DO)
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.setInputsInline(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const ce_go_hall_initialize = {
|
||||
init: function () {
|
||||
this.setColour(MEGO_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.ME_GO_HALL_SENSOR)
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown([[Blockly.Msg.TEXT_TRIM_LEFT, "A"], [Blockly.Msg.TEXT_TRIM_RIGHT, "B"]]), "mode");
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_SETUP)
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown([['turns', "turns"], ['distance', "distance"], ['turns,distance', 'all']]), "args");
|
||||
this.appendValueInput('num')
|
||||
.setCheck(Number)
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.setInputsInline(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const ce_go_hall_data = {
|
||||
init: function () {
|
||||
this.setColour(MEGO_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.ME_GO_HALL_SENSOR)
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown([[Blockly.Msg.TEXT_TRIM_LEFT, "A"], [Blockly.Msg.TEXT_TRIM_RIGHT, "B"]]), "mode");
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown([['turns', "turns"], ['distance', "distance"], ['speed', 'speed']]), "args");
|
||||
this.setOutput(true);
|
||||
this.setInputsInline(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const ce_go_pin_near_line = {
|
||||
init: function () {
|
||||
this.setColour(MEGO_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.TEXT_TRIM_LEFT, "[0]"],
|
||||
[Blockly.Msg.MIXGO_LEFT_MID, "[1]"],
|
||||
[Blockly.Msg.MIXGO_RIGHT_MID, "[2]"],
|
||||
[Blockly.Msg.TEXT_TRIM_RIGHT, "[3]"],
|
||||
[Blockly.Msg.MIXLY_ALL, ""]
|
||||
]), "key")
|
||||
.appendField(Blockly.Msg.MIXGO_LINE_SENSOR_VAL);
|
||||
this.setOutput(true, Number);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(function () {
|
||||
var mode0 = Blockly.Msg.MIXLY_ESP32_SENSOR_MIXGO_PIN_NEAR_TOOLTIP;
|
||||
var mode1 = Blockly.Msg.MIXLY_ESP32_NEAR;
|
||||
return mode0 + mode1
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
export const ce_go_pin_near = {
|
||||
init: function () {
|
||||
this.setColour(MEGO_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.MIXGO_LEFT_FRONT, "[0]"],
|
||||
[Blockly.Msg.MIXGO_RIGHT_FRONT, "[1]"],
|
||||
[Blockly.Msg.MIXGO_LEFT_BACK, "[3]"],
|
||||
[Blockly.Msg.MIXGO_RIGHT_BACK, "[2]"],
|
||||
[Blockly.Msg.MIXLY_ALL, ""]
|
||||
]), "key")
|
||||
.appendField(Blockly.Msg.MIXGO_PROXIMITY_SENSOR);
|
||||
this.setOutput(true, Number);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(function () {
|
||||
var mode0 = Blockly.Msg.MIXLY_ESP32_SENSOR_MIXGO_PIN_NEAR_TOOLTIP;
|
||||
var mode1 = Blockly.Msg.MIXLY_ESP32_NEAR;
|
||||
return mode0 + mode1
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
export const ce_go_pin_near_state_change = {
|
||||
init: function () {
|
||||
this.setColour(MEGO_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_MIXGO_CAR_SENSOR_ONBOARD_CHANGE)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.MIXLY_ME_GO_CAR_SENSOR_ONBOARD_AUTO_CHANGE, "AS"],
|
||||
[Blockly.Msg.MIXLY_MIXGO_CAR_USE_LINE_ONLY, "LP"],
|
||||
[Blockly.Msg.MIXLY_MIXGO_CAR_USE_PROXIMITY_ONLY, "OA"],
|
||||
[Blockly.Msg.MIXLY_ME_GO_CAR_LIGHT_SEEKING_ONLY, "LS"],
|
||||
[Blockly.Msg.ME_GO_SENSOR_MODE_OFF, "CL"]
|
||||
]), "key");
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const sensor_mixgome_eulerangles = {
|
||||
init: function () {
|
||||
this.setColour(MEGO_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_GET_GESTURE)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.ME_GO_PITCH, '[0]'],
|
||||
[Blockly.Msg.ME_GO_ROLL, '[1]'],
|
||||
[Blockly.Msg.ME_GO_PITCH + ', ' + Blockly.Msg.ME_GO_ROLL, '']
|
||||
]), 'angle');
|
||||
// this.appendDummyInput("")
|
||||
// .appendField(Blockly.Msg.BOARD_DIRECTION)
|
||||
// .appendField(new Blockly.FieldDropdown([
|
||||
// [Blockly.Msg.OLED_VER,'True'],
|
||||
// [Blockly.Msg.OLED_HOR,'False'],
|
||||
// ]),'dir');
|
||||
this.appendDummyInput("")
|
||||
this.setOutput(true, Number);
|
||||
this.setInputsInline(true);
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
export const ce_go_pin_light = {
|
||||
init: function () {
|
||||
this.setColour(MEGO_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.TEXT_TRIM_LEFT, "[0]"],
|
||||
[Blockly.Msg.MIXGO_LEFT_MID, "[1]"],
|
||||
[Blockly.Msg.MIXGO_RIGHT_MID, "[2]"],
|
||||
[Blockly.Msg.TEXT_TRIM_RIGHT, "[3]"],
|
||||
[Blockly.Msg.MIXLY_ALL, ""]
|
||||
]), "key")
|
||||
.appendField(Blockly.Msg.MIXLY_ME_GO_CAR_LIGHT_SEEKING_SENSOR);
|
||||
this.setOutput(true, Number);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(function () {
|
||||
var mode0 = Blockly.Msg.MIXLY_ESP32_SENSOR_MIXGO_PIN_NEAR_TOOLTIP;
|
||||
var mode1 = Blockly.Msg.MIXLY_ME_GO_CAR_LIGHT_SEEKING_SENSOR;
|
||||
return mode0 + mode1
|
||||
});
|
||||
}
|
||||
};
|
||||
1178
boards/default_src/micropython/blocks/communicate.js
Normal file
1178
boards/default_src/micropython/blocks/communicate.js
Normal file
File diff suppressed because it is too large
Load Diff
621
boards/default_src/micropython/blocks/control.js
Normal file
621
boards/default_src/micropython/blocks/control.js
Normal file
@@ -0,0 +1,621 @@
|
||||
import * as Blockly from 'blockly/core';
|
||||
|
||||
const LOOPS_HUE = 120//'#EB8045';
|
||||
|
||||
export const base_setup = {
|
||||
init: function () {
|
||||
this.setColour(LOOPS_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_SETUP);
|
||||
this.appendStatementInput('DO')
|
||||
.appendField('');
|
||||
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_CONTROL_SETUP);
|
||||
}
|
||||
};
|
||||
|
||||
export const controls_delay = {
|
||||
init: function () {
|
||||
this.setColour(LOOPS_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_DELAY)
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_SECOND, "s"], [Blockly.Msg.MIXLY_mSecond, "ms"], [Blockly.Msg.MIXLY_uSecond, "us"]]), 'Time');
|
||||
this.appendValueInput("DELAY_TIME", Number)
|
||||
.setCheck(Number);
|
||||
this.setFieldValue('ms', 'Time')
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_CONTROL_DELAY);
|
||||
}
|
||||
};
|
||||
|
||||
export const Panic_with_status_code = {
|
||||
init: function () {
|
||||
this.setColour(LOOPS_HUE);
|
||||
this.appendValueInput("STATUS_CODE", Number)
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_Panic_with_status_code)
|
||||
.setCheck(Number);
|
||||
this.setPreviousStatement(true, null);
|
||||
// this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_Panic_with_status_code);
|
||||
}
|
||||
};
|
||||
|
||||
export const reset = {
|
||||
init: function () {
|
||||
this.setColour(LOOPS_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_Reset_micro);
|
||||
this.setPreviousStatement(true);
|
||||
// this.setNextStatement(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_Reset_micro);
|
||||
}
|
||||
};
|
||||
|
||||
export const controls_for = {
|
||||
init: function () {
|
||||
this.setColour(LOOPS_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.LANG_CONTROLS_FOR_INPUT_WITH)
|
||||
.appendField(new Blockly.FieldTextInput('i'), 'VAR');
|
||||
this.appendValueInput('FROM')
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.LANG_CONTROLS_FOR_INPUT_FROM);
|
||||
this.appendValueInput('TO')
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.LANG_CONTROLS_FOR_INPUT_TO);
|
||||
this.appendValueInput('STEP')
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.MIXLY_STEP);
|
||||
this.appendStatementInput('DO')
|
||||
.appendField(Blockly.Msg.MIXLY_DO);
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.setInputsInline(true);
|
||||
var thisBlock = this;
|
||||
this.setTooltip(function () {
|
||||
return Blockly.Msg.CONTROLS_FOR_TOOLTIP.replace('%1',
|
||||
thisBlock.getFieldValue('VAR'));
|
||||
});
|
||||
},
|
||||
getVars: function () {
|
||||
return [this.getFieldValue('VAR')];
|
||||
},
|
||||
renameVar: function (oldName, newName) {
|
||||
if (Blockly.Names.equals(oldName, this.getFieldValue('VAR'))) {
|
||||
this.setTitleValue(newName, 'VAR');
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
export const controls_whileUntil = {
|
||||
init: function () {
|
||||
this.setColour(LOOPS_HUE);
|
||||
this.appendValueInput('BOOL')
|
||||
.setCheck([Boolean, Number])
|
||||
.appendField(Blockly.Msg.LANG_CONTROLS_WHILEUNTIL_TITLE_REPEAT)
|
||||
.appendField(new Blockly.FieldDropdown(this.OPERATORS), 'MODE');
|
||||
this.appendStatementInput('DO')
|
||||
.appendField(Blockly.Msg.MIXLY_DO);
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
var thisBlock = this;
|
||||
this.setTooltip(function () {
|
||||
var op = thisBlock.getFieldValue('MODE');
|
||||
var TOOLTIPS = {
|
||||
'WHILE': Blockly.Msg.CONTROLS_WHILEUNTIL_TOOLTIP_WHILE,
|
||||
'UNTIL': Blockly.Msg.CONTROLS_WHILEUNTIL_TOOLTIP_UNTIL
|
||||
};
|
||||
return TOOLTIPS[op];
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
controls_whileUntil.OPERATORS = [
|
||||
[Blockly.Msg.LANG_CONTROLS_WHILEUNTIL_OPERATOR_WHILE, 'WHILE'],
|
||||
[Blockly.Msg.LANG_CONTROLS_WHILEUNTIL_OPERATOR_UNTIL, 'UNTIL']
|
||||
];
|
||||
|
||||
export const controls_flow_statements = {
|
||||
init: function () {
|
||||
this.setColour(LOOPS_HUE);
|
||||
var dropdown = new Blockly.FieldDropdown(this.OPERATORS);
|
||||
this.appendDummyInput()
|
||||
.appendField(dropdown, 'FLOW')
|
||||
.appendField(Blockly.Msg.LANG_CONTROLS_FLOW_STATEMENTS_INPUT_OFLOOP);
|
||||
this.setPreviousStatement(true);
|
||||
var thisBlock = this;
|
||||
this.setTooltip(function () {
|
||||
var op = thisBlock.getFieldValue('FLOW');
|
||||
var TOOLTIPS = {
|
||||
'BREAK': Blockly.Msg.CONTROLS_FLOW_STATEMENTS_TOOLTIP_BREAK,
|
||||
'CONTINUE': Blockly.Msg.CONTROLS_FLOW_STATEMENTS_TOOLTIP_CONTINUE
|
||||
};
|
||||
return TOOLTIPS[op];
|
||||
});
|
||||
},
|
||||
onchange: function () {
|
||||
if (!this.workspace) {
|
||||
// Block has been deleted.
|
||||
return;
|
||||
}
|
||||
var legal = false;
|
||||
// Is the block nested in a control statement?
|
||||
var block = this;
|
||||
do {
|
||||
if (block.type == 'controls_repeat' ||
|
||||
block.type == 'controls_for' ||
|
||||
block.type == 'controls_forEach' ||
|
||||
block.type == 'controls_repeat_ext' ||
|
||||
block.type == 'controls_whileUntil') {
|
||||
legal = true;
|
||||
break;
|
||||
}
|
||||
block = block.getSurroundParent();
|
||||
} while (block);
|
||||
if (legal) {
|
||||
this.setWarningText(null);
|
||||
} else {
|
||||
this.setWarningText(Blockly.Msg.LANG_CONTROLS_FLOW_STATEMENTS_WARNING);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
controls_flow_statements.OPERATORS = [
|
||||
[Blockly.Msg.LANG_CONTROLS_FLOW_STATEMENTS_OPERATOR_BREAK, 'BREAK'],
|
||||
[Blockly.Msg.LANG_CONTROLS_FLOW_STATEMENTS_OPERATOR_CONTINUE, 'CONTINUE']
|
||||
];
|
||||
|
||||
export const controls_millis = {
|
||||
init: function () {
|
||||
this.setColour(LOOPS_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_RUNTIME);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_mSecond, "ms"], [Blockly.Msg.MIXLY_uSecond, "us"]]), 'Time');
|
||||
this.setOutput(true, Number);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_RUNTIME);
|
||||
}
|
||||
};
|
||||
|
||||
export const controls_if = {
|
||||
/**
|
||||
* Block for if/elseif/else condition.
|
||||
* @this Blockly.Block
|
||||
*/
|
||||
init: function () {
|
||||
//this.setHelpUrl(Blockly.Msg.CONTROLS_IF_HELPURL);
|
||||
this.setColour(LOOPS_HUE);
|
||||
this.appendValueInput('IF0')
|
||||
.setCheck([Boolean, Number])
|
||||
.appendField(Blockly.Msg.CONTROLS_IF_MSG_IF);
|
||||
this.appendStatementInput('DO0')
|
||||
.appendField(Blockly.Msg.CONTROLS_IF_MSG_THEN);
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.setHelpUrl("https://mixly.readthedocs.io/zh_CN/latest/arduino/03.Control.html#if");
|
||||
this.setMutator(new Blockly.icons.MutatorIcon(['controls_if_elseif',
|
||||
'controls_if_else'], this));
|
||||
// Assign 'this' to a variable for use in the tooltip closure below.
|
||||
var thisBlock = this;
|
||||
this.setTooltip(function () {
|
||||
if (!thisBlock.elseifCount_ && !thisBlock.elseCount_) {
|
||||
return Blockly.Msg.CONTROLS_IF_TOOLTIP_1;
|
||||
} else if (!thisBlock.elseifCount_ && thisBlock.elseCount_) {
|
||||
return Blockly.Msg.CONTROLS_IF_TOOLTIP_2;
|
||||
} else if (thisBlock.elseifCount_ && !thisBlock.elseCount_) {
|
||||
return Blockly.Msg.CONTROLS_IF_TOOLTIP_3;
|
||||
} else if (thisBlock.elseifCount_ && thisBlock.elseCount_) {
|
||||
return Blockly.Msg.CONTROLS_IF_TOOLTIP_4;
|
||||
}
|
||||
return '';
|
||||
});
|
||||
this.elseifCount_ = 0;
|
||||
this.elseCount_ = 0;
|
||||
},
|
||||
/**
|
||||
* Create XML to represent the number of else-if and else inputs.
|
||||
* @return {Element} XML storage element.
|
||||
* @this Blockly.Block
|
||||
*/
|
||||
mutationToDom: function () {
|
||||
if (!this.elseifCount_ && !this.elseCount_) {
|
||||
return null;
|
||||
}
|
||||
var container = document.createElement('mutation');
|
||||
if (this.elseifCount_) {
|
||||
container.setAttribute('elseif', this.elseifCount_);
|
||||
}
|
||||
if (this.elseCount_) {
|
||||
container.setAttribute('else', 1);
|
||||
}
|
||||
return container;
|
||||
},
|
||||
/**
|
||||
* Parse XML to restore the else-if and else inputs.
|
||||
* @param {!Element} xmlElement XML storage element.
|
||||
* @this Blockly.Block
|
||||
*/
|
||||
domToMutation: function (xmlElement) {
|
||||
var containerBlock = this;
|
||||
var valueConnections = [];
|
||||
var statementConnections = [];
|
||||
// var elseStatementConnection = null;
|
||||
if (this.elseCount_) {
|
||||
// if (containerBlock.getInputTargetBlock('ELSE') && containerBlock.getInputTargetBlock('ELSE').previousConnection)
|
||||
// elseStatementConnection = containerBlock.getInputTargetBlock('ELSE').previousConnection;
|
||||
this.removeInput('ELSE');
|
||||
}
|
||||
for (var i = this.elseifCount_; i > 0; i--) {
|
||||
if (containerBlock.getInputTargetBlock('IF' + i) && containerBlock.getInputTargetBlock('IF' + i).previousConnection)
|
||||
valueConnections[i] = (containerBlock.getInputTargetBlock('IF' + i).previousConnection);
|
||||
else
|
||||
valueConnections[i] = null;
|
||||
this.removeInput('IF' + i);
|
||||
if (containerBlock.getInputTargetBlock('DO' + i) && containerBlock.getInputTargetBlock('DO' + i).previousConnection)
|
||||
statementConnections[i] = (containerBlock.getInputTargetBlock('DO' + i).previousConnection);
|
||||
else
|
||||
statementConnections[i] = null;
|
||||
this.removeInput('DO' + i);
|
||||
}
|
||||
this.elseifCount_ = parseInt(xmlElement.getAttribute('elseif'), 10);
|
||||
this.elseCount_ = parseInt(xmlElement.getAttribute('else'), 10);
|
||||
//this.compose(containerBlock);
|
||||
for (var i = 1; i <= this.elseifCount_; i++) {
|
||||
this.appendValueInput('IF' + i)
|
||||
.setCheck([Boolean, Number])
|
||||
.appendField(Blockly.Msg.CONTROLS_IF_MSG_ELSEIF);
|
||||
this.appendStatementInput('DO' + i)
|
||||
.appendField(Blockly.Msg.CONTROLS_IF_MSG_THEN);
|
||||
}
|
||||
if (this.elseCount_) {
|
||||
this.appendStatementInput('ELSE')
|
||||
.appendField(Blockly.Msg.CONTROLS_IF_MSG_ELSE);
|
||||
}
|
||||
for (var i = valueConnections.length - 2; i > 0; i--) {
|
||||
if (valueConnections[i])
|
||||
valueConnections[i].reconnect(this, 'IF' + i);
|
||||
}
|
||||
for (var i = statementConnections.length - 2; i > 0; i--) {
|
||||
if (statementConnections[i])
|
||||
statementConnections[i].reconnect(this, 'DO' + i);
|
||||
}
|
||||
},
|
||||
/**
|
||||
* Populate the mutator's dialog with this block's components.
|
||||
* @param {!Blockly.Workspace} workspace Mutator's workspace.
|
||||
* @return {!Blockly.Block} Root block in mutator.
|
||||
* @this Blockly.Block
|
||||
*/
|
||||
decompose: function (workspace) {
|
||||
var containerBlock = workspace.newBlock('controls_if_if');
|
||||
containerBlock.initSvg();
|
||||
var connection = containerBlock.getInput('STACK').connection;
|
||||
for (var i = 1; i <= this.elseifCount_; i++) {
|
||||
var elseifBlock = workspace.newBlock('controls_if_elseif');
|
||||
elseifBlock.initSvg();
|
||||
connection.connect(elseifBlock.previousConnection);
|
||||
connection = elseifBlock.nextConnection;
|
||||
}
|
||||
if (this.elseCount_) {
|
||||
var elseBlock = workspace.newBlock('controls_if_else');
|
||||
elseBlock.initSvg();
|
||||
connection.connect(elseBlock.previousConnection);
|
||||
}
|
||||
return containerBlock;
|
||||
},
|
||||
/**
|
||||
* Reconfigure this block based on the mutator dialog's components.
|
||||
* @param {!Blockly.Block} containerBlock Root block in mutator.
|
||||
* @this Blockly.Block
|
||||
*/
|
||||
compose: function (containerBlock) {
|
||||
// Disconnect the else input blocks and remove the inputs.
|
||||
if (this.elseCount_) {
|
||||
this.removeInput('ELSE');
|
||||
}
|
||||
this.elseCount_ = 0;
|
||||
// Disconnect all the elseif input blocks and remove the inputs.
|
||||
for (var i = this.elseifCount_; i > 0; i--) {
|
||||
this.removeInput('IF' + i);
|
||||
this.removeInput('DO' + i);
|
||||
}
|
||||
this.elseifCount_ = 0;
|
||||
// Rebuild the block's optional inputs.
|
||||
var clauseBlock = containerBlock.getInputTargetBlock('STACK');
|
||||
var valueConnections = [null];
|
||||
var statementConnections = [null];
|
||||
var elseStatementConnection = null;
|
||||
while (clauseBlock) {
|
||||
switch (clauseBlock.type) {
|
||||
case 'controls_if_elseif':
|
||||
this.elseifCount_++;
|
||||
valueConnections.push(clauseBlock.valueConnection_);
|
||||
statementConnections.push(clauseBlock.statementConnection_);
|
||||
break;
|
||||
case 'controls_if_else':
|
||||
this.elseCount_++;
|
||||
elseStatementConnection = clauseBlock.statementConnection_;
|
||||
break;
|
||||
default:
|
||||
throw Error('Unknown block type: ' + clauseBlock.type);
|
||||
}
|
||||
clauseBlock = clauseBlock.nextConnection &&
|
||||
clauseBlock.nextConnection.targetBlock();
|
||||
}
|
||||
|
||||
this.updateShape_();
|
||||
// Reconnect any child blocks.
|
||||
this.reconnectChildBlocks_(valueConnections, statementConnections, elseStatementConnection);
|
||||
|
||||
},
|
||||
/**
|
||||
* Store pointers to any connected child blocks.
|
||||
* @param {!Blockly.Block} containerBlock Root block in mutator.
|
||||
* @this Blockly.Block
|
||||
*/
|
||||
saveConnections: function (containerBlock) {
|
||||
var clauseBlock = containerBlock.getInputTargetBlock('STACK');
|
||||
var i = 1;
|
||||
while (clauseBlock) {
|
||||
switch (clauseBlock.type) {
|
||||
case 'controls_if_elseif':
|
||||
var inputIf = this.getInput('IF' + i);
|
||||
var inputDo = this.getInput('DO' + i);
|
||||
clauseBlock.valueConnection_ =
|
||||
inputIf && inputIf.connection.targetConnection;
|
||||
clauseBlock.statementConnection_ =
|
||||
inputDo && inputDo.connection.targetConnection;
|
||||
i++;
|
||||
break;
|
||||
case 'controls_if_else':
|
||||
var inputDo = this.getInput('ELSE');
|
||||
clauseBlock.statementConnection_ =
|
||||
inputDo && inputDo.connection.targetConnection;
|
||||
break;
|
||||
default:
|
||||
throw 'Unknown block type.';
|
||||
}
|
||||
clauseBlock = clauseBlock.nextConnection &&
|
||||
clauseBlock.nextConnection.targetBlock();
|
||||
}
|
||||
},
|
||||
/**
|
||||
* Reconstructs the block with all child blocks attached.
|
||||
*/
|
||||
rebuildShape_: function () {
|
||||
var valueConnections = [null];
|
||||
var statementConnections = [null];
|
||||
var elseStatementConnection = null;
|
||||
|
||||
if (this.getInput('ELSE')) {
|
||||
elseStatementConnection = this.getInput('ELSE').connection.targetConnection;
|
||||
}
|
||||
var i = 1;
|
||||
while (this.getInput('IF' + i)) {
|
||||
var inputIf = this.getInput('IF' + i);
|
||||
var inputDo = this.getInput('DO' + i);
|
||||
console.log(inputIf.connection.targetConnection);
|
||||
valueConnections.push(inputIf.connection.targetConnection);
|
||||
statementConnections.push(inputDo.connection.targetConnection);
|
||||
i++;
|
||||
}
|
||||
this.updateShape_();
|
||||
this.reconnectChildBlocks_(valueConnections, statementConnections, elseStatementConnection);
|
||||
},
|
||||
/**
|
||||
* Modify this block to have the correct number of inputs.
|
||||
* @this Blockly.Block
|
||||
* @private
|
||||
*/
|
||||
updateShape_: function () {
|
||||
// Delete everything.
|
||||
if (this.getInput('ELSE')) {
|
||||
this.removeInput('ELSE');
|
||||
}
|
||||
var i = 1;
|
||||
while (this.getInput('IF' + i)) {
|
||||
this.removeInput('IF' + i);
|
||||
this.removeInput('DO' + i);
|
||||
i++;
|
||||
}
|
||||
// Rebuild block.
|
||||
for (var i = 1; i <= this.elseifCount_; i++) {
|
||||
this.appendValueInput('IF' + i)
|
||||
.setCheck([Number, Boolean])
|
||||
.appendField(Blockly.Msg['CONTROLS_IF_MSG_ELSEIF']);
|
||||
this.appendStatementInput('DO' + i)
|
||||
.appendField(Blockly.Msg['CONTROLS_IF_MSG_THEN']);
|
||||
}
|
||||
if (this.elseCount_) {
|
||||
this.appendStatementInput('ELSE')
|
||||
.appendField(Blockly.Msg['CONTROLS_IF_MSG_ELSE']);
|
||||
}
|
||||
},
|
||||
/**
|
||||
* Reconnects child blocks.
|
||||
* @param {!Array<?Blockly.RenderedConnection>} valueConnections List of value
|
||||
* connectsions for if input.
|
||||
* @param {!Array<?Blockly.RenderedConnection>} statementConnections List of
|
||||
* statement connections for do input.
|
||||
* @param {?Blockly.RenderedConnection} elseStatementConnection Statement
|
||||
* connection for else input.
|
||||
*/
|
||||
reconnectChildBlocks_: function (valueConnections, statementConnections,
|
||||
elseStatementConnection) {
|
||||
for (var i = 1; i <= this.elseifCount_; i++) {
|
||||
valueConnections[i] && Blockly.Mutator.reconnect(this, 'IF' + i);
|
||||
statementConnections[i] && statementConnections[i].reconnect(this, 'DO' + i);
|
||||
}
|
||||
elseStatementConnection && elseStatementConnection.reconnect(this, 'ELSE');
|
||||
}
|
||||
};
|
||||
|
||||
export const controls_if_if = {
|
||||
/**
|
||||
* Mutator block for if container.
|
||||
* @this Blockly.Block
|
||||
*/
|
||||
init: function () {
|
||||
this.setColour(LOOPS_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.CONTROLS_IF_IF_TITLE_IF);
|
||||
this.appendStatementInput('STACK');
|
||||
this.setTooltip(Blockly.Msg.CONTROLS_IF_IF_TOOLTIP);
|
||||
this.contextMenu = false;
|
||||
}
|
||||
};
|
||||
|
||||
export const controls_if_elseif = {
|
||||
/**
|
||||
* Mutator bolck for else-if condition.
|
||||
* @this Blockly.Block
|
||||
*/
|
||||
init: function () {
|
||||
this.setColour(LOOPS_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.CONTROLS_IF_ELSEIF_TITLE_ELSEIF);
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.setTooltip(Blockly.Msg.CONTROLS_IF_ELSEIF_TOOLTIP);
|
||||
this.contextMenu = false;
|
||||
}
|
||||
};
|
||||
|
||||
export const controls_if_else = {
|
||||
/**
|
||||
* Mutator block for else condition.
|
||||
* @this Blockly.Block
|
||||
*/
|
||||
init: function () {
|
||||
this.setColour(LOOPS_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.CONTROLS_IF_ELSE_TITLE_ELSE);
|
||||
this.setPreviousStatement(true);
|
||||
this.setTooltip(Blockly.Msg.CONTROLS_IF_ELSE_TOOLTIP);
|
||||
this.contextMenu = false;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
export const controls_end_program = {
|
||||
init: function () {
|
||||
this.setColour(LOOPS_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_CONTROL_END_PROGRAM);
|
||||
this.setPreviousStatement(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_CONTROL_END_PROGRAM);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
export const controls_forEach = {
|
||||
init: function () {
|
||||
this.setColour(LOOPS_HUE);
|
||||
this.appendValueInput('LIST')
|
||||
.setCheck(['List', String])
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.CONTROLS_FOREACH_INPUT);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.CONTROLS_FOREACH_INPUT_ITEM)
|
||||
.appendField(new Blockly.FieldTextInput('i'), 'VAR');
|
||||
this.appendStatementInput('DO')
|
||||
.appendField(Blockly.Msg.MIXLY_DO);
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.setInputsInline(true);
|
||||
var thisBlock = this;
|
||||
this.setTooltip(function () {
|
||||
return Blockly.Msg.CONTROLS_FOR_TOOLTIP.replace('%1',
|
||||
thisBlock.getFieldValue('VAR'));
|
||||
});
|
||||
},
|
||||
getVars: function () {
|
||||
return [this.getFieldValue('VAR')];
|
||||
},
|
||||
renameVar: function (oldName, newName) {
|
||||
if (Blockly.Names.equals(oldName, this.getFieldValue('VAR'))) {
|
||||
this.setTitleValue(newName, 'VAR');
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
export const raw_block = {
|
||||
// Container.
|
||||
init: function () {
|
||||
this.setColour(LOOPS_HUE);
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.appendDummyInput()
|
||||
.appendField('Code Block:');
|
||||
this.appendDummyInput()
|
||||
.appendField(new Blockly.FieldMultilineInput('12345'), 'TEXT');
|
||||
}
|
||||
};
|
||||
|
||||
export const base_type = {
|
||||
init: function () {
|
||||
this.setColour(LOOPS_HUE);
|
||||
this.appendValueInput("DATA")
|
||||
.appendField(Blockly.Msg.MICROBIT_PYTHON_TYPE);
|
||||
this.setInputsInline(true);
|
||||
this.setOutput(true);
|
||||
this.setTooltip(Blockly.Msg.MICROBIT_PYTHON_TYPE);
|
||||
}
|
||||
};
|
||||
|
||||
export const controls_TypeLists = {
|
||||
init: function () {
|
||||
this.setColour(LOOPS_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_PY_CONTORL_GET_TYPE)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.LANG_MATH_INT, "int"],
|
||||
[Blockly.Msg.MIXLY_MICROBIT_TYPE_FLOAT, "float"],
|
||||
[Blockly.Msg.MIXLY_MICROBIT_TYPE_STRING, "str"],
|
||||
[Blockly.Msg.MIXLY_MICROBIT_TYPE_LIST, "list"],
|
||||
[Blockly.Msg.MIXLY_MICROBIT_TYPE_TUPLE, "tuple"],
|
||||
[Blockly.Msg.MIXLY_MICROBIT_TYPE_DICT, "dict"],
|
||||
[Blockly.Msg.blockpy_SET_CREATE_WITH_CONTAINER_TITLE_ADD, "set"],
|
||||
// [Blockly.Msg.MIXLY_MICROBIT_IMAGE,"image"],
|
||||
[Blockly.Msg.LOGIC_NULL, "NoneType"]]), "type");
|
||||
//整数、浮点数、字符串、列表、元组、字典、集合、图像不太对, unfinished
|
||||
this.setInputsInline(true);
|
||||
this.setOutput(true);
|
||||
var thisBlock = this;
|
||||
this.setTooltip(function () {
|
||||
var mode = thisBlock.getFieldValue('type');
|
||||
var mode0 = Blockly.Msg.MICROBIT_controls_TypeLists;
|
||||
var TOOLTIPS = {
|
||||
'int': Blockly.Msg.LANG_MATH_INT,
|
||||
'float': Blockly.Msg.MIXLY_MICROBIT_TYPE_FLOAT,
|
||||
'str': Blockly.Msg.MIXLY_MICROBIT_TYPE_STRING,
|
||||
'list': Blockly.Msg.MIXLY_MICROBIT_TYPE_LIST,
|
||||
'tuple': Blockly.Msg.MIXLY_MICROBIT_TYPE_TUPLE,
|
||||
'dict': Blockly.Msg.MIXLY_MICROBIT_TYPE_DICT,
|
||||
'set': Blockly.Msg.blockpy_SET_CREATE_WITH_CONTAINER_TITLE_ADD,
|
||||
'image': Blockly.Msg.MIXLY_MICROBIT_IMAGE,
|
||||
'NoneType': Blockly.Msg.LOGIC_NULL
|
||||
};
|
||||
return mode0 + TOOLTIPS[mode];
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
export const controls_uname = {
|
||||
init: function () {
|
||||
this.setColour(LOOPS_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_PY_CONTORL_UNAME);
|
||||
|
||||
this.setInputsInline(true);
|
||||
this.setOutput(true);
|
||||
this.setTooltip(Blockly.Msg.PROCEDURES_DEFRETURN_RETURN + Blockly.Msg.MIXLY_MICROBIT_PY_CONTORL_UNAME);
|
||||
}
|
||||
};
|
||||
1833
boards/default_src/micropython/blocks/display.js
Normal file
1833
boards/default_src/micropython/blocks/display.js
Normal file
File diff suppressed because it is too large
Load Diff
1774
boards/default_src/micropython/blocks/display_extern.js
Normal file
1774
boards/default_src/micropython/blocks/display_extern.js
Normal file
File diff suppressed because it is too large
Load Diff
1441
boards/default_src/micropython/blocks/display_onboard.js
Normal file
1441
boards/default_src/micropython/blocks/display_onboard.js
Normal file
File diff suppressed because it is too large
Load Diff
286
boards/default_src/micropython/blocks/factory.js
Normal file
286
boards/default_src/micropython/blocks/factory.js
Normal file
@@ -0,0 +1,286 @@
|
||||
import * as Blockly from 'blockly/core';
|
||||
|
||||
const FACTORY_HUE = "#777777"//65;
|
||||
|
||||
export const factory_from_import = {
|
||||
init: function () {
|
||||
this.setColour(FACTORY_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField("from ")
|
||||
.appendField(new Blockly.FieldTextInput('ESP32'), 'path')
|
||||
.appendField(" import ")
|
||||
.appendField(new Blockly.FieldTextInput('*'), 'module');
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const factory_import = {
|
||||
init: function () {
|
||||
this.setColour(FACTORY_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField("import ")
|
||||
.appendField(new Blockly.FieldTextInput('module'), 'module');
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const factory_function_noreturn = {
|
||||
init: function () {
|
||||
//console.log('init');
|
||||
this.setColour(FACTORY_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldTextInput('my_function'), 'NAME');
|
||||
this.itemCount_ = 1;
|
||||
this.arguments_ = ['x'];//add
|
||||
this.updateShape_();
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.setMutator(new Blockly.icons.MutatorIcon(['factory_create_with_item'], this));
|
||||
},
|
||||
mutationToDom: function () {
|
||||
//console.log('mutationToDom');
|
||||
var container = document.createElement('mutation');
|
||||
container.setAttribute('items', this.itemCount_);
|
||||
//add
|
||||
for (var i = 0; i < this.arguments_.length; i++) {
|
||||
var parameter = document.createElement('arg');
|
||||
parameter.setAttribute('name', this.arguments_[i]);
|
||||
container.appendChild(parameter);
|
||||
}
|
||||
return container;
|
||||
},
|
||||
domToMutation: function (xmlElement) {
|
||||
//console.log('domToMutation');
|
||||
this.arguments_ = [];//add
|
||||
//add
|
||||
for (var i = 0; xmlElement.childNodes[i]; i++) {
|
||||
let childNode = xmlElement.childNodes[i];
|
||||
if (childNode.nodeName.toLowerCase() == 'arg') {
|
||||
this.arguments_.push(childNode.getAttribute('name'));
|
||||
}
|
||||
}
|
||||
this.itemCount_ = parseInt(xmlElement.getAttribute('items'), 10);
|
||||
this.updateShape_();
|
||||
},
|
||||
decompose: function (workspace) {
|
||||
//console.log('decompose');
|
||||
var containerBlock =
|
||||
workspace.newBlock('factory_create_with_container');
|
||||
containerBlock.initSvg();
|
||||
var connection = containerBlock.getInput('STACK')
|
||||
.connection;
|
||||
for (var i = 0; i < this.itemCount_; i++) {
|
||||
var itemBlock = workspace.newBlock('factory_create_with_item');
|
||||
itemBlock.initSvg();
|
||||
itemBlock.setFieldValue(this.arguments_[i], 'NAME');//add
|
||||
connection.connect(itemBlock.previousConnection);
|
||||
connection = itemBlock.nextConnection;
|
||||
}
|
||||
return containerBlock;
|
||||
},
|
||||
compose: function (containerBlock) {
|
||||
//console.log('compose');
|
||||
this.arguments_ = [];//add
|
||||
var itemBlock = containerBlock.getInputTargetBlock('STACK');
|
||||
// Count number of inputs.
|
||||
var connections = [];
|
||||
var i = 0;
|
||||
while (itemBlock) {
|
||||
this.arguments_.push(itemBlock.getFieldValue('NAME'));//add
|
||||
connections[i] = itemBlock.valueConnection_;
|
||||
itemBlock = itemBlock.nextConnection &&
|
||||
itemBlock.nextConnection.targetBlock();
|
||||
i++;
|
||||
}
|
||||
this.itemCount_ = i;
|
||||
this.updateShape_();
|
||||
// Reconnect any child blocks.
|
||||
for (var i = 0; i < this.itemCount_; i++) {
|
||||
if (connections[i]) {
|
||||
this.getInput('ADD' + i).connection.connect(connections[i]);
|
||||
}
|
||||
}
|
||||
},
|
||||
saveConnections: function (containerBlock) {
|
||||
//console.log('saveConnections');
|
||||
var itemBlock = containerBlock.getInputTargetBlock('STACK');
|
||||
var i = 0;
|
||||
while (itemBlock) {
|
||||
var input = this.getInput('ADD' + i);
|
||||
itemBlock.valueConnection_ = input && input.connection.targetConnection;
|
||||
i++;
|
||||
itemBlock = itemBlock.nextConnection &&
|
||||
itemBlock.nextConnection.targetBlock();
|
||||
}
|
||||
},
|
||||
updateShape_: function () {
|
||||
//console.log('updateShape_');
|
||||
// Delete everything.
|
||||
if (this.getInput('EMPTY')) {
|
||||
this.removeInput('EMPTY');
|
||||
} else {
|
||||
var i = 0;
|
||||
while (this.getInput('ADD' + i)) {
|
||||
this.removeInput('ADD' + i);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
// Rebuild block.
|
||||
for (var i = 0; i < this.itemCount_; i++) {
|
||||
this.appendValueInput('ADD' + i)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(this.arguments_[i]);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
export const factory_create_with_container = {
|
||||
init: function () {
|
||||
this.setColour(FACTORY_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_PARAMS);
|
||||
this.appendStatementInput('STACK');
|
||||
this.contextMenu = false;
|
||||
}
|
||||
};
|
||||
|
||||
export const factory_create_with_item = {
|
||||
init: function () {
|
||||
this.setColour(FACTORY_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.LISTS_CREATE_WITH_ITEM_TITLE + ':')
|
||||
.appendField(new Blockly.FieldTextInput('x'), 'NAME');
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.contextMenu = false;
|
||||
}
|
||||
};
|
||||
|
||||
export const factory_function_return = {
|
||||
init: function () {
|
||||
this.setColour(FACTORY_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldTextInput('my_function'), 'NAME');
|
||||
this.itemCount_ = 1;
|
||||
this.arguments_ = ['x'];//add
|
||||
this.updateShape_();
|
||||
this.setOutput(true);
|
||||
this.setMutator(new Blockly.icons.MutatorIcon(['factory_create_with_item'], this));
|
||||
},
|
||||
mutationToDom: factory_function_noreturn.mutationToDom,
|
||||
domToMutation: factory_function_noreturn.domToMutation,
|
||||
decompose: factory_function_noreturn.decompose,
|
||||
compose: factory_function_noreturn.compose,
|
||||
saveConnections: factory_function_noreturn.saveConnections,
|
||||
updateShape_: factory_function_noreturn.updateShape_
|
||||
};
|
||||
|
||||
export const factory_declare = {
|
||||
init: function () {
|
||||
this.setColour(FACTORY_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldTextInput('test'), 'NAME')
|
||||
.appendField("=")
|
||||
.appendField(new Blockly.FieldTextInput('Test'), 'TYPE')
|
||||
.appendField("()");
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
export const factory_callMethod_noreturn = {
|
||||
init: function () {
|
||||
this.setColour(FACTORY_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldTextInput('test'), 'NAME')
|
||||
.appendField('.')
|
||||
.appendField(new Blockly.FieldTextInput('callMethod'), 'METHOD');
|
||||
this.itemCount_ = 1;
|
||||
this.arguments_ = ['x'];//add
|
||||
this.updateShape_();
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.setMutator(new Blockly.icons.MutatorIcon(['factory_create_with_item'], this));
|
||||
},
|
||||
mutationToDom: factory_function_noreturn.mutationToDom,
|
||||
domToMutation: factory_function_noreturn.domToMutation,
|
||||
decompose: factory_function_noreturn.decompose,
|
||||
compose: factory_function_noreturn.compose,
|
||||
saveConnections: factory_function_noreturn.saveConnections,
|
||||
updateShape_: factory_function_noreturn.updateShape_
|
||||
};
|
||||
|
||||
export const factory_callMethod_return = {
|
||||
init: function () {
|
||||
this.setColour(FACTORY_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldTextInput('test'), 'NAME')
|
||||
.appendField('.')
|
||||
.appendField(new Blockly.FieldTextInput('callMethod'), 'METHOD');
|
||||
this.itemCount_ = 1;
|
||||
this.arguments_ = ['x'];//add
|
||||
this.updateShape_();
|
||||
this.setOutput(true);
|
||||
this.setMutator(new Blockly.icons.MutatorIcon(['factory_create_with_item'], this));
|
||||
},
|
||||
mutationToDom: factory_function_noreturn.mutationToDom,
|
||||
domToMutation: factory_function_noreturn.domToMutation,
|
||||
decompose: factory_function_noreturn.decompose,
|
||||
compose: factory_function_noreturn.compose,
|
||||
saveConnections: factory_function_noreturn.saveConnections,
|
||||
updateShape_: factory_function_noreturn.updateShape_
|
||||
};
|
||||
|
||||
export const factory_block = {
|
||||
init: function () {
|
||||
this.setColour(FACTORY_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldTextInput('display.scroll("Hello World!")'), 'VALUE');
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const factory_block_return = {
|
||||
init: function () {
|
||||
this.setColour(FACTORY_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldTextInput('test'), 'VALUE');
|
||||
this.setOutput(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const factory_block_with_textarea = {
|
||||
init: function () {
|
||||
this.setColour(FACTORY_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldMultilineInput('display.scroll("Hello World!")\ndisplay.scroll("Hello Mixly!")'), 'VALUE');
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const factory_block_return_with_textarea = {
|
||||
init: function () {
|
||||
this.setColour(FACTORY_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldMultilineInput('Hello\nMixly'), 'VALUE');
|
||||
this.setOutput(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const folding_block = {
|
||||
init: function () {
|
||||
this.setColour(FACTORY_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(new Blockly.FieldTextInput(Blockly.Msg.FOLDING_BLOCK), "peien");
|
||||
this.appendStatementInput('DO')
|
||||
.appendField('');
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setTooltip(Blockly.Msg.FOLDING_BLOCK_HELP);
|
||||
}
|
||||
};
|
||||
359
boards/default_src/micropython/blocks/inout.js
Normal file
359
boards/default_src/micropython/blocks/inout.js
Normal file
@@ -0,0 +1,359 @@
|
||||
import * as Blockly from 'blockly/core';
|
||||
|
||||
const BASE_HUE = 20//'#ae3838';//40;
|
||||
|
||||
export const inout_highlow = {
|
||||
init: function () {
|
||||
this.setColour(BASE_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_HIGH, "HIGH"], [Blockly.Msg.MIXLY_LOW, "LOW"]]), 'BOOL')
|
||||
this.setOutput(true, Boolean);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_INOUT_HIGHLOW_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const inout_digital_write = {
|
||||
init: function () {
|
||||
this.setColour(BASE_HUE);
|
||||
this.appendValueInput("PIN", Number)
|
||||
.appendField(Blockly.Msg.MIXLY_Digital_PINMODEOUT)
|
||||
.setCheck(Number);
|
||||
this.appendValueInput("STAT")
|
||||
.appendField(Blockly.Msg.MIXLY_STAT)
|
||||
.setCheck([Number, Boolean]);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_INOUT_DIGITAL_WRITE_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const inout_digital_read = {
|
||||
init: function () {
|
||||
this.setColour(BASE_HUE);
|
||||
this.appendValueInput("PIN", Number)
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)
|
||||
.appendField(Blockly.Msg.MIXLY_Digital_PINMODEIN)
|
||||
.setCheck(Number);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_ESP32_MACHINE_VALUE)
|
||||
this.setInputsInline(true);
|
||||
this.setOutput(true, [Boolean, Number]);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_INOUT_DIGITAL_READ_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const inout_pwm_analog_write = {
|
||||
init: function () {
|
||||
this.setColour(BASE_HUE);
|
||||
this.appendValueInput("PIN", Number)
|
||||
.appendField("PWM" + Blockly.Msg.MIXLY_Analog_PINMODEOUT)
|
||||
.setCheck(Number);
|
||||
this.appendValueInput("NUM", Number)
|
||||
.appendField(Blockly.Msg.MIXLY_VALUE2)
|
||||
.setCheck(Number);
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_INOUT_PWM_ANALOG_WRITE_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const inout_analog_write = {
|
||||
init: function () {
|
||||
this.setColour(BASE_HUE);
|
||||
this.appendValueInput("PIN", Number)
|
||||
.appendField("DAC" + Blockly.Msg.MIXLY_Analog_PINMODEOUT)
|
||||
.setCheck(Number);
|
||||
this.appendValueInput("NUM", Number)
|
||||
.appendField(Blockly.Msg.MIXLY_VALUE2)
|
||||
.setCheck(Number);
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_INOUT_ANALOG_WRITE_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const inout_analog_write_set = {
|
||||
init: function () {
|
||||
this.setColour(BASE_HUE);
|
||||
this.appendValueInput("PIN", Number)
|
||||
.appendField(Blockly.Msg.MIXLY_Analog_PINMODEOUT)
|
||||
.setCheck(Number);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_JS_PERIOD_MIL)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.MIXLY_mSecond, "period"],
|
||||
[Blockly.Msg.MIXLY_uSecond, "period_microseconds"]
|
||||
]), "key");
|
||||
this.appendValueInput("NUM", Number)
|
||||
.appendField(Blockly.Msg.MIXLY_STAT)
|
||||
.setCheck(Number);
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_INOUT_ANALOG_WRITE_SET_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const inout_pwm_analog_write_set_freq = {
|
||||
init: function () {
|
||||
this.setColour(BASE_HUE);
|
||||
this.appendValueInput("PIN", Number)
|
||||
.appendField("PWM" + Blockly.Msg.MIXLY_Analog_PINMODEOUT)
|
||||
.setCheck(Number);
|
||||
this.appendValueInput("NUM", Number)
|
||||
.appendField(Blockly.Msg.MIXLY_FREQUENCY + Blockly.Msg.MIXLY_STAT)
|
||||
.setCheck(Number);
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_INOUT_PWM_ANALOG_WRITE_SET_FREQ_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const inout_analog_read = {
|
||||
init: function () {
|
||||
this.setColour(BASE_HUE);
|
||||
this.appendValueInput("PIN", Number)
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)
|
||||
.appendField(Blockly.Msg.MIXLY_Analog_PINMODEIN)
|
||||
.setCheck(Number);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_ESP32_MACHINE_VALUE)
|
||||
this.setInputsInline(true);
|
||||
this.setOutput(true, Number);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_INOUT_ANALOG_READ_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const inout_analog_atten = {
|
||||
init: function () {
|
||||
this.setColour(BASE_HUE);
|
||||
this.appendValueInput("PIN", Number)
|
||||
.appendField(Blockly.Msg.MIXLY_Analog_PINMODEIN)
|
||||
.setCheck(Number);
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_ESP32_REF_VOLTAGE + Blockly.Msg.MIXLY_STAT)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
["3.3V", "machine.ADC.ATTN_11DB"],
|
||||
["2.2V", "machine.ADC.ATTN_6DB"],
|
||||
["1.5V", "machine.ADC.ATTN_2_5DB"],
|
||||
["1.2V", "machine.ADC.ATTN_0DB"]
|
||||
]), "atten");
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_INOUT_ANALOG_ATTEN_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
export const inout_pin_pressed = {
|
||||
init: function () {
|
||||
this.setColour(BASE_HUE);
|
||||
this.appendValueInput('pin')
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)
|
||||
.appendField(Blockly.Msg.MIXLY_ESP32_TOUCH_SENSOR);
|
||||
// this.appendDummyInput()
|
||||
// .appendField(Blockly.Msg.MIXLY_IS_TOUCHED);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_ESP32_MACHINE_VALUE)
|
||||
this.setOutput(true, Number);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_INOUT_PIN_PRESSED_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const inout_pin_attachInterrupt = {
|
||||
init: function () {
|
||||
this.setColour(20);
|
||||
this.appendValueInput("PIN", Number)
|
||||
.appendField(Blockly.Msg.MIXLY_ATTACHINTERRUPT_PIN)
|
||||
.setCheck(Number);
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_MODE)
|
||||
.appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_RISING, "machine.Pin.IRQ_RISING"], [Blockly.Msg.MIXLY_FALLING, "machine.Pin.IRQ_FALLING"], [Blockly.Msg.MIXLY_CHANGE, "(machine.Pin.IRQ_RISING | machine.Pin.IRQ_FALLING)"]]), "mode");
|
||||
this.appendValueInput('DO')
|
||||
.appendField(Blockly.Msg.MIXLY_DO)
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_INOUT_PIN_ATTACHINTERRUPT_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const inout_digital_init = {
|
||||
init: function () {
|
||||
this.setColour(20);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_SETUP)
|
||||
.appendField(new Blockly.FieldTextInput('pin#'), 'PIN_OBJ');
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_MICROPYTHON_AS)
|
||||
// .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_MODE+Blockly.Msg.LISTS_SET_INDEX_INPUT_TO)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.MIXLY_Digital_PINMODEOUT, "machine.Pin.OUT"],
|
||||
[Blockly.Msg.MIXLY_Digital_PINMODEIN, "machine.Pin.IN"],
|
||||
[Blockly.Msg.MIXLY_PINMODEPULLUP, "machine.Pin.IN, machine.Pin.PULL_UP"],
|
||||
[Blockly.Msg.MIXLY_PINMODEPULLDOWN, "machine.Pin.IN, machine.Pin.PULL_DOWN"]
|
||||
]), "MODE")
|
||||
this.appendValueInput("PIN", Number)
|
||||
.appendField(Blockly.Msg.MIXLY_PIN)
|
||||
.setCheck(Number);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_INOUT_DIGITAL_INIT_TOOLTIP);
|
||||
},
|
||||
getVars: function () {
|
||||
return [this.getFieldValue('PIN_OBJ') == 'pin#' ? null : this.getFieldValue('PIN_OBJ')];
|
||||
},
|
||||
renameVar: function (oldName, newName) {
|
||||
if (Blockly.Names.equals(oldName, this.getFieldValue('PIN_OBJ'))) {
|
||||
this.setTitleValue(newName, 'PIN_OBJ');
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
export const inout_pwm_analog_write_init = {
|
||||
init: function () {
|
||||
this.setColour(BASE_HUE);
|
||||
// this.appendValueInput("PIN", Number)
|
||||
// .appendField(Blockly.Msg.MIXLY_SETUP)
|
||||
// .appendField("PWM"+Blockly.Msg.MIXLY_Analog_PINMODEOUT)
|
||||
// .appendField('pwm')
|
||||
// .setCheck(Number);
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_SETUP)
|
||||
.appendField(new Blockly.FieldTextInput('pwm#'), 'PIN_OBJ')
|
||||
.appendField(Blockly.Msg.MIXLY_MICROPYTHON_AS)
|
||||
this.appendDummyInput("")
|
||||
.appendField("PWM" + Blockly.Msg.MIXLY_Analog_PINMODEOUT)
|
||||
// .appendField('pwm')
|
||||
// .appendField(new Blockly.FieldDropdown(profile.default.pwm_pin),"PIN")
|
||||
this.appendValueInput("PIN", Number)
|
||||
.appendField(Blockly.Msg.MIXLY_PIN)
|
||||
.setCheck(Number);
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_INOUT_PWM_ANALOG_WRITE_INIT_TOOLTIP);
|
||||
},
|
||||
getVars: function () {
|
||||
return [this.getFieldValue('PIN_OBJ') == 'pwm#' ? null : this.getFieldValue('PIN_OBJ')];
|
||||
},
|
||||
renameVar: function (oldName, newName) {
|
||||
if (Blockly.Names.equals(oldName, this.getFieldValue('PIN_OBJ'))) {
|
||||
this.setTitleValue(newName, 'PIN_OBJ');
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
export const inout_analog_write_init = {
|
||||
init: function () {
|
||||
this.setColour(BASE_HUE);
|
||||
// this.appendValueInput("PIN", Number)
|
||||
// .appendField(Blockly.Msg.MIXLY_SETUP)
|
||||
// .appendField("PWM"+Blockly.Msg.MIXLY_Analog_PINMODEOUT)
|
||||
// .appendField('pwm')
|
||||
// .setCheck(Number);
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_SETUP)
|
||||
.appendField(new Blockly.FieldTextInput('dac#'), 'PIN_OBJ')
|
||||
.appendField(Blockly.Msg.MIXLY_MICROPYTHON_AS)
|
||||
this.appendDummyInput("")
|
||||
.appendField("DAC" + Blockly.Msg.MIXLY_Analog_PINMODEOUT)
|
||||
// .appendField('dac')
|
||||
// .appendField(new Blockly.FieldDropdown(profile.default.dac_pin),"PIN")
|
||||
this.appendValueInput("PIN", Number)
|
||||
.appendField(Blockly.Msg.MIXLY_PIN)
|
||||
.setCheck(Number);
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_INOUT_ANALOG_WRITE_INIT_TOOLTIP);
|
||||
},
|
||||
getVars: function () {
|
||||
return [this.getFieldValue('PIN_OBJ') == 'dac#' ? null : this.getFieldValue('PIN_OBJ')];
|
||||
},
|
||||
renameVar: function (oldName, newName) {
|
||||
if (Blockly.Names.equals(oldName, this.getFieldValue('PIN_OBJ'))) {
|
||||
this.setTitleValue(newName, 'PIN_OBJ');
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
export const inout_analog_read_init = {
|
||||
init: function () {
|
||||
this.setColour(BASE_HUE);
|
||||
// this.appendValueInput("PIN", Number)
|
||||
// .appendField(Blockly.Msg.MIXLY_SETUP)
|
||||
// .appendField("PWM"+Blockly.Msg.MIXLY_Analog_PINMODEOUT)
|
||||
// .appendField('pwm')
|
||||
// .setCheck(Number);
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_SETUP)
|
||||
.appendField(new Blockly.FieldTextInput('adc#'), 'PIN_OBJ')
|
||||
.appendField(Blockly.Msg.MIXLY_MICROPYTHON_AS)
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_Analog_PINMODEIN)
|
||||
// .appendField('adc')
|
||||
// .appendField(new Blockly.FieldDropdown(profile.default.adc_pin),"PIN")
|
||||
this.appendValueInput("PIN", Number)
|
||||
.appendField(Blockly.Msg.MIXLY_PIN)
|
||||
.setCheck(Number);
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_INOUT_ANALOG_READ_INIT_TOOLTIP);
|
||||
},
|
||||
getVars: function () {
|
||||
return [this.getFieldValue('PIN_OBJ') == 'adc#' ? null : this.getFieldValue('PIN_OBJ')];
|
||||
},
|
||||
renameVar: function (oldName, newName) {
|
||||
if (Blockly.Names.equals(oldName, this.getFieldValue('PIN_OBJ'))) {
|
||||
this.setTitleValue(newName, 'PIN_OBJ');
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
export const inout_pin_pressed_init = {
|
||||
init: function () {
|
||||
this.setColour(BASE_HUE);
|
||||
// this.appendValueInput("PIN", Number)
|
||||
// .appendField(Blockly.Msg.MIXLY_SETUP)
|
||||
// .appendField("PWM"+Blockly.Msg.MIXLY_Analog_PINMODEOUT)
|
||||
// .appendField('pwm')
|
||||
// .setCheck(Number);
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_SETUP)
|
||||
.appendField(new Blockly.FieldTextInput('tc#'), 'PIN_OBJ')
|
||||
.appendField(Blockly.Msg.MIXLY_MICROPYTHON_AS)
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_ESP32_TOUCH_SENSOR)
|
||||
// .appendField('tc')
|
||||
// .appendField(new Blockly.FieldDropdown(profile.default.tc_pin),"PIN")
|
||||
this.appendValueInput("PIN", Number)
|
||||
.appendField(Blockly.Msg.MIXLY_PIN)
|
||||
.setCheck(Number);
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_INOUT_PIN_PRESSED_INIT_TOOLTIP);
|
||||
},
|
||||
getVars: function () {
|
||||
return [this.getFieldValue('PIN_OBJ') == 'tc#' ? null : this.getFieldValue('PIN_OBJ')];
|
||||
},
|
||||
renameVar: function (oldName, newName) {
|
||||
if (Blockly.Names.equals(oldName, this.getFieldValue('PIN_OBJ'))) {
|
||||
this.setTitleValue(newName, 'PIN_OBJ');
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
export const inout_pinMode = inout_digital_init;
|
||||
export const inout_analog_write_set_freq = inout_pwm_analog_write_set_freq;
|
||||
export const pin_pressed_init = inout_pin_pressed_init;
|
||||
export const pin_pressed = inout_pin_pressed;
|
||||
export const controls_pin_attachInterrupt = inout_pin_attachInterrupt;
|
||||
624
boards/default_src/micropython/blocks/iot.js
Normal file
624
boards/default_src/micropython/blocks/iot.js
Normal file
@@ -0,0 +1,624 @@
|
||||
import * as Blockly from 'blockly/core';
|
||||
import * as Mixly from 'mixly';
|
||||
|
||||
const IOT_HUE = '#526FC3';
|
||||
//'#2FAD7A';
|
||||
|
||||
export const iot_wifi_connect = {
|
||||
init: function () {
|
||||
this.setColour(IOT_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_ESP32_IOT_CONNECT_WIFI);
|
||||
this.appendValueInput('WIFINAME')
|
||||
.setCheck(String)
|
||||
.appendField(Blockly.Msg.HTML_NAME);
|
||||
this.appendValueInput('PASSWORD')
|
||||
.setCheck(String)
|
||||
.appendField(Blockly.Msg.HTML_PASSWORD);
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_IOT_WIFI_CONNECT_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const iot_onenet_connect = {
|
||||
init: function () {
|
||||
this.setColour(IOT_HUE);
|
||||
this.appendValueInput('VAR')
|
||||
.setCheck("var")
|
||||
.appendField("OneNET" + Blockly.Msg.TUPLE_JOIN);
|
||||
this.appendValueInput('CLIENT')
|
||||
.setCheck(String)
|
||||
.appendField(Blockly.Msg.MIXLY_ESP32_ONENET_CLIENT);
|
||||
this.appendValueInput('SERVER')
|
||||
.setCheck(String)
|
||||
.appendField(Blockly.Msg.MIXLY_ESP32_ONENET_SERVER);
|
||||
this.appendValueInput('USERNAME')
|
||||
.setCheck(String)
|
||||
.appendField(Blockly.Msg.MIXLY_ESP32_ONENET_USERNAME);
|
||||
this.appendValueInput('PASSWORD')
|
||||
.setCheck(String)
|
||||
.appendField(Blockly.Msg.MIXLY_ESP32_ONENET_PASSWORD);
|
||||
this.appendValueInput('TOPIC')
|
||||
.setCheck(String)
|
||||
.appendField(Blockly.Msg.MIXLY_ESP32_ONENET_TOPIC);
|
||||
this.appendValueInput('SUB')
|
||||
.appendField(Blockly.Msg.MIXLY_ESP32_ONENET_SUB);
|
||||
//this.setInputsInline(true);
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_IOT_ONENET_CONNECT_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const iot_onenet_disconnect = {
|
||||
init: function () {
|
||||
this.setColour(IOT_HUE);
|
||||
this.appendValueInput('VAR')
|
||||
.setCheck("var")
|
||||
.appendField("OneNET")
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_ESP32_DISCONNECT_ONENET);
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_IOT_ONENET_DISCONNECT_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const iot_onenet_check = {
|
||||
init: function () {
|
||||
this.setColour(IOT_HUE);
|
||||
this.appendValueInput('VAR')
|
||||
.setCheck("var")
|
||||
.appendField("OneNET")
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_ESP32_CHECK_ONENET);
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_IOT_ONENET_CHECK_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const iot_onenet_publish_dict = {
|
||||
init: function () {
|
||||
this.setColour(IOT_HUE);
|
||||
this.appendValueInput('VAR')
|
||||
.setCheck("var")
|
||||
.appendField("OneNET")
|
||||
this.appendValueInput('DICT')
|
||||
.appendField(Blockly.Msg.MIXLY_ESP32_PUBLISH_ONENET);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_ESP32_IOT_ONENET_PRINT_DATA)
|
||||
.appendField(new Blockly.FieldCheckbox('TRUE'), 'is_print');
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_IOT_ONENET_PUBLISH_DICT_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const iot_onenet_publish = {
|
||||
/**
|
||||
* Block for creating a list with any number of elements of any type.
|
||||
* @this Blockly.Block
|
||||
*/
|
||||
init: function () {
|
||||
this.setColour(IOT_HUE);
|
||||
this.appendValueInput('VAR')
|
||||
.setCheck("var")
|
||||
.appendField("OneNET")
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
this.appendDummyInput()
|
||||
.appendField(new Blockly.FieldLabel(Blockly.Msg.MIXLY_ESP32_PUBLISH_ONENET), 'TIP')
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
this.itemCount_ = 2;
|
||||
this.updateShape_();
|
||||
this.setInputsInline(false);
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.setMutator(new Blockly.icons.MutatorIcon(['iot_publish_item'], this));
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_IOT_ONENET_PUBLISH_TOOLTIP);
|
||||
},
|
||||
/**
|
||||
* Create XML to represent list inputs.
|
||||
* @return {Element} XML storage element.
|
||||
* @this Blockly.Block
|
||||
*/
|
||||
mutationToDom: function () {
|
||||
var container = document.createElement('mutation');
|
||||
container.setAttribute('items', this.itemCount_);
|
||||
return container;
|
||||
},
|
||||
/**
|
||||
* Parse XML to restore the list inputs.
|
||||
* @param {!Element} xmlElement XML storage element.
|
||||
* @this Blockly.Block
|
||||
*/
|
||||
domToMutation: function (xmlElement) {
|
||||
this.itemCount_ = parseInt(xmlElement.getAttribute('items'), 10);
|
||||
this.updateShape_();
|
||||
},
|
||||
/**
|
||||
* Populate the mutator's dialog with this block's components.
|
||||
* @param {!Blockly.Workspace} workspace Mutator's workspace.
|
||||
* @return {!Blockly.Block} Root block in mutator.
|
||||
* @this Blockly.Block
|
||||
*/
|
||||
decompose: function (workspace) {
|
||||
var containerBlock =
|
||||
workspace.newBlock('iot_publish_container');
|
||||
containerBlock.initSvg();
|
||||
var connection = containerBlock.getInput('STACK').connection;
|
||||
for (var i = 0; i < this.itemCount_; i++) {
|
||||
var itemBlock = workspace.newBlock('iot_create_with_item');
|
||||
itemBlock.initSvg();
|
||||
connection.connect(itemBlock.previousConnection);
|
||||
connection = itemBlock.nextConnection;
|
||||
}
|
||||
return containerBlock;
|
||||
},
|
||||
/**
|
||||
* Reconfigure this block based on the mutator dialog's components.
|
||||
* @param {!Blockly.Block} containerBlock Root block in mutator.
|
||||
* @this Blockly.Block
|
||||
*/
|
||||
compose: function (containerBlock) {
|
||||
var itemBlock = containerBlock.getInputTargetBlock('STACK');
|
||||
// Count number of inputs.
|
||||
var connections = [];
|
||||
let i = 0;
|
||||
while (itemBlock) {
|
||||
connections[i] = itemBlock.valueConnection_;
|
||||
itemBlock = itemBlock.nextConnection &&
|
||||
itemBlock.nextConnection.targetBlock();
|
||||
i++;
|
||||
}
|
||||
this.itemCount_ = i;
|
||||
this.updateShape_();
|
||||
// Reconnect any child blocks.
|
||||
for (let i = 0; i < this.itemCount_; i++) {
|
||||
if (connections[i]) {
|
||||
this.getInput('ADD' + i).connection.connect(connections[i]);
|
||||
}
|
||||
}
|
||||
},
|
||||
/**
|
||||
* Store pointers to any connected child blocks.
|
||||
* @param {!Blockly.Block} containerBlock Root block in mutator.
|
||||
* @this Blockly.Block
|
||||
*/
|
||||
saveConnections: function (containerBlock) {
|
||||
var itemBlock = containerBlock.getInputTargetBlock('STACK');
|
||||
var i = 0;
|
||||
while (itemBlock) {
|
||||
var input = this.getInput('ADD' + i);
|
||||
itemBlock.valueConnection_ = input && input.connection.targetConnection;
|
||||
i++;
|
||||
itemBlock = itemBlock.nextConnection &&
|
||||
itemBlock.nextConnection.targetBlock();
|
||||
}
|
||||
},
|
||||
/**
|
||||
* Modify this block to have the correct number of inputs.
|
||||
* @private
|
||||
* @this Blockly.Block
|
||||
*/
|
||||
updateShape_: function () {
|
||||
// Delete everything.
|
||||
if (this.getInput('EMPTY')) {
|
||||
this.removeInput('EMPTY');
|
||||
}
|
||||
var keyNames = [];
|
||||
for (let i = 0; this.getInput('ADD' + i); i++) {
|
||||
//this.getInput('VALUE' + i).removeField("KEY"+i);
|
||||
keyNames.push(this.getFieldValue("KEY" + i))
|
||||
this.removeInput('ADD' + i);
|
||||
}
|
||||
// Rebuild block.
|
||||
if (this.itemCount_ == 0) {
|
||||
//this.getField('TIP')
|
||||
//.setText(Blockly.Msg.MIXLY_ESP32_PUBLISH_ONENET_EMPTY);
|
||||
this.setFieldValue(Blockly.Msg.MIXLY_ESP32_PUBLISH_ONENET_EMPTY, 'TIP');
|
||||
} else {
|
||||
//this.getField('TIP')
|
||||
//.setText(Blockly.Msg.MIXLY_ESP32_PUBLISH_ONENET);
|
||||
this.setFieldValue(Blockly.Msg.MIXLY_ESP32_PUBLISH_ONENET, 'TIP');
|
||||
for (let i = 0; i < this.itemCount_; i++) {
|
||||
this.appendValueInput('ADD' + i)
|
||||
.setCheck(null)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(
|
||||
new Blockly.FieldTextInput(
|
||||
keyNames.length > i
|
||||
? keyNames[i]
|
||||
: '"key' + (i + 1) + '"'),
|
||||
'KEY' + i)
|
||||
.appendField(":")
|
||||
}
|
||||
}
|
||||
}, getVars: function () {
|
||||
return [this.getFieldValue('VAR')];
|
||||
},
|
||||
renameVar: function (oldName, newName) {
|
||||
if (Blockly.Names.equals(oldName, this.getFieldValue('VAR'))) {
|
||||
this.setTitleValue(newName, 'VAR');
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
export const iot_publish_container = {
|
||||
/**
|
||||
* Mutator block for list container.
|
||||
* @this Blockly.Block
|
||||
*/
|
||||
init: function () {
|
||||
this.setColour(IOT_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_TYPE_DICT);
|
||||
this.appendStatementInput('STACK');
|
||||
this.setTooltip(Blockly.Msg.DICTS_CREATE_WITH_CONTAINER_TOOLTIP);
|
||||
this.contextMenu = false;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
export const iot_publish_item = {
|
||||
/**
|
||||
* Mutator bolck for adding items.
|
||||
* @this Blockly.Block
|
||||
*/
|
||||
init: function () {
|
||||
this.setColour(IOT_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.DICTS_CREATE_WITH_ITEM_TITLE);
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.setTooltip(Blockly.Msg.DICTS_CREATE_WITH_ITEM_TOOLTIP);
|
||||
this.contextMenu = false;
|
||||
}
|
||||
};
|
||||
|
||||
export const iot_create_with_item = {
|
||||
/**
|
||||
* Mutator bolck for adding items.
|
||||
* @this Blockly.Block
|
||||
*/
|
||||
init: function () {
|
||||
this.setColour(IOT_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.DICTS_CREATE_WITH_ITEM_TITLE);
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.setTooltip(Blockly.Msg.DICTS_CREATE_WITH_ITEM_TOOLTIP);
|
||||
this.contextMenu = false;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
export const iot_mixio_connect = {
|
||||
init: function () {
|
||||
this.setColour(IOT_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_CREATE_MQTT_CLIENT_AND_CONNECT);
|
||||
this.appendValueInput('SERVER')
|
||||
.setCheck(String)
|
||||
.appendField(Blockly.Msg.MIXLY_EMQX_SERVER)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
this.appendValueInput('USERNAME')
|
||||
.setCheck(String)
|
||||
.appendField(Blockly.Msg.MIXLY_WIFI_USERNAME)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
this.appendValueInput('PASSWORD')
|
||||
.setCheck(String)
|
||||
.appendField(Blockly.Msg.MIXLY_IOT_PASSWORD)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
this.appendValueInput('PROJECT')
|
||||
.setCheck(String)
|
||||
.appendField(Blockly.Msg.MIXLY_EMQX_PROJECT)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const IOT_MIXIO_PUBLISH = {
|
||||
init: function () {
|
||||
this.setColour(IOT_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField("MixIO")
|
||||
this.appendValueInput('TOPIC')
|
||||
.appendField(Blockly.Msg.MIXLY_EMQX_PUBLISH_NEW)
|
||||
.appendField(Blockly.Msg.MIXLY_EMQX_PUBLISH_TOPIC);
|
||||
this.appendValueInput('MSG')
|
||||
.appendField(Blockly.Msg.HTML_BODY);
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_IOT_EMQX_PUBLISH_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const IOT_MIXIO_SUBSCRIBE = {
|
||||
init: function () {
|
||||
this.setColour(IOT_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField("MixIO")
|
||||
this.appendValueInput('TOPIC')
|
||||
.appendField(Blockly.Msg.MIXLY_EMQX_SUBSCRIBE + Blockly.Msg.MIXLY_MICROBIT_MSG)
|
||||
.appendField(Blockly.Msg.MIXLY_EMQX_PUBLISH_TOPIC);
|
||||
this.appendValueInput('METHOD')
|
||||
.appendField(Blockly.Msg.MIXLY_EMQX_SET_METHOD);
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_IOT_EMQX_SUBSCRIBE_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const iot_mixio_disconnect = {
|
||||
init: function () {
|
||||
this.setColour(IOT_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField("MixIO")
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_ESP32_DISCONNECT_ONENET);
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
// this.setTooltip(Blockly.Msg.MIXLY_ESP32_IOT_ONENET_DISCONNECT_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const iot_mixio_connect_only = {
|
||||
init: function () {
|
||||
this.setColour(IOT_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField("MixIO")
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_EMQX_CONNECT);
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
// this.setTooltip(Blockly.Msg.MIXLY_ESP32_IOT_ONENET_DISCONNECT_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const iot_mixio_check = {
|
||||
init: function () {
|
||||
this.setColour(IOT_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField("MixIO")
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_ESP32_CHECK_ONENET);
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
// this.setTooltip(Blockly.Msg.MIXLY_ESP32_IOT_ONENET_CHECK_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const iot_mixio_format_topic = {
|
||||
init: function () {
|
||||
this.setColour(IOT_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_MICROPYTHON_FORMAT)
|
||||
.appendField(Blockly.Msg.MQTT_Topic);
|
||||
this.setInputsInline(true);
|
||||
this.setOutput(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const iot_mixio_format_msg = {
|
||||
init: function () {
|
||||
this.setColour(IOT_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_MICROPYTHON_FORMAT)
|
||||
.appendField(Blockly.Msg.MIXLY_EMQX_PUBLISH_MSG);
|
||||
this.setInputsInline(true);
|
||||
this.setOutput(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const IOT_FORMATTING = {
|
||||
init: function () {
|
||||
this.setColour(IOT_HUE);
|
||||
this.appendValueInput('VAR')
|
||||
.appendField(Blockly.Msg.MIXLY_ESP32_IOT_MAP_FORMATING);
|
||||
this.setOutput(true);
|
||||
// this.setTooltip();
|
||||
}
|
||||
};
|
||||
|
||||
export const IOT_FORMAT_STRING = {
|
||||
init: function () {
|
||||
this.setColour(IOT_HUE);
|
||||
this.appendValueInput('VAR')
|
||||
.appendField(Blockly.Msg.MIXLY_MICROPYTHON_FORMAT + '(Json)');
|
||||
this.setOutput(true);
|
||||
// this.setTooltip();
|
||||
}
|
||||
};
|
||||
|
||||
export const IOT_EMQX_PING = {
|
||||
init: function () {
|
||||
this.setColour(IOT_HUE);
|
||||
// this.appendValueInput('VAR')
|
||||
// .setCheck("var")
|
||||
this.appendDummyInput()
|
||||
.appendField("MixIO")
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_EMQX_PING);
|
||||
this.setInputsInline(true);
|
||||
this.setOutput(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_IOT_EMQX_PING_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const IOT_MIXIO_NTP = {
|
||||
init: function () {
|
||||
this.setColour(IOT_HUE);
|
||||
// this.appendValueInput('VAR')
|
||||
// .setCheck("var")
|
||||
this.appendDummyInput()
|
||||
.appendField("MixIO")
|
||||
.appendField(Blockly.Msg.MIXLY_GET_NTP)
|
||||
this.appendValueInput('addr')
|
||||
.appendField(Blockly.Msg.blynk_SERVER_ADD);
|
||||
this.setInputsInline(true);
|
||||
this.setOutput(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const IOT_EMQX_INIT_AND_CONNECT_BY_SHARE_CODE = {
|
||||
init: function () {
|
||||
this.setColour(IOT_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_CREATE_MQTT_CLIENT_AND_CONNECT);
|
||||
this.appendValueInput('SERVER')
|
||||
.appendField(Blockly.Msg.MIXLY_EMQX_SERVER)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT);
|
||||
this.appendValueInput('KEY')
|
||||
.appendField(Blockly.Msg.CONTROLS_FOR_INPUT_WITH + Blockly.Msg.MIXLY_MIXIO_SHARE_KEY)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT);
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
export const IOT_EMQX_INIT_AND_CONNECT_BY_MIXLY_CODE = {
|
||||
init: function () {
|
||||
this.setColour(IOT_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_CREATE_MQTT_CLIENT_AND_CONNECT);
|
||||
this.appendValueInput('SERVER')
|
||||
.appendField(Blockly.Msg.MIXLY_EMQX_SERVER)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT);
|
||||
this.appendValueInput('KEY')
|
||||
.appendField(Blockly.Msg.CONTROLS_FOR_INPUT_WITH + "Mixly Key")
|
||||
.setAlign(Blockly.inputs.Align.RIGHT);
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
export const iot_mixly_key = {
|
||||
init: function () {
|
||||
this.VISITOR_ID = Mixly.Config.BOARD.visitorId.str32.substring(0, 8).toUpperCase();
|
||||
this.setColour(IOT_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldTextInput(this.visitorId), 'VISITOR_ID');
|
||||
this.setOutput(true, null);
|
||||
},
|
||||
onchange: function () {
|
||||
const nowVisitorId = this.getFieldValue('VISITOR_ID');
|
||||
if (this.VISITOR_ID !== nowVisitorId)
|
||||
this.setFieldValue(this.VISITOR_ID, 'VISITOR_ID');
|
||||
}
|
||||
};
|
||||
|
||||
export const iot_client_onboard = {
|
||||
init: function () {
|
||||
this.setColour(IOT_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField('MixIO')
|
||||
.appendField(Blockly.Msg.MSG.catEthernet_clinet);
|
||||
this.setOutput(true);
|
||||
this.setInputsInline(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const iot_http_client = {
|
||||
init: function () {
|
||||
this.setColour(IOT_HUE);
|
||||
// this.appendValueInput('VAR')
|
||||
// .setCheck("var")
|
||||
this.appendDummyInput()
|
||||
.appendField("HTTP" + Blockly.Msg.MIXLY_Client)
|
||||
this.appendValueInput('addr')
|
||||
.appendField(Blockly.Msg.DISPLAY_IMAGE_LET2);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_REQUESTS_GET)
|
||||
.appendField(Blockly.Msg.MIXLY_GET_CURRENT_TIME)
|
||||
.appendField(Blockly.Msg.MIXLY_OPEN_DEBUG)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.MIXLY_TURTLE_WRITE_MOVE_TRUE, "True"],
|
||||
[Blockly.Msg.MIXLY_TURTLE_WRITE_MOVE_FALSE, "False"]
|
||||
]), "key");
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const iot_http_data = {
|
||||
init: function () {
|
||||
this.setColour(IOT_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField("HTTP" + Blockly.Msg.MIXLY_Client)
|
||||
.appendField(Blockly.Msg.MIXLY_GET)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.MIXLY_REQUESTS_LEN, "client_len"],
|
||||
[Blockly.Msg.MIXLY_REQUESTS_GET_LEN, "server_len"],
|
||||
[Blockly.Msg.MIXLY_REQUESTS_MESSAGE, "text"]
|
||||
]), "key");
|
||||
this.setOutput(true);
|
||||
this.setInputsInline(true);
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
export const iot_mqtt_client = {
|
||||
init: function () {
|
||||
this.setColour(IOT_HUE);
|
||||
// this.appendValueInput('VAR')
|
||||
// .setCheck("var")
|
||||
this.appendDummyInput()
|
||||
.appendField("MQTT" + Blockly.Msg.MIXLY_Client)
|
||||
this.appendValueInput('addr')
|
||||
.appendField(Blockly.Msg.MIXLY_CONNECTTO);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_INIT_SUBSCRIBE)
|
||||
.appendField(Blockly.Msg.MQTT_Topic)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.MIXLY_GET_CURRENT_TIME, ""],
|
||||
]), "key")
|
||||
.appendField(Blockly.Msg.MIXLY_OPEN_DEBUG)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.MIXLY_TURTLE_WRITE_MOVE_TRUE, "True"],
|
||||
[Blockly.Msg.MIXLY_TURTLE_WRITE_MOVE_FALSE, "False"]
|
||||
]), "key2");
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const iot_mqtt_data = {
|
||||
init: function () {
|
||||
this.setColour(IOT_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField("MQTT" + Blockly.Msg.MIXLY_Client)
|
||||
.appendField(Blockly.Msg.MIXLY_GET)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.MIXLY_REQUESTS_LEN, "client_len"],
|
||||
[Blockly.Msg.MIXLY_REQUESTS_GET_LEN, "server_len"],
|
||||
[Blockly.Msg.MIXLY_REQUESTS_MESSAGE, "time_msg()"]
|
||||
]), "key");
|
||||
this.setOutput(true);
|
||||
this.setInputsInline(true);
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
export const iot_wificonnect = iot_wifi_connect;
|
||||
export const iot_onenetconnect = iot_onenet_connect;
|
||||
export const iot_onenetdisconnect = iot_onenet_disconnect;
|
||||
export const iot_checkonenet = iot_onenet_check;
|
||||
export const iot_publish = iot_onenet_publish;
|
||||
516
boards/default_src/micropython/blocks/network.js
Normal file
516
boards/default_src/micropython/blocks/network.js
Normal file
@@ -0,0 +1,516 @@
|
||||
import * as Blockly from 'blockly/core';
|
||||
|
||||
const NETWORK_HUE = 225;
|
||||
|
||||
export const network_init = {
|
||||
init: function () {
|
||||
this.setColour(NETWORK_HUE);
|
||||
this.appendValueInput('VAR')
|
||||
.setCheck("var");
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_NETWORK_INIT)
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_NETWORK_MODE)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
['STA', "STA"],
|
||||
['AP', "AP"]
|
||||
]), "mode");
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_NETWORK_INIT_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
export const network_open = {
|
||||
init: function () {
|
||||
this.setColour(NETWORK_HUE);
|
||||
this.appendValueInput('VAR')
|
||||
.setCheck("var")
|
||||
this.appendDummyInput()
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.MIXLY_NETWORK_WIFI_OPEN, "True"],
|
||||
[Blockly.Msg.MIXLY_NETWORK_WIFI_CLOSE, "False"]
|
||||
]), "op");
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_NETWORK_WIFI_FLAG)
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
var thisBlock = this;
|
||||
this.setTooltip(function () {
|
||||
var mode = thisBlock.getFieldValue('op');
|
||||
var mode0 = Blockly.Msg.MIXLY_ESP32_NETWORK_OPEN_TOOLTIP;
|
||||
var TOOLTIPS = {
|
||||
'True': Blockly.Msg.MIXLY_NETWORK_WIFI_OPEN,
|
||||
'False': Blockly.Msg.MIXLY_NETWORK_WIFI_CLOSE,
|
||||
};
|
||||
return TOOLTIPS[mode] + mode0
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
export const network_is_active = {
|
||||
init: function () {
|
||||
this.setColour(NETWORK_HUE);
|
||||
this.appendValueInput('VAR')
|
||||
.setCheck("var")
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_NETWORK_WIFI_IS_ACTIVE)
|
||||
this.setOutput(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_NETWORK_WIFI_IS_ACTIVE);
|
||||
}
|
||||
};
|
||||
|
||||
export const network_scan = {
|
||||
init: function () {
|
||||
this.setColour(NETWORK_HUE);
|
||||
this.appendValueInput('VAR')
|
||||
.setCheck("var")
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_NETWORK_WIFI_SCAN)
|
||||
this.setOutput(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(function () {
|
||||
var mode = 'all';
|
||||
var mode0 = Blockly.Msg.MIXLY_ESP32_NETWORK_SCAN_TOOLTIP
|
||||
var TOOLTIPS = {
|
||||
'0': "ssid",
|
||||
'1': 'bssid',
|
||||
'2': "channel",
|
||||
'3': "RSSI",
|
||||
'4': "authmode",
|
||||
'5': "hidden",
|
||||
'all': Blockly.Msg.MIXLY_NETWORK_WIFI_SCAN_ATTRIBUTE,
|
||||
};
|
||||
return mode0 + TOOLTIPS[mode]
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
export const network_connect = {
|
||||
init: function () {
|
||||
this.setColour(NETWORK_HUE);
|
||||
this.appendValueInput('VAR')
|
||||
.setCheck("var")
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_ESP32_NETWORK_CONNECT);
|
||||
this.appendValueInput('id')
|
||||
.setCheck(String)
|
||||
.appendField(Blockly.Msg.HTML_NAME);
|
||||
this.appendValueInput('password')
|
||||
.setCheck(String)
|
||||
.appendField(Blockly.Msg.HTML_PASSWORD);
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_NETWORK_CONNECT_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const network_wifi_connect = {
|
||||
init: function () {
|
||||
this.setColour(NETWORK_HUE);
|
||||
this.appendValueInput('VAR')
|
||||
.setCheck("var")
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_NETWORK_WIFI_CONNECT);
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_SYMBOL_QUESTION);
|
||||
this.setOutput(true, Boolean);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_NETWORK_WIFI_CONNECT_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const network_get_connect = {
|
||||
init: function () {
|
||||
this.setColour(NETWORK_HUE);
|
||||
this.appendValueInput('VAR')
|
||||
.setCheck("var")
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_ESP32_NETWORK_GET_WIFI);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.MIXLY_ESP32_NETWORK_IP, "0"],
|
||||
[Blockly.Msg.MIXLY_ESP32_NETWORK_MASK, "1"],
|
||||
[Blockly.Msg.MIXLY_ESP32_NETWORK_GATEWAY, "2"],
|
||||
["DNS", "3"]
|
||||
]), "mode");
|
||||
this.setOutput(true);
|
||||
this.setInputsInline(true);
|
||||
var thisBlock = this;
|
||||
this.setTooltip(function () {
|
||||
var mode = thisBlock.getFieldValue('mode');
|
||||
var mode0 = Blockly.Msg.MIXLY_ESP32_NETWORK_GET_WIFI_TOOLTIP
|
||||
var TOOLTIPS = {
|
||||
'0': Blockly.Msg.MIXLY_ESP32_NETWORK_IP,
|
||||
'1': Blockly.Msg.MIXLY_ESP32_NETWORK_MASK,
|
||||
'2': Blockly.Msg.MIXLY_ESP32_NETWORK_GATEWAY,
|
||||
'3': "DNS",
|
||||
};
|
||||
return mode0 + TOOLTIPS[mode]
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
export const network_stop = {
|
||||
init: function () {
|
||||
this.setColour(NETWORK_HUE);
|
||||
this.appendValueInput('VAR')
|
||||
.setCheck("var")
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_ESP32_NETWORK_STOP_CONNECT);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_NETWORK_STOP_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const network_get_wifi = {
|
||||
init: function () {
|
||||
this.setColour(NETWORK_HUE);
|
||||
this.appendValueInput('VAR')
|
||||
.setCheck("var")
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_ESP32_NETWORK_GET_WIFI);
|
||||
this.appendDummyInput()
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.MIXLY_NETWORK_WIFI_ESSID, "essid"],
|
||||
[Blockly.Msg.MIXLY_NETWORK_WIFI_CHANNEL, "channel"]
|
||||
]), "op");
|
||||
this.setOutput(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_NETWORK_GET_WIFI_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const network_ap_connect = {
|
||||
init: function () {
|
||||
this.setColour(NETWORK_HUE);
|
||||
this.appendValueInput('VAR')
|
||||
.setCheck("var")
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.LISTS_SET_INDEX_SET);
|
||||
this.appendValueInput('essid')
|
||||
.setCheck(String)
|
||||
.appendField(Blockly.Msg.MIXLY_NETWORK_WIFI_ESSID);
|
||||
this.appendValueInput('channel')
|
||||
.setCheck(Number)
|
||||
.appendField(Blockly.Msg.MIXLY_NETWORK_WIFI_CHANNEL);
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_NETWORK_AP_CONNECT_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const network_server = {
|
||||
init: function () {
|
||||
this.setColour(NETWORK_HUE);
|
||||
this.appendValueInput('VAR')
|
||||
.setCheck("var")
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_ESP32_NETWORK_SERVER1);
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_ESP32_NETWORK_SERVER2);
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_NETWORK_SOCKET_CLOSE_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const network_socket_init = {
|
||||
init: function () {
|
||||
this.setColour(NETWORK_HUE);
|
||||
this.appendValueInput('VAR')
|
||||
.appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_INIT)
|
||||
.setCheck("var");
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_TYPE)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
['TCP', "TCP"],
|
||||
['UDP', "UDP"]
|
||||
]), "mode");
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
var thisBlock = this;
|
||||
this.setTooltip(function () {
|
||||
var mode = thisBlock.getFieldValue('mode');
|
||||
var mode0 = Blockly.Msg.MIXLY_ESP32_NETWORK_SOCKET_INIT_TOOLTIP
|
||||
var TOOLTIPS = {
|
||||
'TCP': 'TCP',
|
||||
'UDP': 'UDP',
|
||||
};
|
||||
return mode0 + TOOLTIPS[mode]
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
export const network_socket_bind = {
|
||||
init: function () {
|
||||
this.setColour(NETWORK_HUE);
|
||||
this.appendValueInput('VAR')
|
||||
.setCheck("var")
|
||||
.appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_LET_SOCKET)
|
||||
this.appendValueInput('address')
|
||||
.appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_BIND_TO_ADDRESS);
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_NETWORK_SOCKET_BIND_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const network_socket_connect = {
|
||||
init: function () {
|
||||
this.setColour(NETWORK_HUE);
|
||||
this.appendValueInput('VAR')
|
||||
.setCheck("var")
|
||||
.appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_LET_SOCKET)
|
||||
this.appendValueInput('address')
|
||||
.appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_CONNECT_TO_ADDRESS);
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_NETWORK_SOCKET_CONNECT_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const network_socket_listen = {
|
||||
init: function () {
|
||||
this.setColour(NETWORK_HUE);
|
||||
this.appendValueInput('VAR')
|
||||
.setCheck("var")
|
||||
this.appendValueInput('queue')
|
||||
.setCheck(Number)
|
||||
.appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_LISTEN)
|
||||
.appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_QUEUE);
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_NETWORK_SOCKET_LISTEN_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const network_socket_accept = {
|
||||
init: function () {
|
||||
this.setColour(NETWORK_HUE);
|
||||
this.appendValueInput('VAR')
|
||||
.setCheck("var")
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_ACCEPT);
|
||||
this.setOutput(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_NETWORK_SOCKET_ACCEPT_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const network_socket_receive = {
|
||||
init: function () {
|
||||
this.setColour(NETWORK_HUE);
|
||||
this.appendValueInput('VAR')
|
||||
.setCheck("var")
|
||||
.appendField("TCP")
|
||||
this.appendValueInput('size')
|
||||
.setCheck(Number)
|
||||
.appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_RECEIVE)
|
||||
this.setOutput(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_NETWORK_SOCKET_RECEIVE_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const network_socket_send = {
|
||||
init: function () {
|
||||
this.setColour(NETWORK_HUE);
|
||||
// .appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE)
|
||||
this.appendValueInput('VAR')
|
||||
.setCheck("var")
|
||||
.appendField("TCP")
|
||||
this.appendValueInput('content')
|
||||
.appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_SEND)
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_NETWORK_SOCKET_SEND_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const network_socket_receive_from = {
|
||||
init: function () {
|
||||
this.setColour(NETWORK_HUE);
|
||||
this.appendValueInput('VAR')
|
||||
.setCheck("var")
|
||||
.appendField("UDP")
|
||||
this.appendValueInput('size')
|
||||
.setCheck(Number)
|
||||
.appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_RECEIVE)
|
||||
this.setOutput(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_NETWORK_SOCKET_RECEIVE_FROM_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const network_socket_send_to = {
|
||||
init: function () {
|
||||
this.setColour(NETWORK_HUE);
|
||||
// .appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE)
|
||||
this.appendValueInput('VAR')
|
||||
.setCheck("var")
|
||||
.appendField("UDP")
|
||||
this.appendValueInput('content')
|
||||
.appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_SEND)
|
||||
this.appendValueInput('address')
|
||||
.appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_TO);
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_NETWORK_SOCKET_SEND_TO_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const network_socket_close = {
|
||||
init: function () {
|
||||
this.setColour(NETWORK_HUE);
|
||||
this.appendValueInput('VAR')
|
||||
.setCheck("var")
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_CLOSE);
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_NETWORK_SOCKET_CLOSE_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
export const requests_get = {
|
||||
init: function () {
|
||||
this.setColour(NETWORK_HUE);
|
||||
this.appendValueInput("DOMAIN")
|
||||
.appendField(Blockly.Msg.DISPLAY_IMAGE_LET2)
|
||||
.setCheck(String);
|
||||
this.appendDummyInput("")
|
||||
|
||||
.appendField(Blockly.Msg.blockpy_REQUESTS_GET)
|
||||
.appendField(new Blockly.FieldTextInput('response'), 'VAR')
|
||||
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.setTooltip(Blockly.Msg.blockpy_REQUESTS_GET_TOOLTIP);
|
||||
},
|
||||
getVars: function () {
|
||||
return [this.getFieldValue('VAR')];
|
||||
},
|
||||
renameVar: function (oldName, newName) {
|
||||
if (Blockly.Names.equals(oldName, this.getFieldValue('VAR'))) {
|
||||
this.setTitleValue(newName, 'VAR');
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
export const requests_attribute = {
|
||||
init: function () {
|
||||
this.appendValueInput('VAL')
|
||||
|
||||
var attr =
|
||||
[[Blockly.Msg.blockpy_REQUESTS_GET_ATTR_STATUS_CODE, 'status_code'], [Blockly.Msg.blockpy_REQUESTS_GET_ATTR_TEXT, 'text']
|
||||
, [Blockly.Msg.blockpy_REQUESTS_GET_ATTR_COOKIES, 'cookies'], [Blockly.Msg.blockpy_REQUESTS_GET_ATTR_CONTENT, 'content']];
|
||||
this.setColour(NETWORK_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_JS_GET)
|
||||
.appendField(new Blockly.FieldDropdown(attr), 'ATTR')
|
||||
|
||||
|
||||
this.setInputsInline(true);
|
||||
this.setOutput(true, String);
|
||||
var thisBlock = this;
|
||||
this.setTooltip(function () {
|
||||
var mode = thisBlock.getFieldValue('DIR');
|
||||
var TOOLTIPS = {
|
||||
'clear': Blockly.Msg.MIXLY_TOOLTIP_TURTEL_CLEAR,
|
||||
'reset': Blockly.Msg.MIXLY_TOOLTIP_TURTEL_RESET,
|
||||
'home': Blockly.Msg.MIXLY_TOOLTIP_TURTEL_HOME
|
||||
};
|
||||
return TOOLTIPS[mode];
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
export const requests_method = {
|
||||
init: function () {
|
||||
this.appendValueInput("VAR")
|
||||
.appendField(Blockly.Msg.DISPLAY_IMAGE_LET2)
|
||||
.setCheck(String);
|
||||
var method = [
|
||||
['post', 'post'], ['put', 'put'],
|
||||
['delete', 'delete'], ['head', 'head'],
|
||||
['option', 'option']
|
||||
];
|
||||
this.setColour(NETWORK_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.blockpy_CONDUCT)
|
||||
.appendField(new Blockly.FieldDropdown(method), 'DIR')
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.blockpy_REQUESTS)
|
||||
|
||||
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
var thisBlock = this;
|
||||
this.setTooltip(function () {
|
||||
var mode = thisBlock.getFieldValue('DIR');
|
||||
var TOOLTIPS = {
|
||||
'forward': Blockly.Msg.MIXLY_TOOLTIP_TURTEL_FORWARD,
|
||||
'backward': Blockly.Msg.MIXLY_TOOLTIP_TURTEL_BACKWARD
|
||||
};
|
||||
return TOOLTIPS[mode];
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
export const ntptime_time = {
|
||||
init: function () {
|
||||
this.setColour(NETWORK_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_GET_NTP + '(NTP)')
|
||||
this.appendValueInput("data")
|
||||
.appendField(Blockly.Msg.blynk_SERVER_ADD)
|
||||
this.setOutput(true, 'Tuple');
|
||||
this.setInputsInline(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const ntptime_address = {
|
||||
init: function () {
|
||||
this.setColour(NETWORK_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
['ntp.aliyun.com', "ntp.aliyun.com"],
|
||||
['ntp1.aliyun.com', "ntp1.aliyun.com"],
|
||||
['ntp2.aliyun.com', "ntp2.aliyun.com"],
|
||||
['ntp3.aliyun.com', "ntp3.aliyun.com"],
|
||||
['ntp4.aliyun.com', "ntp4.aliyun.com"],
|
||||
['ntp5.aliyun.com', "ntp5.aliyun.com"],
|
||||
['ntp6.aliyun.com', "ntp6.aliyun.com"],
|
||||
['ntp7.aliyun.com', "ntp7.aliyun.com"],
|
||||
['time1.cloud.tencent.com', "time1.cloud.tencent.com"],
|
||||
['time2.cloud.tencent.com', "time2.cloud.tencent.com"],
|
||||
['time3.cloud.tencent.com', "time3.cloud.tencent.com"],
|
||||
['time4.cloud.tencent.com', "time4.cloud.tencent.com"],
|
||||
['time5.cloud.tencent.com', "time5.cloud.tencent.com"]
|
||||
]), 'op')
|
||||
this.setOutput(true);
|
||||
}
|
||||
};
|
||||
84
boards/default_src/micropython/blocks/nova_g1.js
Normal file
84
boards/default_src/micropython/blocks/nova_g1.js
Normal file
@@ -0,0 +1,84 @@
|
||||
import * as Blockly from 'blockly/core';
|
||||
import * as Mixly from 'mixly';
|
||||
|
||||
const NOVAG1_HUE = 100;
|
||||
|
||||
export const get_potential_num = {
|
||||
init: function () {
|
||||
var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]
|
||||
if (version == "mixgo_nova") { var name = 'Nova G1' }
|
||||
this.setColour(NOVAG1_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(name)
|
||||
.appendField(Blockly.Msg.MIXLY_MIXGO_NOVA_POTENTIAL_NUM);
|
||||
this.setOutput(true, Number);
|
||||
this.setInputsInline(true);
|
||||
}
|
||||
}
|
||||
|
||||
export const nova_g1_motor = {
|
||||
init: function () {
|
||||
var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]
|
||||
if (version == "mixgo_nova") { var name = 'Nova G1' }
|
||||
this.setColour(NOVAG1_HUE);
|
||||
this.appendValueInput('PIN')
|
||||
.appendField(name)
|
||||
.appendField(Blockly.Msg.MOTOR_DC)
|
||||
.appendField(Blockly.Msg.LCD_NUMBERING)
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_Direction)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.CLOCKWISE, "CW"],
|
||||
[Blockly.Msg.ANTI_CLOCKWISE, "CCW"],
|
||||
[Blockly.Msg.MOTOR_P, "P"],
|
||||
[Blockly.Msg.MOTOR_N, "N"]
|
||||
]), "direction");
|
||||
this.appendValueInput('speed')
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.MIXLY_STEPPER_SET_SPEED);
|
||||
this.appendDummyInput("")
|
||||
.appendField("%")
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
}
|
||||
}
|
||||
|
||||
export const nova_g1_usb = {
|
||||
init: function () {
|
||||
var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]
|
||||
if (version == "mixgo_nova") { var name = 'Nova G1' }
|
||||
this.setColour(NOVAG1_HUE);
|
||||
this.appendValueInput('PIN')
|
||||
.appendField(name)
|
||||
.appendField(Blockly.Msg.SET_USB);
|
||||
this.appendValueInput('percent')
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.MIXLY_POWER_SUPPLY);
|
||||
this.appendDummyInput("")
|
||||
.appendField("%")
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
}
|
||||
}
|
||||
|
||||
export const nova_g1_spk_en = {
|
||||
init: function () {
|
||||
var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]
|
||||
if (version == "mixgo_nova") { var name = 'Nova G1' }
|
||||
this.setColour(NOVAG1_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(name)
|
||||
.appendField(Blockly.Msg.MIXLY_SPK_STATE)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.MIXLY_ON, "True"],
|
||||
[Blockly.Msg.MIXLY_OFF, "False"]
|
||||
]), "state");
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
}
|
||||
}
|
||||
182
boards/default_src/micropython/blocks/pe_g1.js
Normal file
182
boards/default_src/micropython/blocks/pe_g1.js
Normal file
@@ -0,0 +1,182 @@
|
||||
import * as Blockly from 'blockly/core';
|
||||
import * as Mixly from 'mixly';
|
||||
|
||||
const PEG1_HUE = 100;
|
||||
|
||||
export const pe_g1_use_i2c_init = {
|
||||
init: function () {
|
||||
var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]
|
||||
if (version == "mixgo_ce") { var name = 'CE G6' }
|
||||
else if (version == "mixgo_pe") { var name = 'PE G1' }
|
||||
this.setColour(PEG1_HUE);
|
||||
this.appendValueInput('I2CSUB')
|
||||
.appendField(Blockly.Msg.CONTROLS_FOR_INPUT_WITH + "I2C")
|
||||
.setCheck("var");
|
||||
this.appendValueInput('SUB')
|
||||
.appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE)
|
||||
.setCheck("var");
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_SETUP + Blockly.Msg.LISTS_SET_INDEX_INPUT_TO)
|
||||
.appendField(name);
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
}
|
||||
};
|
||||
|
||||
export const pe_g1_battery_left = {
|
||||
init: function () {
|
||||
var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]
|
||||
if (version == "mixgo_ce") { var name = 'CE G6' }
|
||||
else if (version == "mixgo_pe") { var name = 'PE G1' }
|
||||
this.setColour(PEG1_HUE);
|
||||
this.appendValueInput('SUB')
|
||||
.appendField(name)
|
||||
.setCheck("var");
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_MIXGO_CAR_BATTERY_LEFT);
|
||||
this.setOutput(true, Number);
|
||||
this.setInputsInline(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const pe_g1_dc_motor = {
|
||||
init: function () {
|
||||
var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]
|
||||
if (version == "mixgo_ce") { var name = 'CE G6' }
|
||||
else if (version == "mixgo_pe") { var name = 'PE G1' }
|
||||
this.setColour(PEG1_HUE);
|
||||
this.appendValueInput('SUB')
|
||||
.appendField(name)
|
||||
.setCheck("var");
|
||||
this.appendValueInput('PIN')
|
||||
.appendField(Blockly.Msg.MOTOR_DC)
|
||||
.appendField(Blockly.Msg.LCD_NUMBERING)
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_Direction)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.CLOCKWISE, "CW"],
|
||||
[Blockly.Msg.ANTI_CLOCKWISE, "CCW"],
|
||||
[Blockly.Msg.MOTOR_P, "P"],
|
||||
[Blockly.Msg.MOTOR_N, "N"]
|
||||
]), "direction");
|
||||
this.appendValueInput('speed')
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.MIXLY_STEPPER_SET_SPEED);
|
||||
this.appendDummyInput("")
|
||||
.appendField("%")
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
}
|
||||
}
|
||||
|
||||
export const pe_g1_dc_motor_speed = {
|
||||
init: function () {
|
||||
var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]
|
||||
if (version == "mixgo_ce") { var name = 'CE G6' }
|
||||
else if (version == "mixgo_pe") { var name = 'PE G1' }
|
||||
this.setColour(PEG1_HUE);
|
||||
this.appendValueInput('SUB')
|
||||
.appendField(name)
|
||||
.setCheck("var");
|
||||
this.appendValueInput('PIN')
|
||||
.appendField(Blockly.Msg.MOTOR_DC)
|
||||
.appendField(Blockly.Msg.LCD_NUMBERING)
|
||||
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_STEPPER_GET_SPEED);
|
||||
this.setOutput(true, Number);
|
||||
this.setInputsInline(true);
|
||||
}
|
||||
}
|
||||
|
||||
export const pe_g1_servo_set_angle = {
|
||||
init: function () {
|
||||
var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]
|
||||
if (version == "mixgo_ce") { var name = 'CE G6' }
|
||||
else if (version == "mixgo_pe") { var name = 'PE G1' }
|
||||
this.setColour(PEG1_HUE);
|
||||
this.appendValueInput('SUB')
|
||||
.appendField(name)
|
||||
.setCheck("var");
|
||||
this.appendValueInput('PIN')
|
||||
.appendField('180°' + Blockly.Msg.MIXLY_SERVO)
|
||||
.appendField(Blockly.Msg.LCD_NUMBERING)
|
||||
|
||||
this.appendValueInput("NUM", Number)
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_JS_BY_ANGLE);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_SERVO_MOVE);
|
||||
}
|
||||
};
|
||||
|
||||
export const pe_g1_servo_set_speed = {
|
||||
init: function () {
|
||||
var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]
|
||||
if (version == "mixgo_ce") { var name = 'CE G6' }
|
||||
else if (version == "mixgo_pe") { var name = 'PE G1' }
|
||||
this.setColour(PEG1_HUE);
|
||||
this.appendValueInput('SUB')
|
||||
.appendField(name)
|
||||
.setCheck("var");
|
||||
this.appendValueInput('PIN')
|
||||
.appendField('360°' + Blockly.Msg.MIXLY_SERVO)
|
||||
.appendField(Blockly.Msg.LCD_NUMBERING)
|
||||
|
||||
this.appendValueInput("NUM", Number)
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.MIXLY_SPEED);
|
||||
this.appendDummyInput()
|
||||
.appendField('%');
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_SERVO_SPEED_TOOLIPS);
|
||||
}
|
||||
};
|
||||
|
||||
export const pe_g1_servo_get_angle = {
|
||||
init: function () {
|
||||
var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]
|
||||
if (version == "mixgo_ce") { var name = 'CE G6' }
|
||||
else if (version == "mixgo_pe") { var name = 'PE G1' }
|
||||
this.setColour(PEG1_HUE);
|
||||
this.appendValueInput('SUB')
|
||||
.appendField(name)
|
||||
.setCheck("var");
|
||||
this.appendValueInput('PIN')
|
||||
.appendField('180°' + Blockly.Msg.MIXLY_SERVO)
|
||||
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_GET + Blockly.Msg.MIXLY_MICROBIT_JS_BY_ANGLE);
|
||||
this.setOutput(true, Number);
|
||||
this.setInputsInline(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const pe_g1_servo_get_speed = {
|
||||
init: function () {
|
||||
var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]
|
||||
if (version == "mixgo_ce") { var name = 'CE G6' }
|
||||
else if (version == "mixgo_pe") { var name = 'PE G1' }
|
||||
this.setColour(PEG1_HUE);
|
||||
this.appendValueInput('SUB')
|
||||
.appendField(name)
|
||||
.setCheck("var");
|
||||
this.appendValueInput('PIN')
|
||||
.appendField('360°' + Blockly.Msg.MIXLY_SERVO)
|
||||
.appendField(Blockly.Msg.LCD_NUMBERING)
|
||||
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_GET + Blockly.Msg.MIXLY_SPEED);
|
||||
this.setOutput(true, Number);
|
||||
this.setInputsInline(true);
|
||||
}
|
||||
};
|
||||
338
boards/default_src/micropython/blocks/pins.js
Normal file
338
boards/default_src/micropython/blocks/pins.js
Normal file
@@ -0,0 +1,338 @@
|
||||
import * as Blockly from 'blockly/core';
|
||||
import { Profile } from 'mixly';
|
||||
|
||||
const PINS_HUE = 230;
|
||||
|
||||
export const pins_digital = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.digital), 'PIN');
|
||||
this.setOutput(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const pins_digital_pin = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.digital_pin), 'PIN');
|
||||
this.setOutput(true, Number);
|
||||
}
|
||||
};
|
||||
|
||||
export const pins_input_pin = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.input_pin), 'PIN');
|
||||
this.setOutput(true, Number);
|
||||
}
|
||||
};
|
||||
|
||||
export const pins_output_pin = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.output_pin), 'PIN');
|
||||
this.setOutput(true, Number);
|
||||
}
|
||||
};
|
||||
|
||||
export const pwm_input = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.pwm_input), 'PIN');
|
||||
this.setOutput(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const analog_input = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.analog_input), 'PIN');
|
||||
this.setOutput(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const pwm_output = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.pwm_output), 'PIN');
|
||||
this.setOutput(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const analog_output = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.analog_output), 'PIN');
|
||||
this.setOutput(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const espnow_channel = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.espnow_channel), 'PIN');
|
||||
this.setOutput(true, Number);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
export const i2c_A_pin = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.i2c_A_pin), 'PIN');
|
||||
this.setOutput(true, Number);
|
||||
}
|
||||
};
|
||||
|
||||
export const i2c_B_pin = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.i2c_B_pin), 'PIN');
|
||||
this.setOutput(true, Number);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
export const spi_A_pin = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.spi_A_pin), 'PIN');
|
||||
this.setOutput(true, Number);
|
||||
}
|
||||
};
|
||||
|
||||
export const spi_B_pin = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.spi_B_pin), 'PIN');
|
||||
this.setOutput(true, Number);
|
||||
}
|
||||
};
|
||||
|
||||
export const spi_C_pin = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.spi_C_pin), 'PIN');
|
||||
this.setOutput(true, Number);
|
||||
}
|
||||
};
|
||||
|
||||
export const spi_D_pin = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.spi_D_pin), 'PIN');
|
||||
this.setOutput(true, Number);
|
||||
}
|
||||
};
|
||||
|
||||
export const pins_analog = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.analog), 'PIN');
|
||||
this.setOutput(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const pins_analog_pin = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.analog_pin), 'PIN');
|
||||
this.setOutput(true, Number);
|
||||
}
|
||||
};
|
||||
|
||||
export const pins_dac = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.dac), 'PIN');
|
||||
this.setOutput(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const pins_dac_pin = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.dac_pin), 'PIN');
|
||||
this.setOutput(true, Number);
|
||||
}
|
||||
};
|
||||
|
||||
export const pins_button = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.button), 'PIN');
|
||||
this.setOutput(true, Number);
|
||||
}
|
||||
};
|
||||
|
||||
export const pins_pwm = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.pwm), 'PIN');
|
||||
this.setOutput(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const pins_pwm_pin = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.pwm_pin), 'PIN');
|
||||
this.setOutput(true, Number);
|
||||
}
|
||||
};
|
||||
|
||||
export const pins_touch_pin = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.touch_pin), 'PIN');
|
||||
this.setOutput(true, Number);
|
||||
}
|
||||
};
|
||||
|
||||
export const pins_touch = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.touch), 'PIN');
|
||||
this.setOutput(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const pins_serial = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.serial_pin), 'PIN');
|
||||
this.setOutput(true, Number);
|
||||
}
|
||||
};
|
||||
|
||||
export const pins_builtinimg = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.builtinimg), 'PIN');
|
||||
this.setOutput(true, "esp32_image");
|
||||
}
|
||||
};
|
||||
|
||||
export const pins_imglist = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.imglist), 'PIN');
|
||||
this.setOutput(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const pins_playlist = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.playlist), 'PIN');
|
||||
this.setOutput(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const pins_exlcdh = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.exlcdh), 'PIN');
|
||||
this.setOutput(true, Number);
|
||||
}
|
||||
};
|
||||
|
||||
export const pins_exlcdv = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.exlcdv), 'PIN');
|
||||
this.setOutput(true, Number);
|
||||
}
|
||||
};
|
||||
|
||||
export const pins_axis = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.axis), 'PIN');
|
||||
this.setOutput(true, Number);
|
||||
}
|
||||
};
|
||||
export const pins_brightness = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.brightness), 'PIN');
|
||||
this.setOutput(true, Number);
|
||||
}
|
||||
};
|
||||
|
||||
export const pins_tone_notes = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.tone_notes), 'PIN');
|
||||
this.setOutput(true, Number);
|
||||
}
|
||||
};
|
||||
|
||||
export const pins_radio_power = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.radio_power), 'PIN');
|
||||
this.setOutput(true, Number);
|
||||
}
|
||||
};
|
||||
|
||||
export const pins_radio_datarate = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.radio_datarate), 'PIN');
|
||||
this.setOutput(true, Number);
|
||||
}
|
||||
};
|
||||
|
||||
export const pins_one_more = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.one_more), 'PIN');
|
||||
this.setOutput(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const pins_digital_dot = {
|
||||
init: function () {
|
||||
this.setColour(PINS_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(Profile.default.digital_dot), 'PIN');
|
||||
this.setOutput(true, Number);
|
||||
}
|
||||
};
|
||||
870
boards/default_src/micropython/blocks/sensor.js
Normal file
870
boards/default_src/micropython/blocks/sensor.js
Normal file
@@ -0,0 +1,870 @@
|
||||
import * as Blockly from 'blockly/core';
|
||||
import { sensor_LTR308 } from './sensor_onboard';
|
||||
|
||||
const SENSOR_HUE = 40; //'#9e77c9'//40;
|
||||
|
||||
export const sensor_mixgo_button_is_pressed = {
|
||||
init: function () {
|
||||
this.setColour(SENSOR_HUE);
|
||||
this.appendValueInput('btn')
|
||||
.appendField(Blockly.Msg.MIXLY_BUTTON)
|
||||
.setCheck(Number);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_IS_PRESSED);
|
||||
this.setOutput(true, Boolean);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_SENOR_IS_PRESSED);
|
||||
}
|
||||
};
|
||||
|
||||
export const sensor_mixgo_button_was_pressed = {
|
||||
init: function () {
|
||||
this.setColour(SENSOR_HUE);
|
||||
this.appendValueInput('btn')
|
||||
.appendField(Blockly.Msg.MIXLY_BUTTON)
|
||||
.setCheck(Number);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_WAS_PRESSED);
|
||||
this.setOutput(true, Boolean);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_SENOR_WAS_PRESSED);
|
||||
}
|
||||
};
|
||||
|
||||
export const sensor_mixgo_button_get_presses = {
|
||||
init: function () {
|
||||
this.setColour(SENSOR_HUE);
|
||||
this.appendValueInput('btn')
|
||||
.appendField(Blockly.Msg.MIXLY_BUTTON)
|
||||
.setCheck(Number);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_GET_PRESSES);
|
||||
this.appendValueInput('VAR')
|
||||
.setCheck(Number)
|
||||
.appendField(Blockly.Msg.MIXLY_GET_PRESSES_TIME);
|
||||
this.setOutput(true, Number);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.PROCEDURES_DEFRETURN_RETURN + Blockly.Msg.MIXLY_BUTTON + Blockly.Msg.MIXLY_GET_PRESSES);
|
||||
}
|
||||
};
|
||||
|
||||
export const sensor_mixgo_button_attachInterrupt = {
|
||||
init: function () {
|
||||
this.setColour(SENSOR_HUE);
|
||||
this.appendValueInput("btn")
|
||||
.appendField(Blockly.Msg.MIXLY_ESP32_INTERRUPT)
|
||||
.appendField(Blockly.Msg.MIXLY_BUTTON)
|
||||
.setCheck(Number);
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_MODE)
|
||||
.appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_RISING, "machine.Pin.IRQ_RISING"], [Blockly.Msg.MIXLY_FALLING, "machine.Pin.IRQ_FALLING"], [Blockly.Msg.MIXLY_CHANGE, "(machine.Pin.IRQ_RISING or machine.Pin.IRQ_FALLING)"]]), "mode");
|
||||
this.appendValueInput('DO')
|
||||
.appendField(Blockly.Msg.MIXLY_DO)
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_INOUT_ATTACHINTERRUPT);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
export const sensor_mixgo_extern_button_is_pressed = {
|
||||
init: function () {
|
||||
this.setColour(SENSOR_HUE);
|
||||
this.appendValueInput("PIN", Number)
|
||||
.appendField(Blockly.Msg.MIXLY_BUTTON)
|
||||
.appendField(Blockly.Msg.MIXLY_PIN)
|
||||
.setCheck(Number);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_IS_PRESSED);
|
||||
this.appendValueInput("STAT")
|
||||
.appendField(Blockly.Msg.MIXLY_ELECLEVEL);
|
||||
this.setOutput(true, Boolean);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_SENOR_IS_PRESSED);
|
||||
}
|
||||
};
|
||||
|
||||
export const sensor_mixgo_extern_button_was_pressed = {
|
||||
init: function () {
|
||||
this.setColour(SENSOR_HUE);
|
||||
this.appendValueInput("PIN", Number)
|
||||
.appendField(Blockly.Msg.MIXLY_BUTTON)
|
||||
.appendField(Blockly.Msg.MIXLY_PIN)
|
||||
.setCheck(Number);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_WAS_PRESSED);
|
||||
this.appendValueInput("STAT")
|
||||
.appendField(Blockly.Msg.MIXLY_ELECLEVEL);
|
||||
this.setOutput(true, Boolean);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_SENOR_WAS_PRESSED);
|
||||
}
|
||||
};
|
||||
|
||||
export const sensor_mixgo_extern_button_get_presses = {
|
||||
init: function () {
|
||||
this.setColour(SENSOR_HUE);
|
||||
this.appendValueInput("PIN", Number)
|
||||
.appendField(Blockly.Msg.MIXLY_BUTTON)
|
||||
.appendField(Blockly.Msg.MIXLY_PIN)
|
||||
.setCheck(Number);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_GET_PRESSES);
|
||||
this.appendValueInput('VAR')
|
||||
.setCheck(Number)
|
||||
.appendField(Blockly.Msg.MIXLY_GET_PRESSES_TIME);
|
||||
this.setOutput(true, Number);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.PROCEDURES_DEFRETURN_RETURN + Blockly.Msg.MIXLY_BUTTON + Blockly.Msg.MIXLY_GET_PRESSES);
|
||||
}
|
||||
};
|
||||
|
||||
export const sensor_mixgo_extern_button_attachInterrupt = {
|
||||
init: function () {
|
||||
this.setColour(SENSOR_HUE);
|
||||
this.appendValueInput("PIN", Number)
|
||||
.appendField(Blockly.Msg.MIXLY_BUTTON)
|
||||
.appendField(Blockly.Msg.MIXLY_PIN)
|
||||
.setCheck(Number);
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_MODE)
|
||||
.appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_RISING, "machine.Pin.IRQ_RISING"], [Blockly.Msg.MIXLY_FALLING, "machine.Pin.IRQ_FALLING"], [Blockly.Msg.MIXLY_CHANGE, "(machine.Pin.IRQ_RISING or machine.Pin.IRQ_FALLING)"]]), "mode");
|
||||
this.appendValueInput('DO')
|
||||
.appendField(Blockly.Msg.MIXLY_DO)
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_INOUT_ATTACHINTERRUPT);
|
||||
}
|
||||
};
|
||||
|
||||
export const sensor_mpu9250_attachGestureInterrupt = {
|
||||
init: function () {
|
||||
this.setColour(SENSOR_HUE);
|
||||
this.appendValueInput('SUB')
|
||||
.appendField("MPU9250")
|
||||
.setCheck("var");
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_JS_CURRENT_GESTURE)
|
||||
.appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_MICROBIT_shake, "shake"], [Blockly.Msg.MIXLY_UP, "up"], [Blockly.Msg.MIXLY_DOWN, "down"], [Blockly.Msg.MIXLY_LEFT, "left"], [Blockly.Msg.MIXLY_RIGHT, "right"], [Blockly.Msg.MIXLY_MICROBIT_face_up, "face up"], [Blockly.Msg.MIXLY_MICROBIT_face_down, "face down"], [Blockly.Msg.MIXLY_MICROBIT_freefall, "freefall"], ["3g", "3g"], ["6g", "6g"], ["8g", "8g"]]), "gesture");
|
||||
this.appendStatementInput('DO')
|
||||
.appendField(Blockly.Msg.MIXLY_DO);
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
var thisBlock = this;
|
||||
this.setTooltip(function () {
|
||||
var mode = thisBlock.getFieldValue('gesture');
|
||||
var mode0 = Blockly.Msg.MIXLY_MICROBIT_JS_CURRENT;
|
||||
var mode1 = Blockly.Msg.MSG.catSensor;
|
||||
var mode2 = Blockly.Msg.MIXLY_MICROBIT_JS_STATE;
|
||||
var mode3 = Blockly.Msg.MIXLY_MICROBIT_PERFORMANCE
|
||||
var TOOLTIPS = {
|
||||
'shake': Blockly.Msg.MIXLY_MICROBIT_shake,
|
||||
'up': Blockly.Msg.MIXLY_UP,
|
||||
'down': Blockly.Msg.MIXLY_DOWN,
|
||||
'left': Blockly.Msg.MIXLY_LEFT,
|
||||
'right': Blockly.Msg.MIXLY_RIGHT,
|
||||
'face up': Blockly.Msg.MIXLY_MICROBIT_face_up,
|
||||
'face down': Blockly.Msg.MIXLY_MICROBIT_face_down,
|
||||
'freefall': Blockly.Msg.MIXLY_MICROBIT_freefall,
|
||||
'3g': '3g',
|
||||
'6g': '6g',
|
||||
'8g': '8g'
|
||||
};
|
||||
return mode0 + mode1 + mode2 + TOOLTIPS[mode] + mode3;
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
export const sensor_mpu9250_gesture = {
|
||||
init: function () {
|
||||
this.setColour(SENSOR_HUE);
|
||||
this.appendValueInput('SUB')
|
||||
.appendField("MPU9250")
|
||||
.setCheck("var");
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_JS_CURRENT_GESTURE)
|
||||
.appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_MICROBIT_shake, "shake"], [Blockly.Msg.MIXLY_UP, "up"], [Blockly.Msg.MIXLY_DOWN, "down"], [Blockly.Msg.MIXLY_LEFT, "left"], [Blockly.Msg.MIXLY_RIGHT, "right"], [Blockly.Msg.MIXLY_MICROBIT_face_up, "face up"], [Blockly.Msg.MIXLY_MICROBIT_face_down, "face down"]]), "gesture");
|
||||
this.setOutput(true);
|
||||
var thisBlock = this;
|
||||
this.setTooltip(function () {
|
||||
var mode = thisBlock.getFieldValue('gesture');
|
||||
var mode0 = Blockly.Msg.MIXLY_MICROBIT_JS_CURRENT;
|
||||
var mode1 = Blockly.Msg.MSG.catSensor;
|
||||
var mode2 = Blockly.Msg.MIXLY_MICROBIT_JS_STATE;
|
||||
var mode3 = Blockly.Msg.MIXLY_MICROBIT_PERFORMANCE
|
||||
var TOOLTIPS = {
|
||||
'shake': Blockly.Msg.MIXLY_MICROBIT_shake,
|
||||
'up': Blockly.Msg.MIXLY_UP,
|
||||
'down': Blockly.Msg.MIXLY_DOWN,
|
||||
'left': Blockly.Msg.MIXLY_LEFT,
|
||||
'right': Blockly.Msg.MIXLY_RIGHT,
|
||||
'face up': Blockly.Msg.MIXLY_MICROBIT_face_up,
|
||||
'face down': Blockly.Msg.MIXLY_MICROBIT_face_down,
|
||||
// 'freefall':Blockly.Msg.MIXLY_MICROBIT_freefall,
|
||||
// '3g': '3g',
|
||||
// '6g': '6g',
|
||||
// '8g': '8g'
|
||||
};
|
||||
return mode0 + mode1 + mode2 + TOOLTIPS[mode] + mode3;
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
export const sensor_mpu9250_get_acceleration = {
|
||||
init: function () {
|
||||
this.setColour(SENSOR_HUE);
|
||||
this.appendValueInput('SUB')
|
||||
.appendField("MPU9250")
|
||||
.setCheck("var");
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_JS_ACCELERATION)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
["x", "x"],
|
||||
["y", "y"],
|
||||
["z", "z"],
|
||||
["(x,y,z)", "values"]
|
||||
]), "key");
|
||||
this.setOutput(true, Number);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_JS_ACCELERATION);
|
||||
var thisBlock = this;
|
||||
this.setTooltip(function () {
|
||||
var mode = thisBlock.getFieldValue('key');
|
||||
var mode0 = Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET;
|
||||
var mode1 = Blockly.Msg.MIXLY_MICROBIT_Direction;
|
||||
var mode2 = Blockly.Msg.MIXLY_MICROBIT_JS_ACCELERATION1;
|
||||
var TOOLTIPS = {
|
||||
'x': 'x',
|
||||
'y': 'y',
|
||||
'z': 'z',
|
||||
'(x,y,z)': Blockly.Msg.MIXLY_MICROBIT_Shiliang_Direction,
|
||||
};
|
||||
return mode0 + TOOLTIPS[mode] + mode1 + mode2;
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
export const sensor_adxl345_get_acceleration = {
|
||||
init: function () {
|
||||
this.setColour(SENSOR_HUE);
|
||||
this.appendValueInput('SUB')
|
||||
.appendField(Blockly.Msg.MIXLY_ADXL345)
|
||||
.setCheck("var");
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_JS_ACCELERATION)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
["x", "x"],
|
||||
["y", "y"],
|
||||
["z", "z"],
|
||||
["(x,y,z)", "values"]
|
||||
]), "key");
|
||||
this.setOutput(true, Number);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_JS_ACCELERATION);
|
||||
var thisBlock = this;
|
||||
this.setTooltip(function () {
|
||||
var mode = thisBlock.getFieldValue('key');
|
||||
var mode0 = Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET;
|
||||
var mode1 = Blockly.Msg.MIXLY_MICROBIT_Direction;
|
||||
var mode2 = Blockly.Msg.MIXLY_MICROBIT_JS_ACCELERATION1;
|
||||
var TOOLTIPS = {
|
||||
'x': 'x',
|
||||
'y': 'y',
|
||||
'z': 'z',
|
||||
'(x,y,z)': Blockly.Msg.MIXLY_MICROBIT_Shiliang_Direction,
|
||||
};
|
||||
return mode0 + TOOLTIPS[mode] + mode1 + mode2;
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
export const sensor_light_level = {
|
||||
init: function () {
|
||||
this.setColour(SENSOR_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_JS_LIGHT_LEVEL)
|
||||
this.setOutput(true, Number);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_SENSOR_LIGHT_LEVEL_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const sensor_mpu9250_calibrate_compass = {
|
||||
init: function () {
|
||||
this.setColour(SENSOR_HUE);
|
||||
this.appendValueInput('SUB')
|
||||
.appendField("MPU9250")
|
||||
.setCheck("var");
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_JS_CALIBRATE_COMPASS)
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_JS_CALIBRATE_COMPASS);
|
||||
}
|
||||
};
|
||||
// export const sensor_mpu9250_is_compass_calibrated = {
|
||||
// init: function(){
|
||||
// this.setColour(SENSOR_HUE);
|
||||
// this.appendValueInput('SUB')
|
||||
// .setCheck("var");
|
||||
// this.appendDummyInput()
|
||||
// .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_IS_COMPASS_CALIBRATED)
|
||||
// this.setOutput(true, Number);
|
||||
// this.setInputsInline(true);
|
||||
// this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_JS_IS_COMPASS_CALIBRATED1);
|
||||
// }
|
||||
// };
|
||||
// export const sensor_mpu9250_compass_heading = {
|
||||
// init: function(){
|
||||
// this.setColour(SENSOR_HUE);
|
||||
// this.appendValueInput('SUB')
|
||||
// .setCheck("var");
|
||||
// this.appendDummyInput()
|
||||
// .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_BY_ANGLE)
|
||||
// this.setOutput(true, Number);
|
||||
// this.setInputsInline(true);
|
||||
// }
|
||||
// };
|
||||
|
||||
export const sensor_mpu9250_temperature = {
|
||||
init: function () {
|
||||
this.setColour(SENSOR_HUE);
|
||||
this.appendValueInput('SUB')
|
||||
.appendField("MPU9250")
|
||||
.setCheck("var");
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_GETTEMPERATUE)
|
||||
this.setOutput(true, Number);
|
||||
this.setInputsInline(true);
|
||||
|
||||
this.setTooltip(Blockly.Msg.MIXLY_GETTEMPERATUE);
|
||||
}
|
||||
};
|
||||
|
||||
export const sensor_mpu9250_field_strength = {
|
||||
init: function () {
|
||||
this.setColour(SENSOR_HUE);
|
||||
this.appendValueInput('SUB')
|
||||
.appendField("MPU9250")
|
||||
.setCheck("var");
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_JS_GET_COMPASS)
|
||||
.appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_MICROBIT_JS_FIELD_STRENGTH, 'strength'], [Blockly.Msg.MIXLY_MICROBIT_JS_BY_ANGLE, 'heading']]), 'compass');
|
||||
this.setOutput(true, Number);
|
||||
this.setInputsInline(true);
|
||||
var thisBlock = this;
|
||||
this.setTooltip(function () {
|
||||
var mode = thisBlock.getFieldValue('compass');
|
||||
var mode0 = Blockly.Msg.MIXLY_MICROBIT_JS_GET_COMPASS;
|
||||
var TOOLTIPS = {
|
||||
'strength': Blockly.Msg.MIXLY_MICROBIT_JS_FIELD_STRENGTH,
|
||||
'heading': Blockly.Msg.MIXLY_MICROBIT_JS_BY_ANGLE
|
||||
};
|
||||
return mode0 + TOOLTIPS[mode];
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
export const sensor_distance_hrsc04 = {
|
||||
init: function () {
|
||||
this.setColour(SENSOR_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_CHAOSHENGBO)
|
||||
this.setOutput(true, Number);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_CHAOSHENGBO);
|
||||
}
|
||||
};
|
||||
|
||||
//传感器-实时时钟块_获取时间
|
||||
export const RTC_get_time = {
|
||||
init: function () {
|
||||
this.setColour(SENSOR_HUE);
|
||||
this.appendValueInput('SUB')
|
||||
.appendField("RTC")
|
||||
.setCheck("var");
|
||||
this.appendDummyInput()
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.MIXLY_RTCGETTIME);
|
||||
// this.appendDummyInput("").setAlign(Blockly.inputs.Align.RIGHT).appendField('myRTC');
|
||||
// this.appendDummyInput("").setAlign(Blockly.inputs.Align.RIGHT).appendField(new Blockly.FieldDropdown(RTC_TIME_TYPE), "TIME_TYPE");
|
||||
this.setInputsInline(true);
|
||||
this.setOutput(true, Number);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_RTC_GET_TIME_TOOLTIP);
|
||||
// var thisBlock = this;
|
||||
// this.setTooltip(function() {
|
||||
// var mode = thisBlock.getFieldValue('TIME_TYPE');
|
||||
// var mode0 = Blockly.Msg.MIXLY_RTCGETTIME;
|
||||
// var TOOLTIPS = {
|
||||
// 'Year':Blockly.Msg.MIXLY_YEAR,
|
||||
// 'Month':Blockly.Msg.MIXLY_MONTH,
|
||||
// 'Day':Blockly.Msg.MIXLY_DAY,
|
||||
// 'Hour':Blockly.Msg.MIXLY_HOUR,
|
||||
// 'Minute':Blockly.Msg.MIXLY_MINUTE,
|
||||
// 'Second':Blockly.Msg.MIXLY_SECOND,
|
||||
// 'Week':Blockly.Msg.MIXLY_WEEK,
|
||||
// 'Mix1':Blockly.Msg.MIXLY_MIX1,
|
||||
// 'Mix2':Blockly.Msg.MIXLY_MIX2
|
||||
// };
|
||||
// return mode0 +TOOLTIPS[mode];
|
||||
// });
|
||||
}
|
||||
};
|
||||
|
||||
export const RTC_set_time = {
|
||||
init: function () {
|
||||
this.setColour(SENSOR_HUE);
|
||||
this.appendDummyInput("")
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.MIXLY_RTCSETTIME)
|
||||
.appendField('myRTC');
|
||||
this.appendValueInput("hour")
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(" " + Blockly.Msg.MIXLY_HOUR);
|
||||
this.appendValueInput("minute")
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(" " + Blockly.Msg.MIXLY_MINUTE);
|
||||
this.appendValueInput("second")
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(" " + Blockly.Msg.MIXLY_SECOND);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(false);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_RTCSETTIME + Blockly.Msg.MIXLY_MIX2);
|
||||
}
|
||||
};
|
||||
|
||||
export const RTC_set_date = {
|
||||
init: function () {
|
||||
this.setColour(SENSOR_HUE);
|
||||
this.appendDummyInput("")
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.MIXLY_RTCSETDATE)
|
||||
.appendField('myRTC');
|
||||
this.appendValueInput("year")
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(" " + Blockly.Msg.MIXLY_YEAR);
|
||||
this.appendValueInput("month")
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(" " + Blockly.Msg.MIXLY_MONTH);
|
||||
this.appendValueInput("day")
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(" " + Blockly.Msg.MIXLY_DAY);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_RTCSETDATE + Blockly.Msg.MIXLY_MIX1);
|
||||
}
|
||||
};
|
||||
|
||||
export const sensor_compass_reset = {
|
||||
init: function () {
|
||||
this.setColour(SENSOR_HUE);
|
||||
this.appendValueInput('SUB')
|
||||
.appendField("MPU9250")
|
||||
.setCheck("var");
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_Reset_COMPASS)
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_Reset_COMPASS);
|
||||
}
|
||||
};
|
||||
|
||||
export const HCSR04 = {
|
||||
init: function () {
|
||||
this.setColour(SENSOR_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_CHAOSHENGBO);
|
||||
this.appendValueInput("PIN1", Number)
|
||||
.appendField('Trig #')
|
||||
.setCheck(Number);
|
||||
this.appendValueInput("PIN2", Number)
|
||||
.appendField('Echo #')
|
||||
.setCheck(Number);
|
||||
this.setInputsInline(true);
|
||||
this.setOutput(true, Number);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_BLOCKGROUP_CHAOSHENGBO);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
export const sensor_dht11 = {
|
||||
init: function () {
|
||||
var WHAT = [[Blockly.Msg.MIXLY_GETTEMPERATUE, 'temperature'], [Blockly.Msg.MIXLY_GETHUMIDITY, 'relative_humidity'], [Blockly.Msg.MIXLY_DHT11_T_H, 'tempandhum']];
|
||||
this.setColour(SENSOR_HUE);
|
||||
this.appendValueInput("PIN", Number)
|
||||
.appendField(new Blockly.FieldDropdown([['DHT11', 'dht11']
|
||||
, ['DHT22', 'dht22']//, ['DHT21', '21'], ['DHT33', '33'], ['DHT44', '44']
|
||||
]), 'TYPE')
|
||||
.appendField(Blockly.Msg.MIXLY_PIN)
|
||||
.setCheck(Number);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown(WHAT), "WHAT");
|
||||
this.setOutput(true, Number);
|
||||
var thisBlock = this;
|
||||
this.setTooltip(function () {
|
||||
var op = thisBlock.getFieldValue('WHAT');
|
||||
var TOOLTIPS = {
|
||||
'temperature': Blockly.Msg.MIXLY_TOOLTIP_BLOCKGROUP_GET_TEM,
|
||||
'relative_humidity': Blockly.Msg.MIXLY_TOOLTIP_BLOCKGROUP_GET_HUM,
|
||||
'tempandhum': Blockly.Msg.MIXLY_TOOLTIP_BLOCKGROUP_GET_TEM_HUM
|
||||
};
|
||||
return TOOLTIPS[op];
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
export const sensor_mixgo_extern_light = {
|
||||
init: function () {
|
||||
this.setColour(SENSOR_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_ESP32_EXTERN_LIGHT);
|
||||
this.appendValueInput("PIN", Number)
|
||||
.appendField(Blockly.Msg.MIXLY_PIN)
|
||||
.setCheck(Number);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_ESP32_EXTERN_VALUE);
|
||||
this.setOutput(true, Number);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.ESP32_SENSOR_NIXGO_LIGHT_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const sensor_mixgo_extern_sound = {
|
||||
init: function () {
|
||||
this.setColour(SENSOR_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_ESP32_EXTERN_SOUND);
|
||||
this.appendValueInput("PIN", Number)
|
||||
.appendField(Blockly.Msg.MIXLY_PIN)
|
||||
.setCheck(Number);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_ESP32_EXTERN_VALUE);
|
||||
this.setOutput(true, Number);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.ESP32_SENSOR_NIXGO_SOUND_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const number1 = {
|
||||
init: function () {
|
||||
this.setColour(SENSOR_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown([["1", "touch1"], ["2", "touch2"]]), 'op')
|
||||
this.setOutput(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_INOUT_HIGHLOW);
|
||||
}
|
||||
};
|
||||
|
||||
export const sensor_mixgo_pin_pressed = {
|
||||
init: function () {
|
||||
this.setColour(SENSOR_HUE);
|
||||
this.appendValueInput("button")
|
||||
.appendField(Blockly.Msg.MIXLY_ESP32_TOUCH_SENSOR)
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_IS_TOUCHED);
|
||||
this.setOutput(true, Boolean);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_sensor_pin_pressed);
|
||||
}
|
||||
};
|
||||
|
||||
export const sensor_mixgo_extern_pin_near = {
|
||||
init: function () {
|
||||
this.setColour(SENSOR_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_ESP32_EXTERN_NEAR);
|
||||
this.appendValueInput("PIN", Number)
|
||||
.appendField(Blockly.Msg.MIXLY_PIN)
|
||||
.setCheck(Number);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_ESP32_EXTERN_VALUE);
|
||||
this.setOutput(true, Number);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_SENSOR_MIXGO_PIN_NEAR_TOOLTIP + Blockly.Msg.MIXLY_ESP32_NEAR);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
export const sensor_mixgo_pin_near = {
|
||||
init: function () {
|
||||
this.setColour(SENSOR_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET)
|
||||
.appendField(new Blockly.FieldDropdown([[Blockly.Msg.TEXT_TRIM_LEFT, "left"], [Blockly.Msg.TEXT_TRIM_RIGHT, "right"]]), "direction")
|
||||
.appendField(Blockly.Msg.MIXLY_ESP32_NEAR);
|
||||
this.setOutput(true, Number);
|
||||
this.setInputsInline(true);
|
||||
var thisBlock = this;
|
||||
this.setTooltip(function () {
|
||||
var mode = thisBlock.getFieldValue('direction');
|
||||
var mode0 = Blockly.Msg.MIXLY_ESP32_SENSOR_MIXGO_PIN_NEAR_TOOLTIP;
|
||||
var mode1 = Blockly.Msg.MIXLY_ESP32_NEAR;
|
||||
var TOOLTIPS = {
|
||||
'left': Blockly.Msg.TEXT_TRIM_LEFT,
|
||||
'right': Blockly.Msg.TEXT_TRIM_RIGHT,
|
||||
};
|
||||
return mode0 + TOOLTIPS[mode] + mode1
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
export const RTC_set_datetime = {
|
||||
init: function () {
|
||||
this.setColour(SENSOR_HUE);
|
||||
// this.appendDummyInput()
|
||||
this.appendValueInput('SUB')
|
||||
.appendField("RTC")
|
||||
.appendField(Blockly.Msg.MIXLY_RTC_TIME)
|
||||
.setCheck("var");
|
||||
this.appendValueInput('year')
|
||||
.setCheck(Number)
|
||||
.appendField(" " + Blockly.Msg.MIXLY_YEAR);
|
||||
this.appendValueInput('month')
|
||||
.setCheck(Number)
|
||||
.appendField(" " + Blockly.Msg.MIXLY_MONTH);
|
||||
this.appendValueInput('day')
|
||||
.setCheck(Number)
|
||||
.appendField(" " + Blockly.Msg.MIXLY_DAY);
|
||||
this.appendValueInput('weekday')
|
||||
.setCheck(Number)
|
||||
.appendField(" " +
|
||||
Blockly.Msg.MIXLY_WEEK2);
|
||||
this.appendValueInput('hour')
|
||||
.setCheck(Number)
|
||||
.appendField(" " + Blockly.Msg.MIXLY_HOUR);
|
||||
this.appendValueInput('minute')
|
||||
.setCheck(Number)
|
||||
.appendField(" " + Blockly.Msg.MIXLY_MINUTE);
|
||||
this.appendValueInput('second')
|
||||
.setCheck(Number)
|
||||
.appendField(" " + Blockly.Msg.MIXLY_SECOND);
|
||||
this.appendValueInput('millisecond')
|
||||
.setCheck(Number)
|
||||
.appendField(" " + Blockly.Msg.MIXLY_MILLISECOND);
|
||||
this.setInputsInline(false);
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_RTC_SET_DATATIME_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const sensor_rtc_init = {
|
||||
init: function () {
|
||||
this.setColour(SENSOR_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField("RTC")
|
||||
this.appendValueInput('SUB')
|
||||
.appendField(Blockly.Msg.MIXLY_SETUP)
|
||||
.setCheck("var");
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_SENSOR_RTC_INT_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const sensor_use_i2c_init = {
|
||||
init: function () {
|
||||
this.setColour(SENSOR_HUE);
|
||||
this.appendValueInput('I2CSUB')
|
||||
.appendField(Blockly.Msg.CONTROLS_FOR_INPUT_WITH + "I2C")
|
||||
.setCheck("var");
|
||||
this.appendValueInput('SUB')
|
||||
.appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE)
|
||||
.setCheck("var");
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_SETUP + Blockly.Msg.LISTS_SET_INDEX_INPUT_TO)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
["MPU9250", "MPU9250"],
|
||||
["BMP280", "BMP280"],
|
||||
["SHT20", "SHT20"],
|
||||
["ADXL345", "ADXL345"]
|
||||
]), "key");
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setFieldValue("MPU9250", "key");
|
||||
var thisBlock = this;
|
||||
this.setTooltip(function () {
|
||||
var mode = thisBlock.getFieldValue('key');
|
||||
var mode0 = Blockly.Msg.MIXLY_ESP32_SENSOR_USE_I2C_TOOLTIP;
|
||||
var TOOLTIPS = {
|
||||
"MPU9250": "MPU9250",
|
||||
"SHT20": "SHT20",
|
||||
"BMP280": "BMP280",
|
||||
"ADXL345": "ADXL345"
|
||||
};
|
||||
return mode0 + TOOLTIPS[mode]
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
export const sensor_bmp = {
|
||||
init: function () {
|
||||
this.setColour(SENSOR_HUE);
|
||||
this.appendValueInput('SUB')
|
||||
.appendField("BMP280")
|
||||
.setCheck("var");
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.MIXLY_GETTEMPERATUE, "get_BMP_temperature()"],
|
||||
[Blockly.Msg.MIXLY_GETPRESSURE, "get_BMP_pressure()"]
|
||||
]), "key");
|
||||
this.setOutput(true, Number);
|
||||
this.setInputsInline(true);
|
||||
var thisBlock = this;
|
||||
this.setTooltip(function () {
|
||||
var mode = thisBlock.getFieldValue('key');
|
||||
var TOOLTIPS = {
|
||||
"get_BMP_temperature()": Blockly.Msg.MIXLY_MICROBIT_SENSOR_BMP_temperature_TOOLTIP,
|
||||
"get_BMP_pressure()": Blockly.Msg.MIXLY_MICROBIT_SENSOR_BMP_press_TOOLTIP,
|
||||
};
|
||||
return TOOLTIPS[mode]
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
export const sensor_sht = {
|
||||
init: function () {
|
||||
this.setColour(SENSOR_HUE);
|
||||
this.appendValueInput('SUB')
|
||||
.appendField("SHT20")
|
||||
.setCheck("var");
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.MIXLY_GETTEMPERATUE, "get_SHT_temperature()"],
|
||||
[Blockly.Msg.MIXLY_GETHUMIDITY, "get_SHT_relative_humidity()"]
|
||||
]), "key");
|
||||
this.setOutput(true, Number);
|
||||
this.setInputsInline(true);
|
||||
var thisBlock = this;
|
||||
this.setTooltip(function () {
|
||||
var mode = thisBlock.getFieldValue('key');
|
||||
var TOOLTIPS = {
|
||||
"get_SHT_temperature()": Blockly.Msg.MIXLY_MICROBIT_SENSOR_SHT_temperature_TOOLTIP,
|
||||
"get_SHT_relative_humidity()": Blockly.Msg.MIXLY_MICROBIT_SENSOR_SHT_HUM_TOOLTIP,
|
||||
};
|
||||
return TOOLTIPS[mode]
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
export const sensor_ds18x20 = {
|
||||
init: function () {
|
||||
this.setColour(SENSOR_HUE);
|
||||
this.appendValueInput("PIN", Number)
|
||||
.appendField("DS18x20 " + Blockly.Msg.MIXLY_PIN)
|
||||
.setCheck(Number);
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_GETTEMPERATUE);
|
||||
this.setInputsInline(true);
|
||||
this.setOutput(true, Number);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_SENSOR_DS18X20_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const sensor_mpu9250_get_magnetic = {
|
||||
init: function () {
|
||||
this.setColour(SENSOR_HUE);
|
||||
this.appendValueInput('SUB')
|
||||
.appendField("MPU9250")
|
||||
.setCheck("var");
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_JS_GET + Blockly.Msg.MIXLY_MICROBIT_JS_FIELD_STRENGTH)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
["x", "x"],
|
||||
["y", "y"],
|
||||
["z", "z"],
|
||||
["(x,y,z)", "values"]
|
||||
]), "key");
|
||||
this.setOutput(true, Number);
|
||||
this.setInputsInline(true);
|
||||
var thisBlock = this;
|
||||
this.setTooltip(function () {
|
||||
var mode = thisBlock.getFieldValue('key');
|
||||
var mode0 = Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET;
|
||||
var mode1 = Blockly.Msg.MIXLY_MICROBIT_Direction;
|
||||
var mode2 = Blockly.Msg.MIXLY_MICROBIT_JS_FIELD_STRENGTH;
|
||||
var TOOLTIPS = {
|
||||
'x': 'x',
|
||||
'y': 'y',
|
||||
'z': 'z',
|
||||
'(x,y,z)': Blockly.Msg.MIXLY_MICROBIT_Shiliang_Direction,
|
||||
};
|
||||
return mode0 + TOOLTIPS[mode] + mode1 + mode2;
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
export const sensor_mpu9250_get_gyro = {
|
||||
init: function () {
|
||||
this.setColour(SENSOR_HUE);
|
||||
this.appendValueInput('SUB')
|
||||
.appendField("MPU9250")
|
||||
.setCheck("var");
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET + Blockly.Msg.MIXLY_ESP32_SENOR_GYRO)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
["x", "x"],
|
||||
["y", "y"],
|
||||
["z", "z"],
|
||||
["(x,y,z)", "values"]
|
||||
]), "key");
|
||||
this.setOutput(true, Number);
|
||||
this.setInputsInline(true);
|
||||
var thisBlock = this;
|
||||
this.setTooltip(function () {
|
||||
var mode = thisBlock.getFieldValue('key');
|
||||
var mode0 = Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_GET;
|
||||
var mode1 = Blockly.Msg.MIXLY_MICROBIT_Direction;
|
||||
var mode2 = Blockly.Msg.MIXLY_ESP32_SENOR_GYRO;
|
||||
var TOOLTIPS = {
|
||||
'x': 'x',
|
||||
'y': 'y',
|
||||
'z': 'z',
|
||||
'(x,y,z)': Blockly.Msg.MIXLY_MICROBIT_Shiliang_Direction,
|
||||
};
|
||||
return mode0 + TOOLTIPS[mode] + mode1 + mode2;
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
export const sensor_lm35 = {
|
||||
init: function () {
|
||||
this.setColour(SENSOR_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField("LM35" + Blockly.Msg.MIXLY_TEMP);
|
||||
this.appendValueInput("PIN", Number)
|
||||
.appendField(Blockly.Msg.MIXLY_PIN)
|
||||
.setCheck(Number);
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_GETTEMPERATUE);
|
||||
this.setInputsInline(true);
|
||||
this.setOutput(true, Number);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_LM35);
|
||||
}
|
||||
};
|
||||
|
||||
export const sensor_button_is_pressed = sensor_mixgo_button_is_pressed;
|
||||
export const sensor_button_was_pressed = sensor_mixgo_button_was_pressed;
|
||||
export const sensor_button_get_presses = sensor_mixgo_button_get_presses;
|
||||
export const sensor_pin_pressed = sensor_mixgo_pin_pressed;
|
||||
export const sensor_pin_near = sensor_mixgo_pin_near;
|
||||
export const sensor_mixgo_light = sensor_LTR308;
|
||||
export const sensor_light = sensor_mixgo_light;
|
||||
export const sensor_get_acceleration = sensor_mpu9250_get_acceleration;
|
||||
export const dht11 = sensor_dht11;
|
||||
export const sensor_field_strength = sensor_mpu9250_field_strength;
|
||||
export const sensor_temperature = sensor_mpu9250_temperature
|
||||
1733
boards/default_src/micropython/blocks/sensor_extern.js
Normal file
1733
boards/default_src/micropython/blocks/sensor_extern.js
Normal file
File diff suppressed because it is too large
Load Diff
1367
boards/default_src/micropython/blocks/sensor_onboard.js
Normal file
1367
boards/default_src/micropython/blocks/sensor_onboard.js
Normal file
File diff suppressed because it is too large
Load Diff
383
boards/default_src/micropython/blocks/serial.js
Normal file
383
boards/default_src/micropython/blocks/serial.js
Normal file
@@ -0,0 +1,383 @@
|
||||
import * as Blockly from 'blockly/core';
|
||||
|
||||
const SERIAL_HUE = 65; //'#58a8de'//65;
|
||||
|
||||
export const serial_print_byte = {
|
||||
init: function () {
|
||||
this.setColour(SERIAL_HUE);
|
||||
this.appendValueInput("CONTENT", String)
|
||||
.appendField("Serial")
|
||||
.appendField(new Blockly.FieldDropdown([['uart1', '1'], ['uart2', '2']]), 'mode')
|
||||
.appendField(Blockly.Msg.MIXLY_SERIAL_WRITE + '(' + Blockly.Msg.LANG_MATH_BYTE + ')');
|
||||
//this.setFieldValue('1','mode')
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setTooltip(Blockly.Msg.TEXT_PRINT_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const serial_print = {
|
||||
init: function () {
|
||||
this.setColour(SERIAL_HUE);
|
||||
this.appendValueInput("CONTENT", String)
|
||||
.appendField("Serial")
|
||||
.appendField(new Blockly.FieldDropdown([['uart1', '1'], ['uart2', '2']]), 'mode')
|
||||
.appendField(Blockly.Msg.MIXLY_SERIAL_PRINT);
|
||||
//this.setFieldValue('1','mode')
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setTooltip(Blockly.Msg.TEXT_PRINT_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const serial_println = {
|
||||
init: function () {
|
||||
this.setColour(SERIAL_HUE);
|
||||
this.appendValueInput("CONTENT", String)
|
||||
.appendField("Serial")
|
||||
.appendField(new Blockly.FieldDropdown([['uart1', '1'], ['uart2', '2']]), 'mode')
|
||||
.appendField(Blockly.Msg.MIXLY_SERIAL_PRINTLN);
|
||||
//this.setFieldValue('1','mode')
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setTooltip(Blockly.Msg.TEXT_PRINT_Huanhang_TOOLTIP + Blockly.Msg.TEXT_PRINT_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
//打印16进制数
|
||||
export const serial_print_hex = {
|
||||
init: function () {
|
||||
this.setColour(SERIAL_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField("Serial")
|
||||
.appendField(new Blockly.FieldDropdown([['uart1', '1'], ['uart2', '2']]), 'mode')
|
||||
.appendField(Blockly.Msg.MIXLY_SERIAL_PRINTLN);
|
||||
this.appendValueInput("CONTENT", Number)
|
||||
.appendField(new Blockly.FieldDropdown([[Blockly.Msg.MATH_BIN, "bin"], [Blockly.Msg.MATH_OCT, "oct"], [Blockly.Msg.MATH_DEC, "int"], [Blockly.Msg.MATH_HEX, "hex"]]), "STAT")
|
||||
.setCheck(Number);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
this.setFieldValue('hex', 'STAT')
|
||||
this.setTooltip(Blockly.Msg.TEXT_PRINT_HEX_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const serial_receive_data_event = {
|
||||
init: function () {
|
||||
this.setColour(SERIAL_HUE);
|
||||
this.appendValueInput('char_marker')
|
||||
.setCheck(String)
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_JS_SERIAL_WHEN_CONTAIN_DATA)
|
||||
this.appendStatementInput('DO')
|
||||
.appendField(Blockly.Msg.MIXLY_DO);
|
||||
}
|
||||
};
|
||||
|
||||
export const serial_readstr = {
|
||||
init: function () {
|
||||
this.setColour(SERIAL_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField("Serial")
|
||||
.appendField(new Blockly.FieldDropdown([['uart1', '1'], ['uart2', '2']]), 'mode')
|
||||
.appendField(Blockly.Msg.MIXLY_SERIAL_READSTR);
|
||||
//this.setFieldValue('1','mode')
|
||||
this.setOutput(true, String);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_BLOCKGROUP_SERIAL_READ_STR);
|
||||
}
|
||||
};
|
||||
|
||||
export const serial_any = {
|
||||
init: function () {
|
||||
this.setColour(SERIAL_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField("Serial")
|
||||
.appendField(new Blockly.FieldDropdown([['uart1', '1'], ['uart2', '2']]), 'mode')
|
||||
.appendField(Blockly.Msg.MIXLY_SERIAL_AVAILABLE);
|
||||
//this.setFieldValue('1','mode')
|
||||
this.setOutput(true, Boolean);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_SERIAL_AVAILABLE1);
|
||||
}
|
||||
};
|
||||
|
||||
export const serial_readline = {
|
||||
init: function () {
|
||||
this.setColour(SERIAL_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField("Serial")
|
||||
.appendField(new Blockly.FieldDropdown([['uart1', '1'], ['uart2', '2']]), 'mode')
|
||||
.appendField(Blockly.Msg.MIXLY_ESP32_READ_LINE);
|
||||
//this.setFieldValue('1','mode')
|
||||
this.setOutput(true, String);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_JS_SERIAL_READ_LINE1);
|
||||
}
|
||||
};
|
||||
|
||||
export const serial_readstr_until = {
|
||||
init: function () {
|
||||
this.setColour(SERIAL_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField("Serial " + Blockly.Msg.MIXLY_SERIAL_READSTR_UNTIL)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
["new line", "serial.delimiters(Delimiters.NewLine)"],
|
||||
[",", "serial.delimiters(Delimiters.Comma)"],
|
||||
["$", "serial.delimiters(Delimiters.Dollar)"],
|
||||
[":", "serial.delimiters(Delimiters.Colon)"],
|
||||
[".", "serial.delimiters(Delimiters.Fullstop)"],
|
||||
["#", "serial.delimiters(Delimiters.Hash)"]
|
||||
]), "char_marker");
|
||||
|
||||
this.setInputsInline(true);
|
||||
this.setOutput(true, String);
|
||||
}
|
||||
};
|
||||
|
||||
export const serial_softserial_new = {
|
||||
init: function () {
|
||||
this.setColour(SERIAL_HUE);
|
||||
this.appendValueInput("RX")
|
||||
.appendField(Blockly.Msg.MIXLY_SETUP)
|
||||
.appendField(new Blockly.FieldDropdown([['uart1', '1'], ['uart2', '2']]), 'mode')
|
||||
.appendField("RX#")
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT);
|
||||
this.appendValueInput("TX")
|
||||
.appendField("TX#")
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_SERIAL_BEGIN)
|
||||
.appendField(new Blockly.FieldDropdown([['115200', '115200'], ['57600', '57600'], ['37400', '38400'], ['31250', '31250'], ['28800', '28800'], ['19200', '19200'], ['14400', '14400'], ['9600', '9600'], ['4800', '4800'], ['2400', '2400'], ['1200', '1200'], ['300', '300']]), 'baudrate');
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_SERIAL_softserial);
|
||||
}
|
||||
};
|
||||
|
||||
export const serial_softserial = {
|
||||
init: function () {
|
||||
this.setColour(SERIAL_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_SETUP)
|
||||
.appendField(new Blockly.FieldDropdown([['uart1 (RX=23,TX=19)', '1'], ['uart2 (RX=5,TX=18)', '2']]), 'mode');
|
||||
//this.setFieldValue('1','mode')
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_SERIAL_BEGIN)
|
||||
.appendField(new Blockly.FieldDropdown([['115200', '115200'], ['57600', '57600'], ['37400', '38400'], ['31250', '31250'], ['28800', '28800'], ['19200', '19200'], ['14400', '14400'], ['9600', '9600'], ['4800', '4800'], ['2400', '2400'], ['1200', '1200'], ['300', '300']]), 'baudrate');
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_SERIAL_softserial);
|
||||
}
|
||||
};
|
||||
|
||||
export const serial_begin = {
|
||||
init: function () {
|
||||
this.setColour(SERIAL_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField("Serial " + Blockly.Msg.MIXLY_SERIAL_BEGIN)
|
||||
.appendField(new Blockly.FieldDropdown([['115200', '115200'], ['57600', '57600'], ['37400', '38400'], ['31250', '31250'], ['28800', '28800'], ['19200', '19200'], ['14400', '14400'], ['9600', '9600'], ['4800', '4800'], ['2400', '2400'], ['1200', '1200'], ['300', '300']]), 'baudrate');
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.LISTS_SET_INDEX_SET + Blockly.Msg.MIXLY_SERIAL_BEGIN);
|
||||
}
|
||||
};
|
||||
|
||||
export const system_input = {
|
||||
init: function () {
|
||||
this.setColour(SERIAL_HUE);
|
||||
this.appendValueInput("VAR")
|
||||
.appendField(Blockly.Msg.blockpy_inout_raw_input)
|
||||
.setCheck(String);
|
||||
this.setOutput(true);
|
||||
this.setTooltip(Blockly.Msg.INOUT_input_TOOLTIP);
|
||||
}
|
||||
}
|
||||
|
||||
export const system_print = {
|
||||
init: function () {
|
||||
this.setColour(SERIAL_HUE);
|
||||
this.appendValueInput("VAR")
|
||||
.appendField(Blockly.Msg.MIXLY_SERIAL_PRINTLN);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setTooltip(Blockly.Msg.BLOCKPY_PRINT_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const system_print_inline = {
|
||||
init: function () {
|
||||
this.setColour(SERIAL_HUE);
|
||||
this.appendValueInput("VAR")
|
||||
.appendField(Blockly.Msg.MIXLY_SERIAL_PRINT);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setTooltip(Blockly.Msg.TEXT_PRINT_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const system_print_end = {
|
||||
init: function () {
|
||||
this.setColour(SERIAL_HUE);
|
||||
this.appendValueInput("VAR")
|
||||
.appendField(Blockly.Msg.MIXLY_SERIAL_PRINT);
|
||||
this.appendValueInput("END")
|
||||
.appendField(Blockly.Msg.MIXLY_ENDSWITH);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_PYTHON_INOUT_PRINT_END_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const system_print_many = {
|
||||
|
||||
init: function () {
|
||||
this.setColour(SERIAL_HUE);
|
||||
|
||||
this.itemCount_ = 2;
|
||||
this.updateShape_();
|
||||
this.setPreviousStatement(false);
|
||||
this.setNextStatement(false);
|
||||
this.setInputsInline(true);
|
||||
this.setMutator(new Blockly.icons.MutatorIcon(['system_print_item'], this));
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_MIXPY_INOUT_PRINT_MANY_TOOLTIP);
|
||||
},
|
||||
|
||||
mutationToDom: function () {
|
||||
var container = document.createElement('mutation');
|
||||
container.setAttribute('items', this.itemCount_);
|
||||
return container;
|
||||
},
|
||||
|
||||
domToMutation: function (xmlElement) {
|
||||
this.itemCount_ = parseInt(xmlElement.getAttribute('items'), 10);
|
||||
this.updateShape_();
|
||||
},
|
||||
|
||||
decompose: function (workspace) {
|
||||
var containerBlock =
|
||||
workspace.newBlock('system_print_container');
|
||||
containerBlock.initSvg();
|
||||
var connection = containerBlock.getInput('STACK').connection;
|
||||
for (var i = 0; i < this.itemCount_; i++) {
|
||||
var itemBlock = workspace.newBlock('system_print_item');
|
||||
itemBlock.initSvg();
|
||||
connection.connect(itemBlock.previousConnection);
|
||||
connection = itemBlock.nextConnection;
|
||||
}
|
||||
return containerBlock;
|
||||
},
|
||||
|
||||
compose: function (containerBlock) {
|
||||
var itemBlock = containerBlock.getInputTargetBlock('STACK');
|
||||
// Count number of inputs.
|
||||
var connections = [];
|
||||
var i = 0;
|
||||
while (itemBlock) {
|
||||
connections[i] = itemBlock.valueConnection_;
|
||||
itemBlock = itemBlock.nextConnection &&
|
||||
itemBlock.nextConnection.targetBlock();
|
||||
i++;
|
||||
}
|
||||
this.itemCount_ = i;
|
||||
this.updateShape_();
|
||||
// Reconnect any child blocks.
|
||||
for (var i = 0; i < this.itemCount_; i++) {
|
||||
if (connections[i]) {
|
||||
this.getInput('ADD' + i)
|
||||
.connection.connect(connections[i]);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
saveConnections: function (containerBlock) {
|
||||
var itemBlock = containerBlock.getInputTargetBlock('STACK');
|
||||
var i = 0;
|
||||
while (itemBlock) {
|
||||
var input = this.getInput('ADD' + i);
|
||||
itemBlock.valueConnection_ = input && input.connection.targetConnection;
|
||||
i++;
|
||||
itemBlock = itemBlock.nextConnection &&
|
||||
itemBlock.nextConnection.targetBlock();
|
||||
}
|
||||
},
|
||||
|
||||
updateShape_: function () {
|
||||
// Delete everything.
|
||||
if (this.getInput('EMPTY')) {
|
||||
this.removeInput('EMPTY');
|
||||
} else {
|
||||
var i = 0;
|
||||
while (this.getInput('ADD' + i)) {
|
||||
this.removeInput('ADD' + i);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
// Rebuild block.
|
||||
if (this.itemCount_ == 0) {
|
||||
this.appendDummyInput('EMPTY')
|
||||
.appendField(Blockly.Msg.MIXLY_MIXPY_INOUT_PRINT_EMPTY);
|
||||
} else {
|
||||
for (var i = 0; i < this.itemCount_; i++) {
|
||||
var input = this.appendValueInput('ADD' + i);
|
||||
if (i == 0) {
|
||||
input.appendField(Blockly.Msg.MIXLY_SERIAL_PRINTLN);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
export const system_print_container = {
|
||||
init: function () {
|
||||
this.setColour(SERIAL_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_SERIAL_PRINTLN);
|
||||
this.appendStatementInput('STACK');
|
||||
this.setTooltip(Blockly.Msg.MIXLY_MIXPY_INOUT_PRINT_MANY_CONTAINER_TOOLTIP);
|
||||
this.contextMenu = false;
|
||||
}
|
||||
};
|
||||
|
||||
export const system_print_item = {
|
||||
init: function () {
|
||||
this.setColour(SERIAL_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.LISTS_CREATE_WITH_ITEM_TITLE);
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_MIXPY_INOUT_PRINT_MANY_ITEM_TOOLTIP);
|
||||
this.contextMenu = false;
|
||||
}
|
||||
};
|
||||
|
||||
export const serial_send_to_ai = {
|
||||
init: function () {
|
||||
this.setColour(SERIAL_HUE);
|
||||
this.appendValueInput("CONTENT")
|
||||
.appendField("Serial")
|
||||
.appendField(new Blockly.FieldDropdown([['uart1', '1'], ['uart2', '2']]), 'mode')
|
||||
.appendField(Blockly.Msg.MIXLY_EMQX_PUBLISH);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.LANG_CONTROLS_FOR_INPUT_TO + Blockly.Msg.MIXLY_OTHER + 'MP' + Blockly.Msg.MIXLY_DEVICE)
|
||||
.appendField(Blockly.Msg.LANG_CONTROLS_WHILEUNTIL_TITLE_REPEAT)
|
||||
.appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_TURTLE_WRITE_MOVE_TRUE, 'True'], [Blockly.Msg.MIXLY_TURTLE_WRITE_MOVE_FALSE, 'False']]), 'STAT')
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
}
|
||||
};
|
||||
|
||||
export const serial_read_from_ai = {
|
||||
init: function () {
|
||||
this.setColour(SERIAL_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField("Serial")
|
||||
.appendField(new Blockly.FieldDropdown([['uart1', '1'], ['uart2', '2']]), 'mode')
|
||||
.appendField(Blockly.Msg.MIXLY_ESP32_READ + Blockly.Msg.MIXLY_OTHER + 'MP' + Blockly.Msg.MIXLY_DEVICE + Blockly.Msg.MIXLY_SD_DATA);
|
||||
this.setOutput(true, Boolean);
|
||||
}
|
||||
};
|
||||
242
boards/default_src/micropython/blocks/system.js
Normal file
242
boards/default_src/micropython/blocks/system.js
Normal file
@@ -0,0 +1,242 @@
|
||||
import * as Blockly from 'blockly/core';
|
||||
|
||||
|
||||
const SYSTEM_HUE = 120; //'#EB8045';
|
||||
|
||||
export const controls_delay_new = {
|
||||
init: function () {
|
||||
this.setColour(SYSTEM_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_DELAY)
|
||||
this.appendValueInput("DELAY_TIME", Number)
|
||||
.setCheck(Number);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_SECOND, "s"], [Blockly.Msg.MIXLY_mSecond, "ms"], [Blockly.Msg.MIXLY_uSecond, "us"]]), 'Time');
|
||||
this.setFieldValue('s', 'Time')
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_CONTROL_DELAY);
|
||||
}
|
||||
};
|
||||
|
||||
export const controls_delay = {
|
||||
init: function () {
|
||||
this.setColour(SYSTEM_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_DELAY)
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_SECOND, "s"], [Blockly.Msg.MIXLY_mSecond, "ms"], [Blockly.Msg.MIXLY_uSecond, "us"]]), 'Time');
|
||||
this.appendValueInput("DELAY_TIME", Number)
|
||||
.setCheck(Number);
|
||||
this.setFieldValue('ms', 'Time')
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_CONTROL_DELAY);
|
||||
}
|
||||
};
|
||||
|
||||
export const Panic_with_status_code = {
|
||||
init: function () {
|
||||
this.setColour(SYSTEM_HUE);
|
||||
this.appendValueInput("STATUS_CODE", Number)
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_Panic_with_status_code)
|
||||
.setCheck(Number);
|
||||
this.setPreviousStatement(true, null);
|
||||
// this.setNextStatement(true, null);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_Panic_with_status_code);
|
||||
}
|
||||
};
|
||||
|
||||
export const reset = {
|
||||
init: function () {
|
||||
this.setColour(SYSTEM_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_Reset_micro);
|
||||
this.setPreviousStatement(true);
|
||||
// this.setNextStatement(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_Reset_micro);
|
||||
}
|
||||
};
|
||||
|
||||
export const controls_millis = {
|
||||
init: function () {
|
||||
this.setColour(SYSTEM_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_RUNTIME);
|
||||
this.appendDummyInput("")
|
||||
.appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_mSecond, "ms"], [Blockly.Msg.MIXLY_uSecond, "us"]]), 'Time');
|
||||
this.setOutput(true, Number);
|
||||
this.setInputsInline(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_CONTROLS_MILLIS_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const raw_block = {
|
||||
// Container.
|
||||
init: function () {
|
||||
this.setColour(SYSTEM_HUE);
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.appendDummyInput()
|
||||
.appendField('Code Block:');
|
||||
this.appendDummyInput()
|
||||
.appendField(new Blockly.FieldMultilineInput('12345'), 'TEXT');
|
||||
}
|
||||
};
|
||||
|
||||
export const controls_uname = {
|
||||
init: function () {
|
||||
this.setColour(SYSTEM_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_PY_CONTORL_UNAME);
|
||||
|
||||
this.setInputsInline(true);
|
||||
this.setOutput(true);
|
||||
this.setTooltip(Blockly.Msg.PROCEDURES_DEFRETURN_RETURN + Blockly.Msg.MIXLY_MICROBIT_PY_CONTORL_UNAME);
|
||||
}
|
||||
};
|
||||
|
||||
export const timer = {
|
||||
init: function () {
|
||||
this.setColour(SYSTEM_HUE);
|
||||
this.appendValueInput('VAR')
|
||||
.appendField("Timer")
|
||||
.setCheck("var");
|
||||
this.appendValueInput('period')
|
||||
.setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
// .appendField("Timer")
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_JS_PERIOD_MIL);
|
||||
this.appendValueInput('mode')
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_MODE);
|
||||
this.appendValueInput('callback')
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.CONTROLS_REPEAT_INPUT_DO);
|
||||
// this.setInputsInline(true);
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_TIMER_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const system_timer = {
|
||||
init: function () {
|
||||
this.setColour(SYSTEM_HUE);
|
||||
this.appendValueInput('VAR')
|
||||
.appendField("Timer")
|
||||
.setCheck("var");
|
||||
// .appendField("I2C " + Blockly.Msg.MIXLY_SETUP)
|
||||
this.appendValueInput("period")
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.MIXLY_MICROBIT_JS_PERIOD_MIL)
|
||||
.setCheck(Number);
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_mSecond)
|
||||
.appendField(Blockly.Msg.MIXLY_MODE)
|
||||
.appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_PYTHON_ONE_SHOT, "ONE_SHOT"], [Blockly.Msg.MIXLY_PYTHON_PERIODIC, "PERIODIC"]]), "mode");
|
||||
this.appendValueInput('callback')
|
||||
.appendField(Blockly.Msg.MIXLY_DO)
|
||||
this.setPreviousStatement(true);
|
||||
this.setNextStatement(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_SYSTEM_TIMER_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const system_ticks_diff = {
|
||||
init: function () {
|
||||
this.setColour(SYSTEM_HUE);
|
||||
this.appendValueInput('END')
|
||||
// .setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.MIXLY_ESP32_TIME_TICKS_DIFF);
|
||||
this.appendValueInput('START')
|
||||
// .setCheck(Number)
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.MIXLY_ESP32_TIME_MINUS);
|
||||
this.setInputsInline(true);
|
||||
this.setOutput(true);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_SYSTEM_TICKS_DIFF_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const system_timer_init = {
|
||||
init: function () {
|
||||
this.setColour(SYSTEM_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField("Timer")
|
||||
this.appendValueInput('SUB')
|
||||
.appendField(Blockly.Msg.MIXLY_SETUP)
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_ESP32_SYSTEM_TIMER_INIT_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const system_wdt_init = {
|
||||
init: function () {
|
||||
this.setColour(SYSTEM_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_MACHINE_WDT)
|
||||
.appendField(Blockly.Msg.MIXLY_SETUP)
|
||||
this.appendValueInput('period')
|
||||
.setAlign(Blockly.inputs.Align.RIGHT)
|
||||
.appendField(Blockly.Msg.MIXLY_MACHINE_WDT_TIMEOUT)
|
||||
.setCheck(Number);
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_mSecond)
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_MACHINE_WDT_INIT_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const system_wdt_feed = {
|
||||
init: function () {
|
||||
this.setColour(SYSTEM_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_MACHINE_WDT)
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_MACHINE_FEED)
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_MACHINE_WDT_FEED_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const system_machine_reset = {
|
||||
init: function () {
|
||||
this.setColour(SYSTEM_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.MIXLY_MACHINE_RESET)
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setTooltip(Blockly.Msg.MIXLY_MACHINE_RESET_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const system_bitbot_shutdown = {
|
||||
init: function () {
|
||||
this.setColour(SYSTEM_HUE);
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.BITBOT)
|
||||
this.appendDummyInput("")
|
||||
.appendField(Blockly.Msg.SHUTDOWN)
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true, null);
|
||||
this.setNextStatement(true, null);
|
||||
this.setTooltip(Blockly.Msg.MICROPYTHON_BITBOT_SHUTDOWN_TOOLTIP);
|
||||
}
|
||||
};
|
||||
|
||||
export const Timer_init = system_timer_init;
|
||||
export const timer2 = system_timer;
|
||||
export const time_ticks_diff = system_ticks_diff;
|
||||
export const base_delay = controls_delay;
|
||||
64
boards/default_src/micropython/blocks/weather.js
Normal file
64
boards/default_src/micropython/blocks/weather.js
Normal file
@@ -0,0 +1,64 @@
|
||||
import * as Blockly from 'blockly/core';
|
||||
|
||||
const WEATHER_HUE = '#27b6ac';
|
||||
|
||||
export const WEATHER_NOW = {
|
||||
init: function () {
|
||||
this.setColour(WEATHER_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MSG.catweather)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_WEATHER_NOW, "weather_now"],
|
||||
[Blockly.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_WEATHER_ALARM, "weather_alarm"],
|
||||
[Blockly.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_AIR_NOW, "air_now"],
|
||||
[Blockly.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_TIDE_DAILY, "tide_daily"],
|
||||
[Blockly.Msg.MIXLY_WEB_PLACE + Blockly.Msg.HTML_SEARCH, "location_search"]
|
||||
]), "mode");
|
||||
this.appendValueInput('key')
|
||||
.appendField(Blockly.Msg.MIXLY_API_PRIVATE_KEY);
|
||||
this.appendValueInput('addr')
|
||||
.appendField(Blockly.Msg.MIXLY_GEOGRAPHIC_LOCATION);
|
||||
this.setInputsInline(true);
|
||||
this.setOutput(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const WEATHER_DAILY = {
|
||||
init: function () {
|
||||
this.setColour(WEATHER_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MSG.catweather)
|
||||
.appendField(new Blockly.FieldDropdown([
|
||||
[Blockly.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_WEATHER_DAILY, "weather_daily"],
|
||||
[Blockly.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_LIFE_SUGGESTION, "life_suggestion"],
|
||||
[Blockly.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_AIR_DAILY, "air_daily"],
|
||||
[Blockly.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_GEO_SUN, "geo_sun"],
|
||||
[Blockly.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_GEO_MOON, "geo_moon"]
|
||||
]), "mode");
|
||||
this.appendValueInput('key')
|
||||
.appendField(Blockly.Msg.MIXLY_API_PRIVATE_KEY);
|
||||
this.appendValueInput('addr')
|
||||
.appendField(Blockly.Msg.MIXLY_GEOGRAPHIC_LOCATION);
|
||||
this.appendValueInput('day')
|
||||
.appendField(Blockly.Msg.MIXLY_WEB_DAILY);
|
||||
this.setInputsInline(true);
|
||||
this.setOutput(true);
|
||||
}
|
||||
};
|
||||
|
||||
export const WEATHER_HOUR = {
|
||||
init: function () {
|
||||
this.setColour(WEATHER_HUE);
|
||||
this.appendDummyInput()
|
||||
.appendField(Blockly.Msg.MSG.catweather)
|
||||
.appendField(Blockly.Msg.MIXLY_WEB_DATA_SENIVERSE_GET_WEATHER_HOURS);
|
||||
this.appendValueInput('key')
|
||||
.appendField(Blockly.Msg.MIXLY_API_PRIVATE_KEY);
|
||||
this.appendValueInput('addr')
|
||||
.appendField(Blockly.Msg.MIXLY_GEOGRAPHIC_LOCATION);
|
||||
this.appendValueInput('hour')
|
||||
.appendField(Blockly.Msg.MIXLY_WEB_HOURS);
|
||||
this.setInputsInline(true);
|
||||
this.setOutput(true);
|
||||
}
|
||||
};
|
||||
478
boards/default_src/micropython/converters/actuator.js
Normal file
478
boards/default_src/micropython/converters/actuator.js
Normal file
@@ -0,0 +1,478 @@
|
||||
|
||||
'use strict';
|
||||
|
||||
pbc.moduleFunctionD.get('servo')['servo_write_angle'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 2) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var pwmAstName = args[0]._astname;
|
||||
pbc.pinType="pins_pwm_pin";
|
||||
var pinblock;
|
||||
|
||||
if (pwmAstName === "Num") {
|
||||
pinblock=py2block.convert(args[0])
|
||||
}
|
||||
pbc.pinType=null;
|
||||
var angleblock=py2block.convert(args[1]);
|
||||
|
||||
return [block("servo_move", func.lineno, {}, {
|
||||
"PIN":pinblock,
|
||||
"DEGREE": angleblock,
|
||||
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
|
||||
pbc.moduleFunctionD.get('mixgo.led1')['setonoff'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 1) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
pbc.pinType="number";
|
||||
var ledblock = {
|
||||
_astname: "Num",
|
||||
n: {
|
||||
'v': "1"
|
||||
}
|
||||
}
|
||||
var mode = py2block.convert(ledblock);
|
||||
pbc.pinType=null;
|
||||
pbc.inScope="ledswitch";
|
||||
var argblock = py2block.convert(args[0]);
|
||||
|
||||
pbc.inScope=null;
|
||||
return [block("actuator_led_bright", func.lineno, {
|
||||
|
||||
}, {
|
||||
'led': mode,
|
||||
'bright':argblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
}),
|
||||
];
|
||||
}
|
||||
|
||||
pbc.moduleFunctionD.get('mixgo.led2')['setonoff'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 1) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
pbc.pinType="number";
|
||||
var ledblock = {
|
||||
_astname: "Num",
|
||||
n: {
|
||||
'v': "2"
|
||||
}
|
||||
}
|
||||
var mode = py2block.convert(ledblock);
|
||||
pbc.pinType=null;
|
||||
pbc.inScope="ledswitch";
|
||||
var argblock = py2block.convert(args[0]);
|
||||
|
||||
pbc.inScope=null;
|
||||
return [block("actuator_led_bright", func.lineno, {
|
||||
|
||||
}, {
|
||||
'led': mode,
|
||||
'bright':argblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
}),
|
||||
];
|
||||
}
|
||||
|
||||
pbc.moduleFunctionD.get('mixgo.led1')['getonoff'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 0) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
pbc.pinType="number";
|
||||
var ledblock = {
|
||||
_astname: "Num",
|
||||
n: {
|
||||
'v': "1"
|
||||
}
|
||||
}
|
||||
var mode = py2block.convert(ledblock);
|
||||
pbc.pinType=null;
|
||||
return block("actuator_get_led_bright", func.lineno, {
|
||||
}, {
|
||||
'led': mode,
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
|
||||
pbc.moduleFunctionD.get('mixgo.led2')['getonoff'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 0) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
pbc.pinType="number";
|
||||
var ledblock = {
|
||||
_astname: "Num",
|
||||
n: {
|
||||
'v': "2"
|
||||
}
|
||||
}
|
||||
var mode = py2block.convert(ledblock);
|
||||
pbc.pinType=null;
|
||||
return block("actuator_get_led_bright", func.lineno, {
|
||||
}, {
|
||||
'led': mode,
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
|
||||
pbc.moduleFunctionD.get('mixgo.led1')['setbrightness'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 1) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
pbc.pinType="number";
|
||||
var ledblock = {
|
||||
_astname: "Num",
|
||||
n: {
|
||||
'v': "1"
|
||||
}
|
||||
}
|
||||
var mode = py2block.convert(ledblock);
|
||||
pbc.pinType=null;
|
||||
var brightblock = py2block.convert(args[0]);
|
||||
|
||||
return [block("actuator_led_brightness", func.lineno, {}, {
|
||||
'led': mode,
|
||||
'bright':brightblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
}),
|
||||
];
|
||||
}
|
||||
|
||||
pbc.moduleFunctionD.get('mixgo.led2')['setbrightness'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 1) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
pbc.pinType="number";
|
||||
var ledblock = {
|
||||
_astname: "Num",
|
||||
n: {
|
||||
'v': "2"
|
||||
}
|
||||
}
|
||||
var mode = py2block.convert(ledblock);
|
||||
pbc.pinType=null;
|
||||
var brightblock = py2block.convert(args[0]);
|
||||
|
||||
return [block("actuator_led_brightness", func.lineno, {}, {
|
||||
'led': mode,
|
||||
'bright':brightblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
}),
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
pbc.moduleFunctionD.get('music')['pitch'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if(args.length!==1 && args.length!==2){
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
|
||||
if (args.length === 2) {
|
||||
pbc.pinType = "pins_pwm_pin";
|
||||
var pinblock = py2block.convert(args[0]);
|
||||
pbc.pinType=null;
|
||||
pbc.pinType = "pins_tone_notes";
|
||||
var pitchblock = py2block.convert(args[1]);
|
||||
pbc.pinType=null;
|
||||
|
||||
|
||||
return [block("esp32_music_pitch", func.lineno, {}, {
|
||||
'pitch': pitchblock,
|
||||
'PIN': pinblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
else if (args.length=== 1){
|
||||
pbc.pinType = "pins_tone_notes";
|
||||
var pitchblock = py2block.convert(args[0]);
|
||||
pbc.pinType=null;
|
||||
return [block("esp32_onboard_music_pitch", func.lineno, {}, {
|
||||
'pitch': pitchblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
pbc.moduleFunctionD.get('music')['pitch_time'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if(args.length!==2 && args.length!==3){
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
|
||||
if (args.length === 2) {
|
||||
pbc.pinType = "pins_tone_notes";
|
||||
var pitchblock = py2block.convert(args[0]);
|
||||
pbc.pinType=null;
|
||||
var timeblock=py2block.convert(args[1]);
|
||||
return [block("esp32_onboard_music_pitch_with_time", func.lineno, {}, {
|
||||
'pitch': pitchblock,
|
||||
"time":timeblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
else if (args.length=== 3){
|
||||
pbc.pinType = "pins_pwm_pin";
|
||||
var pinblock = py2block.convert(args[0]);
|
||||
pbc.pinType=null;
|
||||
pbc.pinType = "pins_tone_notes";
|
||||
var pitchblock = py2block.convert(args[1]);
|
||||
pbc.pinType=null;
|
||||
var timeblock=py2block.convert(args[2]);
|
||||
return [block("esp32_music_pitch_with_time", func.lineno, {}, {
|
||||
'pitch': pitchblock,
|
||||
'PIN': pinblock,
|
||||
"time":timeblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
pbc.moduleFunctionD.get('music')['stop'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 1 && args.length !== 0) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
if (args.length == 1){
|
||||
pbc.pinType = "pins_pwm_pin";
|
||||
var argblock = py2block.convert(args[0]);
|
||||
pbc.pinType = null;
|
||||
return [block("esp32_music_stop", func.lineno, {}, {
|
||||
'PIN': argblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
if (args.length == 0){
|
||||
return [block("esp32_onboard_music_stop", func.lineno, {}, {}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
pbc.moduleFunctionD.get('music')['play'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 2 && args.length !== 1) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
if(args.length == 2){
|
||||
pbc.pinType = "pins_playlist_pin";
|
||||
var nameblock= py2block.convert(args[0]);
|
||||
pbc.pinType = "pins_pwm_pin";
|
||||
var argblock = py2block.convert(args[1]);
|
||||
pbc.pinType = null;
|
||||
return [block("esp32_music_play_list", func.lineno, {}, {
|
||||
"LIST":nameblock,
|
||||
'PIN': argblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
if(args.length == 1){
|
||||
pbc.pinType = "pins_playlist_pin";
|
||||
var nameblock= py2block.convert(args[0]);
|
||||
pbc.pinType = null;
|
||||
return [block("esp32_onboard_music_play_list", func.lineno, {}, {
|
||||
"LIST":nameblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
}
|
||||
|
||||
pbc.moduleFunctionD.get('music')['play_show'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 2) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
pbc.pinType = "pins_playlist_pin";
|
||||
var nameblock= py2block.convert(args[0]);
|
||||
pbc.pinType = "pins_pwm_pin";
|
||||
var argblock = py2block.convert(args[1]);
|
||||
pbc.pinType = null;
|
||||
return [block("esp32_mixgo_music_play_list_show", func.lineno, {}, {
|
||||
"LIST":nameblock,
|
||||
'PIN': argblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
pbc.assignD.get('Rgb')['check_assign'] = function(py2block, node, targets, value) {
|
||||
var funcName = py2block.identifier(value.func.attr);
|
||||
var moduleName=py2block.identifier(value.func.value.id);
|
||||
if(value._astname === "Call" && moduleName === "neopixel"
|
||||
&& funcName === "NeoPixel" && value.args.length === 2&&value.keywords.length===1)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
pbc.assignD.get('Rgb')['create_block'] = function(py2block, node, targets, value){
|
||||
|
||||
var rgbblock=py2block.convert(targets[0]);
|
||||
pbc.inScope = "rgb_create_block";
|
||||
pbc.pinType = "pins_digital_pin";
|
||||
// value.args[0].args[0].n.v='pin'+value.args[0].args[0].n.v
|
||||
var pinblock = py2block.convert(value.args[0].args[0]);
|
||||
pbc.inScope = null;
|
||||
pbc.pinType = null;
|
||||
var countblock = py2block.convert(value.args[1]);
|
||||
|
||||
return block("actuator_neopixel_init", node.lineno, {}, {
|
||||
"SUB":rgbblock,
|
||||
"PIN":pinblock,
|
||||
"LEDCOUNT":countblock
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
pbc.moduleFunctionD.get('rgb')['write'] = function(py2block, func, args, keywords, starargs, kwargs, node){
|
||||
if(args.length!=0){
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
|
||||
var rgbblock=py2block.convert(func.value);
|
||||
|
||||
return [block("actuator_neopixel_write", func.lineno, {}, { 'SUB':rgbblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
|
||||
|
||||
|
||||
pbc.moduleFunctionD.get('music')['get_tempo'] = function(py2block, func, args, keywords, starargs, kwargs, node){
|
||||
if(args.length!=0){
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
|
||||
return block("esp32_music_get_tempo", func.lineno, {}, {
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
|
||||
pbc.moduleFunctionD.get('music')['set_tempo'] = function(py2block, func, args, keywords, starargs, kwargs, node){
|
||||
if(args.length!=2){
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var resoblock=py2block.convert(args[0]);
|
||||
var speedblock=py2block.convert(args[1]);
|
||||
|
||||
return [block("esp32_music_set_tempo", func.lineno, {}, {
|
||||
'TICKS':resoblock,
|
||||
"BPM":speedblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
pbc.moduleFunctionD.get('music')['reset'] = function(py2block, func, args, keywords, starargs, kwargs, node){
|
||||
if(args.length!=0){
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
|
||||
return [block("esp32_music_reset", func.lineno, {}, {
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('setonoff')['led'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 1) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var pin=py2block.identifier(func.value.func.attr);
|
||||
var mac=py2block.identifier(func.value.func.value.id);
|
||||
if(pin==="led" && mac==="mixgo"){
|
||||
|
||||
pbc.pinType = "pins_pwm_pin";
|
||||
var pinblock = py2block.convert(func.value.args[0]);
|
||||
pbc.pinType = null;
|
||||
pbc.inScope="ledswitch";
|
||||
var mode = py2block.convert(args[0]);
|
||||
pbc.inScope=null;
|
||||
|
||||
return [block("actuator_extern_led_bright", func.lineno, {}, {
|
||||
"PIN": pinblock,
|
||||
'bright':mode
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('getonoff')['led'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 0) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var pin=py2block.identifier(func.value.func.attr);
|
||||
var mac=py2block.identifier(func.value.func.value.id);
|
||||
if(pin==="led" && mac==="mixgo"){
|
||||
|
||||
pbc.pinType = "pins_pwm_pin";
|
||||
var pinblock = py2block.convert(func.value.args[0]);
|
||||
pbc.pinType = null;
|
||||
|
||||
return block("actuator_extern_get_led_bright", func.lineno, {}, {
|
||||
"PIN": pinblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('setbrightness')['led'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 1) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var pin=py2block.identifier(func.value.func.attr);
|
||||
var mac=py2block.identifier(func.value.func.value.id);
|
||||
if(pin==="led" && mac==="mixgo"){
|
||||
|
||||
pbc.pinType = "pins_pwm_pin";
|
||||
var pinblock = py2block.convert(func.value.args[0]);
|
||||
pbc.pinType = null;
|
||||
var mode = py2block.convert(args[0]);
|
||||
|
||||
return [block("actuator_extern_led_brightness", func.lineno, {}, {
|
||||
"PIN": pinblock,
|
||||
'bright':mode
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
pbc.moduleFunctionD.get('mixgo.rgb')['write'] = function(py2block, func, args, keywords, starargs, kwargs, node){
|
||||
if(args.length!=0){
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
|
||||
return [block("actuator_onboard_neopixel_write", func.lineno, {}, {
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
441
boards/default_src/micropython/converters/communicate.js
Normal file
441
boards/default_src/micropython/converters/communicate.js
Normal file
@@ -0,0 +1,441 @@
|
||||
var spiClass = 'machine.SPI';
|
||||
var i2cClass = 'machine.I2C';
|
||||
var owClass = 'onewire.OneWire';
|
||||
pbc.assignD.get('I2C')['check_assign'] = function(py2block, node, targets, value) {
|
||||
var funcName = py2block.identifier(value.func.attr);
|
||||
var moduleName = py2block.Name_str(value.func.value);
|
||||
if(value._astname === "Call" && moduleName === "machine"
|
||||
&& funcName === "I2C" && value.keywords.length === 3)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
pbc.assignD.get('I2C')['create_block'] = function(py2block, node, targets, value){
|
||||
|
||||
var astname = value.keywords[0]._astname;
|
||||
if(astname === "keyword" && value.keywords[0].arg.v == "scl"
|
||||
&& value.keywords[0].value.func.attr.v === "Pin"){
|
||||
var sdablock = null;
|
||||
var sclblock = null;
|
||||
var freqblock = null;
|
||||
var param = value.keywords[0];
|
||||
var key = py2block.identifier(param.arg);
|
||||
var i2cblock=py2block.convert(targets[0])
|
||||
for (var i = 0; i < value.keywords.length; i++) {
|
||||
var param = value.keywords[i];
|
||||
var key = py2block.identifier(param.arg);
|
||||
if (key === "sda") {
|
||||
pbc.inScope = "communicate_i2c_init";
|
||||
pbc.pinType = "pins_digital_pin";
|
||||
sdablock = py2block.convert(param.value.args[0]);
|
||||
pbc.pinType = null;
|
||||
pbc.inScope = null;
|
||||
} else if (key === "scl") {
|
||||
pbc.inScope = "communicate_i2c_init";
|
||||
pbc.pinType = "pins_digital_pin";
|
||||
sclblock = py2block.convert(param.value.args[0]);
|
||||
pbc.pinType = null;
|
||||
pbc.inScope = null;
|
||||
} else if (key === "freq") {
|
||||
freqblock = py2block.convert(param.value);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (sdablock != null && sclblock != null && freqblock != null) {
|
||||
return block("communicate_i2c_init", node.lineno, {}, {
|
||||
"SUB":i2cblock,
|
||||
'RX': sdablock,
|
||||
'TX': sclblock,
|
||||
"freq": freqblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('readfrom')['I2C'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 2) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var objblock = py2block.convert(func.value);
|
||||
var adblock = py2block.convert(args[0]);
|
||||
var datablock = py2block.convert(args[1]);
|
||||
return block("communicate_i2c_read", func.lineno, {}, {
|
||||
"address": adblock,
|
||||
"data": datablock,
|
||||
"VAR": objblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('writeto')['I2C'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 2) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var objblock = py2block.convert(func.value);
|
||||
var adblock = py2block.convert(args[0]);
|
||||
var datablock = py2block.convert(args[1]);
|
||||
return [block("communicate_i2c_write", func.lineno, {}, {
|
||||
"address": adblock,
|
||||
"data": datablock,
|
||||
"VAR": objblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('scan')['I2C'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 0) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var objblock = py2block.convert(func.value);
|
||||
return block("communicate_i2c_scan", func.lineno, {}, {
|
||||
"VAR": objblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('read')[i2cClass] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 0) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var objblock = py2block.convert(func.value);
|
||||
return block("communicate_i2c_master_read", func.lineno, {}, {
|
||||
"VAR": objblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('available')['I2C'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 0) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var objblock = py2block.convert(func.value);
|
||||
return block("communicate_i2c_available", func.lineno, {}, {
|
||||
"VAR": objblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
|
||||
pbc.assignD.get('SPI')['check_assign'] = function(py2block, node, targets, value) {
|
||||
var funcName = py2block.identifier(value.func.attr);
|
||||
var moduleName = py2block.Name_str(value.func.value);
|
||||
if(value._astname === "Call" && moduleName === "machine"
|
||||
&& funcName === "SPI" && value.keywords.length === 6)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
pbc.assignD.get('SPI')['create_block'] = function(py2block, node, targets, value){
|
||||
|
||||
var astname = value.keywords[0]._astname;
|
||||
if(value.keywords[0].arg.v == "baudrate" && value.keywords[3].arg.v == "sck" && value.keywords[3].value.func.attr.v == "Pin"){
|
||||
var polarityblock = null;
|
||||
var phaseblock = null;
|
||||
var sckblock = null;
|
||||
var mosiblock = null;
|
||||
var misoblock = null;
|
||||
var freqblock = null;
|
||||
var param = value.keywords[0];
|
||||
var key = py2block.identifier(param.arg);
|
||||
var spiblock=py2block.convert(targets[0]);
|
||||
for (var i = 0; i < value.keywords.length; i++) {
|
||||
var param = value.keywords[i];
|
||||
var key = py2block.identifier(param.arg);
|
||||
if (key === "baudrate") {
|
||||
freqblock = py2block.convert(param.value);
|
||||
} else if (key === "polarity") {
|
||||
polarityblock = py2block.convert(param.value);
|
||||
} else if (key === "phase") {
|
||||
phaseblock = py2block.convert(param.value);
|
||||
} else if (key === "sck") {
|
||||
pbc.inScope = "communicate_spi_init";
|
||||
pbc.pinType = "pins_digital_pin";
|
||||
sckblock = py2block.convert(param.value.args[0]);
|
||||
pbc.pinType = null;
|
||||
pbc.inScope = null;
|
||||
} else if (key === "mosi") {
|
||||
pbc.inScope = "communicate_spi_init";
|
||||
pbc.pinType = "pins_digital_pin";
|
||||
mosiblock = py2block.convert(param.value.args[0]);
|
||||
pbc.pinType = null;
|
||||
pbc.inScope = null;
|
||||
} else if (key === "miso") {
|
||||
pbc.inScope = "communicate_spi_init";
|
||||
pbc.pinType = "pins_digital_pin";
|
||||
misoblock = py2block.convert(param.value.args[0]);
|
||||
pbc.pinType = null;
|
||||
pbc.inScope = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (polarityblock != null && phaseblock != null && freqblock != null && sckblock != null && mosiblock != null && misoblock != null) {
|
||||
return block("communicate_spi_init", node.lineno, {}, {
|
||||
"VAR":spiblock,
|
||||
"freq": freqblock,
|
||||
"polarity": polarityblock,
|
||||
"phase": phaseblock,
|
||||
"sck": sckblock,
|
||||
"mosi": mosiblock,
|
||||
"miso": misoblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// 跟control的system_timer重了
|
||||
// pbc.objectFunctionD.get('init')['SPI'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
// if (args.length == 0 & keywords.length == 1){
|
||||
// var objblock = py2block.convert(func.value);
|
||||
// var btlblock = null;
|
||||
// var param = keywords[0];
|
||||
// var key = py2block.identifier(param.arg);
|
||||
// if (key === "baudrate") {
|
||||
// bltblock = py2block.convert(param.value);
|
||||
// }
|
||||
// if (bltblock != null ) {
|
||||
// return [block("communicate_spi_set", func.lineno, {}, {
|
||||
// "VAR":objblock,
|
||||
// "data": bltblock,
|
||||
// }, {
|
||||
// "inline": "true"
|
||||
// })];
|
||||
// }
|
||||
// }else{
|
||||
// throw new Error("Incorrect number of arguments");
|
||||
// }
|
||||
// }
|
||||
|
||||
pbc.assignD.get('spi')['check_assign'] = function(py2block, node, targets, value) {
|
||||
if(value._astname != "Call" || value.func._astname != "Name"){
|
||||
return false;
|
||||
}
|
||||
var funcName = py2block.Name_str(value.func);
|
||||
if(funcName === "bytearray" && value.args.length === 1)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
pbc.assignD.get('spi')['create_block'] = function(py2block, node, targets, value){
|
||||
return block("communicate_spi_buffer", node.lineno, {
|
||||
}, {
|
||||
"data":py2block.convert(value.args[0]),
|
||||
"VAR":py2block.convert(targets[0])
|
||||
});
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('read')[spiClass] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 1 & args.length !== 2) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var objblock = py2block.convert(func.value);
|
||||
var byteblock = py2block.convert(args[0]);
|
||||
if (args.length == 1){
|
||||
return block("communicate_spi_read", func.lineno, {}, {
|
||||
"data": byteblock,
|
||||
"VAR": objblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
if (args.length == 2){
|
||||
var outputblock = py2block.convert(args[1]);
|
||||
return block("communicate_spi_read_output", func.lineno, {}, {
|
||||
"data": byteblock,
|
||||
"val": outputblock,
|
||||
"VAR": objblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('readinto')['SPI'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 1 & args.length !== 2) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var objblock = py2block.convert(func.value);
|
||||
var byteblock = py2block.convert(args[0]);
|
||||
if (args.length == 1){
|
||||
return block("communicate_spi_readinto", func.lineno, {}, {
|
||||
"data": byteblock,
|
||||
"VAR": objblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
if (args.length == 2){
|
||||
var outputblock = py2block.convert(args[1]);
|
||||
return block("communicate_spi_readinto_output", func.lineno, {}, {
|
||||
"data": byteblock,
|
||||
"val": outputblock,
|
||||
"VAR": objblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('write')[spiClass] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 1) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var objblock = py2block.convert(func.value);
|
||||
var byteblock = py2block.convert(args[0].func.value);
|
||||
return block("communicate_spi_write", func.lineno, {}, {
|
||||
"VAR": objblock,
|
||||
"data": byteblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('write_readinto')['SPI'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 2) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var objblock = py2block.convert(func.value);
|
||||
var byteblock = py2block.convert(args[0].func.value);
|
||||
var bufblock = py2block.convert(args[1]);
|
||||
return block("communicate_spi_write_readinto", func.lineno, {}, {
|
||||
"VAR": objblock,
|
||||
"data": byteblock,
|
||||
"val": bufblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
|
||||
pbc.assignD.get('OW')['check_assign'] = function(py2block, node, targets, value) {
|
||||
if(value._astname != "Call" || value.func._astname != "Attribute" || value.func.value._astname != "Name"){
|
||||
return false;
|
||||
}
|
||||
var moduleName = py2block.Name_str(value.func.value);
|
||||
var funcName = py2block.identifier(value.func.attr);
|
||||
if(value._astname === "Call" && moduleName === "onewire"
|
||||
&& funcName === "OneWire" && value.args.length === 1)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
pbc.assignD.get('OW')['create_block'] = function(py2block, node, targets, value){
|
||||
var pwmAstName = value.args[0]._astname;
|
||||
pbc.pinType="pins_digital_pin";
|
||||
var pinblock;
|
||||
|
||||
if (pwmAstName === "Call"&& value.args[0].func._astname == "Attribute" && value.args[0].func.attr.v==="Pin") {
|
||||
pinblock=py2block.convert(value.args[0].args[0])
|
||||
}
|
||||
pbc.pinType=null;
|
||||
return block("communicate_ow_init", node.lineno, {
|
||||
}, {
|
||||
"BUS":pinblock,
|
||||
"VAR":py2block.convert(targets[0]),
|
||||
});
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('scan')[owClass] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 0) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var objblock = py2block.convert(func.value);
|
||||
return block("communicate_ow_scan", func.lineno, {}, {
|
||||
"VAR": objblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('readbyte')['OW'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 0) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var objblock = py2block.convert(func.value);
|
||||
return block("communicate_ow_read", func.lineno, {}, {
|
||||
"VAR": objblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('reset')['OW'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 0) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var objblock = py2block.convert(func.value);
|
||||
return [block("communicate_ow_reset", func.lineno, {}, {
|
||||
"VAR": objblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('select_rom')['OW'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 1) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var objblock = py2block.convert(func.value);
|
||||
var byteblock = py2block.convert(args[0].func.value);
|
||||
return [block("communicate_ow_select", func.lineno, {}, {
|
||||
"VAR": objblock,
|
||||
"byte": byteblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('write')[owClass] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 1) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var objblock = py2block.convert(func.value);
|
||||
var byteblock = py2block.convert(args[0]);
|
||||
return [block("communicate_ow_write", func.lineno, {
|
||||
'op':'write'
|
||||
}, {
|
||||
"VAR": objblock,
|
||||
"byte": byteblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('writebyte')[owClass] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 1) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var objblock = py2block.convert(func.value);
|
||||
var byteblock = py2block.convert(args[0]);
|
||||
return [block("communicate_ow_write", func.lineno, {
|
||||
'op':'writebyte'
|
||||
}, {
|
||||
"VAR": objblock,
|
||||
"byte": byteblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('resume')['irremote'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 2) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
//var objblock = py2block.convert(func.value);
|
||||
pbc.pinType = "pins_pwm_pin";
|
||||
var adblock = py2block.convert(args[0]);
|
||||
pbc.pinType = "pins_callback";
|
||||
var datablock = py2block.convert(args[1]);
|
||||
pbc.pinType=null;
|
||||
return [block("communicate_ir_recv", func.lineno, {}, {
|
||||
"PIN": adblock,
|
||||
"SUB": datablock,
|
||||
//"VAR": objblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
139
boards/default_src/micropython/converters/control.js
Normal file
139
boards/default_src/micropython/converters/control.js
Normal file
@@ -0,0 +1,139 @@
|
||||
'use strict';
|
||||
|
||||
pbc.moduleFunctionD.get('time')['sleep_ms'] = function(py2block, func, args, keywords, starargs, kwargs, node){
|
||||
if (args.length !== 1) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
|
||||
var time=py2block.convert(args[0]);
|
||||
return [block("controls_delay", func.lineno, {'Time':'ms'}, {
|
||||
"DELAY_TIME":time
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
|
||||
pbc.moduleFunctionD.get('time')['sleep'] = function(py2block, func, args, keywords, starargs, kwargs, node){
|
||||
if (args.length !== 1) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
|
||||
var time=py2block.convert(args[0]);
|
||||
return [block("controls_delay", func.lineno, {'Time':'s'}, {
|
||||
"DELAY_TIME":time
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
|
||||
pbc.moduleFunctionD.get('time')['sleep_us'] = function(py2block, func, args, keywords, starargs, kwargs, node){
|
||||
if (args.length !== 1) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
|
||||
var time=py2block.convert(args[0]);
|
||||
return [block("controls_delay", func.lineno, {'Time':'us'}, {
|
||||
"DELAY_TIME":time
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
|
||||
pbc.moduleFunctionD.get('time')['ticks_ms'] = function(py2block, func, args, keywords, starargs, kwargs, node){
|
||||
if (args.length !== 0) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
return block("controls_millis", func.lineno, {"Time":"ms"}, {}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
pbc.moduleFunctionD.get('time')['ticks_us'] = function(py2block, func, args, keywords, starargs, kwargs, node){
|
||||
if (args.length !== 0) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
return block("controls_millis", func.lineno, {"Time":"us"}, {}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
|
||||
pbc.moduleFunctionD.get('time')['ticks_diff'] = function(py2block, func, args, keywords, starargs, kwargs, node){
|
||||
if (args.length !== 2) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var endblock=py2block.convert(args[0]);
|
||||
var startblock=py2block.convert(args[1]);
|
||||
return block("system_ticks_diff", func.lineno, {}, {
|
||||
"END":endblock,
|
||||
"START":startblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
|
||||
pbc.assignD.get('Timer')['check_assign'] = function(py2block, node, targets, value) {
|
||||
var moduleName = py2block.Name_str(value.func.value);
|
||||
var funcName = py2block.identifier(value.func.attr);
|
||||
if(value._astname === "Call"
|
||||
&& funcName === "Timer" && moduleName === "machine" && value.args.length === 1)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
pbc.assignD.get('Timer')['create_block'] = function(py2block, node, targets, value){
|
||||
|
||||
pbc.pinType = "variables_get";
|
||||
var timblock = py2block.convert(targets[0]);
|
||||
pbc.pinType = null;
|
||||
|
||||
|
||||
return block("system_timer_init", node.lineno, {}, {
|
||||
"SUB":timblock,
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
//跟通信的SPT init重了
|
||||
pbc.objectFunctionD.get('init')['control'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
|
||||
if(args.length === 0 && keywords.length ===3){
|
||||
pbc.pinType = "variables_get";
|
||||
var tim = py2block.convert(func.value);
|
||||
pbc.pinType = null;
|
||||
pbc.pinType = "math_number";
|
||||
var numblock = py2block.convert(keywords[0].value);
|
||||
pbc.pinType = null;
|
||||
var mode = py2block.identifier(keywords[1].value.attr);
|
||||
pbc.pinType = "pins_callback";
|
||||
var callback = py2block.convert(keywords[2].value);
|
||||
pbc.pinType = null;
|
||||
|
||||
return [block("system_timer", func.lineno, {"mode":mode}, {
|
||||
"VAR": tim,
|
||||
"period":numblock,
|
||||
"callback": callback
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
else if (args.length == 0 && keywords.length == 1){
|
||||
var objblock = py2block.convert(func.value);
|
||||
var bltblock = null;
|
||||
var param = keywords[0];
|
||||
var key = py2block.identifier(param.arg);
|
||||
if (key === "baudrate") {
|
||||
bltblock = py2block.convert(param.value);
|
||||
}
|
||||
if (bltblock != null ) {
|
||||
return [block("communicate_spi_set", func.lineno, {}, {
|
||||
"VAR":objblock,
|
||||
"data": bltblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
}
|
||||
else{
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
|
||||
}
|
||||
746
boards/default_src/micropython/converters/display.js
Normal file
746
boards/default_src/micropython/converters/display.js
Normal file
@@ -0,0 +1,746 @@
|
||||
'use strict';
|
||||
|
||||
pbc.moduleFunctionD.get('matrix.display')['show'] = function(py2block, func, args, keywords, starargs, kwargs, node){
|
||||
if (args.length !== 1 && args.length !== 2 ){
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
if (args.length == 1 ){
|
||||
|
||||
var strblock=py2block.convert(args[0]);
|
||||
|
||||
return [block("display_show_image_or_string", func.lineno, {}, {
|
||||
'data':strblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
if (args.length == 2 ){
|
||||
var strblock=py2block.convert(args[0]);
|
||||
var numblock=py2block.convert(args[1]);
|
||||
return [block("display_show_image_or_string_delay", func.lineno, {}, {
|
||||
'data':strblock,
|
||||
'time':numblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
}
|
||||
|
||||
pbc.moduleFunctionD.get('matrix.display')['scroll'] = function(py2block, func, args, keywords, starargs, kwargs, node){
|
||||
if (args.length !== 1 && args.length !== 2 ){
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
|
||||
if (args.length == 1 ){
|
||||
var strblock=py2block.convert(args[0]);
|
||||
return [block("display_scroll_string", func.lineno, {}, {
|
||||
'data':strblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
if (args.length == 2 ){
|
||||
var strblock=py2block.convert(args[0]);
|
||||
var numblock=py2block.convert(args[1]);
|
||||
return [block("display_scroll_string_delay", func.lineno, {}, {
|
||||
'data':strblock,
|
||||
'time':numblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
}
|
||||
|
||||
pbc.moduleFunctionD.get('matrix.display')['showstatic'] = function(py2block, func, args, keywords, starargs, kwargs, node){
|
||||
if (args.length !== 1 && args.length !== 2 ){
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
|
||||
if (args.length == 1 ){
|
||||
var strblock=py2block.convert(args[0]);
|
||||
return [block("display_show_static", func.lineno, {}, {
|
||||
'data':strblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
}
|
||||
|
||||
pbc.moduleFunctionD.get('matrix.display')['get_screenimage'] = function(py2block, func, args, keywords, starargs, kwargs, node){
|
||||
if (args.length !== 0) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
|
||||
if (args.length == 0 ) {
|
||||
return block("display_get_screen_image", func.lineno, {}, {
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
pbc.moduleFunctionD.get('matrix')['Image'] = function(py2block, func, args, keywords, starargs, kwargs, node){
|
||||
if (args.length !== 1 || args[0]._astname != "Str") {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var colours = [
|
||||
"#000000",
|
||||
"#ff0000",
|
||||
];
|
||||
var flag = 0;
|
||||
var tempblock = py2block.Str_value(args[0]);
|
||||
var temptext = new Array();
|
||||
temptext = tempblock.split(':');
|
||||
|
||||
if (temptext.length == 8) {
|
||||
for (var i = 0; i < 8; i++) {
|
||||
if (temptext[i].length == 16) {
|
||||
flag++;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (flag == 8) {
|
||||
return block('display_image_create', func.lineno, {
|
||||
"00": colours[temptext[0].charAt(0)],
|
||||
"01": colours[temptext[0].charAt(1)],
|
||||
"02": colours[temptext[0].charAt(2)],
|
||||
"03": colours[temptext[0].charAt(3)],
|
||||
"04": colours[temptext[0].charAt(4)],
|
||||
"05": colours[temptext[0].charAt(5)],
|
||||
"06": colours[temptext[0].charAt(6)],
|
||||
"07": colours[temptext[0].charAt(7)],
|
||||
"08": colours[temptext[0].charAt(8)],
|
||||
"09": colours[temptext[0].charAt(9)],
|
||||
"0a": colours[temptext[0].charAt(10)],
|
||||
"0b": colours[temptext[0].charAt(11)],
|
||||
"0c": colours[temptext[0].charAt(12)],
|
||||
"0d": colours[temptext[0].charAt(13)],
|
||||
"0e": colours[temptext[0].charAt(14)],
|
||||
"0f": colours[temptext[0].charAt(15)],
|
||||
|
||||
"10": colours[temptext[1].charAt(0)],
|
||||
"11": colours[temptext[1].charAt(1)],
|
||||
"12": colours[temptext[1].charAt(2)],
|
||||
"13": colours[temptext[1].charAt(3)],
|
||||
"14": colours[temptext[1].charAt(4)],
|
||||
"15": colours[temptext[1].charAt(5)],
|
||||
"16": colours[temptext[1].charAt(6)],
|
||||
"17": colours[temptext[1].charAt(7)],
|
||||
"18": colours[temptext[1].charAt(8)],
|
||||
"19": colours[temptext[1].charAt(9)],
|
||||
"1a": colours[temptext[1].charAt(10)],
|
||||
"1b": colours[temptext[1].charAt(11)],
|
||||
"1c": colours[temptext[1].charAt(12)],
|
||||
"1d": colours[temptext[1].charAt(13)],
|
||||
"1e": colours[temptext[1].charAt(14)],
|
||||
"1f": colours[temptext[1].charAt(15)],
|
||||
|
||||
"20": colours[temptext[2].charAt(0)],
|
||||
"21": colours[temptext[2].charAt(1)],
|
||||
"22": colours[temptext[2].charAt(2)],
|
||||
"23": colours[temptext[2].charAt(3)],
|
||||
"24": colours[temptext[2].charAt(4)],
|
||||
"25": colours[temptext[2].charAt(5)],
|
||||
"26": colours[temptext[2].charAt(6)],
|
||||
"27": colours[temptext[2].charAt(7)],
|
||||
"28": colours[temptext[2].charAt(8)],
|
||||
"29": colours[temptext[2].charAt(9)],
|
||||
"2a": colours[temptext[2].charAt(10)],
|
||||
"2b": colours[temptext[2].charAt(11)],
|
||||
"2c": colours[temptext[2].charAt(12)],
|
||||
"2d": colours[temptext[2].charAt(13)],
|
||||
"2e": colours[temptext[2].charAt(14)],
|
||||
"2f": colours[temptext[2].charAt(15)],
|
||||
|
||||
"30": colours[temptext[3].charAt(0)],
|
||||
"31": colours[temptext[3].charAt(1)],
|
||||
"32": colours[temptext[3].charAt(2)],
|
||||
"33": colours[temptext[3].charAt(3)],
|
||||
"34": colours[temptext[3].charAt(4)],
|
||||
"35": colours[temptext[3].charAt(5)],
|
||||
"36": colours[temptext[3].charAt(6)],
|
||||
"37": colours[temptext[3].charAt(7)],
|
||||
"38": colours[temptext[3].charAt(8)],
|
||||
"39": colours[temptext[3].charAt(9)],
|
||||
"3a": colours[temptext[3].charAt(10)],
|
||||
"3b": colours[temptext[3].charAt(11)],
|
||||
"3c": colours[temptext[3].charAt(12)],
|
||||
"3d": colours[temptext[3].charAt(13)],
|
||||
"3e": colours[temptext[3].charAt(14)],
|
||||
"3f": colours[temptext[3].charAt(15)],
|
||||
|
||||
"40": colours[temptext[4].charAt(0)],
|
||||
"41": colours[temptext[4].charAt(1)],
|
||||
"42": colours[temptext[4].charAt(2)],
|
||||
"43": colours[temptext[4].charAt(3)],
|
||||
"44": colours[temptext[4].charAt(4)],
|
||||
"45": colours[temptext[4].charAt(5)],
|
||||
"46": colours[temptext[4].charAt(6)],
|
||||
"47": colours[temptext[4].charAt(7)],
|
||||
"48": colours[temptext[4].charAt(8)],
|
||||
"49": colours[temptext[4].charAt(9)],
|
||||
"4a": colours[temptext[4].charAt(10)],
|
||||
"4b": colours[temptext[4].charAt(11)],
|
||||
"4c": colours[temptext[4].charAt(12)],
|
||||
"4d": colours[temptext[4].charAt(13)],
|
||||
"4e": colours[temptext[4].charAt(14)],
|
||||
"4f": colours[temptext[4].charAt(15)],
|
||||
|
||||
|
||||
"50": colours[temptext[5].charAt(0)],
|
||||
"51": colours[temptext[5].charAt(1)],
|
||||
"52": colours[temptext[5].charAt(2)],
|
||||
"53": colours[temptext[5].charAt(3)],
|
||||
"54": colours[temptext[5].charAt(4)],
|
||||
"55": colours[temptext[5].charAt(5)],
|
||||
"56": colours[temptext[5].charAt(6)],
|
||||
"57": colours[temptext[5].charAt(7)],
|
||||
"58": colours[temptext[5].charAt(8)],
|
||||
"59": colours[temptext[5].charAt(9)],
|
||||
"5a": colours[temptext[5].charAt(10)],
|
||||
"5b": colours[temptext[5].charAt(11)],
|
||||
"5c": colours[temptext[5].charAt(12)],
|
||||
"5d": colours[temptext[5].charAt(13)],
|
||||
"5e": colours[temptext[5].charAt(14)],
|
||||
"5f": colours[temptext[5].charAt(15)],
|
||||
|
||||
"60": colours[temptext[6].charAt(0)],
|
||||
"61": colours[temptext[6].charAt(1)],
|
||||
"62": colours[temptext[6].charAt(2)],
|
||||
"63": colours[temptext[6].charAt(3)],
|
||||
"64": colours[temptext[6].charAt(4)],
|
||||
"65": colours[temptext[6].charAt(5)],
|
||||
"66": colours[temptext[6].charAt(6)],
|
||||
"67": colours[temptext[6].charAt(7)],
|
||||
"68": colours[temptext[6].charAt(8)],
|
||||
"69": colours[temptext[6].charAt(9)],
|
||||
"6a": colours[temptext[6].charAt(10)],
|
||||
"6b": colours[temptext[6].charAt(11)],
|
||||
"6c": colours[temptext[6].charAt(12)],
|
||||
"6d": colours[temptext[6].charAt(13)],
|
||||
"6e": colours[temptext[6].charAt(14)],
|
||||
"6f": colours[temptext[6].charAt(15)],
|
||||
|
||||
|
||||
"70": colours[temptext[7].charAt(0)],
|
||||
"71": colours[temptext[7].charAt(1)],
|
||||
"72": colours[temptext[7].charAt(2)],
|
||||
"73": colours[temptext[7].charAt(3)],
|
||||
"74": colours[temptext[7].charAt(4)],
|
||||
"75": colours[temptext[7].charAt(5)],
|
||||
"76": colours[temptext[7].charAt(6)],
|
||||
"77": colours[temptext[7].charAt(7)],
|
||||
"78": colours[temptext[7].charAt(8)],
|
||||
"79": colours[temptext[7].charAt(9)],
|
||||
"7a": colours[temptext[7].charAt(10)],
|
||||
"7b": colours[temptext[7].charAt(11)],
|
||||
"7c": colours[temptext[7].charAt(12)],
|
||||
"7d": colours[temptext[7].charAt(13)],
|
||||
"7e": colours[temptext[7].charAt(14)],
|
||||
"7f": colours[temptext[7].charAt(15)],
|
||||
|
||||
}, {}, {
|
||||
"inline": "false"
|
||||
});
|
||||
}
|
||||
}
|
||||
function shift(mode){
|
||||
function converter(py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if(args.length!=1){
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var str1block=py2block.convert(args[0]);
|
||||
var imgblock=py2block.convert(func.value);
|
||||
return block("image_shift", func.lineno, {
|
||||
'OP':mode
|
||||
}, {
|
||||
'img':imgblock,
|
||||
'val':str1block
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
return converter;
|
||||
}
|
||||
pbc.objectFunctionD.get('shift_up')['matrix'] = shift('up');
|
||||
pbc.objectFunctionD.get('shift_down')['matrix'] = shift('down');
|
||||
pbc.objectFunctionD.get('shift_left')['matrix'] = shift('left');
|
||||
pbc.objectFunctionD.get('shift_right')['matrix'] = shift('right');
|
||||
|
||||
pbc.moduleFunctionD.get('matrix.display')['get_pixel'] = function(py2block, func, args, keywords, starargs, kwargs, node){
|
||||
if (args.length !== 2){
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var astname = args[0]._astname;
|
||||
var astname1 = args[1]._astname;
|
||||
var xblock;
|
||||
var yblock;
|
||||
pbc.pinType = "pins_axis";
|
||||
if(astname === "Call" && args[0].func._astname == "Name" && py2block.Name_str(args[0].func) === "int"){ //display.get_pixel(int(0), int(0))
|
||||
xblock = py2block.convert(args[0].args[0]);
|
||||
}else{
|
||||
xblock = py2block.convert(args[0]);
|
||||
}
|
||||
if(astname1 === "Call" && args[1].func._astname == "Name" && py2block.Name_str(args[1].func) === "int"){ //display.get_pixel(int(0), int(0))
|
||||
yblock = py2block.convert(args[1].args[0]);
|
||||
}else{
|
||||
yblock = py2block.convert(args[1]);
|
||||
}
|
||||
pbc.pinType = null;
|
||||
return block("display_get_pixel", func.lineno, {}, {
|
||||
'x':xblock,
|
||||
'y':yblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
|
||||
pbc.moduleFunctionD.get('matrix.display')['set_pixel'] = function(py2block, func, args, keywords, starargs, kwargs, node){
|
||||
if (args.length !== 3){
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var astname = args[0]._astname;
|
||||
var astname1 = args[1]._astname;
|
||||
pbc.pinType = null;
|
||||
pbc.inScope="switch";
|
||||
var brightblock = py2block.convert(args[2]);
|
||||
pbc.inScope=null;
|
||||
pbc.pinType = null;
|
||||
var xblock;
|
||||
var yblock;
|
||||
pbc.pinType = "pins_axis";
|
||||
if(astname === "Call" && args[0].func._astname == "Name" && py2block.Name_str(args[0].func) === "int"){ //display.set_pixel(int(0), int(0))
|
||||
xblock = py2block.convert(args[0].args[0]);
|
||||
}else{
|
||||
xblock = py2block.convert(args[0]);
|
||||
}
|
||||
if(astname1 === "Call" && args[1].func._astname == "Name" && py2block.Name_str(args[1].func) === "int"){ //display.set_pixel(int(0), int(0))
|
||||
yblock = py2block.convert(args[1].args[0]);
|
||||
}else{
|
||||
yblock = py2block.convert(args[1]);
|
||||
}
|
||||
pbc.pinType = null;
|
||||
return [block("display_bright_point", func.lineno, {}, {
|
||||
'x':xblock,
|
||||
'y':yblock,
|
||||
'STAT':brightblock
|
||||
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
|
||||
pbc.moduleFunctionD.get('matrix.display')['set_brightness'] = function(py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if(args.length!=1){
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
pbc.pinType="pins_exlcdh";
|
||||
var brightblock=py2block.convert(args[0]);
|
||||
pbc.pinType=null;
|
||||
|
||||
return [block("display_bright_screen", func.lineno, {}, {
|
||||
'x':brightblock,
|
||||
|
||||
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
|
||||
pbc.moduleFunctionD.get('matrix.display')['get_brightness'] = function(py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if(args.length!=0){
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
|
||||
return block("display_get_screen_pixel", func.lineno, {}, {
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
|
||||
pbc.moduleFunctionD.get('matrix.display')['blink_rate'] = function(py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if(args.length!=1){
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var blinkblock=py2block.convert(args[0]);
|
||||
|
||||
return [block("display_blink_rate", func.lineno, {}, { 'x':blinkblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
|
||||
pbc.moduleFunctionD.get('matrix.display')['clear'] = function(py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if(args.length!=0){
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
|
||||
|
||||
return [block("display_clear", func.lineno, {}, {
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('show_pixel')['monitor'] = function(py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if(args.length!=2){
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var objblock = py2block.convert(func.value);
|
||||
var x1block=py2block.convert(args[0]);
|
||||
var y1block=py2block.convert(args[1]);
|
||||
|
||||
return [block("display_oled_drawPixel", func.lineno, {}, { "VAR":objblock,'POS_X':x1block,'POS_Y':y1block,
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('show_bitmap')['monitor'] = function(py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if(args.length!=5){
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var objblock = py2block.convert(func.value);
|
||||
var x=py2block.convert(args[0]);
|
||||
var y=py2block.convert(args[1]);
|
||||
var b=py2block.convert(args[2]);
|
||||
var w=py2block.convert(args[3]);
|
||||
var h=py2block.convert(args[4]);
|
||||
return [block("display_oled_showBitmap", func.lineno, {}, { "VAR":objblock,'START_X':x,'START_Y':y,'bitmap_name':b,'WIDTH':w,'HEIGHT':h,
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('show_str')['monitor'] = function(py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if(args.length!=4){
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var objblock = py2block.convert(func.value);
|
||||
var str1block=py2block.convert(args[0]);
|
||||
var str2block=py2block.convert(args[1]);
|
||||
var str3block=py2block.convert(args[2]);
|
||||
var str4block=py2block.convert(args[3]);
|
||||
|
||||
return [block("display_draw_4strings", func.lineno, {}, { "VAR":objblock,'Text_line1':str1block,'Text_line2':str2block,'Text_line3':str3block,'Text_line4':str4block,
|
||||
}, {
|
||||
"inline": "false"
|
||||
})];
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('show_line')['monitor'] = function(py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if(args.length!=5){
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var objblock = py2block.convert(func.value);
|
||||
var x1block=py2block.convert(args[0]);
|
||||
var y1block=py2block.convert(args[1]);
|
||||
var x2block=py2block.convert(args[2]);
|
||||
var y2block=py2block.convert(args[3]);
|
||||
|
||||
return [block("display_line_arbitrarily", func.lineno, {}, { "VAR":objblock,'x1':x1block,'y1':y1block,'x2':x2block,'y2':y2block,
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('show_hline')['monitor'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length != 4) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var objblock = py2block.convert(func.value);
|
||||
var xblock = py2block.convert(args[0]);
|
||||
var yblock = py2block.convert(args[1]);
|
||||
var lenblock = py2block.convert(args[2]);
|
||||
return [block("display_line", func.lineno, {
|
||||
'direction': 'hline',
|
||||
}, {
|
||||
"VAR":objblock,
|
||||
"x": xblock,
|
||||
"y": yblock,
|
||||
"length": lenblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('show_vline')['monitor'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length != 4) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var objblock = py2block.convert(func.value);
|
||||
var xblock = py2block.convert(args[0]);
|
||||
var yblock = py2block.convert(args[1]);
|
||||
var lenblock = py2block.convert(args[2]);
|
||||
return [block("display_line", func.lineno, {
|
||||
'direction': 'vline',
|
||||
}, {
|
||||
"VAR":objblock,
|
||||
"x": xblock,
|
||||
"y": yblock,
|
||||
"length": lenblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('show_rect')['monitor'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length != 5) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var objblock = py2block.convert(func.value);
|
||||
var xblock = py2block.convert(args[0]);
|
||||
var yblock = py2block.convert(args[1]);
|
||||
var widthblock = py2block.convert(args[2]);
|
||||
var heightblock = py2block.convert(args[3]);
|
||||
var lightblock = py2block.identifier(args[4].n);
|
||||
return [block("display_rect", func.lineno, {
|
||||
"fill": false,
|
||||
"OP": lightblock,
|
||||
}, {
|
||||
"VAR":objblock,
|
||||
"x": xblock,
|
||||
"y": yblock,
|
||||
"width": widthblock,
|
||||
"height": heightblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('show_fill_rect')['monitor'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length != 5) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var objblock = py2block.convert(func.value);
|
||||
var xblock = py2block.convert(args[0]);
|
||||
var yblock = py2block.convert(args[1]);
|
||||
var widthblock = py2block.convert(args[2]);
|
||||
var heightblock = py2block.convert(args[3]);
|
||||
var lightblock = py2block.identifier(args[4].n);
|
||||
return [block("display_rect", func.lineno, {
|
||||
"fill": true,
|
||||
"OP": lightblock,
|
||||
}, {
|
||||
"VAR":objblock,
|
||||
"x": xblock,
|
||||
"y": yblock,
|
||||
"width": widthblock,
|
||||
"height": heightblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('show_triangle')['monitor'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length != 7) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var objblock = py2block.convert(func.value);
|
||||
var x0 = py2block.convert(args[0]);
|
||||
var y0 = py2block.convert(args[1]);
|
||||
var x1 = py2block.convert(args[2]);
|
||||
var y1 = py2block.convert(args[3]);
|
||||
var x2 = py2block.convert(args[4]);
|
||||
var y2 = py2block.convert(args[5]);
|
||||
var lightblock = py2block.identifier(args[6].n);
|
||||
return [block("display_triangle", func.lineno, {
|
||||
"fill": false,
|
||||
"OP": lightblock,
|
||||
}, {
|
||||
"VAR":objblock,
|
||||
"x0": x0,
|
||||
"y0": y0,
|
||||
"x1": x1,
|
||||
"y1": y1,
|
||||
"x2": x2,
|
||||
"y2": y2,
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('show_fill_triangle')['monitor'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length != 7) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var objblock = py2block.convert(func.value);
|
||||
var x0 = py2block.convert(args[0]);
|
||||
var y0 = py2block.convert(args[1]);
|
||||
var x1 = py2block.convert(args[2]);
|
||||
var y1 = py2block.convert(args[3]);
|
||||
var x2 = py2block.convert(args[4]);
|
||||
var y2 = py2block.convert(args[5]);
|
||||
var lightblock = py2block.identifier(args[6].n);
|
||||
return [block("display_triangle", func.lineno, {
|
||||
"fill": true,
|
||||
"OP": lightblock,
|
||||
}, {
|
||||
"VAR":objblock,
|
||||
"x0": x0,
|
||||
"y0": y0,
|
||||
"x1": x1,
|
||||
"y1": y1,
|
||||
"x2": x2,
|
||||
"y2": y2,
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('show_circle')['monitor'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length != 4) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var objblock = py2block.convert(func.value);
|
||||
var xblock = py2block.convert(args[0]);
|
||||
var yblock = py2block.convert(args[1]);
|
||||
var rblock = py2block.convert(args[2]);
|
||||
var lightblock = py2block.identifier(args[3].n);
|
||||
return [block("display_circle", func.lineno, {
|
||||
"fill": false,
|
||||
"OP": lightblock,
|
||||
}, {
|
||||
"VAR":objblock,
|
||||
"x": xblock,
|
||||
"y": yblock,
|
||||
"r": rblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('show_fill_circle')['monitor'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length != 4) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var objblock = py2block.convert(func.value);
|
||||
var xblock = py2block.convert(args[0]);
|
||||
var yblock = py2block.convert(args[1]);
|
||||
var rblock = py2block.convert(args[2]);
|
||||
var lightblock = py2block.identifier(args[3].n);
|
||||
return [block("display_circle", func.lineno, {
|
||||
"fill": true,
|
||||
"OP": lightblock,
|
||||
}, {
|
||||
"VAR":objblock,
|
||||
"x": xblock,
|
||||
"y": yblock,
|
||||
"r": rblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
|
||||
|
||||
pbc.assignD.get('oled')['check_assign'] = function(py2block, node, targets, value) {
|
||||
if(value._astname != "Call" || value.func._astname != "Attribute" || value.func.value._astname != "Name"){
|
||||
return false;
|
||||
}
|
||||
var moduleName = py2block.Name_str(value.func.value);
|
||||
var funcName = py2block.identifier(value.func.attr);
|
||||
if(value._astname === "Call" && moduleName === "ssd1306"
|
||||
&& funcName === "SSD1306_I2C" && value.args.length === 3)
|
||||
return true;
|
||||
else if(value._astname === "Call" && moduleName === "tm1650"
|
||||
&& funcName === "TM1650" && value.args.length === 1)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
pbc.assignD.get('oled')['create_block'] = function(py2block, node, targets, value){
|
||||
if(value.args.length === 3){
|
||||
var rowblock = py2block.convert(value.args[0]);
|
||||
var columnblock = py2block.convert(value.args[1]);
|
||||
var i2cblock = py2block.convert(value.args[2]);
|
||||
return block("display_use_i2c_init", node.lineno, {
|
||||
}, {
|
||||
"row":rowblock,
|
||||
"column":columnblock,
|
||||
"I2CSUB":i2cblock,
|
||||
"SUB":py2block.convert(targets[0]),
|
||||
});
|
||||
}
|
||||
else if(value.args.length === 1){
|
||||
var i2cblock = py2block.convert(value.args[0]);
|
||||
return block("display_tm_use_i2c_init", node.lineno, {
|
||||
}, {
|
||||
"I2CSUB":i2cblock,
|
||||
"SUB":py2block.convert(targets[0]),
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('show_fill')['monitor'] = function(py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if(args.length!=1){
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var objblock = py2block.convert(func.value);
|
||||
var flagblock = py2block.identifier(args[0].n.v);
|
||||
|
||||
|
||||
return [block("display_fill", func.lineno, {'key':flagblock}, { "SUB":objblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
|
||||
function display_tm_stat(mode, type){
|
||||
function converter(py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 0) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var varblock = py2block.convert(func.value)
|
||||
return [block('display_tm1650_power', func.lineno, {
|
||||
"TYPE": type,
|
||||
"STAT": mode,
|
||||
}, {
|
||||
"VAR": varblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
return converter;
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('tm1650_on')['disp'] = display_tm_stat('_on','tm1650');
|
||||
pbc.objectFunctionD.get('tm1650_off')['disp'] = display_tm_stat('_off','tm1650');
|
||||
pbc.objectFunctionD.get('tm1650_clear')['disp'] = display_tm_stat('_clear','tm1650');
|
||||
|
||||
|
||||
pbc.objectFunctionD.get('tm1650_show_num')['disp'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 1) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var valblock=py2block.convert(args[0]);
|
||||
var varblock=py2block.convert(func.value)
|
||||
return [block("display_tm1650_show_num", func.lineno, {
|
||||
"TYPE":'tm1650'
|
||||
}, {
|
||||
'VALUE':valblock,
|
||||
'VAR': varblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('tm1650_show_dot')['disp'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 2) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var valblock=py2block.convert(args[0]);
|
||||
pbc.inScope="switch";
|
||||
var statblock=py2block.convert(args[1]);
|
||||
pbc.inScope=null;
|
||||
var varblock=py2block.convert(func.value)
|
||||
return [block("display_tm1650_show_dot", func.lineno, {
|
||||
"TYPE":'tm1650'
|
||||
}, {
|
||||
'NO':valblock,
|
||||
'STAT':statblock,
|
||||
'VAR': varblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
295
boards/default_src/micropython/converters/inout.js
Normal file
295
boards/default_src/micropython/converters/inout.js
Normal file
@@ -0,0 +1,295 @@
|
||||
|
||||
|
||||
pbc.objectFunctionD.get('value')['Pin'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 1 && args.length !== 0) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
if(args.length == 1){
|
||||
pbc.pinType = "pins_digital";
|
||||
var pinblock = py2block.convert(func.value);
|
||||
var argblock = py2block.convert(args[0]);
|
||||
pbc.pinType = null;
|
||||
return [block("inout_digital_write", func.lineno, {}, {
|
||||
"PIN": pinblock,
|
||||
"STAT": argblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];}
|
||||
else if(args.length == 0){
|
||||
pbc.pinType = "pins_digital";
|
||||
var pinblock = py2block.convert(func.value);
|
||||
pbc.pinType = null;
|
||||
return block("inout_digital_read", func.lineno, {}, {
|
||||
"PIN": pinblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
pbc.assignD.get('Pin')['check_assign'] = function(py2block, node, targets, value) {
|
||||
var moduleName = py2block.Name_str(value.func.value);
|
||||
var funcName = py2block.identifier(value.func.attr);
|
||||
if(value._astname === "Call"
|
||||
&& funcName === "Pin" && (value.args.length === 2 || value.args.length === 3) )
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
pbc.assignD.get('Pin')['create_block'] = function(py2block, node, targets, value){
|
||||
|
||||
pbc.pinType = "pins_digital_pin";
|
||||
var pinblock = py2block.convert(value.args[0]);
|
||||
pbc.pinType = null;
|
||||
if(value.args.length === 2){
|
||||
var digitalblock = "machine."+py2block.identifier(value.args[1].value.attr) +"."+ py2block.identifier(value.args[1].attr);
|
||||
}
|
||||
else if(value.args.length === 3){
|
||||
var digitalblock = "machine."+py2block.identifier(value.args[1].value.attr) +"."+ py2block.identifier(value.args[1].attr)+", "+"machine."+py2block.identifier(value.args[2].value.attr) +"."+ py2block.identifier(value.args[2].attr);
|
||||
}
|
||||
pinobj = py2block.identifier(targets[0].id);
|
||||
return block("inout_digital_init", node.lineno, {"PIN_OBJ":pinobj,"MODE":digitalblock}, {
|
||||
"PIN":pinblock,
|
||||
|
||||
});
|
||||
}
|
||||
//ok
|
||||
pbc.assignD.get('DAC')['check_assign'] = function(py2block, node, targets, value) {
|
||||
var moduleName = py2block.Name_str(value.func.value);
|
||||
var funcName = py2block.identifier(value.func.attr);
|
||||
if(value._astname === "Call"
|
||||
&& funcName === "DAC" && moduleName === "machine"&& value.args.length === 1)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
pbc.assignD.get('DAC')['create_block'] = function(py2block, node, targets, value){
|
||||
var astname = value.args[0]._astname;
|
||||
var funcName = py2block.identifier(value.args[0].func.attr);
|
||||
if(astname === "Call" && funcName === "Pin"){ //
|
||||
pbc.pinType = "pins_dac_pin";
|
||||
pinblock = py2block.convert(value.args[0].args[0]);
|
||||
pbc.pinType = null;
|
||||
}else{
|
||||
pbc.pinType = "pins_dac_pin";
|
||||
pinblock = py2block.convert(args[0]);
|
||||
pbc.pinType = null;
|
||||
}
|
||||
pinobj = py2block.identifier(targets[0].id);
|
||||
return block("inout_analog_write_init", node.lineno, {"PIN_OBJ":pinobj}, {
|
||||
"PIN":pinblock,
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('write')['Pin'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 1) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
pbc.pinType = "pins_dac";
|
||||
var pinblock = py2block.convert(func.value);
|
||||
pbc.pinType = null;
|
||||
var argblock = py2block.convert(args[0]);
|
||||
|
||||
return [block("inout_analog_write", func.lineno, {}, {
|
||||
"PIN": pinblock,
|
||||
"NUM": argblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
|
||||
//ok
|
||||
pbc.assignD.get('PWM')['check_assign'] = function(py2block, node, targets, value) {
|
||||
var moduleName = py2block.Name_str(value.func.value);
|
||||
var funcName = py2block.identifier(value.func.attr);
|
||||
if(value._astname === "Call"
|
||||
&& funcName === "PWM" && moduleName === "machine" && value.args.length === 1)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
pbc.assignD.get('PWM')['create_block'] = function(py2block, node, targets, value){
|
||||
var astname = value.args[0]._astname;
|
||||
var funcName = py2block.identifier(value.args[0].func.attr);
|
||||
if(astname === "Call" && funcName === "Pin"){ //
|
||||
pbc.pinType = "pins_pwm_pin";
|
||||
pinblock = py2block.convert(value.args[0].args[0]);
|
||||
pbc.pinType = null;
|
||||
}else{
|
||||
pbc.pinType = "pins_pwm_pin";
|
||||
pinblock = py2block.convert(args[0]);
|
||||
pbc.pinType = null;
|
||||
}
|
||||
pinobj = py2block.identifier(targets[0].id);
|
||||
return block("inout_pwm_analog_write_init", node.lineno, {"PIN_OBJ":pinobj}, {
|
||||
"PIN":pinblock,
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('duty')['Pin'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 1) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
pbc.pinType = "pins_pwm";
|
||||
var pinblock = py2block.convert(func.value);
|
||||
pbc.pinType = null;
|
||||
var argblock = py2block.convert(args[0]);
|
||||
|
||||
return [block("inout_pwm_analog_write", func.lineno, {}, {
|
||||
"PIN": pinblock,
|
||||
"NUM": argblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('freq')['Pin'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 1) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
pbc.pinType = "pins_pwm";
|
||||
var pinblock = py2block.convert(func.value);
|
||||
pbc.pinType = null;
|
||||
var argblock = py2block.convert(args[0]);
|
||||
|
||||
return [block("inout_pwm_analog_write_set_freq", func.lineno, {}, {
|
||||
"PIN": pinblock,
|
||||
"NUM": argblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
//ok
|
||||
pbc.assignD.get('ADC')['check_assign'] = function(py2block, node, targets, value) {
|
||||
var moduleName = py2block.Name_str(value.func.value);
|
||||
var funcName = py2block.identifier(value.func.attr);
|
||||
if(value._astname === "Call"
|
||||
&& funcName === "ADC" && moduleName === "machine" && value.args.length === 1)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
pbc.assignD.get('ADC')['create_block'] = function(py2block, node, targets, value){
|
||||
var astname = value.args[0]._astname;
|
||||
var funcName = py2block.identifier(value.args[0].func.attr);
|
||||
if(astname === "Call" && funcName === "Pin"){ //
|
||||
pbc.pinType = "pins_analog_pin";
|
||||
pinblock = py2block.convert(value.args[0].args[0]);
|
||||
pbc.pinType = null;
|
||||
}else{
|
||||
pbc.pinType = "pins_analog_pin";
|
||||
pinblock = py2block.convert(args[0]);
|
||||
pbc.pinType = null;
|
||||
}
|
||||
pinobj = py2block.identifier(targets[0].id);
|
||||
return block("inout_analog_read_init", node.lineno, {"PIN_OBJ":pinobj}, {
|
||||
"PIN":pinblock,
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('read')['Pin'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 0) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
value = func.value.id.v
|
||||
value = value.slice(0,2)
|
||||
if( value=="ad"){
|
||||
pbc.pinType = "pins_analog";
|
||||
var pinblock = py2block.convert(func.value);
|
||||
pbc.pinType = null;
|
||||
|
||||
return block("inout_analog_read", func.lineno, {}, {
|
||||
"PIN": pinblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
});}
|
||||
else if(value =="tc"){
|
||||
pbc.pinType = "pins_touch";
|
||||
var pinblock = py2block.convert(func.value);
|
||||
pbc.pinType = null;
|
||||
|
||||
return block("inout_pin_pressed", func.lineno, {}, {
|
||||
"pin": pinblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
}
|
||||
//ok
|
||||
pbc.assignD.get('TOUCHPAD')['check_assign'] = function(py2block, node, targets, value) {
|
||||
var moduleName = py2block.Name_str(value.func.value);
|
||||
var funcName = py2block.identifier(value.func.attr);
|
||||
if(value._astname === "Call"
|
||||
&& funcName === "TouchPad" && moduleName === "machine" && value.args.length === 1)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
pbc.assignD.get('TOUCHPAD')['create_block'] = function(py2block, node, targets, value){
|
||||
var astname = value.args[0]._astname;
|
||||
var funcName = py2block.identifier(value.args[0].func.attr);
|
||||
if(astname === "Call" && funcName === "Pin"){ //
|
||||
pbc.pinType = "pins_touch_pin";
|
||||
pinblock = py2block.convert(value.args[0].args[0]);
|
||||
pbc.pinType = null;
|
||||
}else{
|
||||
pbc.pinType = "pins_touch_pin";
|
||||
pinblock = py2block.convert(args[0]);
|
||||
pbc.pinType = null;
|
||||
}
|
||||
pinobj = py2block.identifier(targets[0].id);
|
||||
return block("inout_pin_pressed_init", node.lineno, {"PIN_OBJ":pinobj}, {
|
||||
"PIN":pinblock,
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('irq')['Pin'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 0 || keywords.length!==2) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var pin=py2block.identifier(func.value.func.attr);
|
||||
var mac=py2block.identifier(func.value.func.value.id);
|
||||
if(pin==="Pin" && mac==="machine"){
|
||||
|
||||
pbc.pinType = "pins_digital_pin";
|
||||
var pinblock = py2block.convert(func.value.args[0]);
|
||||
pbc.pinType = null;
|
||||
|
||||
var mode = mac+"."+pin+"."+py2block.identifier(keywords[1].value.attr);
|
||||
|
||||
pbc.pinType = "pins_callback";
|
||||
var callback = py2block.convert(keywords[0].value);
|
||||
pbc.pinType = null;
|
||||
|
||||
return [block("inout_pin_attachInterrupt", func.lineno, {"mode":mode}, {
|
||||
"PIN": pinblock,
|
||||
"DO": callback
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('atten')['Pin'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 1) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
|
||||
pbc.pinType = "pins_analog";
|
||||
var pinblock = py2block.convert(func.value);
|
||||
pbc.pinType = null;
|
||||
|
||||
var atten = py2block.identifier(args[0].value.value.id)+"."+py2block.identifier(args[0].value.attr)+"."+py2block.identifier(args[0].attr)
|
||||
|
||||
return [block("inout_analog_atten", func.lineno, {"atten":atten}, {
|
||||
"PIN": pinblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
113
boards/default_src/micropython/converters/iot.js
Normal file
113
boards/default_src/micropython/converters/iot.js
Normal file
@@ -0,0 +1,113 @@
|
||||
'use strict';
|
||||
// console.log("hhh")
|
||||
|
||||
pbc.assignD.get('iot')['check_assign'] = function(py2block, node, targets, value) {
|
||||
if(value._astname != "Call" || value.func._astname != "Attribute" || value.func.value._astname != "Name"){
|
||||
return false;
|
||||
}
|
||||
var funcName = py2block.identifier(value.func.attr);
|
||||
var moduleName = py2block.Name_str(value.func.value);
|
||||
if(moduleName === "miot" && funcName === "init_MQTT_client" && value.args.length === 6)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
pbc.assignD.get('iot')['create_block'] = function(py2block, node, targets, value){
|
||||
pbc.pinType = "pins_callback";
|
||||
var subblock = py2block.convert(value.args[5]);
|
||||
pbc.pinType = null;
|
||||
return block("iot_onenet_connect", node.lineno, {}, {
|
||||
"CLIENT":py2block.convert(value.args[0]),
|
||||
"SERVER":py2block.convert(value.args[1]),
|
||||
"USERNAME":py2block.convert(value.args[2]),
|
||||
"PASSWORD":py2block.convert(value.args[3]),
|
||||
"TOPIC":py2block.convert(value.args[4]),
|
||||
"SUB":subblock,
|
||||
"VAR":py2block.convert(targets[0])
|
||||
});
|
||||
}
|
||||
|
||||
// pbc.globalFunctionD['do_connect'] = function(py2block, func, args, keywords, starargs, kwargs, node){
|
||||
// if (args.length !== 2) {
|
||||
// throw new Error("Incorrect number of arguments");
|
||||
// }
|
||||
// var nameblock = py2block.convert(args[0]);
|
||||
// var keyblock = py2block.convert(args[1]);
|
||||
// return [block("iot_wifi_connect", func.lineno, {}, {
|
||||
// 'WIFINAME': nameblock,
|
||||
// 'PASSWORD': keyblock
|
||||
// }, {
|
||||
// "inline": "true"
|
||||
// })];
|
||||
// }
|
||||
|
||||
pbc.objectFunctionD.get('do_connect')['miot'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length != 2) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var nameblock = py2block.convert(args[0]);
|
||||
var keyblock = py2block.convert(args[1]);
|
||||
return [block("iot_wifi_connect", func.lineno, {}, {
|
||||
'WIFINAME': nameblock,
|
||||
'PASSWORD': keyblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('publish')['miot'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length == 1 && keywords.length == 1) {
|
||||
var objblock = py2block.convert(func.value);
|
||||
var nameblock = py2block.convert(args[0]);
|
||||
var checkblock = py2block.Name_str(keywords[0].value);
|
||||
return [block("iot_onenet_publish_dict", func.lineno, {
|
||||
"is_print":checkblock
|
||||
}, {
|
||||
"VAR":objblock,
|
||||
"DICT":nameblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
else if(args.length == 2) {
|
||||
var objblock = py2block.convert(func.value);
|
||||
var nameblock = py2block.convert(args[0]);
|
||||
var checkblock = py2block.Name_str(args[1]);
|
||||
return [block("iot_onenet_publish_dict", func.lineno, {
|
||||
"is_print":checkblock
|
||||
}, {
|
||||
"VAR":objblock,
|
||||
"DICT":nameblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
else
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('do_disconnect')['miot'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length != 0) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var objblock = py2block.convert(func.value);
|
||||
return [block("iot_onenet_disconnect", func.lineno, {}, {
|
||||
"VAR":objblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
|
||||
|
||||
pbc.objectFunctionD.get('check_msg')['iot'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length != 0) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var objblock = py2block.convert(func.value);
|
||||
return [block("iot_onenet_check", func.lineno, {}, {
|
||||
"VAR":objblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
|
||||
308
boards/default_src/micropython/converters/network.js
Normal file
308
boards/default_src/micropython/converters/network.js
Normal file
@@ -0,0 +1,308 @@
|
||||
'use strict';
|
||||
// console.log("hhh")
|
||||
|
||||
pbc.assignD.get('network')['check_assign'] = function(py2block, node, targets, value) {
|
||||
if(value._astname != "Call" || value.func._astname != "Attribute" || value.func.value._astname != "Name"){
|
||||
return false;
|
||||
}
|
||||
var moduleName = py2block.Name_str(value.func.value);
|
||||
var funcName = py2block.identifier(value.func.attr);
|
||||
if(value._astname === "Call" && moduleName === "network"
|
||||
&& funcName === "WLAN" && value.args.length === 1)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
pbc.assignD.get('network')['create_block'] = function(py2block, node, targets, value){
|
||||
var mode = py2block.identifier(value.args[0].attr);
|
||||
if (mode=="STA_IF"){
|
||||
mode="STA"
|
||||
}
|
||||
else if (mode=="AP_IF"){
|
||||
mode="AP"
|
||||
}
|
||||
return block("network_init", node.lineno, {
|
||||
"mode":mode,
|
||||
}, {
|
||||
"VAR":py2block.convert(targets[0]),
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
pbc.objectFunctionD.get('active')['network'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
|
||||
if (args.length === 1){
|
||||
var objblock = py2block.convert(func.value);
|
||||
// var lightblock = py2block.identifier(args[0].n);
|
||||
var reverse = py2block.Name_str(args[0]);
|
||||
return [block("network_open", func.lineno, {
|
||||
"op": reverse,
|
||||
}, {
|
||||
"VAR":objblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
else if (args.length === 0) {
|
||||
var objblock = py2block.convert(func.value);
|
||||
// var lightblock = py2block.identifier(args[0].n);
|
||||
return [block("network_is_active", func.lineno, {
|
||||
}, {
|
||||
"VAR":objblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('isconnected')['network'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length != 0) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var objblock = py2block.convert(func.value);
|
||||
return block("network_wifi_connect", func.lineno, {}, {
|
||||
"VAR":objblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('disconnect')['network'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length != 0) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var objblock = py2block.convert(func.value);
|
||||
return [block("network_stop", func.lineno, {}, {
|
||||
"VAR":objblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('config')['network'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length == 0 & keywords.length == 2){
|
||||
var objblock = py2block.convert(func.value);
|
||||
var essidblock = null;
|
||||
var channelblock = null;
|
||||
for (var i = 0; i < keywords.length; i++) {
|
||||
var param = keywords[i];
|
||||
var key = py2block.identifier(param.arg);
|
||||
if (key === "essid") {
|
||||
essidblock = py2block.convert(param.value);
|
||||
} else if (key === "channel") {
|
||||
channelblock = py2block.convert(param.value);
|
||||
}
|
||||
}
|
||||
if (essidblock != null && channelblock != null ) {
|
||||
return [block("network_ap_connect", func.lineno, {}, {
|
||||
"VAR":objblock,
|
||||
"essid": essidblock,
|
||||
"channel": channelblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
}else if(args.length == 1) {
|
||||
var objblock = py2block.convert(func.value);
|
||||
var argblock = py2block.Str_value(args[0]);
|
||||
return block("network_get_wifi", func.lineno, {
|
||||
"op":argblock,
|
||||
}, {
|
||||
"VAR":objblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}else{
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('connect')['network'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length === 2) {
|
||||
var objblock = py2block.convert(func.value);
|
||||
var idblock = py2block.convert(args[0]);
|
||||
var passwordblock = py2block.convert(args[1]);
|
||||
return [block("network_connect", func.lineno, {}, {
|
||||
"VAR":objblock,
|
||||
"id":idblock,
|
||||
"password":passwordblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
else if (args.length === 1) {
|
||||
var objblock = py2block.convert(func.value);
|
||||
var reverse = py2block.convert(args[0]);
|
||||
return [block("network_socket_connect", func.lineno, {
|
||||
}, {
|
||||
"address": reverse,
|
||||
"VAR":objblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
else {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
}
|
||||
|
||||
pbc.assignD.get('socket')['check_assign'] = function(py2block, node, targets, value) {
|
||||
if(value._astname != "Call" || value.func._astname != "Attribute" || value.func.value._astname != "Name"){
|
||||
return false;
|
||||
}
|
||||
var moduleName = py2block.Name_str(value.func.value);
|
||||
var funcName = py2block.identifier(value.func.attr);
|
||||
if(value._astname === "Call" && moduleName === "socket"
|
||||
&& funcName === "socket" && value.args.length <= 1)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
pbc.assignD.get('socket')['create_block'] = function(py2block, node, targets, value){
|
||||
value.args = value.args || [];
|
||||
if (!value.args.length){
|
||||
var mode="TCP"
|
||||
}
|
||||
else {
|
||||
var mode = py2block.identifier(value.args[0].attr);
|
||||
if (mode == "SOCK_DGRAM"){
|
||||
mode = "UDP"
|
||||
}
|
||||
else if (mode == "SOCK_STREAM"){
|
||||
mode = "TCP"
|
||||
}
|
||||
}
|
||||
return block("network_socket_init", node.lineno, {
|
||||
"mode":mode,
|
||||
}, {
|
||||
"VAR":py2block.convert(targets[0]),
|
||||
});
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('bind')['socket'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length != 1) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var objblock = py2block.convert(func.value);
|
||||
// var lightblock = py2block.identifier(args[0].n);
|
||||
var reverse = py2block.convert(args[0]);
|
||||
return [block("network_socket_bind", func.lineno, {
|
||||
}, {
|
||||
"address": reverse,
|
||||
"VAR":objblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('listen')['socket'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length != 1) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var objblock = py2block.convert(func.value);
|
||||
// var lightblock = py2block.identifier(args[0].n);
|
||||
var reverse = py2block.convert(args[0]);
|
||||
return [block("network_socket_listen", func.lineno, {
|
||||
}, {
|
||||
"queue": reverse,
|
||||
"VAR":objblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('accept')['socket'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length != 0) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var objblock = py2block.convert(func.value);
|
||||
return block("network_socket_accept", func.lineno, {}, {
|
||||
"VAR":objblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('recv')['socket'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length != 1) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var objblock = py2block.convert(func.value);
|
||||
// var lightblock = py2block.identifier(args[0].n);
|
||||
var reverse = py2block.convert(args[0]);
|
||||
return block("network_socket_receive", func.lineno, {
|
||||
}, {
|
||||
"size": reverse,
|
||||
"VAR":objblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('send')['socket'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length != 1) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var objblock = py2block.convert(func.value);
|
||||
// var lightblock = py2block.identifier(args[0].n);
|
||||
var reverse = py2block.convert(args[0]);
|
||||
return [block("network_socket_send", func.lineno, {
|
||||
}, {
|
||||
"content": reverse,
|
||||
"VAR":objblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('recvfrom')['socket'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length != 1) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var objblock = py2block.convert(func.value);
|
||||
// var lightblock = py2block.identifier(args[0].n);
|
||||
var reverse = py2block.convert(args[0]);
|
||||
return block("network_socket_receive_from", func.lineno, {
|
||||
}, {
|
||||
"size": reverse,
|
||||
"VAR":objblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('sendto')['socket'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length != 2) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var objblock = py2block.convert(func.value);
|
||||
// var lightblock = py2block.identifier(args[0].n);
|
||||
var reverse = py2block.convert(args[0]);
|
||||
var address = py2block.convert(args[1]);
|
||||
return [block("network_socket_send_to", func.lineno, {
|
||||
}, {
|
||||
"content": reverse,
|
||||
"VAR":objblock,
|
||||
"address":address,
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('close')['socket'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length != 0) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var objblock = py2block.convert(func.value);
|
||||
return [block("network_socket_close", func.lineno, {}, {
|
||||
"VAR":objblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
113
boards/default_src/micropython/converters/py2block_config.js
Normal file
113
boards/default_src/micropython/converters/py2block_config.js
Normal file
@@ -0,0 +1,113 @@
|
||||
function defDict(type) {
|
||||
var dict = {};
|
||||
return {
|
||||
get: function (key) {
|
||||
if (!dict[key]) {
|
||||
dict[key] = type.constructor();
|
||||
}
|
||||
return dict[key];
|
||||
},
|
||||
dict: dict
|
||||
};
|
||||
}
|
||||
|
||||
function Py2blockConfig (){
|
||||
this.initIgnoreS();
|
||||
this.initModuleAttrD();
|
||||
this.initKnownModuleS();
|
||||
this.initObjectTypeD();
|
||||
this.formatModuleKeyL = [
|
||||
['Pin', 'ADC', 'TouchPad', 'PWM', 'DAC', 'I2C'],
|
||||
['button_a', 'button_b', 'touch1', 'touch2', 'touch3', 'touch4', 'Infrared_left', 'Infrared_right',
|
||||
'mixgo_get_brightness', 'mixgo_get_soundlevel', 'Sonar', 'led', 'led1','led2','Infrared'],
|
||||
['NeoPixel'],
|
||||
['display', 'Image']
|
||||
];
|
||||
this.formatModuleL = ['machine', 'mixgo', 'neopixel', 'matrix'];
|
||||
}
|
||||
|
||||
var pbc = Py2blockConfig.prototype;
|
||||
pbc.ESP32 = "MicroPython[ESP32]";
|
||||
pbc.board = pbc.ESP32;
|
||||
pbc.objectFunctionD = defDict({});
|
||||
pbc.moduleFunctionD = defDict({});
|
||||
pbc.moduleAttrD = defDict({});
|
||||
pbc.objectAttrD = defDict({});
|
||||
pbc.globalFunctionD = {};
|
||||
pbc.assignD = defDict({});
|
||||
pbc.ifStatementD= defDict({});
|
||||
pbc.whileStatementD= defDict({});
|
||||
pbc.forStatementD= defDict({});
|
||||
pbc.reservedNameD= {};
|
||||
pbc.knownModuleS = new Set();
|
||||
pbc.objectTypeD = {}; //key:变量名,value:变量类型,如{'a':'List'}
|
||||
pbc.ignoreS = new Set();
|
||||
pbc.pinType = null;
|
||||
pbc.inScope = null;
|
||||
pbc.formatModuleKeyL = [];
|
||||
pbc.formatModuleL = [];
|
||||
|
||||
//忽略某些方法、类、赋值
|
||||
pbc.initIgnoreS = function(){
|
||||
var pythonIgnoreL = [
|
||||
];
|
||||
var boardIgnoreL = [
|
||||
];
|
||||
|
||||
var ignoreL = pythonIgnoreL.concat(boardIgnoreL);
|
||||
for (var i = 0; i < ignoreL.length; i++) {
|
||||
this.ignoreS.add(ignoreL[i]);
|
||||
}
|
||||
}
|
||||
|
||||
pbc.initModuleAttrD = function(){
|
||||
for (var i = 0; i < profile.default.builtinimg.length; i++) {
|
||||
pbc.moduleAttrD.get('matrix.Image')[profile.default.builtinimg[i][0]] = function (node, module, attr) {
|
||||
return block("pins_builtinimg", node.lineno, {
|
||||
"PIN": module + "." + attr
|
||||
});
|
||||
}
|
||||
}
|
||||
for (var i = 0; i < profile.default.imglist.length; i++) {
|
||||
pbc.moduleAttrD.get('Image')[profile.default.imglist[i][0]] = function (node, module, attr) {
|
||||
return block("pins_imglist", node.lineno, {
|
||||
"PIN": module + "." + attr
|
||||
});
|
||||
}
|
||||
}
|
||||
for (var i = 0; i < profile.default.playlist.length; i++) {
|
||||
pbc.moduleAttrD.get('music')[profile.default.playlist[i][0]] = function (node, module, attr) {
|
||||
return block("pins_playlist", node.lineno, {
|
||||
"PIN": module + "." + attr
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pbc.initKnownModuleS = function(){
|
||||
var pythonModuleL = [
|
||||
'math', 'random'
|
||||
];
|
||||
var boardModuleL = [];
|
||||
|
||||
var moduleL = pythonModuleL.concat(boardModuleL);
|
||||
for (var i = 0; i < moduleL.length; i++) {
|
||||
this.knownModuleS.add(moduleL[i]);
|
||||
}
|
||||
}
|
||||
|
||||
pbc.initObjectTypeD = function () {
|
||||
this.objectTypeD = {
|
||||
'f': 'open',
|
||||
'spi': 'machine.SPI',
|
||||
'i2c': 'machine.I2C',
|
||||
'ow': 'onewire.OneWire',
|
||||
}
|
||||
}
|
||||
|
||||
pbc.reset = function(){
|
||||
this.initObjectTypeD();
|
||||
}
|
||||
|
||||
var py2block_config = new Py2blockConfig();
|
||||
|
||||
734
boards/default_src/micropython/converters/sensor.js
Normal file
734
boards/default_src/micropython/converters/sensor.js
Normal file
@@ -0,0 +1,734 @@
|
||||
'use strict';
|
||||
|
||||
function pressed_converter (mode) {
|
||||
function converter(py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 0) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var btn = {
|
||||
'_astname': 'Name',
|
||||
'id': {
|
||||
'_astname': 'Str',
|
||||
'v': py2block.identifier(func.value.attr)
|
||||
}
|
||||
};
|
||||
pbc.pinType = "pins_button";
|
||||
var objblock = py2block.convert(btn);
|
||||
pbc.pinType = null;
|
||||
return block(mode, func.lineno, {}, {
|
||||
"btn": objblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
return converter;
|
||||
}
|
||||
|
||||
|
||||
pbc.moduleFunctionD.get('mixgo.button_a')['is_pressed'] = pressed_converter('sensor_mixgo_button_is_pressed');
|
||||
pbc.moduleFunctionD.get('mixgo.button_b')['is_pressed'] = pressed_converter('sensor_mixgo_button_is_pressed');
|
||||
pbc.moduleFunctionD.get('mixgo.button_a')['was_pressed'] = pressed_converter('sensor_mixgo_button_was_pressed');
|
||||
pbc.moduleFunctionD.get('mixgo.button_b')['was_pressed'] = pressed_converter('sensor_mixgo_button_was_pressed');
|
||||
|
||||
|
||||
function getpresses_converter (mode) {
|
||||
function converter(py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 1) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var btn = {
|
||||
'_astname': 'Name',
|
||||
'id': {
|
||||
'_astname': 'Str',
|
||||
'v': py2block.identifier(func.value.attr)
|
||||
}
|
||||
};
|
||||
pbc.pinType = "pins_button";
|
||||
var objblock = py2block.convert(btn);
|
||||
pbc.pinType = null;
|
||||
var argblock = py2block.convert(args[0]);
|
||||
return block(mode, func.lineno, {}, {
|
||||
"btn": objblock,
|
||||
'VAR': argblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
return converter;
|
||||
}
|
||||
pbc.moduleFunctionD.get('mixgo.button_a')['get_presses'] = getpresses_converter('sensor_mixgo_button_get_presses');
|
||||
pbc.moduleFunctionD.get('mixgo.button_b')['get_presses'] = getpresses_converter('sensor_mixgo_button_get_presses');
|
||||
|
||||
|
||||
pbc.moduleFunctionD.get('mixgo.touch1')['is_touched'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 0) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var btn = {
|
||||
'_astname': 'Name',
|
||||
'id': {
|
||||
'_astname': 'Str',
|
||||
'v': py2block.identifier(func.value.attr)
|
||||
}
|
||||
};
|
||||
pbc.pin
|
||||
pbc.pinType = "number1";
|
||||
var objblock = py2block.convert(btn);
|
||||
pbc.pinType = null;
|
||||
return block("sensor_mixgo_pin_pressed", func.lineno, {}, {
|
||||
"button":objblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
pbc.moduleFunctionD.get('mixgo.touch2')['is_touched'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 0) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var btn = {
|
||||
'_astname': 'Name',
|
||||
'id': {
|
||||
'_astname': 'Str',
|
||||
'v': py2block.identifier(func.value.attr)
|
||||
}
|
||||
};
|
||||
pbc.pin
|
||||
pbc.pinType = "number1";
|
||||
var objblock = py2block.convert(btn);
|
||||
pbc.pinType = null;
|
||||
return block("sensor_mixgo_pin_pressed", func.lineno, {}, {
|
||||
"button":objblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
pbc.moduleFunctionD.get('mixgo.touch3')['is_touched'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 0) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var btn = {
|
||||
'_astname': 'Name',
|
||||
'id': {
|
||||
'_astname': 'Str',
|
||||
'v': py2block.identifier(func.value.attr)
|
||||
}
|
||||
};
|
||||
pbc.pin
|
||||
pbc.pinType = "number1";
|
||||
var objblock = py2block.convert(btn);
|
||||
pbc.pinType = null;
|
||||
return block("sensor_mixgo_pin_pressed", func.lineno, {}, {
|
||||
"button":objblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
pbc.moduleFunctionD.get('mixgo.touch4')['is_touched'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 0) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var btn = {
|
||||
'_astname': 'Name',
|
||||
'id': {
|
||||
'_astname': 'Str',
|
||||
'v': py2block.identifier(func.value.attr)
|
||||
}
|
||||
};
|
||||
pbc.pin
|
||||
pbc.pinType = "number1";
|
||||
var objblock = py2block.convert(btn);
|
||||
pbc.pinType = null;
|
||||
return block("sensor_mixgo_pin_pressed", func.lineno, {}, {
|
||||
"button":objblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
pbc.moduleFunctionD.get('mixgo.infrared_left')['near'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 0) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
return block("sensor_mixgo_pin_near", func.lineno, {"direction":'left'}, {}, {
|
||||
"inline": "true"
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
pbc.moduleFunctionD.get('mixgo.infrared_right')['near'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 0) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
return block("sensor_mixgo_pin_near", func.lineno, {"direction":'right'}, {}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('near')['Infrared'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 0) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var pin=py2block.identifier(func.value.func.attr);
|
||||
var mac=py2block.identifier(func.value.func.value.id);
|
||||
if(pin==="Infrared" && mac==="mixgo"){
|
||||
|
||||
pbc.pinType = "pins_analog_pin";
|
||||
var pinblock = py2block.convert(func.value.args[0]);
|
||||
pbc.pinType = null;
|
||||
|
||||
|
||||
return block("sensor_mixgo_extern_pin_near", func.lineno, {}, {
|
||||
"PIN": pinblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
pbc.moduleFunctionD.get('mixgo')['get_brightness'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 0 && args.length !== 1) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
if (args.length == 0){
|
||||
return block("sensor_mixgo_light", func.lineno, {}, {}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
if (args.length == 1){
|
||||
pbc.pinType = "pins_analog_pin";
|
||||
var pinblock = py2block.convert(args[0]);
|
||||
pbc.pinType = null;
|
||||
return block("sensor_mixgo_extern_light", func.lineno, {}, {
|
||||
'PIN':pinblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
pbc.moduleFunctionD.get('mixgo')['get_soundlevel'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 0 && args.length !== 1) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
if (args.length == 0){
|
||||
return block("sensor_sound", func.lineno, {}, {}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
if (args.length == 1){
|
||||
pbc.pinType = "pins_analog_pin";
|
||||
var pinblock = py2block.convert(args[0]);
|
||||
pbc.pinType = null;
|
||||
return block("sensor_mixgo_extern_sound", func.lineno, {}, {
|
||||
'PIN':pinblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
pbc.assignD.get('RTC')['check_assign'] = function(py2block, node, targets, value) {
|
||||
var moduleName = py2block.Name_str(value.func.value);
|
||||
var funcName = py2block.identifier(value.func.attr);
|
||||
value.args = value.args || [];
|
||||
if(value._astname === "Call" && moduleName === "machine" && funcName === "RTC" && !value.args.length)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
pbc.assignD.get('RTC')['create_block'] = function(py2block, node, targets, value){
|
||||
|
||||
var objblock=py2block.convert(targets[0]);
|
||||
|
||||
return [block("sensor_rtc_init", node.lineno, {}, {
|
||||
'SUB':objblock
|
||||
},
|
||||
{
|
||||
"inline":"true"
|
||||
}
|
||||
)];
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('datetime')['RTC'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
/*if (keywords.length !== 0) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}*/
|
||||
if(args.length==0){
|
||||
var objblock=py2block.convert(func.value);
|
||||
return block("RTC_get_time", func.lineno, {}, {
|
||||
'SUB':objblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
else if(args.length==1&&args[0]._astname=="Tuple"){
|
||||
|
||||
var objblock=py2block.convert(func.value);
|
||||
var yearblock=py2block.convert(args[0].elts[0])
|
||||
var monthblock=py2block.convert(args[0].elts[1])
|
||||
var dayblock=py2block.convert(args[0].elts[2])
|
||||
var weekdayblock=py2block.convert(args[0].elts[3])
|
||||
var hourblock=py2block.convert(args[0].elts[4])
|
||||
var minuteblock=py2block.convert(args[0].elts[5])
|
||||
var secondblock=py2block.convert(args[0].elts[6])
|
||||
var millisecondblock=py2block.convert(args[0].elts[7])
|
||||
|
||||
return [block("RTC_set_datetime", func.lineno, {}, {
|
||||
'SUB':objblock,
|
||||
'year':yearblock,
|
||||
'month':monthblock,
|
||||
'day':dayblock,
|
||||
'weekday':weekdayblock,
|
||||
'hour':hourblock,
|
||||
'minute':minuteblock,
|
||||
'second':secondblock,
|
||||
'millisecond':millisecondblock,
|
||||
}, {
|
||||
"inline": "false"
|
||||
})];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/*I2C出现了一些问题,待解决*/
|
||||
pbc.assignD.get('i2c')['check_assign'] = function (py2block, node, targets, value) {
|
||||
var funcName = py2block.identifier(value.func.attr);
|
||||
var moduleName = py2block.identifier(value.func.value.id);
|
||||
if (value._astname === "Call" && ['MPU9250', 'SHT20', 'BMP280', 'ADXL345'].indexOf(funcName) != -1
|
||||
&& ['mpu9250', 'sht20', 'bmp280', 'adxl345'].indexOf(moduleName) != -1 && value.args.length === 1)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
pbc.assignD.get('i2c')['create_block'] = function (py2block, node, targets, value) {
|
||||
var funcblock = py2block.identifier(value.func.attr);
|
||||
var mpublock = py2block.convert(targets[0]);
|
||||
var i2cblock = py2block.convert(value.args[0]);
|
||||
return block("sensor_use_i2c_init", node.lineno, { "key": funcblock }, {
|
||||
'I2CSUB': i2cblock,
|
||||
'SUB': mpublock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
function getAcceleration(mode){
|
||||
function converter(py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 0) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var mpublock=py2block.convert(func.value)
|
||||
return block('sensor_mpu9250_get_acceleration', func.lineno, {
|
||||
"key": mode
|
||||
}, {
|
||||
'SUB': mpublock
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
return converter;
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('mpu9250_get_x')['mpu'] = getAcceleration('x');
|
||||
pbc.objectFunctionD.get('mpu9250_get_y')['mpu'] = getAcceleration('y');
|
||||
pbc.objectFunctionD.get('mpu9250_get_z')['mpu'] = getAcceleration('z');
|
||||
pbc.objectFunctionD.get('mpu9250_get_values')['mpu'] = getAcceleration('values');
|
||||
|
||||
function getADXLAcceleration(mode){
|
||||
function converter(py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 0) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var mpublock=py2block.convert(func.value)
|
||||
return block('sensor_adxl345_get_acceleration', func.lineno, {
|
||||
"key": mode
|
||||
}, {
|
||||
'SUB': mpublock
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
return converter;
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('readX')['snsr'] = getADXLAcceleration('x');
|
||||
pbc.objectFunctionD.get('readY')['snsr'] = getADXLAcceleration('y');
|
||||
pbc.objectFunctionD.get('readZ')['snsr'] = getADXLAcceleration('z');
|
||||
pbc.objectFunctionD.get('readXYZ')['snsr'] = getADXLAcceleration('values');
|
||||
|
||||
function getMagnetic(mode){
|
||||
function converter(py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 0) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var mpublock=py2block.convert(func.value)
|
||||
return block('sensor_mpu9250_get_magnetic', func.lineno, {
|
||||
"key": mode
|
||||
}, {
|
||||
'SUB': mpublock
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
return converter;
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('mpu9250_magnetic_x')['mpu'] = getMagnetic('x');
|
||||
pbc.objectFunctionD.get('mpu9250_magnetic_y')['mpu'] = getMagnetic('y');
|
||||
pbc.objectFunctionD.get('mpu9250_magnetic_z')['mpu'] = getMagnetic('z');
|
||||
pbc.objectFunctionD.get('mpu9250_magnetic_values')['mpu'] = getMagnetic('values');
|
||||
|
||||
function getGyro(mode){
|
||||
function converter(py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 0) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var mpublock=py2block.convert(func.value)
|
||||
return block('sensor_mpu9250_get_gyro', func.lineno, {
|
||||
"key": mode
|
||||
}, {
|
||||
'SUB': mpublock
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
return converter;
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('mpu9250_gyro_x')['mpu'] = getGyro('x');
|
||||
pbc.objectFunctionD.get('mpu9250_gyro_y')['mpu'] = getGyro('y');
|
||||
pbc.objectFunctionD.get('mpu9250_gyro_z')['mpu'] = getGyro('z');
|
||||
pbc.objectFunctionD.get('mpu9250_gyro_values')['mpu'] = getGyro('values');
|
||||
|
||||
function sensorcompass(mode){
|
||||
function converter(py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 0) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var mpublock=py2block.convert(func.value)
|
||||
return block('sensor_mpu9250_field_strength', func.lineno, {
|
||||
"compass": mode
|
||||
}, {
|
||||
'SUB': mpublock
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
return converter;
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('mpu9250_get_field_strength')['mpu'] = sensorcompass('strength');
|
||||
pbc.objectFunctionD.get('heading')['mpu'] = sensorcompass('heading');
|
||||
|
||||
pbc.objectFunctionD.get('mpu9250_get_temperature')['mpu'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 0) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var mpublock=py2block.convert(func.value)
|
||||
return block("sensor_mpu9250_temperature", func.lineno, {}, {
|
||||
'SUB': mpublock
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
|
||||
function sensorBmp(mode){
|
||||
function converter(py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 0) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var mpublock=py2block.convert(func.value)
|
||||
return block('sensor_bmp', func.lineno, {
|
||||
"key": mode
|
||||
}, {
|
||||
'SUB': mpublock
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
return converter;
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('get_BMP_temperature')['mpu'] = sensorBmp('get_BMP_temperature()');
|
||||
pbc.objectFunctionD.get('get_BMP_pressure')['mpu'] = sensorBmp('get_BMP_pressure()');
|
||||
|
||||
function sensorSht(mode){
|
||||
function converter(py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 0) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var mpublock=py2block.convert(func.value)
|
||||
return block('sensor_sht', func.lineno, {
|
||||
"key": mode
|
||||
}, {
|
||||
'SUB': mpublock
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
return converter;
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('get_SHT_temperature')['mpu'] = sensorSht('get_SHT_temperature()');
|
||||
pbc.objectFunctionD.get('get_SHT_relative_humidity')['mpu'] = sensorSht('get_SHT_relative_humidity()');
|
||||
|
||||
|
||||
|
||||
function dht(mode){
|
||||
function converter(py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 2) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
pbc.pinType="pins_digital_pin";
|
||||
var pinblock=py2block.convert(args[1]);
|
||||
pbc.pinType=null;
|
||||
var dhtblock=py2block.identifier(args[0].s);
|
||||
return block('sensor_dht11', func.lineno, {
|
||||
'TYPE':dhtblock,
|
||||
'WHAT':mode
|
||||
}, {
|
||||
"PIN":pinblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
return converter;
|
||||
}
|
||||
|
||||
pbc.moduleFunctionD.get('dhtx')['get_dht_temperature'] = dht('temperature');
|
||||
pbc.moduleFunctionD.get('dhtx')['get_dht_relative_humidity'] = dht('relative_humidity');
|
||||
pbc.moduleFunctionD.get('dhtx')['get_dht_tempandhum'] = dht('tempandhum');
|
||||
|
||||
|
||||
|
||||
pbc.objectFunctionD.get('checkdist')['sonar'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (func.value.args.length !== 2) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
pbc.pinType="pins_digital_pin";
|
||||
var trigblock=py2block.convert(func.value.args[0]);
|
||||
var echoblock=py2block.convert(func.value.args[1]);
|
||||
pbc.pinType=null;
|
||||
return block("HCSR04", func.lineno, {}, {
|
||||
"PIN1":trigblock,
|
||||
"PIN2":echoblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
pbc.objectFunctionD.get('mpu9250_is_gesture')['mpu'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 1) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var gesblock=py2block.identifier(args[0].s);
|
||||
var mpublock=py2block.convert(func.value)
|
||||
return block("sensor_mpu9250_gesture", func.lineno, {
|
||||
'gesture':gesblock
|
||||
}, {
|
||||
'SUB': mpublock
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
pbc.moduleFunctionD.get('mixgo.button_a')['irq'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 0 || keywords.length!==2) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
|
||||
var btn = {
|
||||
'_astname': 'Name',
|
||||
'id': {
|
||||
'_astname': 'Str',
|
||||
'v': py2block.identifier(func.value.attr)
|
||||
}
|
||||
};
|
||||
pbc.pinType="pins_button";
|
||||
var objblock=py2block.convert(btn);
|
||||
pbc.pinType=null;
|
||||
var irq=py2block.identifier(keywords[1].value.attr);
|
||||
var pin=py2block.identifier(keywords[1].value.value.attr);
|
||||
var mac=py2block.identifier(keywords[1].value.value.value.id)
|
||||
|
||||
|
||||
var mode = mac+"."+pin+"."+py2block.identifier(keywords[1].value.attr);
|
||||
|
||||
pbc.pinType = "pins_callback";
|
||||
var callback = py2block.convert(keywords[0].value);
|
||||
pbc.pinType = null;
|
||||
|
||||
return [block("sensor_mixgo_button_attachInterrupt", func.lineno, {"mode":mode}, {
|
||||
"btn": objblock,
|
||||
"DO": callback
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
|
||||
}
|
||||
|
||||
pbc.moduleFunctionD.get('mixgo.button_b')['irq'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 0 || keywords.length!==2) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
|
||||
var btn = {
|
||||
'_astname': 'Name',
|
||||
'id': {
|
||||
'_astname': 'Str',
|
||||
'v': py2block.identifier(func.value.attr)
|
||||
}
|
||||
};
|
||||
pbc.pinType="pins_button";
|
||||
var objblock=py2block.convert(btn);
|
||||
pbc.pinType=null;
|
||||
var irq=py2block.identifier(keywords[1].value.attr);
|
||||
var pin=py2block.identifier(keywords[1].value.value.attr);
|
||||
var mac=py2block.identifier(keywords[1].value.value.value.id)
|
||||
|
||||
|
||||
var mode = mac+"."+pin+"."+py2block.identifier(keywords[1].value.attr);
|
||||
|
||||
pbc.pinType = "pins_callback";
|
||||
var callback = py2block.convert(keywords[0].value);
|
||||
pbc.pinType = null;
|
||||
|
||||
return [block("sensor_mixgo_button_attachInterrupt", func.lineno, {"mode":mode}, {
|
||||
"btn": objblock,
|
||||
"DO": callback
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('was_pressed')['Button'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 1) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var pin=py2block.identifier(func.value.func.attr);
|
||||
var mac=py2block.identifier(func.value.func.value.id);
|
||||
if(pin==="Button" && mac==="mixgo"){
|
||||
|
||||
pbc.pinType = "pins_digital_pin";
|
||||
var pinblock = py2block.convert(func.value.args[0]);
|
||||
pbc.pinType = null;
|
||||
|
||||
pbc.pinType = "pins_digital";
|
||||
var argblock = py2block.convert(args[0]);
|
||||
pbc.pinType = null;
|
||||
|
||||
return block('sensor_mixgo_extern_button_was_pressed', func.lineno, {}, {
|
||||
"PIN": pinblock,
|
||||
"STAT": argblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('get_presses')['Button'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 1) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var pin=py2block.identifier(func.value.func.attr);
|
||||
var mac=py2block.identifier(func.value.func.value.id);
|
||||
if(pin==="Button" && mac==="mixgo"){
|
||||
|
||||
pbc.pinType = "pins_digital_pin";
|
||||
var pinblock = py2block.convert(func.value.args[0]);
|
||||
pbc.pinType = null;
|
||||
var argblock = py2block.convert(args[0]);
|
||||
return block('sensor_mixgo_extern_button_get_presses', func.lineno, {}, {
|
||||
"PIN": pinblock,
|
||||
'VAR':argblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('is_pressed')['Button'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 1) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var pin=py2block.identifier(func.value.func.attr);
|
||||
var mac=py2block.identifier(func.value.func.value.id);
|
||||
if(pin==="Button" && mac==="mixgo"){
|
||||
|
||||
pbc.pinType = "pins_digital_pin";
|
||||
var pinblock = py2block.convert(func.value.args[0]);
|
||||
pbc.pinType = null;
|
||||
|
||||
pbc.pinType = "pins_digital";
|
||||
var argblock = py2block.convert(args[0]);
|
||||
pbc.pinType = null;
|
||||
|
||||
return block('sensor_mixgo_extern_button_is_pressed', func.lineno, {}, {
|
||||
"PIN": pinblock,
|
||||
"STAT": argblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
pbc.moduleFunctionD.get('ds18x20x')['get_ds18x20_temperature'] = function(py2block, func, args, keywords, starargs, kwargs, node){
|
||||
if (args.length !== 1) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
pbc.pinType="pins_digital_pin";
|
||||
var argblock = py2block.convert(args[0]);
|
||||
pbc.pinType = null;
|
||||
return block("sensor_ds18x20", func.lineno, {}, {
|
||||
"PIN":argblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('calibrate')['mpu'] = function(py2block, func, args, keywords, starargs, kwargs, node){
|
||||
if (args.length !== 0) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var objblock = py2block.convert(func.value);
|
||||
return [block("sensor_mpu9250_calibrate_compass", func.lineno, {}, {
|
||||
"SUB": objblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
};
|
||||
|
||||
pbc.objectFunctionD.get('reset_calibrate')['mpu'] = function(py2block, func, args, keywords, starargs, kwargs, node){
|
||||
if (args.length !== 0) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var objblock = py2block.convert(func.value);
|
||||
return [block("sensor_compass_reset", func.lineno, {}, {
|
||||
"SUB": objblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
};
|
||||
|
||||
pbc.moduleFunctionD.get('lm35')['get_LM35_temperature'] = function(py2block, func, args, keywords, starargs, kwargs, node){
|
||||
if (args.length !== 1) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
pbc.pinType="pins_analog_pin";
|
||||
var argblock = py2block.convert(args[0]);
|
||||
pbc.pinType = null;
|
||||
return block("sensor_lm35", func.lineno, {}, {
|
||||
"PIN":argblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
198
boards/default_src/micropython/converters/serial.js
Normal file
198
boards/default_src/micropython/converters/serial.js
Normal file
@@ -0,0 +1,198 @@
|
||||
|
||||
pbc.globalFunctionD['print'] = function(py2block, func, args, keywords, starargs, kwargs, node){
|
||||
if (args.length === 1 && keywords.length === 1
|
||||
&& py2block.identifier(keywords[0].arg) === "end"
|
||||
&& keywords[0].value._astname === "Str"
|
||||
//&& py2block.Str_value(keywords[0].value) === ""
|
||||
){ if(py2block.Str_value(keywords[0].value) === ""){
|
||||
var argblock = py2block.convert(args[0]);
|
||||
return [block("system_print_inline", func.lineno, {}, {
|
||||
'VAR':argblock
|
||||
}, {
|
||||
"inline": "false"
|
||||
})];
|
||||
}
|
||||
else{
|
||||
var argblock = py2block.convert(args[0]);
|
||||
return [block("system_print_end", func.lineno, {
|
||||
}, {
|
||||
'VAR':argblock,
|
||||
'END':py2block.convert(keywords[0].value)
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
}else if (args.length === 1 && keywords.length === 0) {
|
||||
var argblock = py2block.convert(args[0]);
|
||||
return [block("system_print", func.lineno, {}, {
|
||||
'VAR':argblock
|
||||
}, {
|
||||
"inline": "false"
|
||||
})];
|
||||
}else if (args.length != 1 && keywords.length === 0) { //print()
|
||||
var d = py2block.convertElements("ADD", args);
|
||||
|
||||
return [block("system_print_many", node.lineno, {
|
||||
}, d, {
|
||||
"inline": "true",
|
||||
}, {
|
||||
"@items":args.length
|
||||
})];
|
||||
|
||||
}else{
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
pbc.globalFunctionD['input'] = function(py2block, func, args, keywords, starargs, kwargs, node){
|
||||
if (args.length !== 1) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var argblock = py2block.convert(args[0]);
|
||||
return block("system_input", func.lineno, {}, {
|
||||
'VAR':argblock
|
||||
}, {
|
||||
"inline": "false"
|
||||
});
|
||||
}
|
||||
pbc.assignD.get('UART')['check_assign'] = function(py2block, node, targets, value) {
|
||||
if(value._astname != "Call" || value.func._astname != "Attribute" || value.func.value._astname != "Name"){
|
||||
return false;
|
||||
}
|
||||
var moduleName = py2block.Name_str(value.func.value);
|
||||
var funcName = py2block.identifier(value.func.attr);
|
||||
if(value._astname === "Call" && moduleName === "machine"
|
||||
&& funcName === "UART" && value.args.length === 2)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
pbc.assignD.get('UART')['create_block'] = function(py2block, node, targets, value){
|
||||
pbc.pinType = "serial_print";
|
||||
var pinblock = py2block.identifier(value.args[0].n);
|
||||
var countblock = py2block.identifier(value.args[1].n);
|
||||
pbc.pinType = null;
|
||||
return block("serial_softserial", node.lineno, {
|
||||
"mode":pinblock,
|
||||
'baudrate':countblock
|
||||
}, { },
|
||||
{
|
||||
"inline":"true"
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
function serial_write(mode){
|
||||
function converter(py2block, func, args, keywords, starargs, kwargs, node){
|
||||
if (args.length !== 1) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var astname = args[0]._astname;
|
||||
if(astname === "Call"){
|
||||
if(args[0].func._astname == "Name" && py2block.Name_str(args[0].func) === "str"){ //serial.write(str("XXX"))
|
||||
return [block("serial_print", func.lineno, {
|
||||
"mode":mode
|
||||
}, {
|
||||
"CONTENT":py2block.convert(args[0].args[0]),
|
||||
}, {
|
||||
"inline": "false"
|
||||
})];
|
||||
}
|
||||
}else if(astname === "BinOp"){
|
||||
if(args[0].op.name === "Add" && args[0].right._astname === "Str"
|
||||
&& py2block.Str_value(args[0].right) === "\r\n"
|
||||
&& args[0].left._astname === "Call" && args[0].left.func._astname == "Name"
|
||||
&& py2block.Name_str(args[0].left.func) === "str"
|
||||
){
|
||||
if(args[0].left.args[0]._astname === "Call"
|
||||
&& args[0].left.args[0].func._astname === "Name"
|
||||
&& py2block.Name_str(args[0].left.args[0].func) in {"hex":16,"bin":2,"oct":8}){
|
||||
//serial.write(str(hex(XX)) + "\r\n")
|
||||
pbc.inScope = "lcd_init";
|
||||
var numblock=py2block.convert(args[0].left.args[0].args[0]);
|
||||
pbc.inScope=null;
|
||||
return [block("serial_print_hex", func.lineno, {
|
||||
"mode":mode,
|
||||
"STAT":py2block.Name_str(args[0].left.args[0].func),
|
||||
}, {
|
||||
"CONTENT":numblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}else{
|
||||
return [block("serial_println", func.lineno, {
|
||||
"mode":mode
|
||||
}, { //serial.write(str("XX") + "\r\n")
|
||||
"CONTENT": py2block.convert(args[0].left.args[0]),
|
||||
}, {
|
||||
"inline": "false"
|
||||
})];
|
||||
}
|
||||
}
|
||||
}
|
||||
return [block("serial_print", func.lineno, {}, {
|
||||
"CONTENT":py2block.convert(args[0]),
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
return converter
|
||||
}
|
||||
pbc.moduleFunctionD.get('uart0')['write'] = serial_write('0')
|
||||
pbc.moduleFunctionD.get('uart1')['write'] = serial_write('1')
|
||||
pbc.moduleFunctionD.get('uart2')['write'] = serial_write('2')
|
||||
|
||||
pbc.assignD.get('uart0')['check_assign'] = function (py2block, node, targets, value) {
|
||||
var funcName = py2block.identifier(value.func.id);
|
||||
if (value._astname === "Call"&& funcName === "UART" && value.args.length === 2)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
pbc.assignD.get('uart0')['create_block'] = function (py2block, node, targets, value) {
|
||||
pbc.pinType = 'serial_print';
|
||||
var argblock1 = py2block.convert(value.args[1])
|
||||
mode=targets[0].id.v
|
||||
if (mode=="uart0"){
|
||||
mode='0'
|
||||
}
|
||||
else if(mode=="uart1"){
|
||||
mode='1'
|
||||
}
|
||||
else if(mode=="uart2"){
|
||||
mode='2'
|
||||
}
|
||||
return block("serial_softserial", node.lineno, {
|
||||
"mode":mode
|
||||
}, {
|
||||
"CONTENT":py2block.convert(value.args[0]),
|
||||
"TEXT":argblock1,
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
|
||||
function getSerial(mode,fun_type){
|
||||
function converter(py2block, func, args, keywords, starargs, kwargs, node){
|
||||
if(args.length !==0){
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
return block(fun_type, func.lineno, {
|
||||
"mode":mode
|
||||
}, {
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
return converter;
|
||||
}
|
||||
pbc.moduleFunctionD.get('uart0')['any'] = getSerial('0','serial_any')
|
||||
pbc.moduleFunctionD.get('uart1')['any'] = getSerial('1','serial_any')
|
||||
pbc.moduleFunctionD.get('uart2')['any'] = getSerial('2','serial_any')
|
||||
pbc.moduleFunctionD.get('uart0')['read'] = getSerial('0','serial_readstr')
|
||||
pbc.moduleFunctionD.get('uart1')['read'] = getSerial('1','serial_readstr')
|
||||
pbc.moduleFunctionD.get('uart2')['read'] = getSerial('2','serial_readstr')
|
||||
pbc.moduleFunctionD.get('uart0')['readline'] = getSerial('0','serial_readline')
|
||||
pbc.moduleFunctionD.get('uart1')['readline'] = getSerial('1','serial_readline')
|
||||
pbc.moduleFunctionD.get('uart2')['readline'] = getSerial('2','serial_readline')
|
||||
|
||||
108
boards/default_src/micropython/export.js
Normal file
108
boards/default_src/micropython/export.js
Normal file
@@ -0,0 +1,108 @@
|
||||
import * as MicroPythonActuatorExternBlocks from './blocks/actuator_extern';
|
||||
import * as MicroPythonActuatorOnBoardBlocks from './blocks/actuator_onboard';
|
||||
import * as MicroPythonActuatorBlocks from './blocks/actuator';
|
||||
import * as MicroPythonAISensorBlocks from './blocks/ai_sensor';
|
||||
import * as MicroPythonAIBlocks from './blocks/ai';
|
||||
import * as MicroPythonBlynkBlocks from './blocks/blynk';
|
||||
import * as MicroPythonCCG1Blocks from './blocks/cc_g1';
|
||||
import * as MicroPythonCEGOBlocks from './blocks/ce_go';
|
||||
import * as MicroPythonCommunicateBlocks from './blocks/communicate';
|
||||
import * as MicroPythonControlBlocks from './blocks/control';
|
||||
import * as MicroPythonDisplayExternBlocks from './blocks/display_extern';
|
||||
import * as MicroPythonDisplayOnBoardBlocks from './blocks/display_onboard';
|
||||
import * as MicroPythonDisplayBlocks from './blocks/display';
|
||||
import * as MicroPythonFactoryBlocks from './blocks/factory';
|
||||
import * as MicroPythonInputBlocks from './blocks/inout';
|
||||
import * as MicroPythonIotBlocks from './blocks/iot';
|
||||
import * as MicroPythonNetworkBlocks from './blocks/network';
|
||||
import * as MicroPythonNovaG1Blocks from './blocks/nova_g1';
|
||||
import * as MicroPythonPeG1Blocks from './blocks/pe_g1';
|
||||
import * as MicroPythonPinsBlocks from './blocks/pins';
|
||||
import * as MicroPythonSensorExternBlocks from './blocks/sensor_extern';
|
||||
import * as MicroPythonSensorOnBoardBlocks from './blocks/sensor_onboard';
|
||||
import * as MicroPythonSensorBlocks from './blocks/sensor';
|
||||
import * as MicroPythonSerialBlocks from './blocks/serial';
|
||||
import * as MicroPythonSystemBlocks from './blocks/system';
|
||||
import * as MicroPythonWeatherBlocks from './blocks/weather';
|
||||
|
||||
import * as MicroPythonActuatorExternGenerators from './generators/actuator_extern';
|
||||
import * as MicroPythonActuatorOnBoardGenerators from './generators/actuator_onboard';
|
||||
import * as MicroPythonActuatorGenerators from './generators/actuator';
|
||||
import * as MicroPythonAISensorGenerators from './generators/ai_sensor';
|
||||
import * as MicroPythonAIGenerators from './generators/ai';
|
||||
import * as MicroPythonBlynkGenerators from './generators/blynk';
|
||||
import * as MicroPythonCCG1Generators from './generators/cc_g1';
|
||||
import * as MicroPythonCEGOGenerators from './generators/ce_go';
|
||||
import * as MicroPythonCommunicateGenerators from './generators/communicate';
|
||||
import * as MicroPythonControlGenerators from './generators/control';
|
||||
import * as MicroPythonDisplayExternGenerators from './generators/display_extern';
|
||||
import * as MicroPythonDisplayOnBoardGenerators from './generators/display_onboard';
|
||||
import * as MicroPythonDisplayGenerators from './generators/display';
|
||||
import * as MicroPythonFactoryGenerators from './generators/factory';
|
||||
import * as MicroPythonInputGenerators from './generators/inout';
|
||||
import * as MicroPythonIotGenerators from './generators/iot';
|
||||
import * as MicroPythonNetworkGenerators from './generators/network';
|
||||
import * as MicroPythonNovaG1Generators from './generators/nova_g1';
|
||||
import * as MicroPythonPeG1Generators from './generators/pe_g1';
|
||||
import * as MicroPythonPinsGenerators from './generators/pins';
|
||||
import * as MicroPythonSensorExternGenerators from './generators/sensor_extern';
|
||||
import * as MicroPythonSensorOnBoardGenerators from './generators/sensor_onboard';
|
||||
import * as MicroPythonSensorGenerators from './generators/sensor';
|
||||
import * as MicroPythonSerialGenerators from './generators/serial';
|
||||
import * as MicroPythonSystemGenerators from './generators/system';
|
||||
import * as MicroPythonWeatherGenerators from './generators/weather';
|
||||
|
||||
export {
|
||||
MicroPythonActuatorExternBlocks,
|
||||
MicroPythonActuatorOnBoardBlocks,
|
||||
MicroPythonActuatorBlocks,
|
||||
MicroPythonAISensorBlocks,
|
||||
MicroPythonAIBlocks,
|
||||
MicroPythonBlynkBlocks,
|
||||
MicroPythonCCG1Blocks,
|
||||
MicroPythonCEGOBlocks,
|
||||
MicroPythonCommunicateBlocks,
|
||||
MicroPythonControlBlocks,
|
||||
MicroPythonDisplayExternBlocks,
|
||||
MicroPythonDisplayOnBoardBlocks,
|
||||
MicroPythonDisplayBlocks,
|
||||
MicroPythonFactoryBlocks,
|
||||
MicroPythonInputBlocks,
|
||||
MicroPythonIotBlocks,
|
||||
MicroPythonNetworkBlocks,
|
||||
MicroPythonNovaG1Blocks,
|
||||
MicroPythonPeG1Blocks,
|
||||
MicroPythonPinsBlocks,
|
||||
MicroPythonSensorExternBlocks,
|
||||
MicroPythonSensorOnBoardBlocks,
|
||||
MicroPythonSensorBlocks,
|
||||
MicroPythonSerialBlocks,
|
||||
MicroPythonSystemBlocks,
|
||||
MicroPythonWeatherBlocks,
|
||||
MicroPythonActuatorExternGenerators,
|
||||
MicroPythonActuatorOnBoardGenerators,
|
||||
MicroPythonActuatorGenerators,
|
||||
MicroPythonAISensorGenerators,
|
||||
MicroPythonAIGenerators,
|
||||
MicroPythonBlynkGenerators,
|
||||
MicroPythonCCG1Generators,
|
||||
MicroPythonCEGOGenerators,
|
||||
MicroPythonCommunicateGenerators,
|
||||
MicroPythonControlGenerators,
|
||||
MicroPythonDisplayExternGenerators,
|
||||
MicroPythonDisplayOnBoardGenerators,
|
||||
MicroPythonDisplayGenerators,
|
||||
MicroPythonFactoryGenerators,
|
||||
MicroPythonInputGenerators,
|
||||
MicroPythonIotGenerators,
|
||||
MicroPythonNetworkGenerators,
|
||||
MicroPythonNovaG1Generators,
|
||||
MicroPythonPeG1Generators,
|
||||
MicroPythonPinsGenerators,
|
||||
MicroPythonSensorExternGenerators,
|
||||
MicroPythonSensorOnBoardGenerators,
|
||||
MicroPythonSensorGenerators,
|
||||
MicroPythonSerialGenerators,
|
||||
MicroPythonSystemGenerators,
|
||||
MicroPythonWeatherGenerators
|
||||
};
|
||||
214
boards/default_src/micropython/generators/actuator.js
Normal file
214
boards/default_src/micropython/generators/actuator.js
Normal file
@@ -0,0 +1,214 @@
|
||||
export const esp32_music_pitch = function (_, generator) {
|
||||
generator.definitions_['import_music'] = 'import music';
|
||||
var number_pitch = generator.valueToCode(this, 'pitch', generator.ORDER_ATOMIC);
|
||||
var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var code = 'music.pitch(' + pin + ', ' + number_pitch + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const esp32_music_pitch_with_time = function (_, generator) {
|
||||
generator.definitions_['import_music'] = 'import music';
|
||||
var number_pitch = generator.valueToCode(this, 'pitch', generator.ORDER_ATOMIC);
|
||||
var number_time = generator.valueToCode(this, 'time', generator.ORDER_ATOMIC);
|
||||
var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var code = 'music.pitch_time(' + pin + ', ' + number_pitch + ', ' + number_time + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const esp32_music_stop = function (_, generator) {
|
||||
generator.definitions_['import_music'] = 'import music';
|
||||
var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var code = 'music.stop(' + pin + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const esp32_music_set_tempo = function (_, generator) {
|
||||
generator.definitions_['import_music'] = 'import music';
|
||||
var bpm = generator.valueToCode(this, 'BPM', generator.ORDER_ASSIGNMENT);
|
||||
var ticks = generator.valueToCode(this, 'TICKS', generator.ORDER_ASSIGNMENT);
|
||||
var code = "music.set_tempo(" + ticks + ", " + bpm + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const esp32_music_get_tempo = function (_, generator) {
|
||||
generator.definitions_['import_music'] = 'import music';
|
||||
var code = "music.get_tempo()";
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const esp32_onboard_music_pitch = function (_, generator) {
|
||||
generator.definitions_['import_music'] = 'import music';
|
||||
var number_pitch = generator.valueToCode(this, 'pitch', generator.ORDER_ATOMIC);
|
||||
var code = 'music.pitch(' + number_pitch + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const esp32_onboard_music_pitch_with_time = function (_, generator) {
|
||||
generator.definitions_['import_music'] = 'import music';
|
||||
var number_pitch = generator.valueToCode(this, 'pitch', generator.ORDER_ATOMIC);
|
||||
var number_time = generator.valueToCode(this, 'time', generator.ORDER_ATOMIC);
|
||||
var code = 'music.pitch_time(' + number_pitch + ', ' + number_time + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const esp32_onboard_music_stop = function (_, generator) {
|
||||
generator.definitions_['import_music'] = 'import music';
|
||||
var code = 'music.stop(' + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const esp32_onboard_music_play_list = function (_, generator) {
|
||||
generator.definitions_['import_music'] = 'import music';
|
||||
var lst = generator.valueToCode(this, 'LIST', generator.ORDER_ASSIGNMENT);
|
||||
var code = "music.play(" + lst + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const esp32_music_play_list = function (_, generator) {
|
||||
generator.definitions_['import_music'] = 'import music';
|
||||
var lst = generator.valueToCode(this, 'LIST', generator.ORDER_ASSIGNMENT);
|
||||
var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ASSIGNMENT);
|
||||
var code = "music.play(" + lst + ", " + pin + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const esp32_mixgo_music_play_list_show = function (_, generator) {
|
||||
generator.definitions_['import_music'] = 'import music';
|
||||
generator.definitions_['import_matrix'] = 'import matrix';
|
||||
var lst = generator.valueToCode(this, 'LIST', generator.ORDER_ASSIGNMENT);
|
||||
var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ASSIGNMENT);
|
||||
// var display = generator.valueToCode(this, 'DISPLAY', generator.ORDER_ASSIGNMENT);
|
||||
var code = "music.play_show(" + lst + ", " + pin + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const esp32_music_reset = function (_, generator) {
|
||||
generator.definitions_['import_music'] = 'import music';
|
||||
return "music.reset()\n";
|
||||
}
|
||||
|
||||
export const servo_move = function (_, generator) {
|
||||
generator.definitions_['import_servo'] = 'import servo';
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var value_degree = generator.valueToCode(this, 'DEGREE', generator.ORDER_ATOMIC);
|
||||
var code = 'servo.servo_write_angle(' + dropdown_pin + ',' + value_degree + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const number = function (_, generator) {
|
||||
var code = this.getFieldValue('op');
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const ledswitch = function (_, generator) {
|
||||
var code = this.getFieldValue('flag');
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const actuator_extern_led_bright = function (_, generator) {
|
||||
generator.definitions_['import_mixgo'] = 'import mixgo';
|
||||
var bright = generator.valueToCode(this, 'bright', generator.ORDER_ATOMIC);
|
||||
var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
// var bright = this.getFieldValue('bright');
|
||||
var code = "mixgo.led(" + pin + ").setonoff(" + bright + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const actuator_extern_get_led_bright = function (_, generator) {
|
||||
generator.definitions_['import_mixgo'] = 'import mixgo';
|
||||
var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var code = "mixgo.led(" + pin + ").getonoff(" + ")";
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const actuator_extern_led_brightness = function (_, generator) {
|
||||
generator.definitions_['import_mixgo'] = 'import mixgo';
|
||||
var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var flag = generator.valueToCode(this, 'bright', generator.ORDER_ATOMIC);
|
||||
var code = 'mixgo.led(' + pin + ').setbrightness(' + flag + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const actuator_led_bright = function (_, generator) {
|
||||
generator.definitions_['import_mixgo'] = 'import mixgo';
|
||||
var op = generator.valueToCode(this, 'led', generator.ORDER_ATOMIC);
|
||||
var bright = generator.valueToCode(this, 'bright', generator.ORDER_ATOMIC);
|
||||
// var bright = this.getFieldValue('bright');
|
||||
var code = "mixgo.led" + op + ".setonoff(" + bright + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const actuator_get_led_bright = function (_, generator) {
|
||||
generator.definitions_['import_mixgo'] = 'import mixgo';
|
||||
var op = generator.valueToCode(this, 'led', generator.ORDER_ATOMIC);
|
||||
var code = "mixgo.led" + op + ".getonoff(" + ")";
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const actuator_led_brightness = function (_, generator) {
|
||||
generator.definitions_['import_mixgo'] = 'import mixgo';
|
||||
var op = generator.valueToCode(this, 'led', generator.ORDER_ATOMIC);
|
||||
var flag = generator.valueToCode(this, 'bright', generator.ORDER_ATOMIC);
|
||||
var code = 'mixgo.led' + op + '.setbrightness(' + flag + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const actuator_neopixel_init = function (_, generator) {
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var dropdown_rgbpin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var value_ledcount = generator.valueToCode(this, 'LEDCOUNT', generator.ORDER_ATOMIC);
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
generator.definitions_['import_neopixel'] = 'import neopixel';
|
||||
var code = v + ' = neopixel.NeoPixel(machine.Pin(' + dropdown_rgbpin + '), ' + value_ledcount + ', timing = True)\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const actuator_neopixel_write = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
generator.definitions_['import_neopixel'] = 'import neopixel';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var code = v + '.write()\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const actuator_neopixel_rgb = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
generator.definitions_['import_neopixel'] = 'import neopixel';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var value_led = generator.valueToCode(this, '_LED_', generator.ORDER_ATOMIC);
|
||||
var value_rvalue = generator.valueToCode(this, 'RVALUE', generator.ORDER_ATOMIC);
|
||||
var value_gvalue = generator.valueToCode(this, 'GVALUE', generator.ORDER_ATOMIC);
|
||||
var value_bvalue = generator.valueToCode(this, 'BVALUE', generator.ORDER_ATOMIC);
|
||||
var code = v + '[' + value_led + '] = (' + value_rvalue + ', ' + value_gvalue + ', ' + value_bvalue + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const actuator_onboard_neopixel_write = function (_, generator) {
|
||||
generator.definitions_['import_mixgo'] = 'import mixgo';
|
||||
var code = 'mixgo.rgb.write()\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const actuator_onboard_neopixel_rgb = function (_, generator) {
|
||||
generator.definitions_['import_mixgo'] = 'import mixgo';
|
||||
var value_led = generator.valueToCode(this, '_LED_', generator.ORDER_ATOMIC);
|
||||
var value_rvalue = generator.valueToCode(this, 'RVALUE', generator.ORDER_ATOMIC);
|
||||
var value_gvalue = generator.valueToCode(this, 'GVALUE', generator.ORDER_ATOMIC);
|
||||
var value_bvalue = generator.valueToCode(this, 'BVALUE', generator.ORDER_ATOMIC);
|
||||
var code = 'mixgo.rgb[' + value_led + '] = (' + value_rvalue + ', ' + value_gvalue + ', ' + value_bvalue + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const actuator_onboard_neopixel_rgb_all = function (_, generator) {
|
||||
generator.definitions_['import_mixgo'] = 'import mixgo';
|
||||
var value_rvalue = generator.valueToCode(this, 'RVALUE', generator.ORDER_ATOMIC);
|
||||
var value_gvalue = generator.valueToCode(this, 'GVALUE', generator.ORDER_ATOMIC);
|
||||
var value_bvalue = generator.valueToCode(this, 'BVALUE', generator.ORDER_ATOMIC);
|
||||
var code = 'mixgo.rgb.fill((' + value_rvalue + ', ' + value_gvalue + ', ' + value_bvalue + '))\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const led_light = actuator_led_bright;
|
||||
export const get_led_bright = actuator_get_led_bright;
|
||||
export const led_brightness = actuator_led_brightness;
|
||||
589
boards/default_src/micropython/generators/actuator_extern.js
Normal file
589
boards/default_src/micropython/generators/actuator_extern.js
Normal file
@@ -0,0 +1,589 @@
|
||||
import { Boards } from 'mixly';
|
||||
|
||||
export const servo_init = function (_, generator) {
|
||||
generator.definitions_['import_servo'] = 'import servo';
|
||||
generator.definitions_['import_board'] = 'import board';
|
||||
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var code = v + ' = servo.Servo(board.' + dropdown_pin + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const servo_speed_360 = function (_, generator) {
|
||||
var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var speed = generator.valueToCode(this, 'SPEED', generator.ORDER_ATOMIC);
|
||||
var code = v + '.set_speed(' + speed + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const servo_set_angle = function (_, generator) {
|
||||
generator.definitions_['import_servo'] = 'import servo';
|
||||
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var num = generator.valueToCode(this, 'NUM', generator.ORDER_ATOMIC);
|
||||
var code = 'servo.servo180_angle(' + dropdown_pin + ',' + num + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const servo_set_speed = function (_, generator) {
|
||||
generator.definitions_['import_servo'] = 'import servo';
|
||||
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var num = generator.valueToCode(this, 'NUM', generator.ORDER_ATOMIC);
|
||||
var code = 'servo.servo360_speed(' + dropdown_pin + ',' + num + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const servo_get_angle = function (_, generator) {
|
||||
generator.definitions_['import_servo'] = 'import servo';
|
||||
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var code = 'servo.servo180_angle(' + dropdown_pin + ')';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const servo_get_speed = function (_, generator) {
|
||||
generator.definitions_['import_servo'] = 'import servo';
|
||||
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var code = 'servo.servo360_speed(' + dropdown_pin + ')';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const actuator_ms32006_init = function (_, generator) {
|
||||
generator.definitions_['import ms32006'] = 'import ms32006';
|
||||
var address = this.getFieldValue('mode')
|
||||
var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var sub1 = generator.valueToCode(this, 'SUB1', generator.ORDER_ATOMIC);
|
||||
var code = sub + '=ms32006.MS32006(' + sub1 + ',addr=' + address + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const actuator_ms32006_dcmotor = function (_, generator) {
|
||||
generator.definitions_['import ms32006'] = 'import ms32006';
|
||||
var direction = this.getFieldValue('direction')
|
||||
var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var speed = generator.valueToCode(this, 'speed', generator.ORDER_ATOMIC);
|
||||
var code = sub + '.dc_motor(' + direction + ',' + speed + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const actuator_ms32006_stepper = function (_, generator) {
|
||||
generator.definitions_['import ms32006'] = 'import ms32006';
|
||||
var mode = this.getFieldValue('mode')
|
||||
var direction = this.getFieldValue('direction')
|
||||
var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var speed = generator.valueToCode(this, 'speed', generator.ORDER_ATOMIC);
|
||||
var steps = generator.valueToCode(this, 'steps', generator.ORDER_ATOMIC);
|
||||
var code = sub + '.move(' + mode + ',' + direction + ',' + speed + ',' + steps + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const esp32_music_pitch_init = function (_, generator) {
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var dropdown_rgbpin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
generator.definitions_['import_music'] = 'import music';
|
||||
var code = v + ' = music.MIDI(' + dropdown_rgbpin + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const esp32_music_pitch = function (block, generator) {
|
||||
generator.definitions_['import_music'] = 'import music';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var number_pitch = generator.valueToCode(block, 'pitch', generator.ORDER_ATOMIC);
|
||||
var code = v + '.pitch(' + number_pitch + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const esp32_music_pitch_with_time = function (block, generator) {
|
||||
generator.definitions_['import_music'] = 'import music';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var number_pitch = generator.valueToCode(block, 'pitch', generator.ORDER_ATOMIC);
|
||||
var number_time = generator.valueToCode(block, 'time', generator.ORDER_ATOMIC);
|
||||
var code = v + '.pitch_time(' + number_pitch + ', ' + number_time + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const esp32_music_stop = function (block, generator) {
|
||||
generator.definitions_['import_music'] = 'import music';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var code = v + '.stop(' + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const esp32_music_set_tempo_extern = function (_, generator) {
|
||||
generator.definitions_['import_music'] = 'import music';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var bpm = generator.valueToCode(this, 'BPM', generator.ORDER_ASSIGNMENT);
|
||||
var ticks = generator.valueToCode(this, 'TICKS', generator.ORDER_ASSIGNMENT);
|
||||
var code = v + ".set_tempo(" + ticks + ", " + bpm + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const esp32_music_get_tempo_extern = function (_, generator) {
|
||||
generator.definitions_['import_music'] = 'import music';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var code = v + ".get_tempo()";
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const esp32_music_play_list = function (_, generator) {
|
||||
generator.definitions_['import_music'] = 'import music';
|
||||
var lst = generator.valueToCode(this, 'LIST', generator.ORDER_ASSIGNMENT);
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var code = v + ".play(" + v + '.' + lst + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const esp32_music_reset_extern = function (_, generator) {
|
||||
generator.definitions_['import_music'] = 'import music';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
return v + ".reset()\n";
|
||||
}
|
||||
|
||||
export const servo_move = function (_, generator) {
|
||||
generator.definitions_['import_servo'] = 'import servo';
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var value_degree = generator.valueToCode(this, 'DEGREE', generator.ORDER_ATOMIC);
|
||||
var code = 'servo.servo_write_angle(' + dropdown_pin + ',' + value_degree + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const actuator_extern_led_bright = function (_, generator) {
|
||||
generator.definitions_['import_mixgo'] = 'import mixgo';
|
||||
var bright = generator.valueToCode(this, 'bright', generator.ORDER_ATOMIC);
|
||||
var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
// var bright = this.getFieldValue('bright');
|
||||
var code = "mixgo.LED(" + pin + ").setonoff(" + bright + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const actuator_extern_get_led_bright = function (_, generator) {
|
||||
generator.definitions_['import_mixgo'] = 'import mixgo';
|
||||
var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var code = "mixgo.LED(" + pin + ").getbrightness(" + ")";
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const actuator_extern_get_led_state = function (_, generator) {
|
||||
generator.definitions_['import_mixgo'] = 'import mixgo';
|
||||
var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var code = "mixgo.LED(" + pin + ").getonoff(" + ")";
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const actuator_extern_led_brightness = function (_, generator) {
|
||||
generator.definitions_['import_mixgo'] = 'import mixgo';
|
||||
var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var flag = generator.valueToCode(this, 'bright', generator.ORDER_ATOMIC);
|
||||
var code = 'mixgo.LED(' + pin + ').setbrightness(' + flag + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const actuator_neopixel_init = function (_, generator) {
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var dropdown_rgbpin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var value_ledcount = generator.valueToCode(this, 'LEDCOUNT', generator.ORDER_ATOMIC);
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
generator.definitions_['import_neopixel'] = 'import neopixel';
|
||||
var code = v + ' = neopixel.NeoPixel(machine.Pin(' + dropdown_rgbpin + '), ' + value_ledcount + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const actuator_neopixel_rgb_all = function (_, generator) {
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var value_rvalue = generator.valueToCode(this, 'RVALUE', generator.ORDER_ATOMIC);
|
||||
var value_gvalue = generator.valueToCode(this, 'GVALUE', generator.ORDER_ATOMIC);
|
||||
var value_bvalue = generator.valueToCode(this, 'BVALUE', generator.ORDER_ATOMIC);
|
||||
var code = v + '.fill((' + value_rvalue + ', ' + value_gvalue + ', ' + value_bvalue + '))\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const actuator_neopixel_write = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
generator.definitions_['import_neopixel'] = 'import neopixel';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var code = v + '.write()\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const actuator_neopixel_rgb = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
generator.definitions_['import_neopixel'] = 'import neopixel';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var value_led = generator.valueToCode(this, '_LED_', generator.ORDER_ATOMIC);
|
||||
var value_rvalue = generator.valueToCode(this, 'RVALUE', generator.ORDER_ATOMIC);
|
||||
var value_gvalue = generator.valueToCode(this, 'GVALUE', generator.ORDER_ATOMIC);
|
||||
var value_bvalue = generator.valueToCode(this, 'BVALUE', generator.ORDER_ATOMIC);
|
||||
var code = v + '[' + value_led + '] = (' + value_rvalue + ', ' + value_gvalue + ', ' + value_bvalue + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const actuator_use_uart_init = function (_, generator) {
|
||||
generator.definitions_['import_syn6288'] = 'import syn6288';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var key = this.getFieldValue('key');
|
||||
var code = v + '=syn6288.SYN6288(' + key + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const syn6288_set_voice = function (_, generator) {
|
||||
generator.definitions_['import_music'] = 'import music';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var voice = generator.valueToCode(this, 'VOICE', generator.ORDER_ASSIGNMENT);
|
||||
var code = v + ".volume(" + voice + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const syn6288_get_voice = function (_, generator) {
|
||||
generator.definitions_['import_music'] = 'import music';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var code = v + ".volume()";
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const syn6288_builtin_voice = function (_, generator) {
|
||||
generator.definitions_['import_music'] = 'import music';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var mode = this.getFieldValue('mode');
|
||||
var voice = generator.valueToCode(this, 'VOICE', generator.ORDER_ASSIGNMENT);
|
||||
var code = v + ".hint_tones(" + voice + ',blocking=' + mode + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const syn6288_tts_play = function (_, generator) {
|
||||
generator.definitions_['import_music'] = 'import music';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var mode = this.getFieldValue('mode');
|
||||
var voice = generator.valueToCode(this, 'VOICE', generator.ORDER_ASSIGNMENT);
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
|
||||
var code = v + ".synthesis(" + data + ',music=' + voice + ',blocking=' + mode + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
//mixbot extern below:
|
||||
export const mixbot_addr_extern = function (_, generator) {
|
||||
var code = this.getFieldValue('PIN');
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const robot_motor_extern = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
var mode = this.getFieldValue('mode');
|
||||
var speed = generator.valueToCode(this, 'speed', generator.ORDER_ATOMIC);
|
||||
if (version == 'mixbot') {
|
||||
generator.definitions_['import_mixbot_ext_ext_motor'] = 'from mixbot_ext import ext_motor';
|
||||
var code = 'ext_motor.run(' + mode + ',' + speed + ")\n";
|
||||
return code;
|
||||
} else if (version == 'feiyi') {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
generator.definitions_['import_i2cdevice'] = 'import i2cdevice';
|
||||
if (mode == "0") {
|
||||
generator.definitions_['import_left_ext_i2c'] = 'ext_i2c_left = i2cdevice.I2C_device(scl = machine.Pin(0), sda = machine.Pin(1), freq = 10000)';
|
||||
generator.definitions_['import_left_motor'] = 'ext_motor_left = i2cdevice.Motor(ext_i2c_left)';
|
||||
var code = 'ext_motor_left.run(0,' + speed + ')\n';
|
||||
} else if (mode == "1") {
|
||||
generator.definitions_['import_right_ext_i2c'] = 'ext_i2c_right = i2cdevice.I2C_device(scl = machine.Pin(2), sda = machine.Pin(3), freq = 10000)';
|
||||
generator.definitions_['import_right_motor'] = 'ext_motor_right = i2cdevice.Motor(ext_i2c_right)';
|
||||
var code = 'ext_motor_right.run(0,' + speed + ')\n';
|
||||
}
|
||||
return code;
|
||||
}
|
||||
}
|
||||
|
||||
export const robot_motor_extern_get_speed = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
var mode = this.getFieldValue('mode');
|
||||
if (version == 'mixbot') {
|
||||
var code = 'ext_motor.run(' + mode + ")";
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
} else if (version == 'feiyi') {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
generator.definitions_['import_i2cdevice'] = 'import i2cdevice';
|
||||
if (mode == "0") {
|
||||
generator.definitions_['import_left_ext_i2c'] = 'ext_i2c_left = i2cdevice.I2C_device(scl = machine.Pin(0), sda = machine.Pin(1), freq = 10000)';
|
||||
generator.definitions_['import_left_motor'] = 'ext_motor_left = i2cdevice.Motor(ext_i2c_left)';
|
||||
var code = 'ext_motor_left.run()';
|
||||
} else if (mode == "1") {
|
||||
generator.definitions_['import_right_ext_i2c'] = 'ext_i2c_right = i2cdevice.I2C_device(scl = machine.Pin(2), sda = machine.Pin(3), freq = 10000)';
|
||||
generator.definitions_['import_right_motor'] = 'ext_motor_right = i2cdevice.Motor(ext_i2c_right)';
|
||||
var code = 'ext_motor_right.run()';
|
||||
}
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
}
|
||||
|
||||
export const robot_traffic_light_extern = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
var mode = this.getFieldValue('mode');
|
||||
var light = this.getFieldValue('light');
|
||||
if (version == 'mixbot') {
|
||||
generator.definitions_['import_mixbot_ext_ext_traffic'] = 'from mixbot_ext import ext_traffic';
|
||||
var mode = this.getFieldValue('mode');
|
||||
var light = this.getFieldValue('light');
|
||||
var code = 'ext_traffic.led(' + mode + ',';
|
||||
if (light == '0' || light == '1' || light == '2') { code += '0' + ',' }
|
||||
else if (light == '3' || light == '4') { code += '1' + ',' }
|
||||
else if (light == '5' || light == '6') { code += '2' + ',' }
|
||||
if (light == '0') { code += '0' }
|
||||
else if (light == '1' || light == '3' || light == '5') { code += '1' }
|
||||
else if (light == '2' || light == '4' || light == '6') { code += '-1' }
|
||||
code += ")\n";
|
||||
return code;
|
||||
} else if (version == 'feiyi') {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
generator.definitions_['import_i2cdevice'] = 'import i2cdevice';
|
||||
if (mode == "0") {
|
||||
generator.definitions_['import_left_ext_i2c'] = 'ext_i2c_left = i2cdevice.I2C_device(scl = machine.Pin(0), sda = machine.Pin(1), freq = 10000)';
|
||||
generator.definitions_['import_left_traffic'] = 'ext_traffic_left = i2cdevice.Traffic_LED(ext_i2c_left)';
|
||||
var code = 'ext_traffic_left.led(0,';
|
||||
} else if (mode == "1") {
|
||||
generator.definitions_['import_right_ext_i2c'] = 'ext_i2c_right = i2cdevice.I2C_device(scl = machine.Pin(2), sda = machine.Pin(3), freq = 10000)';
|
||||
generator.definitions_['import_right_traffic'] = 'ext_traffic_right = i2cdevice.Traffic_LED(ext_i2c_right)';
|
||||
var code = 'ext_traffic_right.led(0,';
|
||||
}
|
||||
if (light == '0' || light == '1' || light == '2') { code += '0' + ',' }
|
||||
else if (light == '3' || light == '4') { code += '1' + ',' }
|
||||
else if (light == '5' || light == '6') { code += '2' + ',' }
|
||||
if (light == '0') { code += '0' }
|
||||
else if (light == '1' || light == '3' || light == '5') { code += '1' }
|
||||
else if (light == '2' || light == '4' || light == '6') { code += '-1' }
|
||||
code += ")\n";
|
||||
return code;
|
||||
}
|
||||
}
|
||||
|
||||
export const robot_led_extern = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
var mode = this.getFieldValue('mode');
|
||||
var color = this.getFieldValue('color');
|
||||
var value = generator.valueToCode(this, 'value', generator.ORDER_ATOMIC);
|
||||
if (version == 'mixbot') {
|
||||
generator.definitions_['import_mixbot_ext_' + color + '_LED'] = 'from mixbot_ext import ' + color + '_LED';
|
||||
var code = color + '_LED.brightness(' + mode + ',' + value + ")\n";
|
||||
return code;
|
||||
} else if (version == 'feiyi') {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
generator.definitions_['import_i2cdevice'] = 'import i2cdevice';
|
||||
if (mode == "0") {
|
||||
generator.definitions_['import_left_ext_i2c'] = 'ext_i2c_left = i2cdevice.I2C_device(scl = machine.Pin(0), sda = machine.Pin(1), freq = 10000)';
|
||||
generator.definitions_['import_left_' + color + '_LED'] = 'ext_' + color + '_LED_left = i2cdevice.' + color + '_LED(ext_i2c_left)';
|
||||
var code = 'ext_' + color + '_LED_left.brightness(' + '0,' + value + ")\n";
|
||||
} else if (mode == "1") {
|
||||
generator.definitions_['import_right_ext_i2c'] = 'ext_i2c_right = i2cdevice.I2C_device(scl = machine.Pin(2), sda = machine.Pin(3), freq = 10000)';
|
||||
generator.definitions_['import_right_' + color + '_LED'] = 'ext_' + color + '_LED_right = i2cdevice.' + color + '_LED(ext_i2c_right)';
|
||||
var code = 'ext_' + color + '_LED_right.brightness(' + '0,' + value + ")\n";
|
||||
}
|
||||
return code;
|
||||
}
|
||||
}
|
||||
|
||||
export const robot_led_extern_get_value = function (_, generator) {
|
||||
var mode = this.getFieldValue('mode');
|
||||
var color = this.getFieldValue('color');
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
if (version == 'mixbot') {
|
||||
generator.definitions_['import_mixbot_ext_' + color + '_LED'] = 'from mixbot_ext import ' + color + '_LED';
|
||||
var code = color + '_LED.brightness(' + mode + ")";
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
} else if (version == 'feiyi') {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
generator.definitions_['import_i2cdevice'] = 'import i2cdevice';
|
||||
if (mode == "0") {
|
||||
generator.definitions_['import_left_ext_i2c'] = 'ext_i2c_left = i2cdevice.I2C_device(scl = machine.Pin(0), sda = machine.Pin(1), freq = 10000)';
|
||||
generator.definitions_['import_left_' + color + '_LED'] = 'ext_' + color + '_LED_left = i2cdevice.' + color + '_LED(ext_i2c_left)';
|
||||
var code = 'ext_' + color + '_LED_left.brightness(0)';
|
||||
} else if (mode == "1") {
|
||||
generator.definitions_['import_right_ext_i2c'] = 'ext_i2c_right = i2cdevice.I2C_device(scl = machine.Pin(2), sda = machine.Pin(3), freq = 10000)';
|
||||
generator.definitions_['import_right_' + color + '_LED'] = 'ext_' + color + '_LED_right = i2cdevice.' + color + '_LED(ext_i2c_right)';
|
||||
var code = 'ext_' + color + '_LED_right.brightness(0)';
|
||||
}
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
}
|
||||
|
||||
export const robot_servo_extern_get_status = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
var mode = this.getFieldValue('mode');
|
||||
var status = this.getFieldValue('status');
|
||||
if (version == 'mixbot') {
|
||||
generator.definitions_['import_mixbot_ext_ext_servo'] = 'from mixbot_ext import ext_servo';
|
||||
var code = 'ext_servo.state(' + mode + ")" + status;
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
} else if (version == 'feiyi') {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
generator.definitions_['import_i2cdevice'] = 'import i2cdevice';
|
||||
if (mode == "0") {
|
||||
generator.definitions_['import_left_ext_i2c'] = 'ext_i2c_left = i2cdevice.I2C_device(scl = machine.Pin(0), sda = machine.Pin(1), freq = 10000)';
|
||||
generator.definitions_['import_left_servo'] = 'ext_servo_left = i2cdevice.Motor_servo(ext_i2c_left)';
|
||||
var code = 'ext_servo_left.state(0)' + status;
|
||||
} else if (mode == "1") {
|
||||
generator.definitions_['import_right_ext_i2c'] = 'ext_i2c_right = i2cdevice.I2C_device(scl = machine.Pin(2), sda = machine.Pin(3), freq = 10000)';
|
||||
generator.definitions_['import_right_servo'] = 'ext_servo_right = i2cdevice.Motor_servo(ext_i2c_right)';
|
||||
var code = 'ext_servo_right.state(0)' + status;
|
||||
}
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
}
|
||||
|
||||
export const robot_servo_extern_stop_mode = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
var mode = this.getFieldValue('mode');
|
||||
var status = this.getFieldValue('status');
|
||||
if (version == 'mixbot') {
|
||||
generator.definitions_['import_mixbot_ext_ext_servo'] = 'from mixbot_ext import ext_servo';
|
||||
var code = 'ext_servo.stop_mode(' + mode + "," + status + ")\n";
|
||||
return code;
|
||||
} else if (version == 'feiyi') {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
generator.definitions_['import_i2cdevice'] = 'import i2cdevice';
|
||||
if (mode == "0") {
|
||||
generator.definitions_['import_left_ext_i2c'] = 'ext_i2c_left = i2cdevice.I2C_device(scl = machine.Pin(0), sda = machine.Pin(1), freq = 10000)';
|
||||
generator.definitions_['import_left_servo'] = 'ext_servo_left = i2cdevice.Motor_servo(ext_i2c_left)';
|
||||
var code = 'ext_servo_left.stop_mode(' + "0," + status + ")\n";
|
||||
} else if (mode == "1") {
|
||||
generator.definitions_['import_right_ext_i2c'] = 'ext_i2c_right = i2cdevice.I2C_device(scl = machine.Pin(2), sda = machine.Pin(3), freq = 10000)';
|
||||
generator.definitions_['import_right_servo'] = 'ext_servo_right = i2cdevice.Motor_servo(ext_i2c_right)';
|
||||
var code = 'ext_servo_right.stop_mode(' + "0," + status + ")\n";
|
||||
}
|
||||
return code;
|
||||
}
|
||||
}
|
||||
|
||||
export const robot_servo_extern_stop = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
var mode = this.getFieldValue('mode');
|
||||
if (version == 'mixbot') {
|
||||
generator.definitions_['import_mixbot_ext_ext_servo'] = 'from mixbot_ext import ext_servo';
|
||||
var code = 'ext_servo.stop(' + mode + ")\n";
|
||||
return code;
|
||||
} else if (version == 'feiyi') {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
generator.definitions_['import_i2cdevice'] = 'import i2cdevice';
|
||||
if (mode == "0") {
|
||||
generator.definitions_['import_left_ext_i2c'] = 'ext_i2c_left = i2cdevice.I2C_device(scl = machine.Pin(0), sda = machine.Pin(1), freq = 10000)';
|
||||
generator.definitions_['import_left_servo'] = 'ext_servo_left = i2cdevice.Motor_servo(ext_i2c_left)';
|
||||
var code = 'ext_servo_left.stop(0)\n';
|
||||
} else if (mode == "1") {
|
||||
generator.definitions_['import_right_ext_i2c'] = 'ext_i2c_right = i2cdevice.I2C_device(scl = machine.Pin(2), sda = machine.Pin(3), freq = 10000)';
|
||||
generator.definitions_['import_right_servo'] = 'ext_servo_right = i2cdevice.Motor_servo(ext_i2c_right)';
|
||||
var code = 'ext_servo_right.stop(0)\n';
|
||||
}
|
||||
return code;
|
||||
}
|
||||
}
|
||||
|
||||
export const robot_servo_extern_absolute_run = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
var mode = this.getFieldValue('mode');
|
||||
var status = this.getFieldValue('status');
|
||||
var speed = generator.valueToCode(this, 'speed', generator.ORDER_ATOMIC);
|
||||
var direction = this.getFieldValue('direction');
|
||||
var angle = generator.valueToCode(this, 'angle', generator.ORDER_ATOMIC);
|
||||
if (version == 'mixbot') {
|
||||
generator.definitions_['import_mixbot_ext_ext_servo'] = 'from mixbot_ext import ext_servo';
|
||||
var code = 'ext_servo.absolute_run(' + mode + "," + status + "," + speed + "," + direction + "," + angle + ")\n";
|
||||
return code;
|
||||
} else if (version == 'feiyi') {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
generator.definitions_['import_i2cdevice'] = 'import i2cdevice';
|
||||
if (mode == "0") {
|
||||
generator.definitions_['import_left_ext_i2c'] = 'ext_i2c_left = i2cdevice.I2C_device(scl = machine.Pin(0), sda = machine.Pin(1), freq = 10000)';
|
||||
generator.definitions_['import_left_servo'] = 'ext_servo_left = i2cdevice.Motor_servo(ext_i2c_left)';
|
||||
var code = 'ext_servo_left.absolute_run(' + "0," + status + "," + speed + "," + direction + "," + angle + ")\n";
|
||||
} else if (mode == "1") {
|
||||
generator.definitions_['import_right_ext_i2c'] = 'ext_i2c_right = i2cdevice.I2C_device(scl = machine.Pin(2), sda = machine.Pin(3), freq = 10000)';
|
||||
generator.definitions_['import_right_servo'] = 'ext_servo_right = i2cdevice.Motor_servo(ext_i2c_right)';
|
||||
var code = 'ext_servo_right.absolute_run(' + "0," + status + "," + speed + "," + direction + "," + angle + ")\n";
|
||||
}
|
||||
return code;
|
||||
}
|
||||
}
|
||||
|
||||
export const robot_servo_extern_relative_origin = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
var mode = this.getFieldValue('mode');
|
||||
if (version == 'mixbot') {
|
||||
generator.definitions_['import_mixbot_ext_ext_servo'] = 'from mixbot_ext import ext_servo';
|
||||
var code = 'ext_servo.relative_origin(' + mode + ")\n";
|
||||
return code;
|
||||
} else if (version == 'feiyi') {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
generator.definitions_['import_i2cdevice'] = 'import i2cdevice';
|
||||
if (mode == "0") {
|
||||
generator.definitions_['import_left_ext_i2c'] = 'ext_i2c_left = i2cdevice.I2C_device(scl = machine.Pin(0), sda = machine.Pin(1), freq = 10000)';
|
||||
generator.definitions_['import_left_servo'] = 'ext_servo_left = i2cdevice.Motor_servo(ext_i2c_left)';
|
||||
var code = 'ext_servo_left.relative_origin(0)\n';
|
||||
} else if (mode == "1") {
|
||||
generator.definitions_['import_right_ext_i2c'] = 'ext_i2c_right = i2cdevice.I2C_device(scl = machine.Pin(2), sda = machine.Pin(3), freq = 10000)';
|
||||
generator.definitions_['import_right_servo'] = 'ext_servo_right = i2cdevice.Motor_servo(ext_i2c_right)';
|
||||
var code = 'ext_servo_right.relative_origin(0)\n';
|
||||
}
|
||||
return code;
|
||||
}
|
||||
}
|
||||
|
||||
export const robot_servo_extern_relative_run = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
var mode = this.getFieldValue('mode');
|
||||
var status = this.getFieldValue('status');
|
||||
var speed = generator.valueToCode(this, 'speed', generator.ORDER_ATOMIC);
|
||||
var angle = generator.valueToCode(this, 'angle', generator.ORDER_ATOMIC);
|
||||
if (version == 'mixbot') {
|
||||
generator.definitions_['import_mixbot_ext_ext_servo'] = 'from mixbot_ext import ext_servo';
|
||||
var code = 'ext_servo.relative_run(' + mode + "," + status + "," + speed + "," + angle + ")\n";
|
||||
return code;
|
||||
} else if (version == 'feiyi') {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
generator.definitions_['import_i2cdevice'] = 'import i2cdevice';
|
||||
if (mode == "0") {
|
||||
generator.definitions_['import_left_ext_i2c'] = 'ext_i2c_left = i2cdevice.I2C_device(scl = machine.Pin(0), sda = machine.Pin(1), freq = 10000)';
|
||||
generator.definitions_['import_left_servo'] = 'ext_servo_left = i2cdevice.Motor_servo(ext_i2c_left)';
|
||||
var code = 'ext_servo_left.relative_run(' + "0," + status + "," + speed + "," + angle + ")\n";
|
||||
} else if (mode == "1") {
|
||||
generator.definitions_['import_right_ext_i2c'] = 'ext_i2c_right = i2cdevice.I2C_device(scl = machine.Pin(2), sda = machine.Pin(3), freq = 10000)';
|
||||
generator.definitions_['import_right_servo'] = 'ext_servo_right = i2cdevice.Motor_servo(ext_i2c_right)';
|
||||
var code = 'ext_servo_right.relative_run(' + "0," + status + "," + speed + "," + angle + ")\n";
|
||||
}
|
||||
return code;
|
||||
}
|
||||
}
|
||||
|
||||
export const robot_servo_extern_relative_continue = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
var mode = this.getFieldValue('mode');
|
||||
var status = this.getFieldValue('status');
|
||||
var speed = generator.valueToCode(this, 'speed', generator.ORDER_ATOMIC);
|
||||
var direction = this.getFieldValue('direction');
|
||||
if (version == 'mixbot') {
|
||||
generator.definitions_['import_mixbot_ext_ext_servo'] = 'from mixbot_ext import ext_servo';
|
||||
var code = 'ext_servo.relative_continue(' + mode + "," + status + "," + speed + "," + direction + ")\n";
|
||||
return code;
|
||||
} else if (version == 'feiyi') {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
generator.definitions_['import_i2cdevice'] = 'import i2cdevice';
|
||||
if (mode == "0") {
|
||||
generator.definitions_['import_left_ext_i2c'] = 'ext_i2c_left = i2cdevice.I2C_device(scl = machine.Pin(0), sda = machine.Pin(1), freq = 10000)';
|
||||
generator.definitions_['import_left_servo'] = 'ext_servo_left = i2cdevice.Motor_servo(ext_i2c_left)';
|
||||
var code = 'ext_servo_left.relative_continue(' + "0," + status + "," + speed + "," + direction + ")\n";
|
||||
} else if (mode == "1") {
|
||||
generator.definitions_['import_right_ext_i2c'] = 'ext_i2c_right = i2cdevice.I2C_device(scl = machine.Pin(2), sda = machine.Pin(3), freq = 10000)';
|
||||
generator.definitions_['import_right_servo'] = 'ext_servo_right = i2cdevice.Motor_servo(ext_i2c_right)';
|
||||
var code = 'ext_servo_right.relative_continue(' + "0," + status + "," + speed + "," + direction + ")\n";
|
||||
}
|
||||
return code;
|
||||
}
|
||||
}
|
||||
|
||||
export const mixbot_actuator_extern_get_addr = function (_, generator) {
|
||||
var name = this.getFieldValue('name');
|
||||
generator.definitions_['import_mixbot_ext_' + name] = 'from mixbot_ext import ' + name;
|
||||
var code = name + '.addr_get()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const mixbot_actuator_extern_set_addr = function (_, generator) {
|
||||
var name = this.getFieldValue('name');
|
||||
generator.definitions_['import_mixbot_ext_' + name] = 'from mixbot_ext import ' + name;
|
||||
var oldaddr = generator.valueToCode(this, 'old', generator.ORDER_ATOMIC);
|
||||
var newaddr = generator.valueToCode(this, 'new', generator.ORDER_ATOMIC);
|
||||
var code = name + '.addr_set(' + oldaddr + ',' + newaddr + ')\n';
|
||||
return code;
|
||||
}
|
||||
445
boards/default_src/micropython/generators/actuator_onboard.js
Normal file
445
boards/default_src/micropython/generators/actuator_onboard.js
Normal file
@@ -0,0 +1,445 @@
|
||||
import { Boards } from 'mixly';
|
||||
|
||||
export const esp32_music_set_tempo = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
generator.definitions_['import_' + version + '_onboard_music'] = 'from ' + version + ' import onboard_music';
|
||||
var bpm = generator.valueToCode(this, 'BPM', generator.ORDER_ASSIGNMENT);
|
||||
var ticks = generator.valueToCode(this, 'TICKS', generator.ORDER_ASSIGNMENT);
|
||||
var code = "onboard_music.set_tempo(" + ticks + ", " + bpm + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const esp32_music_get_tempo = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
generator.definitions_['import_' + version + '_onboard_music'] = 'from ' + version + ' import onboard_music';
|
||||
var code = "onboard_music.get_tempo()";
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const esp32_onboard_music_pitch = function (block, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
generator.definitions_['import_' + version + '_onboard_music'] = 'from ' + version + ' import onboard_music';
|
||||
var number_pitch = generator.valueToCode(block, 'pitch', generator.ORDER_ATOMIC);
|
||||
var code = 'onboard_music.pitch(' + number_pitch + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const esp32_onboard_music_pitch_with_time = function (block, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
var number_pitch = generator.valueToCode(block, 'pitch', generator.ORDER_ATOMIC);
|
||||
var number_time = generator.valueToCode(block, 'time', generator.ORDER_ATOMIC);
|
||||
if (version == 'mixgo_zero') {
|
||||
generator.definitions_['import_mixgo_zero_voice_spk_midi'] = "from mixgo_zero_voice import spk_midi";
|
||||
var code = 'spk_midi.pitch_time(' + number_pitch + ', ' + number_time + ')\n';
|
||||
} else if (version == 'mixgo_nova') {
|
||||
generator.definitions_['import_mixgo_nova_voice_spk_midi'] = "from mixgo_nova_voice import spk_midi";
|
||||
var code = 'spk_midi.pitch_time(' + number_pitch + ', ' + number_time + ')\n';
|
||||
} else {
|
||||
generator.definitions_['import_' + version + '_onboard_music'] = 'from ' + version + ' import onboard_music';
|
||||
var code = 'onboard_music.pitch_time(' + number_pitch + ', ' + number_time + ')\n';
|
||||
}
|
||||
return code;
|
||||
}
|
||||
|
||||
export const esp32_onboard_music_stop = function (block, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
generator.definitions_['import_' + version + '_onboard_music'] = 'from ' + version + ' import onboard_music';
|
||||
var code = 'onboard_music.stop(' + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const esp32_onboard_music_play_list = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
var lst = generator.valueToCode(this, 'LIST', generator.ORDER_ASSIGNMENT);
|
||||
if (version == 'mixgo_zero') {
|
||||
generator.definitions_['import_mixgo_zero_voice_spk_midi'] = "from mixgo_zero_voice import spk_midi";
|
||||
var code = "spk_midi.play(" + lst + ")\n";
|
||||
} else if (version == 'mixgo_nova') {
|
||||
generator.definitions_['import_mixgo_nova_voice_spk_midi'] = "from mixgo_nova_voice import spk_midi";
|
||||
var code = "spk_midi.play(" + lst + ")\n";
|
||||
} else {
|
||||
generator.definitions_['import_' + version + '_onboard_music'] = 'from ' + version + ' import onboard_music';
|
||||
var code = "onboard_music.play(" + lst + ")\n";
|
||||
}
|
||||
return code;
|
||||
}
|
||||
|
||||
export const esp32_music_reset = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
generator.definitions_['import_' + version + '_onboard_music'] = 'from ' + version + ' import onboard_music';
|
||||
return "onboard_music.reset()\n";
|
||||
}
|
||||
|
||||
export const number = function (_, generator) {
|
||||
var code = this.getFieldValue('op');
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const ledswitch = function (_, generator) {
|
||||
var code = this.getFieldValue('flag');
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const actuator_led_bright = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
var op = generator.valueToCode(this, 'led', generator.ORDER_ATOMIC);
|
||||
generator.definitions_['import_' + version + '_onboard_led'] = 'from ' + version + ' import onboard_led';
|
||||
var bright = generator.valueToCode(this, 'bright', generator.ORDER_ATOMIC);
|
||||
var code = "onboard_led.setonoff(" + op + "," + bright + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const actuator_get_led_bright = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
var op = generator.valueToCode(this, 'led', generator.ORDER_ATOMIC);
|
||||
generator.definitions_['import_' + version + '_onboard_led'] = 'from ' + version + ' import onboard_led';
|
||||
var code = "onboard_led.getbrightness(" + op + ")";
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const actuator_get_led_state = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
var op = generator.valueToCode(this, 'led', generator.ORDER_ATOMIC);
|
||||
generator.definitions_['import_' + version + '_onboard_led'] = 'from ' + version + ' import onboard_led';
|
||||
var code = "onboard_led.getonoff(" + op + ")";
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const actuator_led_brightness = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
var op = generator.valueToCode(this, 'led', generator.ORDER_ATOMIC);
|
||||
generator.definitions_['import_' + version + '_onboard_led'] = 'from ' + version + ' import onboard_led';
|
||||
var flag = generator.valueToCode(this, 'bright', generator.ORDER_ATOMIC);
|
||||
var code = "onboard_led.setbrightness(" + op + "," + flag + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const actuator_mixgo_zero_led_color = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
var op = generator.valueToCode(this, 'led', generator.ORDER_ATOMIC);
|
||||
generator.definitions_['import_' + version + '_onboard_led'] = 'from ' + version + ' import onboard_led';
|
||||
var color = this.getFieldValue('colorvalue');
|
||||
var code = "onboard_led.setcolor(" + op + "," + color + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const cc_number = function (_, generator) {
|
||||
var code = this.getFieldValue('op');
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const rm_actuator_led_bright = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
var op = this.getFieldValue('color');
|
||||
generator.definitions_['import_' + version + '_' + op + 'led'] = 'from ' + version + ' import ' + op + 'led';
|
||||
var bright = generator.valueToCode(this, 'bright', generator.ORDER_ATOMIC);
|
||||
var code = op + "led.setonoff(" + bright + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const rm_actuator_get_led_bright = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
var op = this.getFieldValue('color');
|
||||
generator.definitions_['import_' + version + '_' + op + 'led'] = 'from ' + version + ' import ' + op + 'led';
|
||||
var code = op + "led.getbrightness()";
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const rm_actuator_get_led_state = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
var op = this.getFieldValue('color');
|
||||
generator.definitions_['import_' + version + '_' + op + 'led'] = 'from ' + version + ' import ' + op + 'led';
|
||||
var code = op + "led.getonoff()";
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const rm_actuator_led_brightness = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
var op = this.getFieldValue('color');
|
||||
generator.definitions_['import_' + version + '_' + op + 'led'] = 'from ' + version + ' import ' + op + 'led';
|
||||
var flag = generator.valueToCode(this, 'bright', generator.ORDER_ATOMIC);
|
||||
var code = op + "led.setbrightness(" + flag + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const actuator_onboard_neopixel_write = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
generator.definitions_['import_' + version + '_onboard_rgb'] = 'from ' + version + ' import onboard_rgb';
|
||||
var code = 'onboard_rgb.write()\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const actuator_onboard_neopixel_rgb = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
generator.definitions_['import_' + version + '_onboard_rgb'] = 'from ' + version + ' import onboard_rgb';
|
||||
var value_led = generator.valueToCode(this, '_LED_', generator.ORDER_ATOMIC);
|
||||
var value_rvalue = generator.valueToCode(this, 'RVALUE', generator.ORDER_ATOMIC);
|
||||
var value_gvalue = generator.valueToCode(this, 'GVALUE', generator.ORDER_ATOMIC);
|
||||
var value_bvalue = generator.valueToCode(this, 'BVALUE', generator.ORDER_ATOMIC);
|
||||
var code = 'onboard_rgb[' + value_led + '] = (' + value_rvalue + ', ' + value_gvalue + ', ' + value_bvalue + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const actuator_onboard_neopixel_rgb_all = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
generator.definitions_['import_' + version + '_onboard_rgb'] = 'from ' + version + ' import onboard_rgb';
|
||||
var value_rvalue = generator.valueToCode(this, 'RVALUE', generator.ORDER_ATOMIC);
|
||||
var value_gvalue = generator.valueToCode(this, 'GVALUE', generator.ORDER_ATOMIC);
|
||||
var value_bvalue = generator.valueToCode(this, 'BVALUE', generator.ORDER_ATOMIC);
|
||||
var code = 'onboard_rgb.fill((' + value_rvalue + ', ' + value_gvalue + ', ' + value_bvalue + '))\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const actuator_onboard_neopixel_rgb_show_all_chase = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
generator.definitions_['import_' + version + '_onboard_rgb'] = 'from ' + version + ' import onboard_rgb';
|
||||
var value_rvalue = generator.valueToCode(this, 'RVALUE', generator.ORDER_ATOMIC);
|
||||
var value_gvalue = generator.valueToCode(this, 'GVALUE', generator.ORDER_ATOMIC);
|
||||
var value_bvalue = generator.valueToCode(this, 'BVALUE', generator.ORDER_ATOMIC);
|
||||
var number_time = generator.valueToCode(this, 'time', generator.ORDER_ATOMIC);
|
||||
var code = 'onboard_rgb.color_chase(' + value_rvalue + ', ' + value_gvalue + ', ' + value_bvalue + ', ' + number_time + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const actuator_onboard_neopixel_rgb_show_all_rainbow = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
generator.definitions_['import_' + version + '_onboard_rgb'] = 'from ' + version + ' import onboard_rgb';
|
||||
var number_time = generator.valueToCode(this, 'time', generator.ORDER_ATOMIC);
|
||||
var code = 'onboard_rgb.rainbow_cycle(' + number_time + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const rm_motor = function (_, generator) {
|
||||
var wheel = this.getFieldValue('wheel');
|
||||
generator.definitions_['import_rm_e1_motor' + wheel] = 'from rm_e1 import motor' + wheel;
|
||||
var v = this.getFieldValue('direction');
|
||||
var speed = generator.valueToCode(this, 'speed', generator.ORDER_ATOMIC);
|
||||
var code = "motor" + wheel + '.motion("' + v + '",' + speed + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
//c3 motor onboard
|
||||
export const actuator_stepper_keep = function (_, generator) {
|
||||
var v = this.getFieldValue('VAR');
|
||||
generator.definitions_['import_mixgocar_c3_car'] = 'from mixgocar_c3 import car';
|
||||
var speed = generator.valueToCode(this, 'speed', generator.ORDER_ASSIGNMENT);
|
||||
var code = 'car.motor_move("' + v + '",' + speed + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const actuator_stepper_stop = function (_, generator) {
|
||||
var v = this.getFieldValue('VAR');
|
||||
generator.definitions_['import_mixgocar_c3_car'] = 'from mixgocar_c3 import car';
|
||||
var code = 'car.motor_move("' + v + '"' + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const actuator_dc_motor = function (_, generator) {
|
||||
var wheel = this.getFieldValue('wheel');
|
||||
generator.definitions_['import_mixgocar_c3_car'] = 'from mixgocar_c3 import car';
|
||||
var v = this.getFieldValue('direction');
|
||||
var speed = generator.valueToCode(this, 'speed', generator.ORDER_ATOMIC);
|
||||
var code = "car.motor(car.MOTO_" + wheel + ',"' + v + '",' + speed + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const actuator_dc_motor_stop = function (_, generator) {
|
||||
var wheel = this.getFieldValue('wheel');
|
||||
generator.definitions_['import_mixgocar_c3_car'] = 'from mixgocar_c3 import car';
|
||||
var v = this.getFieldValue('direction');
|
||||
var code = "car.motor(car.MOTO_" + wheel + ',"' + v + '"' + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
//mixbot onboard_motor below:
|
||||
|
||||
export const mixbot_motor_status = function (_, generator) {
|
||||
generator.definitions_['import_mixbot_motor'] = 'from mixbot import motor';
|
||||
var code = 'motor.status()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const mixbot_move = function (_, generator) {
|
||||
var v = this.getFieldValue('VAR');
|
||||
var mode = this.getFieldValue('mode');
|
||||
generator.definitions_['import_mixbot_motor'] = 'from mixbot import motor';
|
||||
var speed = generator.valueToCode(this, 'speed', generator.ORDER_ASSIGNMENT);
|
||||
var code = 'motor.move("' + v + '",motor.' + mode + '_MODE,' + speed + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const mixbot_stop = function (_, generator) {
|
||||
var v = this.getFieldValue('VAR');
|
||||
generator.definitions_['import_mixbot_motor'] = 'from mixbot import motor';
|
||||
if (v == 'N') {
|
||||
var code = 'motor.move("N",motor.STOP_MODE)\n'
|
||||
} else if (v == 'P') {
|
||||
var code = 'motor.move("P",motor.BRAKE_MODE)\n'
|
||||
}
|
||||
return code;
|
||||
}
|
||||
|
||||
export const mixbot_motor = function (_, generator) {
|
||||
var wheel = this.getFieldValue('wheel');
|
||||
generator.definitions_['import_mixbot_motor'] = 'from mixbot import motor';
|
||||
var mode = this.getFieldValue('mode');
|
||||
var speed = generator.valueToCode(this, 'speed', generator.ORDER_ATOMIC);
|
||||
var code = 'motor.run(' + wheel + ',motor.' + mode + '_MODE,' + speed + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const actuator_mixbot_buzzer_on_off = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
generator.definitions_['import_' + version + '_spk_en'] = 'from ' + version + ' import spk_en';
|
||||
var op = this.getFieldValue('on_off');
|
||||
var code = "spk_en.value(" + op + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
//bitbot onboard_motor below:
|
||||
export const bitbot_move = function (_, generator) {
|
||||
var v = this.getFieldValue('VAR');
|
||||
generator.definitions_['import_feiyi_onboard_bot51'] = 'from feiyi import onboard_bot51';
|
||||
var speed = generator.valueToCode(this, 'speed', generator.ORDER_ASSIGNMENT);
|
||||
var code = 'onboard_bot51.move("' + v + '",' + speed + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const bitbot_stop = function (_, generator) {
|
||||
var v = this.getFieldValue('VAR');
|
||||
generator.definitions_['import_feiyi_onboard_bot51'] = 'from feiyi import onboard_bot51';
|
||||
var code = 'onboard_bot51.move("' + v + '"' + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const bitbot_motor = function (_, generator) {
|
||||
var wheel = this.getFieldValue('wheel');
|
||||
var direction = this.getFieldValue('direction');
|
||||
generator.definitions_['import_feiyi_onboard_bot51'] = 'from feiyi import onboard_bot51';
|
||||
var speed = generator.valueToCode(this, 'speed', generator.ORDER_ATOMIC);
|
||||
var code = 'onboard_bot51.motor(' + wheel + ',"' + direction + '",' + speed + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const actuator_mixgo_nova_mic_set = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
if (version == 'mixgo_zero') {
|
||||
generator.definitions_['import_mixgo_zero_voice_ob_code'] = "from mixgo_zero_voice import ob_code";
|
||||
} else {
|
||||
generator.definitions_['import_mixgo_nova_voice_ob_code'] = "from mixgo_nova_voice import ob_code";
|
||||
}
|
||||
|
||||
var bright = generator.valueToCode(this, 'bright', generator.ORDER_ATOMIC);
|
||||
var code = "ob_code.mic_volume(" + bright + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const actuator_mixgo_nova_mic_get = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
if (version == 'mixgo_zero') {
|
||||
generator.definitions_['import_mixgo_zero_voice_ob_code'] = "from mixgo_zero_voice import ob_code";
|
||||
} else {
|
||||
generator.definitions_['import_mixgo_nova_voice_ob_code'] = "from mixgo_nova_voice import ob_code";
|
||||
}
|
||||
var code = "ob_code.mic_volume()";
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const actuator_mixgo_nova_voice_set = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
if (version == 'mixgo_zero') {
|
||||
generator.definitions_['import_mixgo_zero_voice_ob_code'] = "from mixgo_zero_voice import ob_code";
|
||||
} else {
|
||||
generator.definitions_['import_mixgo_nova_voice_ob_code'] = "from mixgo_nova_voice import ob_code";
|
||||
}
|
||||
var bright = generator.valueToCode(this, 'bright', generator.ORDER_ATOMIC);
|
||||
var code = "ob_code.voice_volume(" + bright + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const actuator_mixgo_nova_voice_get = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
if (version == 'mixgo_zero') {
|
||||
generator.definitions_['import_mixgo_zero_voice_ob_code'] = "from mixgo_zero_voice import ob_code";
|
||||
} else {
|
||||
generator.definitions_['import_mixgo_nova_voice_ob_code'] = "from mixgo_nova_voice import ob_code";
|
||||
}
|
||||
var code = "ob_code.voice_volume()";
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const actuator_mixgo_nova_record_audio = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
if (version == 'mixgo_zero') {
|
||||
generator.definitions_['import_mixgo_zero_voice_record_audio'] = "from mixgo_zero_voice import record_audio";
|
||||
} else {
|
||||
generator.definitions_['import_mixgo_nova_voice_record_audio'] = "from mixgo_nova_voice import record_audio";
|
||||
}
|
||||
var path = generator.valueToCode(this, 'PATH', generator.ORDER_ASSIGNMENT);
|
||||
var time = generator.valueToCode(this, 'TIME', generator.ORDER_ASSIGNMENT);
|
||||
var code = "record_audio(" + path + ", " + time + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const actuator_mixgo_nova_play_audio = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
if (version == 'mixgo_zero') {
|
||||
generator.definitions_['import_mixgo_zero_voice_play_audio'] = "from mixgo_zero_voice import play_audio";
|
||||
} else {
|
||||
generator.definitions_['import_mixgo_nova_voice_play_audio'] = "from mixgo_nova_voice import play_audio";
|
||||
}
|
||||
var path = generator.valueToCode(this, 'PATH', generator.ORDER_ASSIGNMENT);
|
||||
var code = "play_audio(" + path + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const actuator_mixgo_nova_play_online_audio = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2];
|
||||
if (version == 'mixgo_zero') {
|
||||
generator.definitions_['import_mixgo_zero_voice_play_audio_url'] = "from mixgo_zero_voice import play_audio_url";
|
||||
} else {
|
||||
generator.definitions_['import_mixgo_nova_voice_play_audio_url'] = "from mixgo_nova_voice import play_audio_url";
|
||||
}
|
||||
var path = generator.valueToCode(this, 'PATH', generator.ORDER_ASSIGNMENT);
|
||||
var code = "play_audio_url(" + path + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const actuator_mixgo_nova_onboard_music_pitch = function (block, generator) {
|
||||
generator.definitions_['import_mixgo_nova_voice_spk_midi'] = "from mixgo_nova_voice import spk_midi";
|
||||
var number_pitch = generator.valueToCode(block, 'pitch', generator.ORDER_ATOMIC);
|
||||
var code = 'spk_midi.pitch(' + number_pitch + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const actuator_mixgo_nova_onboard_music_stop = function (block, generator) {
|
||||
generator.definitions_['import_mixgo_nova_voice_spk_midi'] = "from mixgo_nova_voice import spk_midi";
|
||||
var code = 'spk_midi.stop(' + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const set_power_output = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2];
|
||||
var index = this.getFieldValue('index');
|
||||
var duty = generator.valueToCode(this, 'duty', generator.ORDER_ATOMIC);
|
||||
generator.definitions_['import_' + version + '_onboard_bot'] = 'from ' + version + ' import onboard_bot';
|
||||
var code = 'onboard_bot.usben(' + index + ',' + duty + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const get_power_output = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2];
|
||||
var index = this.getFieldValue('index');
|
||||
generator.definitions_['import_' + version + '_onboard_bot'] = 'from ' + version + ' import onboard_bot';
|
||||
var code = 'onboard_bot.usben(' + index + ')';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const set_all_power_output = function (_, generator) {
|
||||
var version = generator.getSelectedBoardKey().split(':')[2];
|
||||
var duty = generator.valueToCode(this, 'duty', generator.ORDER_ATOMIC);
|
||||
generator.definitions_['import_' + version + '_onboard_bot'] = 'from ' + version + ' import onboard_bot';
|
||||
var code = 'onboard_bot.usben(freq = ' + duty + ')\n';
|
||||
return code;
|
||||
}
|
||||
36
boards/default_src/micropython/generators/ai.js
Normal file
36
boards/default_src/micropython/generators/ai.js
Normal file
@@ -0,0 +1,36 @@
|
||||
import * as Mixly from 'mixly';
|
||||
|
||||
export const MICROPYTHON_AI_client = function (_, generator) {
|
||||
var ctype = this.getFieldValue('CTYPE');
|
||||
generator.definitions_['import_baidu_speech'] = 'import baidu_speech';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var api_key = generator.valueToCode(this, 'API_KEY', generator.ORDER_ATOMIC);
|
||||
var sound = '';
|
||||
if (ctype == "ASR") {
|
||||
var version = Mixly.Boards.getSelectedBoardKey().split(':')[2];
|
||||
generator.definitions_['import_' + version + '_onboard_sound'] = "from " + version + " import onboard_sound";
|
||||
sound += 'onboard_sound.adc' + ',';
|
||||
}
|
||||
var secret_key = generator.valueToCode(this, 'SECRET_KEY', generator.ORDER_ATOMIC);
|
||||
var code = v + ' = ' + 'baidu_speech.' + ctype + '(' + sound + api_key + ', ' + secret_key + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const MICROPYTHON_AI_Speech_unit = function (_, generator) {
|
||||
generator.definitions_['import_baidu_speech'] = 'import baidu_speech';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var id = generator.valueToCode(this, 'ID', generator.ORDER_ATOMIC);
|
||||
var s = generator.valueToCode(this, 'STR', generator.ORDER_ATOMIC);
|
||||
var code = v + '.chatbot(' + id + ',' + s + ')';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const MICROPYTHON_AI_Speech_asr = function (_, generator) {
|
||||
var language = this.getFieldValue('LANGUAGE');
|
||||
generator.definitions_['import_baidu_speech'] = 'import baidu_speech';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var fn = generator.valueToCode(this, 'FILE', generator.ORDER_ATOMIC) || '""';
|
||||
var code = v + '.recognize(record_time=' + fn + ',dev_pid=' + language + ')';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
283
boards/default_src/micropython/generators/ai_sensor.js
Normal file
283
boards/default_src/micropython/generators/ai_sensor.js
Normal file
@@ -0,0 +1,283 @@
|
||||
export const ai_sensor_use_uart_init = function (_, generator) {
|
||||
generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var key = this.getFieldValue('key');
|
||||
var code = v + '=mixgo_ai.AI(' + key + ',quick=1)\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const ai_sensor_qrcode_lite = function (_, generator) {
|
||||
generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
|
||||
var sub = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var type = this.getFieldValue('TYPE');
|
||||
var code = sub + '.find_' + type + '()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const ai_sensor_config = function (_, generator) {
|
||||
generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var rx = generator.valueToCode(this, 'RX', generator.ORDER_ATOMIC);
|
||||
var tx = generator.valueToCode(this, 'TX', generator.ORDER_ATOMIC);
|
||||
var dropdown_uart = this.getFieldValue('mode');
|
||||
var code = v + '.configure(' + tx + ',' + rx + ',restart=' + dropdown_uart + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const ai_sensor_rgb = function (_, generator) {
|
||||
generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var led1 = generator.valueToCode(this, 'led1', generator.ORDER_ATOMIC);
|
||||
var led2 = generator.valueToCode(this, 'led2', generator.ORDER_ATOMIC);
|
||||
var code = v + '.led_rgb(' + led1 + ',' + led2 + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const ai_sensor_qrcode = function (_, generator) {
|
||||
generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
|
||||
var sub = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var key = this.getFieldValue('key');
|
||||
var code = sub + '.' + key;
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const ai_sensor_find_qrcodes = function (_, generator) {
|
||||
generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var code = v + '.find_qrcodes()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const ai_sensor_barcode = function (_, generator) {
|
||||
generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
|
||||
var sub = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var key = this.getFieldValue('key');
|
||||
var code = sub + '.' + key;
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const ai_sensor_find_barcodes = function (_, generator) {
|
||||
generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var code = v + '.find_barcodes()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const ai_sensor_tag = function (_, generator) {
|
||||
generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
|
||||
var sub = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var key = this.getFieldValue('key');
|
||||
var code = sub + '.' + key;
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const ai_sensor_find_tags = function (_, generator) {
|
||||
generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var code = v + '.find_apriltags()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const ai_sensor_line = function (_, generator) {
|
||||
generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
|
||||
var sub = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var key = this.getFieldValue('key');
|
||||
var code = sub + '.' + key;
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const ai_sensor_find_lines = function (_, generator) {
|
||||
generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var v1 = generator.valueToCode(this, 'VAR1', generator.ORDER_ATOMIC);
|
||||
var v2 = generator.valueToCode(this, 'VAR2', generator.ORDER_ATOMIC);
|
||||
var v3 = generator.valueToCode(this, 'VAR3', generator.ORDER_ATOMIC);
|
||||
var code = v + '.find_lines(' + v1 + ',' + v2 + ',' + v3 + ')';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const ai_sensor_circle = function (_, generator) {
|
||||
generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
|
||||
var sub = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var key = this.getFieldValue('key');
|
||||
var code = sub + '.' + key;
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const ai_sensor_find_circles = function (_, generator) {
|
||||
generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var v1 = generator.valueToCode(this, 'VAR1', generator.ORDER_ATOMIC);
|
||||
var v2 = generator.valueToCode(this, 'VAR2', generator.ORDER_ATOMIC);
|
||||
var v3 = generator.valueToCode(this, 'VAR3', generator.ORDER_ATOMIC);
|
||||
var code = v + '.find_circles(' + v1 + ',' + v2 + ',' + v3 + ')';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const ai_sensor_rect = function (_, generator) {
|
||||
generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
|
||||
var sub = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var key = this.getFieldValue('key');
|
||||
var code = sub + '.' + key;
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const ai_sensor_find_rects = function (_, generator) {
|
||||
generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var v1 = generator.valueToCode(this, 'VAR1', generator.ORDER_ATOMIC);
|
||||
var code = v + '.find_rects(' + v1 + ')';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const ai_sensor_color = function (_, generator) {
|
||||
generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
|
||||
var sub = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var key = this.getFieldValue('key');
|
||||
var code = sub + key;
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const ai_sensor_find_colors = function (_, generator) {
|
||||
generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var code = v + '.find_colors()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const ai_sensor_color_chases_result = function (_, generator) {
|
||||
generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
|
||||
var sub = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var key = this.getFieldValue('key');
|
||||
var code = sub + '.' + key;
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const ai_sensor_color_chases = function (_, generator) {
|
||||
generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var v1 = generator.valueToCode(this, 'VAR1', generator.ORDER_ATOMIC);
|
||||
var v2 = generator.valueToCode(this, 'VAR2', generator.ORDER_ATOMIC);
|
||||
var v3 = generator.valueToCode(this, 'VAR3', generator.ORDER_ATOMIC);
|
||||
var code = v + '.color_track(' + v1 + ',' + v2 + ',' + v3 + ')';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const ai_sensor_ailocal_train = function (_, generator) {
|
||||
generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var v1 = generator.valueToCode(this, 'VAR1', generator.ORDER_ATOMIC);
|
||||
var v2 = generator.valueToCode(this, 'VAR2', generator.ORDER_ATOMIC);
|
||||
var v3 = generator.valueToCode(this, 'VAR3', generator.ORDER_ATOMIC);
|
||||
var v4 = generator.valueToCode(this, 'VAR4', generator.ORDER_ATOMIC);
|
||||
var code = v + '.ailocal_train(' + v1 + ',' + v2 + ',' + v3 + ',' + v4 + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const ai_sensor_ailocal_class = function (_, generator) {
|
||||
generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var v1 = generator.valueToCode(this, 'VAR1', generator.ORDER_ATOMIC);
|
||||
var v2 = generator.valueToCode(this, 'VAR2', generator.ORDER_ATOMIC);
|
||||
var v4 = generator.valueToCode(this, 'VAR4', generator.ORDER_ATOMIC);
|
||||
var code = v + '.ailocal_class(' + v1 + ',' + v2 + ',' + v4 + ')';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const ai_sensor_ailocal_class_result = function (_, generator) {
|
||||
generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
|
||||
var sub = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var key = this.getFieldValue('key');
|
||||
var code = sub + '.' + key;
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const ai_sensor_audio_record = function (_, generator) {
|
||||
generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var v1 = generator.valueToCode(this, 'VAR1', generator.ORDER_ATOMIC);
|
||||
var v2 = generator.valueToCode(this, 'VAR2', generator.ORDER_ATOMIC);
|
||||
var code = v + '.audio_record(path=' + v1 + ',times=' + v2 + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const ai_sensor_audio_play = function (_, generator) {
|
||||
generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var v1 = generator.valueToCode(this, 'VAR1', generator.ORDER_ATOMIC);
|
||||
var v2 = generator.valueToCode(this, 'VAR2', generator.ORDER_ATOMIC);
|
||||
var code = v + '.audio_play(path=' + v1 + ',volume=' + v2 + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const ai_sensor_yolo_recognize = function (_, generator) {
|
||||
generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var v1 = generator.valueToCode(this, 'VAR1', generator.ORDER_ATOMIC);
|
||||
var v2 = generator.valueToCode(this, 'VAR2', generator.ORDER_ATOMIC);
|
||||
var v4 = generator.valueToCode(this, 'VAR4', generator.ORDER_ATOMIC);
|
||||
var code = v + '.yolo_recognize(' + v1 + ',' + v2 + ',' + v4 + ')';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const ai_sensor_yolo_recognize_result = function (_, generator) {
|
||||
generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
|
||||
var sub = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var key = this.getFieldValue('key');
|
||||
var code = sub + '.' + key;
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const ai_sensor_asr_recognize = function (_, generator) {
|
||||
generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var v1 = generator.valueToCode(this, 'VAR1', generator.ORDER_ATOMIC);
|
||||
var v2 = generator.valueToCode(this, 'VAR2', generator.ORDER_ATOMIC);
|
||||
var code = v + '.asr_recognize(' + v1 + ',threshold=' + v2 + ')';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const ai_sensor_licenseplate = function (_, generator) {
|
||||
generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
|
||||
var sub = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var key = this.getFieldValue('key');
|
||||
var code = sub + '.' + key;
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const ai_sensor_find_licenseplates = function (_, generator) {
|
||||
generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var code = v + '.find_licenseplate()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const ai_sensor_face = function (_, generator) {
|
||||
generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
|
||||
var sub = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var key = this.getFieldValue('key');
|
||||
var code = sub + '.' + key;
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const ai_sensor_classifier_faces = function (_, generator) {
|
||||
generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var code = v + '.face_detect()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const ai_sensor_20object = function (_, generator) {
|
||||
generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
|
||||
var sub = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var key = this.getFieldValue('key');
|
||||
var code = sub + '.' + key;
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const ai_sensor_find_20objects = function (_, generator) {
|
||||
generator.definitions_['import_mixgo_ai'] = 'import mixgo_ai';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var code = v + '.find_20object()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
225
boards/default_src/micropython/generators/blynk.js
Normal file
225
boards/default_src/micropython/generators/blynk.js
Normal file
@@ -0,0 +1,225 @@
|
||||
// Blynk 第二版
|
||||
// Blynk 自定义终端部件 Terminal
|
||||
export const mpython_blynk_terminal_widget_vpin = function (_, generator) {
|
||||
// generator.definitions_['import_BlynkLib'] = 'import blynklib';
|
||||
var virtual_pin = generator.valueToCode(this, 'virtual_pin', generator.ORDER_ATOMIC);
|
||||
|
||||
generator.functions_['terminal_widget_vpin_' + virtual_pin] =
|
||||
`
|
||||
ALLOWED_COMMANDS_LIST = ['ls', 'lsusb', 'ip a', 'ip abc']
|
||||
|
||||
@blynk.handle_event('write V${virtual_pin}')
|
||||
def write_handler(pin, _values):
|
||||
header = ''
|
||||
result = ''
|
||||
delimiter = '{}\\n'.format('=' * 30)
|
||||
if _values and _values[0] in ALLOWED_COMMANDS_LIST:
|
||||
cmd_params = _values[0].split(' ')
|
||||
try:
|
||||
result = subprocess.check_output(cmd_params).decode('utf-8')
|
||||
header = '[output]\\n'
|
||||
except subprocess.CalledProcessError as exe_err:
|
||||
header = '[error]\\n'
|
||||
result = 'Return Code: {}\\n'.format(exe_err.returncode)
|
||||
except Exception as g_err:
|
||||
print("Command caused '{}'".format(g_err))
|
||||
elif _values and _values[0] == 'help':
|
||||
header = '[help -> allowed commands]\\n'
|
||||
result = '{}\\n'.format('\\n'.join(ALLOWED_COMMANDS_LIST))
|
||||
|
||||
# communicate with terminal if help or some allowed command
|
||||
if result:
|
||||
output = '{}{}{}{}'.format(header, delimiter, result, delimiter)
|
||||
print(output)
|
||||
blynk.virtual_write(pin, output)
|
||||
blynk.virtual_write(pin, '\\n')
|
||||
`
|
||||
|
||||
var code = '';
|
||||
return code;
|
||||
}
|
||||
|
||||
// Blynk 同步虚拟管脚的状态
|
||||
export const mpython_blynk_sync_virtual = function (_, generator) {
|
||||
// generator.definitions_['import_BlynkLib'] = 'import blynklib';
|
||||
var virtual_pin = generator.valueToCode(this, 'virtual_pin', generator.ORDER_ATOMIC);
|
||||
|
||||
var code = 'blynk.virtual_sync(' + virtual_pin + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
// 斷開连接 Blynk
|
||||
export const mpython_blynk_on_disconnected = function (_, generator) {
|
||||
// generator.definitions_['import_BlynkLib'] = 'import blynklib';
|
||||
|
||||
var branch = generator.statementToCode(this, 'DO');
|
||||
branch = generator.addLoopTrap(branch, this.id) || generator.PASS;
|
||||
|
||||
generator.definitions_['blynk_on_disconnected'] =
|
||||
'@blynk.handle_event("disconnect")\n' +
|
||||
'def connect_handler():\n' +
|
||||
" print('Blynk disconnected')\n" + branch;
|
||||
|
||||
return '';
|
||||
}
|
||||
|
||||
// 连接上 Blynk
|
||||
export const mpython_blynk_on_connected = function (_, generator) {
|
||||
// generator.definitions_['import_BlynkLib'] = 'import blynklib';
|
||||
|
||||
var branch = generator.statementToCode(this, 'DO');
|
||||
branch = generator.addLoopTrap(branch, this.id) || generator.PASS;
|
||||
|
||||
generator.definitions_['blynk_on_connected'] =
|
||||
'@blynk.handle_event("connect")\n' +
|
||||
'def connect_handler():\n' +
|
||||
" print('Blynk connected')\n" + branch;
|
||||
|
||||
return '';
|
||||
}
|
||||
|
||||
// Blynk 定时器的进程生效并运行
|
||||
export const mpython_blynktimer_run = function () {
|
||||
// generator.definitions_['import_BlynkLib'] = 'import blynklib';
|
||||
// generator.definitions_['import_blynktimer'] = 'import blynktimer';
|
||||
|
||||
var code = 'blynk_timer.run()\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
// Blynk 进程生效并运行
|
||||
export const mpython_blynk_run = function () {
|
||||
// generator.definitions_['import_BlynkLib'] = 'import blynklib';
|
||||
|
||||
var code = 'blynk.run()\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
// Blynk APP 显示通知
|
||||
export const mpython_blynk_app_notify = function (_, generator) {
|
||||
// generator.definitions_['import_BlynkLib'] = 'import blynklib';
|
||||
var notification = generator.valueToCode(this, 'notification', generator.ORDER_ATOMIC);
|
||||
|
||||
var code = 'blynk.notify(' + notification + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
// 停止 Blynk 定时器 %1
|
||||
export const mpython_blynk_stop_timers = function (_, generator) {
|
||||
generator.definitions_['import_blynktimer'] = 'import blynktimer';
|
||||
generator.definitions_['def_blynktimer'] = 'blynk_timer = blynktimer.Timer(no_timers_err=False)';
|
||||
|
||||
var timer_num = generator.valueToCode(this, 'timer_num', generator.ORDER_ATOMIC);
|
||||
var code = `blynk_timer.stop('${timer_num}_blynk_timer${timer_num}')` + '\n';
|
||||
|
||||
return code;
|
||||
}
|
||||
|
||||
// 可用的 Blynk 定时器
|
||||
export const mpython_blynk_get_timers = function (_, generator) {
|
||||
generator.definitions_['import_blynktimer'] = 'import blynktimer';
|
||||
generator.definitions_['def_blynktimer'] = 'blynk_timer = blynktimer.Timer(no_timers_err=False)';
|
||||
|
||||
var code = `blynk_timer.get_timers()`;
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
//blynk定时器
|
||||
export const mpython_blynktimer = function (_, generator) {
|
||||
generator.definitions_['import_blynktimer'] = 'import blynktimer';
|
||||
|
||||
var Num = generator.valueToCode(this, 'Num', generator.ORDER_ATOMIC);
|
||||
var period = generator.valueToCode(this, 'period', generator.ORDER_ATOMIC);
|
||||
var Timer_mode = this.getFieldValue('Timer_mode');
|
||||
|
||||
var branch = generator.statementToCode(this, 'DO');
|
||||
branch = generator.addLoopTrap(branch, this.id) || generator.PASS;
|
||||
|
||||
generator.definitions_['def_blynktimer'] = 'blynk_timer = blynktimer.Timer(no_timers_err=False)';
|
||||
|
||||
generator.definitions_['blynktimer_event' + Num] =
|
||||
`
|
||||
@blynk_timer.register(interval=${period}, run_once=${Timer_mode})
|
||||
def blynk_timer${Num}():
|
||||
`
|
||||
+ branch;
|
||||
|
||||
return '';
|
||||
}
|
||||
|
||||
// 发送数据 %1 到 Bylnk APP 的虚拟管脚 %2
|
||||
export const mpython_blynk_sensor_data_to_app = function (_, generator) {
|
||||
// generator.definitions_['import_BlynkLib'] = 'import blynklib';
|
||||
var sensor_data = generator.valueToCode(this, 'sensor_data', generator.ORDER_ATOMIC);
|
||||
var virtual_pin = generator.valueToCode(this, 'virtual_pin', generator.ORDER_ATOMIC);
|
||||
var code = 'blynk.virtual_write(' + virtual_pin + ', ' + sensor_data + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
// 从 Bylnk APP 获取虚拟管脚 %1 的值
|
||||
export const mpython_blynk_app_data = function (_, generator) {
|
||||
|
||||
// generator.definitions_['import_BlynkLib'] = 'import blynklib';
|
||||
var virtual_pin = generator.valueToCode(this, 'virtual_pin', generator.ORDER_ATOMIC);
|
||||
|
||||
var branch = generator.statementToCode(this, 'DO');
|
||||
branch = generator.addLoopTrap(branch, this.id) || generator.PASS;
|
||||
|
||||
generator.definitions_['blynk_VIRTUAL_WRITE_' + virtual_pin] =
|
||||
"@blynk.handle_event('write V" + virtual_pin + "')\n" +
|
||||
'def write_virtual_pin_handler(pin, _value):\n' +
|
||||
' for i in range(0, len(_value)):\n' +
|
||||
' try: _value[i] = eval(_value[i])\n' +
|
||||
' except: pass\n' +
|
||||
' if len(_value) == 1: _value = _value[0]\n' + branch;
|
||||
//' print('+'"v' + virtual_pin + '_value: {}".format(_value))\n'
|
||||
// var code = 'blynk.run()\n';
|
||||
return '';
|
||||
}
|
||||
|
||||
// 向 %1 发邮件 主题 %2 正文 %3
|
||||
export const mpython_blynk_email = function (_, generator) {
|
||||
var body = generator.valueToCode(this, 'body', generator.ORDER_ATOMIC);
|
||||
var subject = generator.valueToCode(this, 'subject', generator.ORDER_ATOMIC);
|
||||
var TargetEmail = generator.valueToCode(this, 'TargetEmail', generator.ORDER_ATOMIC);
|
||||
|
||||
var code = `blynk.email(${TargetEmail}, ${subject}, ${body})` + '\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
// 给虚拟管脚添加 属性 %1 值 %2
|
||||
export const mpython_blynk_set_property = function (_, generator) {
|
||||
var attribute_value = generator.valueToCode(this, 'attribute_value', generator.ORDER_ATOMIC);
|
||||
var attribute_name = generator.valueToCode(this, 'attribute_name', generator.ORDER_ATOMIC);
|
||||
|
||||
var code = `blynk.set_property(pin, ${attribute_name}, ${attribute_value})` + '\n';
|
||||
|
||||
return code;
|
||||
}
|
||||
|
||||
// Bylnk设置
|
||||
export const mpython_blynk_setup = function (_, generator) {
|
||||
generator.definitions_['import_BlynkLib'] = 'import blynklib';
|
||||
var server = generator.valueToCode(this, 'server', generator.ORDER_ATOMIC);
|
||||
var auth = generator.valueToCode(this, 'auth', generator.ORDER_ATOMIC);
|
||||
var port = generator.valueToCode(this, 'port', generator.ORDER_ATOMIC);
|
||||
|
||||
generator.definitions_['mpython_blynk_setup'] =
|
||||
"blynk = blynklib.Blynk(" + auth + ", server=" + server + ", port=" + port + ")";
|
||||
|
||||
generator.definitions_['blynk_on_connected'] =
|
||||
`
|
||||
@blynk.handle_event("connect")
|
||||
def connect_handler():
|
||||
print('Blynk connected')
|
||||
`
|
||||
|
||||
generator.definitions_['blynk_on_disconnected'] =
|
||||
`
|
||||
@blynk.handle_event("disconnect")
|
||||
def connect_handler():
|
||||
print('Blynk disconnected')
|
||||
`
|
||||
|
||||
return '';
|
||||
}
|
||||
25
boards/default_src/micropython/generators/cc_g1.js
Normal file
25
boards/default_src/micropython/generators/cc_g1.js
Normal file
@@ -0,0 +1,25 @@
|
||||
export const cc_g1_read_bat = function (_, generator) {
|
||||
generator.definitions_['import_cc_g1'] = 'from cc_g1 import handle';
|
||||
var code = 'handle.read_bat()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const cc_g1_read_joystick = function (_, generator) {
|
||||
var v = this.getFieldValue('VAR');
|
||||
generator.definitions_['import_cc_g1'] = 'from cc_g1 import handle';
|
||||
var code = 'handle.read_joystick()' + v + '';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const cc_g1_read_key = function (_, generator) {
|
||||
var v = this.getFieldValue('VAR');
|
||||
generator.definitions_['import_cc_g1'] = 'from cc_g1 import handle';
|
||||
var code = 'handle.read_key(' + v + ')';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const cc_g1_turnoff = function (_, generator) {
|
||||
generator.definitions_['import_cc_g1'] = 'from cc_g1 import handle';
|
||||
var code = 'handle.shutdown()';
|
||||
return code;
|
||||
}
|
||||
225
boards/default_src/micropython/generators/ce_go.js
Normal file
225
boards/default_src/micropython/generators/ce_go.js
Normal file
@@ -0,0 +1,225 @@
|
||||
import * as Mixly from 'mixly';
|
||||
|
||||
export const ce_go_light_number = function (_, generator) {
|
||||
var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]
|
||||
if (version == "mixgo_me" || version == "mixgo_cc") {
|
||||
generator.definitions_['import_me_go_car'] = 'from me_go import car';
|
||||
}
|
||||
else if (version == "mixgo_ce") {
|
||||
generator.definitions_['import_ce_go_car'] = 'from ce_go import car';
|
||||
}
|
||||
var code = 'car.' + this.getFieldValue('op');
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const ce_go_led_bright = function (_, generator) {
|
||||
var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]
|
||||
if (version == "mixgo_me" || version == "mixgo_cc") {
|
||||
generator.definitions_['import_me_go_car'] = 'from me_go import car';
|
||||
}
|
||||
else if (version == "mixgo_ce") {
|
||||
generator.definitions_['import_ce_go_car'] = 'from ce_go import car';
|
||||
}
|
||||
var op = generator.valueToCode(this, 'led', generator.ORDER_ATOMIC);
|
||||
var bright = generator.valueToCode(this, 'bright', generator.ORDER_ATOMIC);
|
||||
var code = "car.setonoff(" + op + "," + bright + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const ce_go_get_led_bright = function (_, generator) {
|
||||
var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]
|
||||
if (version == "mixgo_me" || version == "mixgo_cc") {
|
||||
generator.definitions_['import_me_go_car'] = 'from me_go import car';
|
||||
}
|
||||
else if (version == "mixgo_ce") {
|
||||
generator.definitions_['import_ce_go_car'] = 'from ce_go import car';
|
||||
}
|
||||
var op = generator.valueToCode(this, 'led', generator.ORDER_ATOMIC);
|
||||
var code = "car.getrightness(" + op + ")";
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const ce_go_get_led_state = function (_, generator) {
|
||||
var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]
|
||||
if (version == "mixgo_me" || version == "mixgo_cc") {
|
||||
generator.definitions_['import_me_go_car'] = 'from me_go import car';
|
||||
}
|
||||
else if (version == "mixgo_ce") {
|
||||
generator.definitions_['import_ce_go_car'] = 'from ce_go import car';
|
||||
}
|
||||
var op = generator.valueToCode(this, 'led', generator.ORDER_ATOMIC);
|
||||
var code = "car.getonoff(" + op + ")";
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const ce_go_led_brightness = function (_, generator) {
|
||||
var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]
|
||||
if (version == "mixgo_me" || version == "mixgo_cc") {
|
||||
generator.definitions_['import_me_go_car'] = 'from me_go import car';
|
||||
}
|
||||
else if (version == "mixgo_ce") {
|
||||
generator.definitions_['import_ce_go_car'] = 'from ce_go import car';
|
||||
}
|
||||
var op = generator.valueToCode(this, 'led', generator.ORDER_ATOMIC);
|
||||
var flag = generator.valueToCode(this, 'bright', generator.ORDER_ATOMIC);
|
||||
var code = "car.setbrightness(" + op + "," + flag + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const ce_go_stepper_keep = function (_, generator) {
|
||||
var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]
|
||||
if (version == "mixgo_me" || version == "mixgo_cc") {
|
||||
generator.definitions_['import_me_go_car'] = 'from me_go import car';
|
||||
}
|
||||
else if (version == "mixgo_ce") {
|
||||
generator.definitions_['import_ce_go_car'] = 'from ce_go import car';
|
||||
}
|
||||
var v = this.getFieldValue('VAR');
|
||||
var speed = generator.valueToCode(this, 'speed', generator.ORDER_ASSIGNMENT);
|
||||
var code = 'car.move("' + v + '",' + speed + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const ce_go_stepper_stop = function (_, generator) {
|
||||
var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]
|
||||
if (version == "mixgo_me" || version == "mixgo_cc") {
|
||||
generator.definitions_['import_me_go_car'] = 'from me_go import car';
|
||||
}
|
||||
else if (version == "mixgo_ce") {
|
||||
generator.definitions_['import_ce_go_car'] = 'from ce_go import car';
|
||||
}
|
||||
var v = this.getFieldValue('VAR');
|
||||
var code = 'car.move("' + v + '")\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const ce_go_dc_motor = function (_, generator) {
|
||||
var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]
|
||||
if (version == "mixgo_me" || version == "mixgo_cc") {
|
||||
generator.definitions_['import_me_go_car'] = 'from me_go import car';
|
||||
}
|
||||
else if (version == "mixgo_ce") {
|
||||
generator.definitions_['import_ce_go_car'] = 'from ce_go import car';
|
||||
}
|
||||
var wheel = this.getFieldValue('wheel');
|
||||
var v = this.getFieldValue('direction');
|
||||
if (wheel == 0) {
|
||||
if (v == 'CW') { v = 'CCW' }
|
||||
else if (v == 'CCW') { v = 'CW' }
|
||||
}
|
||||
var speed = generator.valueToCode(this, 'speed', generator.ORDER_ATOMIC);
|
||||
var code = "car.motor(car.MOTO[" + wheel + '],"' + v + '",' + speed + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const ce_go_hall_attachInterrupt = function (_, generator) {
|
||||
var dropdown_mode = this.getFieldValue('mode');
|
||||
var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]
|
||||
if (version == "mixgo_me" || version == "mixgo_cc") {
|
||||
generator.definitions_['import_me_go_hall_' + dropdown_mode] = 'from me_go import hall_' + dropdown_mode;
|
||||
}
|
||||
else if (version == "mixgo_ce") {
|
||||
generator.definitions_['import_ce_go_hall_' + dropdown_mode] = 'from ce_go import hall_' + dropdown_mode;
|
||||
}
|
||||
var atta = generator.valueToCode(this, 'DO', generator.ORDER_ATOMIC);
|
||||
var code = 'hall_' + dropdown_mode + '.irq_cb(' + atta + ')\n'
|
||||
return code;
|
||||
}
|
||||
|
||||
export const ce_go_hall_initialize = function (_, generator) {
|
||||
var dropdown_mode = this.getFieldValue('mode');
|
||||
var args = this.getFieldValue('args');
|
||||
var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]
|
||||
if (version == "mixgo_me" || version == "mixgo_cc") {
|
||||
generator.definitions_['import_me_go_hall_' + dropdown_mode] = 'from me_go import hall_' + dropdown_mode;
|
||||
}
|
||||
else if (version == "mixgo_ce") {
|
||||
generator.definitions_['import_ce_go_hall_' + dropdown_mode] = 'from ce_go import hall_' + dropdown_mode;
|
||||
}
|
||||
var num = generator.valueToCode(this, 'num', generator.ORDER_ATOMIC);
|
||||
if (args == 'all') {
|
||||
var code = 'hall_' + dropdown_mode + '.initial(' + 'turns' + '=' + num + ',distance=' + num + ')\n'
|
||||
return code;
|
||||
}
|
||||
var code = 'hall_' + dropdown_mode + '.initial(' + args + '=' + num + ')\n'
|
||||
return code;
|
||||
}
|
||||
|
||||
export const ce_go_hall_data = function (_, generator) {
|
||||
var dropdown_mode = this.getFieldValue('mode');
|
||||
var args = this.getFieldValue('args');
|
||||
var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]
|
||||
if (version == "mixgo_me" || version == "mixgo_cc") {
|
||||
generator.definitions_['import_me_go_hall_' + dropdown_mode] = 'from me_go import hall_' + dropdown_mode;
|
||||
}
|
||||
else if (version == "mixgo_ce") {
|
||||
generator.definitions_['import_ce_go_hall_' + dropdown_mode] = 'from ce_go import hall_' + dropdown_mode;
|
||||
}
|
||||
var code = 'hall_' + dropdown_mode + '.' + args + '';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const ce_go_pin_near_line = function (_, generator) {
|
||||
var key = this.getFieldValue('key');
|
||||
var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]
|
||||
if (version == "mixgo_me" || version == "mixgo_cc") {
|
||||
generator.definitions_['import_me_go_hall'] = 'from me_go import car';
|
||||
}
|
||||
else if (version == "mixgo_ce") {
|
||||
generator.definitions_['import_ce_go_hall'] = 'from ce_go import car';
|
||||
}
|
||||
var code = 'car.patrol()' + key + '';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const ce_go_pin_near = function (_, generator) {
|
||||
var key = this.getFieldValue('key');
|
||||
var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]
|
||||
if (version == "mixgo_me" || version == "mixgo_cc") {
|
||||
generator.definitions_['import_me_go_hall'] = 'from me_go import car';
|
||||
}
|
||||
else if (version == "mixgo_ce") {
|
||||
generator.definitions_['import_ce_go_hall'] = 'from ce_go import car';
|
||||
}
|
||||
var code = 'car.obstacle()' + key + '';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const ce_go_pin_near_state_change = function (_, generator) {
|
||||
var key = this.getFieldValue('key');
|
||||
var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]
|
||||
if (version == "mixgo_me" || version == "mixgo_cc") {
|
||||
generator.definitions_['import_me_go_hall'] = 'from me_go import car';
|
||||
}
|
||||
else if (version == "mixgo_ce") {
|
||||
generator.definitions_['import_ce_go_hall'] = 'from ce_go import car';
|
||||
}
|
||||
var code = 'car.ir_mode(car.' + key + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const sensor_mixgome_eulerangles = function (_, generator) {
|
||||
var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]
|
||||
if (version == "mixgo_me" || version == "mixgo_cc") {
|
||||
generator.definitions_['import_mixgo_me_onboard_mxc6655xa'] = "from mixgo_me import onboard_mxc6655xa";
|
||||
}
|
||||
else if (version == "mixgo_ce") {
|
||||
generator.definitions_['import_mixgo_ce_onboard_mxc6655xa'] = "from mixgo_ce import onboard_mxc6655xa";
|
||||
}
|
||||
var angle = this.getFieldValue('angle');
|
||||
var code = 'onboard_mxc6655xa.eulerangles(upright=True)' + angle;
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const ce_go_pin_light = function (_, generator) {
|
||||
var key = this.getFieldValue('key');
|
||||
var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]
|
||||
if (version == "mixgo_me" || version == "mixgo_cc") {
|
||||
generator.definitions_['import_me_go_hall'] = 'from me_go import car';
|
||||
}
|
||||
else if (version == "mixgo_ce") {
|
||||
generator.definitions_['import_ce_go_hall'] = 'from ce_go import car';
|
||||
}
|
||||
var code = 'car.light()' + key + '';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
602
boards/default_src/micropython/generators/communicate.js
Normal file
602
boards/default_src/micropython/generators/communicate.js
Normal file
@@ -0,0 +1,602 @@
|
||||
import * as Blockly from 'blockly/core';
|
||||
import * as Mixly from 'mixly';
|
||||
|
||||
export const communicate_i2c_onboard = function (block, generator) {
|
||||
var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]
|
||||
generator.definitions_['import_' + version + '_onboard_i2c'] = 'from ' + version + ' import onboard_i2c';
|
||||
var code = 'onboard_i2c';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const communicate_spi_onboard = function (block, generator) {
|
||||
var version = Mixly.Boards.getSelectedBoardKey().split(':')[2]
|
||||
generator.definitions_['import_' + version + '_onboard_i2c'] = 'from ' + version + ' import onboard_spi';
|
||||
var code = 'onboard_spi';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const communicate_i2c_init = function (block, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var dropdown_pin1 = generator.valueToCode(this, 'RX', generator.ORDER_ATOMIC);
|
||||
var dropdown_pin2 = generator.valueToCode(this, 'TX', generator.ORDER_ATOMIC);
|
||||
var freq = generator.valueToCode(this, 'freq', generator.ORDER_ATOMIC);
|
||||
var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
return "" + sub + " = machine.SoftI2C(scl = machine.Pin(" + dropdown_pin2 + "), sda = machine.Pin(" + dropdown_pin1 + "), freq = " + freq + ")\n";
|
||||
}
|
||||
|
||||
export const communicate_i2c_read = function (block, generator) {
|
||||
var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var address = generator.valueToCode(this, 'address', generator.ORDER_ATOMIC);
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);
|
||||
return ["" + name + ".readfrom(" + address + ", " + data + ")", generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const communicate_i2c_write = function (block, generator) {
|
||||
var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var address = generator.valueToCode(this, 'address', generator.ORDER_ATOMIC);
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);
|
||||
return "" + name + ".writeto(" + address + ", " + data + ")\n";
|
||||
}
|
||||
|
||||
export const communicate_i2c_scan = function (block, generator) {
|
||||
var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
return ["" + name + ".scan()", generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const communicate_i2c_master_read = function (block, generator) {
|
||||
var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var code = "" + name + ".read()";
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const communicate_i2c_available = function (block, generator) {
|
||||
|
||||
var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var code = "" + name + ".available()";
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const i2c_slave_onreceive = function (block, generator) {
|
||||
var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
generator.setups_['setup_i2c_' + pin] = 'Wire.begin(' + pin + ');';
|
||||
generator.setups_['setup_i2c_onReceive_' + pin] = 'Wire.onReceive(i2cReceiveEvent_' + pin + ');';
|
||||
var funcName = 'i2cReceiveEvent_' + pin;
|
||||
var branch = generator.statementToCode(this, 'DO');
|
||||
var code2 = 'void' + ' ' + funcName + '(int howMany) {\n' + branch + '}\n';
|
||||
generator.definitions_[funcName] = code2;
|
||||
return '';
|
||||
}
|
||||
|
||||
export const communicate_spi_init = function (block, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var freq = generator.valueToCode(this, 'freq', generator.ORDER_ATOMIC);
|
||||
var mosi = generator.valueToCode(this, 'mosi', generator.ORDER_ATOMIC);
|
||||
var miso = generator.valueToCode(this, 'miso', generator.ORDER_ATOMIC);
|
||||
var sck = generator.valueToCode(this, 'sck', generator.ORDER_ATOMIC);
|
||||
return "" + name + " = machine.SoftSPI(baudrate=" + freq + ", sck=machine.Pin(" + sck + "), mosi=machine.Pin(" + mosi + "), miso=machine.Pin(" + miso + "))\n";
|
||||
}
|
||||
|
||||
export const communicate_spi_set = function (block, generator) {
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);
|
||||
return "spi.init(baudrate=" + data + ")\n";
|
||||
}
|
||||
|
||||
export const communicate_spi_buffer = function (block, generator) {
|
||||
var varname = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);
|
||||
return "" + varname + "=bytearray(" + data + ")\n";
|
||||
}
|
||||
|
||||
export const communicate_spi_read = function (block, generator) {
|
||||
var varname = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);
|
||||
return ["" + varname + ".read(" + data + ")", generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const communicate_spi_read_output = function (block, generator) {
|
||||
var varname = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);
|
||||
var val = generator.valueToCode(this, 'val', generator.ORDER_ATOMIC);
|
||||
return ["" + varname + ".read(" + data + "," + val + ")", generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const communicate_spi_readinto = function (block, generator) {
|
||||
var varname = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);
|
||||
return ["" + varname + ".readinto(" + data + ")", generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const communicate_spi_readinto_output = function (block, generator) {
|
||||
var varname = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);
|
||||
var val = generator.valueToCode(this, 'val', generator.ORDER_ATOMIC);
|
||||
return ["" + varname + ".readinto(" + data + "," + val + ")", generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const communicate_spi_write = function (block, generator) {
|
||||
var varname = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);
|
||||
return ["" + varname + ".write(" + data + ".encode('utf-8'))", generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const communicate_spi_write_readinto = function (block, generator) {
|
||||
var varname = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);
|
||||
var val = generator.valueToCode(this, 'val', generator.ORDER_ATOMIC);
|
||||
// var op=this.getFieldValue('op');
|
||||
// if(op=="byte"){
|
||||
return ["" + varname + ".write_readinto(" + data + ".encode('utf-8')," + val + ")", generator.ORDER_ATOMIC];
|
||||
// }else{
|
||||
// return [""+varname+".write_readinto(" + data + ","+val+")", generator.ORDER_ATOMIC];
|
||||
// }
|
||||
}
|
||||
|
||||
export const communicate_ow_init = function (block, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
generator.definitions_['import_onewire'] = "import onewire";
|
||||
var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var varName = generator.valueToCode(this, 'BUS', generator.ORDER_ATOMIC);
|
||||
var code = "" + name + "=onewire.OneWire(machine.Pin(" + varName + "))\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const communicate_ow_scan = function (block, generator) {
|
||||
var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var code = "" + name + ".scan()";
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const communicate_ow_reset = function (block, generator) {
|
||||
var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var code = "" + name + ".reset()\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const communicate_ow_read = function (block, generator) {
|
||||
var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var code = "" + name + ".readbyte()";
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const communicate_ow_write = function (block, generator) {
|
||||
var varName = generator.valueToCode(this, 'byte', generator.ORDER_ATOMIC);
|
||||
var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var op = this.getFieldValue('op');
|
||||
var code = "" + name + "." + op + "(" + varName + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const communicate_ow_select = function (block, generator) {
|
||||
var varName = generator.valueToCode(this, 'byte', generator.ORDER_ATOMIC);
|
||||
var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var code = "" + name + ".select_rom(" + varName + ".encode('utf-8'))\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const communicate_ir_recv_init = function (block, generator) {
|
||||
generator.definitions_['import_irremote'] = 'import irremote';
|
||||
var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var bit = this.getFieldValue('type');
|
||||
var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
if (sub == "" && bit == "RC5") {
|
||||
var code = "ir_rx = irremote.RC5_RX(" + pin + ")\n";
|
||||
}
|
||||
else if (sub == "") {
|
||||
var code = "ir_rx = irremote.NEC_RX(" + pin + "," + bit + ")\n";
|
||||
}
|
||||
else {
|
||||
var code = "ir_rx = irremote.NEC_RX(" + pin + "," + bit + "," + sub + ")\n";
|
||||
}
|
||||
return code;
|
||||
}
|
||||
|
||||
export const internal_variable = function (block, generator) {
|
||||
generator.definitions_['import_irremote'] = 'import irremote';
|
||||
var index = this.getFieldValue('index');
|
||||
var code = "ir_rx.code[" + index + "]";
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const recv_fun = function (block, generator) {
|
||||
generator.definitions_['import_irremote'] = 'import irremote';
|
||||
var en = this.getFieldValue('en');
|
||||
var code = "ir_rx.enable(" + en + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const ir_whether_recv = function (block, generator) {
|
||||
generator.definitions_['import_irremote'] = 'import irremote';
|
||||
var code = "ir_rx.any()";
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const ir_recv_timeout = function (block, generator) {
|
||||
generator.definitions_['import_irremote'] = 'import irremote';
|
||||
var time = generator.valueToCode(this, 'time', generator.ORDER_ATOMIC);
|
||||
var code = "ir_rx.timeout(" + time + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const communicate_ir_send_init = function (block, generator) {
|
||||
generator.definitions_['import_irremote'] = 'import irremote';
|
||||
var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var sam = this.getFieldValue('type');
|
||||
var power = generator.valueToCode(this, 'power', generator.ORDER_ATOMIC);
|
||||
if (sam == "RC5") {
|
||||
var code = "ir_tx = irremote.RC5_TX(" + pin + "," + power + ")\n";
|
||||
}
|
||||
else {
|
||||
var code = "ir_tx = irremote.NEC_TX(" + pin + "," + sam + "," + power + ")\n";
|
||||
}
|
||||
return code;
|
||||
}
|
||||
|
||||
export const ir_transmit_conventional_data = function (block, generator) {
|
||||
generator.definitions_['import_irremote'] = 'import irremote';
|
||||
var cmd = generator.valueToCode(this, 'cmd', generator.ORDER_ATOMIC);
|
||||
var addr = generator.valueToCode(this, 'addr', generator.ORDER_ATOMIC);
|
||||
var toggle = generator.valueToCode(this, 'toggle', generator.ORDER_ATOMIC);
|
||||
var code = "ir_tx.transmit(" + cmd + "," + addr + "," + toggle + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const ir_transmit_study_code = function (block, generator) {
|
||||
generator.definitions_['import_irremote'] = 'import irremote';
|
||||
var s_code = generator.valueToCode(this, 'LIST', generator.ORDER_ATOMIC);
|
||||
var code = "ir_tx.transmit(pulses=" + s_code + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const ir_transmit_raw_code = function (block, generator) {
|
||||
generator.definitions_['import_irremote'] = 'import irremote';
|
||||
var raw = generator.valueToCode(this, 'raw', generator.ORDER_ATOMIC);
|
||||
var code = "ir_tx.transmit(raw=" + raw + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const ir_transmit_busy = function (block, generator) {
|
||||
generator.definitions_['import_irremote'] = 'import irremote';
|
||||
var code = "ir_tx.busy()";
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const communicate_bluetooth_central_init = function (block, generator) {
|
||||
generator.definitions_['import_ble_central'] = 'import ble_central';
|
||||
var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var code = name + " = ble_central.BLESimpleCentral()\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const communicate_bluetooth_peripheral_init = function (block, generator) {
|
||||
generator.definitions_['import_ble_peripheral'] = 'import ble_peripheral';
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);
|
||||
var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var code = name + " = ble_peripheral.BLESimplePeripheral(" + data + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const communicate_bluetooth_scan = function (block, generator) {
|
||||
var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var code = name + ".scan()";
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const communicate_bluetooth_connect = function (block, generator) {
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);
|
||||
var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var mode = this.getFieldValue('mode');
|
||||
var code = name + ".connect(" + mode + '=' + data + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const communicate_bluetooth_disconnect = function (block, generator) {
|
||||
var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var code = name + '.disconnect()\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const communicate_bluetooth_mac = function (block, generator) {
|
||||
var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
return [name + ".mac", generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const communicate_bluetooth_is_connected = function (block, generator) {
|
||||
var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var code = name + ".is_connected()";
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const communicate_bluetooth_send = function (block, generator) {
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);
|
||||
var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var code = name + ".send(" + data + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const communicate_bluetooth_recv_only = function (block, generator) {
|
||||
var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var code = v + '.recv()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const communicate_bluetooth_recv = function (block, generator) {
|
||||
var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var method = generator.valueToCode(this, 'METHOD', generator.ORDER_ATOMIC);
|
||||
var code = v + '.recv(' + method + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const communicate_bluetooth_handle = function (block, generator) {
|
||||
generator.definitions_['import_ble_handle'] = 'import ble_handle';
|
||||
var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var method = generator.valueToCode(this, 'METHOD', generator.ORDER_ATOMIC);
|
||||
var code = v + '=ble_handle.Handle()\n' + v + '.recv(' + method + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
//espnow
|
||||
export const communicate_espnow_init = function (block, generator) {
|
||||
generator.definitions_['import_radio'] = "import radio";
|
||||
var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var varName = generator.valueToCode(this, 'CHNL', generator.ORDER_ATOMIC);
|
||||
var power = this.getFieldValue('op');
|
||||
var code = "" + name + "=radio.ESPNow(channel=" + varName + ",txpower=" + power + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const communicate_espnow_init_new = function (block, generator) {
|
||||
generator.definitions_['import_radio'] = "import radio";
|
||||
var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var varName = generator.valueToCode(this, 'CHNL', generator.ORDER_ATOMIC);
|
||||
var varName2 = generator.valueToCode(this, 'DB', generator.ORDER_ATOMIC);
|
||||
var code = "" + name + "=radio.ESPNow(channel=" + varName + ',txpower=' + varName2 + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const network_espnow_mac = function (block, generator) {
|
||||
generator.definitions_['import_radio'] = "import radio";
|
||||
var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
return [name + ".mac", generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const network_espnow_info = function (block, generator) {
|
||||
generator.definitions_['import_radio'] = "import radio";
|
||||
var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
return [name + ".info()", generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const network_espnow_recv = function (block, generator) {
|
||||
generator.definitions_['import_radio'] = "import radio";
|
||||
var mode = this.getFieldValue('mode');
|
||||
var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var code = name + ".recv()" + mode;
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const network_espnow_send = function (block, generator) {
|
||||
generator.definitions_['import_radio'] = "import radio";
|
||||
var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var mac = generator.valueToCode(this, 'mac', generator.ORDER_ATOMIC);
|
||||
var content = generator.valueToCode(this, 'content', generator.ORDER_ATOMIC);
|
||||
var code = name + ".send(" + mac + "," + content + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const network_espnow_recv_handle = function (block, generator) {
|
||||
generator.definitions_['import_radio'] = "import radio";
|
||||
var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var method = generator.valueToCode(this, 'METHOD', generator.ORDER_ATOMIC);
|
||||
var code = name + ".recv_cb(" + method + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
//radio
|
||||
export const espnow_radio_channel = function (block, generator) {
|
||||
generator.definitions_['import_radio'] = "import radio";
|
||||
generator.definitions_['ESPNow_radio_initialize'] = "ESPNow_radio=radio.ESPNow()";
|
||||
var varName = generator.valueToCode(this, 'CHNL', generator.ORDER_ATOMIC);
|
||||
var code = "ESPNow_radio.set_channel(channel=" + varName + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const espnow_radio_txpower = function (block, generator) {
|
||||
generator.definitions_['import_radio'] = "import radio";
|
||||
generator.definitions_['ESPNow_radio_initialize'] = "ESPNow_radio=radio.ESPNow()";
|
||||
var power = this.getFieldValue('op');
|
||||
var code = "ESPNow_radio.set_channel(txpower=" + power + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const espnow_radio_channel_new = function (block, generator) {
|
||||
generator.definitions_['import_radio'] = "import radio";
|
||||
var varName2 = generator.valueToCode(this, 'DB', generator.ORDER_ATOMIC);
|
||||
generator.definitions_['ESPNow_radio_initialize'] = "ESPNow_radio=radio.ESPNow(channel=1,txpower=" + varName2 + ")";
|
||||
var varName = generator.valueToCode(this, 'CHNL', generator.ORDER_ATOMIC);
|
||||
var code = "ESPNow_radio.set_channel(" + varName + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const espnow_radio_on_off = function (block, generator) {
|
||||
generator.definitions_['import_radio'] = "import radio";
|
||||
generator.definitions_['ESPNow_radio_initialize'] = "ESPNow_radio=radio.ESPNow()";
|
||||
var op = this.getFieldValue('on_off');
|
||||
var code = "ESPNow_radio.active(" + op + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const espnow_radio_send = function (block, generator) {
|
||||
generator.definitions_['import_radio'] = "import radio";
|
||||
generator.definitions_['ESPNow_radio_initialize'] = "ESPNow_radio=radio.ESPNow()";
|
||||
var varName = generator.valueToCode(this, 'send', generator.ORDER_ATOMIC);
|
||||
var code = 'ESPNow_radio.send("ffffffffffff",' + varName + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const espnow_radio_rec = function (block, generator) {
|
||||
generator.definitions_['import_radio'] = "import radio";
|
||||
generator.definitions_['ESPNow_radio_initialize'] = "ESPNow_radio=radio.ESPNow()";
|
||||
var code = "ESPNow_radio.recv()";
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const espnow_radio_recv_msg = function (block, generator) {
|
||||
var code = "ESPNow_radio_msg";
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const espnow_radio_recv = function (block, generator) {
|
||||
generator.definitions_['import_radio'] = "import radio";
|
||||
generator.definitions_['import_ubinascii'] = 'import ubinascii';
|
||||
generator.definitions_['ESPNow_radio_initialize'] = "ESPNow_radio=radio.ESPNow()";
|
||||
var doCode = generator.statementToCode(block, 'DO') || generator.PASS;
|
||||
generator.definitions_['def_ESPNow_radio_recv'] = 'def ESPNow_radio_recv(mac,ESPNow_radio_msg):\n' + doCode;
|
||||
generator.definitions_['def_ESPNow_radio_recv_all'] = '_radio_msg_list = []\n' + 'def ESPNow_radio_recv_callback(mac,ESPNow_radio_msg):\n' + ' global _radio_msg_list\n' + ' try: ESPNow_radio_recv(mac,ESPNow_radio_msg)\n' + ' except: pass\n' + ' if str(ESPNow_radio_msg) in _radio_msg_list:\n' + " eval('radio_recv_' + bytes.decode(ubinascii.hexlify(ESPNow_radio_msg)) + '()')\n";
|
||||
generator.definitions_['ESPNow_radio_recv_callback'] = "ESPNow_radio.recv_cb(ESPNow_radio_recv_callback)\n";
|
||||
|
||||
return '';
|
||||
}
|
||||
|
||||
var writeUTF = function (str, isGetBytes) {
|
||||
var back = [];
|
||||
var byteSize = 0;
|
||||
for (var i = 0; i < str.length; i++) {
|
||||
var code = str.charCodeAt(i);
|
||||
if (0x00 <= code && code <= 0x7f) {
|
||||
byteSize += 1;
|
||||
back.push(code);
|
||||
} else if (0x80 <= code && code <= 0x7ff) {
|
||||
byteSize += 2;
|
||||
back.push((192 | (31 & (code >> 6))));
|
||||
back.push((128 | (63 & code)))
|
||||
} else if ((0x800 <= code && code <= 0xd7ff) || (0xe000 <= code && code <= 0xffff)) {
|
||||
byteSize += 3;
|
||||
back.push((224 | (15 & (code >> 12))));
|
||||
back.push((128 | (63 & (code >> 6))));
|
||||
back.push((128 | (63 & code)))
|
||||
}
|
||||
}
|
||||
for (i = 0; i < back.length; i++) {
|
||||
back[i] &= 0xff;
|
||||
}
|
||||
if (isGetBytes) {
|
||||
return back;
|
||||
}
|
||||
if (byteSize <= 0xff) {
|
||||
return [0, byteSize].concat(back);
|
||||
}
|
||||
return [byteSize >> 8, byteSize & 0xff].concat(back);
|
||||
}
|
||||
|
||||
var toUTF8Hex = function (str) {
|
||||
var charBuf = writeUTF(str, true);
|
||||
var re = '';
|
||||
for (var i = 0; i < charBuf.length; i++) {
|
||||
var x = (charBuf[i] & 0xFF).toString(16);
|
||||
if (x.length === 1) {
|
||||
x = '0' + x;
|
||||
}
|
||||
re += x;
|
||||
}
|
||||
return re;
|
||||
}
|
||||
|
||||
export const espnow_radio_recv_certain_msg = function (block, generator) {
|
||||
generator.definitions_['import_radio'] = "import radio";
|
||||
generator.definitions_['import_ubinascii'] = 'import ubinascii';
|
||||
generator.definitions_['ESPNow_radio_initialize'] = "ESPNow_radio=radio.ESPNow()";
|
||||
var doCode = generator.statementToCode(block, 'DO') || generator.PASS;
|
||||
generator.definitions_['def_ESPNow_radio_recv_all'] = '_radio_msg_list = []\n' + 'def ESPNow_radio_recv_callback(mac,ESPNow_radio_msg):\n' + ' global _radio_msg_list\n' + ' try: ESPNow_radio_recv(mac,ESPNow_radio_msg)\n' + ' except: pass\n' + ' if str(ESPNow_radio_msg) in _radio_msg_list:\n' + " eval('radio_recv_' + bytes.decode(ubinascii.hexlify(ESPNow_radio_msg)) + '()')\n";
|
||||
generator.definitions_['ESPNow_radio_recv_callback'] = "ESPNow_radio.recv_cb(ESPNow_radio_recv_callback)\n";
|
||||
var message = block.getFieldValue('msg');
|
||||
var message_utf8 = toUTF8Hex(message);
|
||||
generator.definitions_['def_radio_recv_' + message_utf8] =
|
||||
'_radio_msg_list.append(\'' + message + '\')\n' +
|
||||
'def radio_recv_' + message_utf8 + '():\n' + doCode;
|
||||
return '';
|
||||
}
|
||||
|
||||
export const espnow_radio_recv_new = function (block, generator) {
|
||||
generator.definitions_['import_radio'] = "import radio";
|
||||
generator.definitions_['ESPNow_radio_initialize'] = "ESPNow_radio=radio.ESPNow()";
|
||||
generator.definitions_['ESPNow_radio_handlelist'] = "handle_list=[]";
|
||||
var doCode = generator.statementToCode(block, 'DO') || generator.PASS;
|
||||
generator.definitions_['def_ESPNow_radio_recv'] = 'def ESPNow_radio_recv(mac,ESPNow_radio_msg):\n' + doCode;
|
||||
generator.definitions_['ESPNow_radio_handlelist_append'] = 'if not ESPNow_radio_recv in handle_list:\n handle_list.append(ESPNow_radio_recv)';
|
||||
generator.definitions_['ESPNow_radio_recv_callback'] = "ESPNow_radio.recv_cb(handle_list)\n";
|
||||
|
||||
return '';
|
||||
}
|
||||
|
||||
export const espnow_radio_recv_certain_msg_new = function (block, generator) {
|
||||
generator.definitions_['import_radio'] = "import radio";
|
||||
generator.definitions_['ESPNow_radio_initialize'] = "ESPNow_radio=radio.ESPNow()";
|
||||
generator.definitions_['ESPNow_radio_handlelist'] = "handle_list=[]";
|
||||
var doCode = generator.statementToCode(block, 'DO') || generator.PASS;
|
||||
var message = block.getFieldValue('msg');
|
||||
generator.definitions_['def_ESPNow_radio_recv__' + message] = 'def ESPNow_radio_recv__' + message + '(mac,ESPNow_radio_msg):\n' + doCode;
|
||||
generator.definitions_['ESPNow_radio_handlelist_append__' + message] = 'if not ESPNow_radio_recv__' + message + ' in handle_list:\n handle_list.append(ESPNow_radio_recv__' + message + ')';
|
||||
generator.definitions_['ESPNow_radio_recv_callback__' + message] = "ESPNow_radio.recv_cb(handle_list)\n";
|
||||
|
||||
return '';
|
||||
}
|
||||
|
||||
export const lora_init = function (block, generator) {
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var sv = generator.valueToCode(this, 'SPISUB', generator.ORDER_ATOMIC);
|
||||
var pv = generator.valueToCode(this, 'PINSUB', generator.ORDER_ATOMIC);
|
||||
var fr = generator.valueToCode(this, 'frequency', generator.ORDER_ATOMIC);
|
||||
var r = generator.valueToCode(this, 'rate', generator.ORDER_ATOMIC);
|
||||
var f = generator.valueToCode(this, 'factor', generator.ORDER_ATOMIC);
|
||||
var p = generator.valueToCode(this, 'power', generator.ORDER_ATOMIC);
|
||||
var bandwidth = this.getFieldValue('bandwidth');
|
||||
var code;
|
||||
generator.definitions_['import_rfm98'] = 'import rfm98';
|
||||
var code = v + ' = rfm98.RFM98(' + sv + ',cs_pin=' + pv + ',frequency_mhz=' + fr + ',signal_bandwidth=' + bandwidth + ',coding_rate=' + r + ',spreading_factor=' + f + ',tx_power=' + p + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const lora_packet = function (block, generator) {
|
||||
generator.definitions_['import_rfm98'] = 'import rfm98';
|
||||
var key = this.getFieldValue('key');
|
||||
var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
return [name + "." + key + '()', generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const lora_send = function (block, generator) {
|
||||
generator.definitions_['import_rfm98'] = 'import rfm98';
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);
|
||||
var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var code = name + ".send(" + data + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const lora_recv = function (block, generator) {
|
||||
generator.definitions_['import_rfm98'] = 'import rfm98';
|
||||
var name = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
return [name + '.recv()', generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const urequests_get = function (block, generator) {
|
||||
generator.definitions_.import_requests = "import urequests";
|
||||
var varName = generator.variableDB_.getName(this.getFieldValue('VAR'), Blockly.Variables.NAME_TYPE);
|
||||
var str = generator.valueToCode(this, 'DOMAIN', generator.ORDER_ATOMIC);
|
||||
var code = varName + '= ' + 'urequests.get(' + str + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const urequests_attribute = function (block, generator) {
|
||||
generator.definitions_.import_requests = "import urequests";
|
||||
var varName = generator.valueToCode(this, 'VAL', generator.ORDER_ASSIGNMENT) || '0';
|
||||
var attr = this.getFieldValue('ATTR');
|
||||
var code = varName + "." + attr;
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const urequests_method = function (block, generator) {
|
||||
generator.definitions_.import_requests = "import urequests";
|
||||
var method = this.getFieldValue('DIR');
|
||||
var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var code = "urequests." + method + "(" + str + ')';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
121
boards/default_src/micropython/generators/control.js
Normal file
121
boards/default_src/micropython/generators/control.js
Normal file
@@ -0,0 +1,121 @@
|
||||
import * as Blockly from 'blockly/core';
|
||||
import { controls_repeat_ext } from '@mixly/python/generators/control';
|
||||
|
||||
export const base_setup = function (_, generator) {
|
||||
var branch = generator.statementToCode(this, 'DO');
|
||||
branch = branch.replace(/(^\s*)|(\s*$)/g, "").replace(/\n {4}/g, '\n');//去除两端空格
|
||||
if (branch) {
|
||||
if (branch.endsWith('\n')) {
|
||||
generator.setups_['setup_setup'] = branch;
|
||||
}
|
||||
else {
|
||||
generator.setups_['setup_setup'] = branch + '\n';
|
||||
}
|
||||
}
|
||||
return '';
|
||||
}
|
||||
|
||||
// ok
|
||||
export const controls_if = function (a, generator) {
|
||||
var b = 0,
|
||||
c = "",
|
||||
d,
|
||||
e;
|
||||
do
|
||||
e = generator.valueToCode(a, "IF" + b, generator.ORDER_NONE) || "False", d = generator.statementToCode(a, "DO" + b) || generator.PASS, c += (0 == b ? "if " : "elif ") + e + ":\n" + d, ++b;
|
||||
while (a.getInput("IF" + b));
|
||||
a.getInput("ELSE") && (d = generator.statementToCode(a, "ELSE") || generator.PASS, c += "else:\n" + d);
|
||||
return c
|
||||
}
|
||||
|
||||
// ok
|
||||
export const controls_for = function (a, generator) {
|
||||
var b = generator.variableDB_.getName(a.getFieldValue("VAR"), Blockly.Variables.NAME_TYPE),
|
||||
//var b = generator.valueToCode(a, "VAR", generator.ORDER_MEMBER) || "''",
|
||||
c = generator.valueToCode(a, "FROM", generator.ORDER_NONE) || "0",
|
||||
d = generator.valueToCode(a, "TO", generator.ORDER_NONE) || "0",
|
||||
e = generator.valueToCode(a, "STEP", generator.ORDER_NONE) || "1",
|
||||
f = generator.addLoopTrap(generator.statementToCode(a, "DO"), a.id) || generator.PASS,
|
||||
g = "",
|
||||
h = function (_, generator) {
|
||||
return generator.provideFunction_("upRange",
|
||||
["def " + generator.FUNCTION_NAME_PLACEHOLDER_ + "(start, stop, step):", " while start <= stop:", " yield start", " start += abs(step)"])
|
||||
},
|
||||
k = function (_, generator) {
|
||||
return generator.provideFunction_("downRange", ["def " + generator.FUNCTION_NAME_PLACEHOLDER_ + "(start, stop, step):", " while start >= stop:", " yield start", " start -= abs(step)"])
|
||||
}
|
||||
a = function (a, b, c) {
|
||||
return "(" + a + " <= " + b + ") and " + h() + "(" + a + ", " + b + ", " + c + ") or " + k() + "(" + a + ", " + b + ", " + c + ")"
|
||||
}
|
||||
if (Blockly.isNumber(c) && Blockly.isNumber(d) &&
|
||||
Blockly.isNumber(e))
|
||||
c = parseFloat(c), d = parseFloat(d), e = Math.abs(parseFloat(e)), 0 === c % 1 && 0 === d % 1 && 0 === e % 1 ? (c <= d ? (d++, a = 0 == c && 1 == e ? d : c + ", " + d, 1 != e && (a += ", " + e)) : (d--, a = c + ", " + d + ", -" + e), a = "range(" + a + ")") : (a = c < d ? h() : k(), a += "(" + c + ", " + d + ", " + e + ")");
|
||||
else {
|
||||
var l = function (a, c) {
|
||||
if (Blockly.isNumber(a))
|
||||
a = parseFloat(a);
|
||||
else {
|
||||
var d = generator.variableDB_.getDistinctName(b + c, Blockly.Variables.NAME_TYPE);
|
||||
g += d + " = " + a + "\n";
|
||||
a = d
|
||||
}
|
||||
return a
|
||||
}
|
||||
c = l(c, "_start");
|
||||
d = l(d, "_end");
|
||||
l(e, "_inc");
|
||||
a = "number" == typeof c && "number" == typeof d ? c < d ? h(c, d, e) : k(c, d, e) : a(c, d, e)
|
||||
}
|
||||
return g += "for " + b + " in " + a + ":\n" + f
|
||||
}
|
||||
|
||||
// ok
|
||||
export const controls_repeat = controls_repeat_ext;
|
||||
|
||||
export const controls_whileUntil = function (a, generator) {
|
||||
var b = "UNTIL" == a.getFieldValue("MODE"),
|
||||
c = generator.valueToCode(a, "BOOL", b ? generator.ORDER_LOGICAL_NOT : generator.ORDER_NONE) || "False",
|
||||
d = generator.addLoopTrap(generator.statementToCode(a, "DO"), a.id) || generator.PASS;
|
||||
b && (c = "not " + c);
|
||||
return "while " + c + ":\n" + d
|
||||
}
|
||||
|
||||
// ok
|
||||
export const controls_flow_statements = function (a) {
|
||||
switch (a.getFieldValue("FLOW")) {
|
||||
case "BREAK":
|
||||
return "break\n";
|
||||
case "CONTINUE":
|
||||
return "continue\n"
|
||||
}
|
||||
throw "Unknown flow statement.";
|
||||
}
|
||||
|
||||
//ok
|
||||
export const controls_forEach = function (block, generator) {
|
||||
// For each loop.
|
||||
var variable0 = generator.variableDB_.getName(
|
||||
block.getFieldValue('VAR'), Blockly.Variables.NAME_TYPE);
|
||||
var argument0 = generator.valueToCode(block, 'LIST',
|
||||
generator.ORDER_RELATIONAL) || '[]';
|
||||
var branch = generator.statementToCode(block, 'DO');
|
||||
branch = generator.addLoopTrap(branch, block.id) ||
|
||||
generator.PASS;
|
||||
var code = 'for ' + variable0 + ' in ' + argument0 + ':\n' + branch;
|
||||
return code;
|
||||
}
|
||||
|
||||
// ok
|
||||
export const controls_type = function (_, generator) {
|
||||
var data = generator.valueToCode(this, 'DATA', generator.ORDER_ATOMIC) || '1000'
|
||||
var code = 'type(' + data + ')';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const controls_typeLists = function (_, generator) {
|
||||
generator.definitions_['import_microbit_*'] = 'from microbit import *';
|
||||
var type = this.getFieldValue('type');
|
||||
// generator.definitions_['func_type' + type] = code;
|
||||
return [type, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
497
boards/default_src/micropython/generators/display.js
Normal file
497
boards/default_src/micropython/generators/display.js
Normal file
@@ -0,0 +1,497 @@
|
||||
export const display_show_image_or_string = function (_, generator) {
|
||||
generator.definitions_['import_matrix'] = 'import matrix';
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
|
||||
var code = "matrix.show(" + data + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const display_scroll_string = function (_, generator) {
|
||||
generator.definitions_['import_matrix'] = 'import matrix';
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
|
||||
var code = "matrix.scroll(" + data + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const display_show_static = function (_, generator) {
|
||||
generator.definitions_['import_matrix'] = 'import matrix';
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
|
||||
var code = "matrix.showstatic(" + data + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const display_show_image_or_string_delay = function (_, generator) {
|
||||
generator.definitions_['import_matrix'] = 'import matrix';
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
|
||||
var time = generator.valueToCode(this, 'time', generator.ORDER_ASSIGNMENT);
|
||||
var code = "matrix.show(" + data + ',' + time + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const display_scroll_string_delay = function (_, generator) {
|
||||
generator.definitions_['import_matrix'] = 'import matrix';
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
|
||||
var time = generator.valueToCode(this, 'time', generator.ORDER_ASSIGNMENT);
|
||||
var code = "matrix.scroll(" + data + ',' + time + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const display_image_create = function (block, generator) {
|
||||
generator.definitions_['import_matrix'] = 'import matrix';
|
||||
var colours = {
|
||||
"#000000": "0",
|
||||
//"#440000": "1",
|
||||
//"#660000": "2",
|
||||
//"#880000": "3",
|
||||
//"#aa0000": "4",
|
||||
//"#bb0000": "5",
|
||||
//"#cc0000": "6",
|
||||
//"#dd0000": "7",
|
||||
//"#ee0000": "8",
|
||||
"#ff0000": "1"
|
||||
}
|
||||
var colour_00 = colours[block.getFieldValue("00")];
|
||||
var colour_01 = colours[block.getFieldValue("01")];
|
||||
var colour_02 = colours[block.getFieldValue("02")];
|
||||
var colour_03 = colours[block.getFieldValue("03")];
|
||||
var colour_04 = colours[block.getFieldValue("04")];
|
||||
var colour_05 = colours[block.getFieldValue("05")];
|
||||
var colour_06 = colours[block.getFieldValue("06")];
|
||||
var colour_07 = colours[block.getFieldValue("07")];
|
||||
var colour_08 = colours[block.getFieldValue("08")];
|
||||
var colour_09 = colours[block.getFieldValue("09")];
|
||||
var colour_0a = colours[block.getFieldValue("0a")];
|
||||
var colour_0b = colours[block.getFieldValue("0b")];
|
||||
var colour_0c = colours[block.getFieldValue("0c")];
|
||||
var colour_0d = colours[block.getFieldValue("0d")];
|
||||
var colour_0e = colours[block.getFieldValue("0e")];
|
||||
var colour_0f = colours[block.getFieldValue("0f")];
|
||||
var colour_10 = colours[block.getFieldValue("10")];
|
||||
var colour_11 = colours[block.getFieldValue("11")];
|
||||
var colour_12 = colours[block.getFieldValue("12")];
|
||||
var colour_13 = colours[block.getFieldValue("13")];
|
||||
var colour_14 = colours[block.getFieldValue("14")];
|
||||
var colour_15 = colours[block.getFieldValue("15")];
|
||||
var colour_16 = colours[block.getFieldValue("16")];
|
||||
var colour_17 = colours[block.getFieldValue("17")];
|
||||
var colour_18 = colours[block.getFieldValue("18")];
|
||||
var colour_19 = colours[block.getFieldValue("19")];
|
||||
var colour_1a = colours[block.getFieldValue("1a")];
|
||||
var colour_1b = colours[block.getFieldValue("1b")];
|
||||
var colour_1c = colours[block.getFieldValue("1c")];
|
||||
var colour_1d = colours[block.getFieldValue("1d")];
|
||||
var colour_1e = colours[block.getFieldValue("1e")];
|
||||
var colour_1f = colours[block.getFieldValue("1f")];
|
||||
var colour_20 = colours[block.getFieldValue("20")];
|
||||
var colour_21 = colours[block.getFieldValue("21")];
|
||||
var colour_22 = colours[block.getFieldValue("22")];
|
||||
var colour_23 = colours[block.getFieldValue("23")];
|
||||
var colour_24 = colours[block.getFieldValue("24")];
|
||||
var colour_25 = colours[block.getFieldValue("25")];
|
||||
var colour_26 = colours[block.getFieldValue("26")];
|
||||
var colour_27 = colours[block.getFieldValue("27")];
|
||||
var colour_28 = colours[block.getFieldValue("28")];
|
||||
var colour_29 = colours[block.getFieldValue("29")];
|
||||
var colour_2a = colours[block.getFieldValue("2a")];
|
||||
var colour_2b = colours[block.getFieldValue("2b")];
|
||||
var colour_2c = colours[block.getFieldValue("2c")];
|
||||
var colour_2d = colours[block.getFieldValue("2d")];
|
||||
var colour_2e = colours[block.getFieldValue("2e")];
|
||||
var colour_2f = colours[block.getFieldValue("2f")];
|
||||
var colour_30 = colours[block.getFieldValue("30")];
|
||||
var colour_31 = colours[block.getFieldValue("31")];
|
||||
var colour_32 = colours[block.getFieldValue("32")];
|
||||
var colour_33 = colours[block.getFieldValue("33")];
|
||||
var colour_34 = colours[block.getFieldValue("34")];
|
||||
var colour_35 = colours[block.getFieldValue("35")];
|
||||
var colour_36 = colours[block.getFieldValue("36")];
|
||||
var colour_37 = colours[block.getFieldValue("37")];
|
||||
var colour_38 = colours[block.getFieldValue("38")];
|
||||
var colour_39 = colours[block.getFieldValue("39")];
|
||||
var colour_3a = colours[block.getFieldValue("3a")];
|
||||
var colour_3b = colours[block.getFieldValue("3b")];
|
||||
var colour_3c = colours[block.getFieldValue("3c")];
|
||||
var colour_3d = colours[block.getFieldValue("3d")];
|
||||
var colour_3e = colours[block.getFieldValue("3e")];
|
||||
var colour_3f = colours[block.getFieldValue("3f")];
|
||||
var colour_40 = colours[block.getFieldValue("40")];
|
||||
var colour_41 = colours[block.getFieldValue("41")];
|
||||
var colour_42 = colours[block.getFieldValue("42")];
|
||||
var colour_43 = colours[block.getFieldValue("43")];
|
||||
var colour_44 = colours[block.getFieldValue("44")];
|
||||
var colour_45 = colours[block.getFieldValue("45")];
|
||||
var colour_46 = colours[block.getFieldValue("46")];
|
||||
var colour_47 = colours[block.getFieldValue("47")];
|
||||
var colour_48 = colours[block.getFieldValue("48")];
|
||||
var colour_49 = colours[block.getFieldValue("49")];
|
||||
var colour_4a = colours[block.getFieldValue("4a")];
|
||||
var colour_4b = colours[block.getFieldValue("4b")];
|
||||
var colour_4c = colours[block.getFieldValue("4c")];
|
||||
var colour_4d = colours[block.getFieldValue("4d")];
|
||||
var colour_4e = colours[block.getFieldValue("4e")];
|
||||
var colour_4f = colours[block.getFieldValue("4f")];
|
||||
var colour_50 = colours[block.getFieldValue("50")];
|
||||
var colour_51 = colours[block.getFieldValue("51")];
|
||||
var colour_52 = colours[block.getFieldValue("52")];
|
||||
var colour_53 = colours[block.getFieldValue("53")];
|
||||
var colour_54 = colours[block.getFieldValue("54")];
|
||||
var colour_55 = colours[block.getFieldValue("55")];
|
||||
var colour_56 = colours[block.getFieldValue("56")];
|
||||
var colour_57 = colours[block.getFieldValue("57")];
|
||||
var colour_58 = colours[block.getFieldValue("58")];
|
||||
var colour_59 = colours[block.getFieldValue("59")];
|
||||
var colour_5a = colours[block.getFieldValue("5a")];
|
||||
var colour_5b = colours[block.getFieldValue("5b")];
|
||||
var colour_5c = colours[block.getFieldValue("5c")];
|
||||
var colour_5d = colours[block.getFieldValue("5d")];
|
||||
var colour_5e = colours[block.getFieldValue("5e")];
|
||||
var colour_5f = colours[block.getFieldValue("5f")];
|
||||
var colour_60 = colours[block.getFieldValue("60")];
|
||||
var colour_61 = colours[block.getFieldValue("61")];
|
||||
var colour_62 = colours[block.getFieldValue("62")];
|
||||
var colour_63 = colours[block.getFieldValue("63")];
|
||||
var colour_64 = colours[block.getFieldValue("64")];
|
||||
var colour_65 = colours[block.getFieldValue("65")];
|
||||
var colour_66 = colours[block.getFieldValue("66")];
|
||||
var colour_67 = colours[block.getFieldValue("67")];
|
||||
var colour_68 = colours[block.getFieldValue("68")];
|
||||
var colour_69 = colours[block.getFieldValue("69")];
|
||||
var colour_6a = colours[block.getFieldValue("6a")];
|
||||
var colour_6b = colours[block.getFieldValue("6b")];
|
||||
var colour_6c = colours[block.getFieldValue("6c")];
|
||||
var colour_6d = colours[block.getFieldValue("6d")];
|
||||
var colour_6e = colours[block.getFieldValue("6e")];
|
||||
var colour_6f = colours[block.getFieldValue("6f")];
|
||||
var colour_70 = colours[block.getFieldValue("70")];
|
||||
var colour_71 = colours[block.getFieldValue("71")];
|
||||
var colour_72 = colours[block.getFieldValue("72")];
|
||||
var colour_73 = colours[block.getFieldValue("73")];
|
||||
var colour_74 = colours[block.getFieldValue("74")];
|
||||
var colour_75 = colours[block.getFieldValue("75")];
|
||||
var colour_76 = colours[block.getFieldValue("76")];
|
||||
var colour_77 = colours[block.getFieldValue("77")];
|
||||
var colour_78 = colours[block.getFieldValue("78")];
|
||||
var colour_79 = colours[block.getFieldValue("79")];
|
||||
var colour_7a = colours[block.getFieldValue("7a")];
|
||||
var colour_7b = colours[block.getFieldValue("7b")];
|
||||
var colour_7c = colours[block.getFieldValue("7c")];
|
||||
var colour_7d = colours[block.getFieldValue("7d")];
|
||||
var colour_7e = colours[block.getFieldValue("7e")];
|
||||
var colour_7f = colours[block.getFieldValue("7f")];
|
||||
var code = 'matrix.Image("' + colour_00 + colour_01 + colour_02 + colour_03 + colour_04 + colour_05 + colour_06 + colour_07 + colour_08 + colour_09 + colour_0a + colour_0b + colour_0c + colour_0d + colour_0e + colour_0f + ':' + colour_10 + colour_11 + colour_12 + colour_13 + colour_14 + colour_15 + colour_16 + colour_17 + colour_18 + colour_19 + colour_1a + colour_1b + colour_1c + colour_1d + colour_1e + colour_1f + ':' + colour_20 + colour_21 + colour_22 + colour_23 + colour_24 + colour_25 + colour_26 + colour_27 + colour_28 + colour_29 + colour_2a + colour_2b + colour_2c + colour_2d + colour_2e + colour_2f + ':' + colour_30 + colour_31 + colour_32 + colour_33 + colour_34 + colour_35 + colour_36 + colour_37 + colour_38 + colour_39 + colour_3a + colour_3b + colour_3c + colour_3d + colour_3e + colour_3f + ':' + colour_40 + colour_41 + colour_42 + colour_43 + colour_44 + colour_45 + colour_46 + colour_47 + colour_48 + colour_49 + colour_4a + colour_4b + colour_4c + colour_4d + colour_4e + colour_4f + ':' + colour_50 + colour_51 + colour_52 + colour_53 + colour_54 + colour_55 + colour_56 + colour_57 + colour_58 + colour_59 + colour_5a + colour_5b + colour_5c + colour_5d + colour_5e + colour_5f + ':' + colour_60 + colour_61 + colour_62 + colour_63 + colour_64 + colour_65 + colour_66 + colour_67 + colour_68 + colour_69 + colour_6a + colour_6b + colour_6c + colour_6d + colour_6e + colour_6f + ':' + colour_70 + colour_71 + colour_72 + colour_73 + colour_74 + colour_75 + colour_76 + colour_77 + colour_78 + colour_79 + colour_7a + colour_7b + colour_7c + colour_7d + colour_7e + colour_7f + '")';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const display_image_builtins = function (block, generator) {
|
||||
generator.definitions_['import_matrix'] = 'import matrix';
|
||||
var dropdown_image = block.getFieldValue('image');
|
||||
var code = 'matrix.Image.' + dropdown_image;
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const display_get_pixel = function (block, generator) {
|
||||
generator.definitions_['import_matrix'] = 'import matrix';
|
||||
var value_x = generator.valueToCode(block, 'x', generator.ORDER_ATOMIC);
|
||||
var value_y = generator.valueToCode(block, 'y', generator.ORDER_ATOMIC);
|
||||
var code = 'matrix.get_pixel(int(' + value_x + '), int(' + value_y + '))';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const display_bright_point = function (_, generator) {
|
||||
generator.definitions_['import_matrix'] = 'import matrix';
|
||||
var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);
|
||||
var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);
|
||||
var dropdown_stat = generator.valueToCode(this, 'STAT', generator.ORDER_ATOMIC);
|
||||
var code = 'matrix.set_pixel(int(' + x + '), int(' + y + '), ' + dropdown_stat + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const display_get_screen_pixel = function (_, generator) {
|
||||
generator.definitions_['import_matrix'] = 'import matrix';
|
||||
var code = 'matrix.get_brightness()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const display_get_screen_image = function (_, generator) {
|
||||
generator.definitions_['import_matrix'] = 'import matrix';
|
||||
var code = 'matrix.get_screenimage()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const display_bright_screen = function (_, generator) {
|
||||
generator.definitions_['import_matrix'] = 'import matrix';
|
||||
var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);
|
||||
var code = 'matrix.set_brightness(' + x + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const display_blink_rate = function (_, generator) {
|
||||
generator.definitions_['import_matrix'] = 'import matrix';
|
||||
var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);
|
||||
var code = 'matrix.blink_rate(' + x + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const display_clear = function (_, generator) {
|
||||
generator.definitions_['import_matrix'] = 'import matrix';
|
||||
var code = 'matrix.clear()\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const display_use_i2c_init = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
generator.definitions_['import_ssd1306'] = 'import ssd1306';
|
||||
var i2csub = generator.valueToCode(this, 'I2CSUB', generator.ORDER_ATOMIC);
|
||||
var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var row = generator.valueToCode(this, 'row', generator.ORDER_ATOMIC);
|
||||
var column = generator.valueToCode(this, 'column', generator.ORDER_ATOMIC);
|
||||
var code = sub + " = ssd1306.SSD1306_I2C(" + row + "," + column + "," + i2csub + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const display_draw_4strings = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
generator.definitions_['import_ssd1306'] = 'import ssd1306';
|
||||
var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var value_text_line1 = generator.valueToCode(this, 'Text_line1', generator.ORDER_ASSIGNMENT) || '\'\'';
|
||||
var value_text_line2 = generator.valueToCode(this, 'Text_line2', generator.ORDER_ASSIGNMENT) || '\'\'';
|
||||
var value_text_line3 = generator.valueToCode(this, 'Text_line3', generator.ORDER_ASSIGNMENT) || '\'\'';
|
||||
var value_text_line4 = generator.valueToCode(this, 'Text_line4', generator.ORDER_ASSIGNMENT) || '\'\'';
|
||||
var code = varName + '.show_str(' + value_text_line1 + ',' + value_text_line2 + ',' + value_text_line3 + ',' + value_text_line4 + ')\n'
|
||||
return code;
|
||||
}
|
||||
|
||||
export const display_line_arbitrarily = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
generator.definitions_['import_ssd1306'] = 'import ssd1306';
|
||||
var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var location_x1 = generator.valueToCode(this, 'x1', generator.ORDER_ATOMIC);
|
||||
var location_y1 = generator.valueToCode(this, 'y1', generator.ORDER_ATOMIC);
|
||||
var location_x2 = generator.valueToCode(this, 'x2', generator.ORDER_ATOMIC);
|
||||
var location_y2 = generator.valueToCode(this, 'y2', generator.ORDER_ATOMIC);
|
||||
var code = varName + '.show_line(' + location_x1 + ', ' + location_y1 + ', ' + location_x2 + ', ' + location_y2 + ', 1)\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const display_rect = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
generator.definitions_['import_ssd1306'] = 'import ssd1306';
|
||||
var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var location_x = generator.valueToCode(this, 'x', generator.ORDER_ATOMIC);
|
||||
var location_y = generator.valueToCode(this, 'y', generator.ORDER_ATOMIC);
|
||||
var value_width = generator.valueToCode(this, 'width', generator.ORDER_ATOMIC);
|
||||
var value_height = generator.valueToCode(this, 'height', generator.ORDER_ATOMIC);
|
||||
var checkbox_fill = this.getFieldValue("fill") == 'TRUE' ? 'True' : 'False';
|
||||
var size = this.getFieldValue('OP');
|
||||
var code = '';
|
||||
switch (checkbox_fill) {
|
||||
case "True":
|
||||
code = varName + '.show_fill_rect(' + location_x + ', ' + location_y + ', ' + value_width + ', ' + value_height + ',' + size + ')\n';
|
||||
break;
|
||||
case "False":
|
||||
code = varName + '.show_rect(' + location_x + ', ' + location_y + ', ' + value_width + ', ' + value_height + ',' + size + ')\n';
|
||||
break;
|
||||
}
|
||||
return code;
|
||||
}
|
||||
|
||||
export const image_arithmetic = function (block, generator) {
|
||||
generator.definitions_['import_matrix'] = 'import matrix';
|
||||
var op = block.getFieldValue("OP");
|
||||
var imga = generator.valueToCode(block, 'A', generator.ORDER_ATOMIC);
|
||||
var imgb = generator.valueToCode(block, 'B', generator.ORDER_ATOMIC);
|
||||
var code = '';
|
||||
if (op == 'INTERSECTION') {
|
||||
code = imga + '-(' + imga + '-' + imgb + ')';
|
||||
}
|
||||
else {
|
||||
code = imga + op + imgb;
|
||||
}
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const display_line = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
generator.definitions_['import_ssd1306'] = 'import ssd1306';
|
||||
var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var location_x = generator.valueToCode(this, 'x', generator.ORDER_ATOMIC);
|
||||
var location_y = generator.valueToCode(this, 'y', generator.ORDER_ATOMIC);
|
||||
var value_length = generator.valueToCode(this, 'length', generator.ORDER_ATOMIC);
|
||||
var value_direction = this.getFieldValue("direction");
|
||||
var code = varName + '.show_' + value_direction + '(' + location_x + ', ' + location_y + ', ' + value_length + ', 1)\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const display_onoff = function (_, generator) {
|
||||
var code = (this.getFieldValue('ONOFF') == 'ON') ? '1' : '0';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const image_shift = function (block, generator) {
|
||||
generator.definitions_['import_matrix'] = 'import matrix';
|
||||
var op = block.getFieldValue("OP");
|
||||
var image = generator.valueToCode(block, 'img', generator.ORDER_ATOMIC);
|
||||
var value = generator.valueToCode(block, 'val', generator.ORDER_ATOMIC);
|
||||
var code = image + '.shift_' + op + '(' + value + ')';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const display_fill = function (_, generator) {
|
||||
var varName = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
generator.definitions_['import_ssd1306'] = 'import ssd1306';
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var key = this.getFieldValue('key');
|
||||
var code = varName + '.show_fill(' + key + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
// export const switch = function (_, generator) {
|
||||
// var code = this.getFieldValue('flag');
|
||||
// return [code, generator.ORDER_ATOMIC];
|
||||
// }
|
||||
|
||||
export const display_tm_use_i2c_init = function (_, generator) {
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var iv = generator.valueToCode(this, 'I2CSUB', generator.ORDER_ATOMIC);
|
||||
var key = this.getFieldValue("key");
|
||||
var code;
|
||||
if (key == 'TM1650') {
|
||||
generator.definitions_['import_tm1650'] = 'import tm1650';
|
||||
code = v + ' = tm1650.' + key + "(" + iv + ')\n';
|
||||
} else if (key == 'TM1637') {
|
||||
generator.definitions_['import_tm1637'] = 'import tm1637';
|
||||
code = v + ' = tm1637.' + key + "(" + iv + ')\n';
|
||||
}
|
||||
return code;
|
||||
}
|
||||
|
||||
export const display_tm1650_power = function (_, generator) {
|
||||
var type = this.getFieldValue("TYPE");
|
||||
var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var stat = this.getFieldValue("STAT");
|
||||
var code = v + '.' + type + stat + "()\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const display_tm1650_show_num = function (_, generator) {
|
||||
var type = this.getFieldValue("TYPE");
|
||||
var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var val = generator.valueToCode(this, 'VALUE', generator.ORDER_ATOMIC);
|
||||
var code = v + '.' + type + "_show_num(" + val + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const display_tm1650_show_dot = function (_, generator) {
|
||||
var type = this.getFieldValue("TYPE");
|
||||
var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var n = generator.valueToCode(this, 'NO', generator.ORDER_ATOMIC);
|
||||
var stat = generator.valueToCode(this, 'STAT', generator.ORDER_ATOMIC);
|
||||
var code = v + '.' + type + "_show_dot(" + n + ", " + stat + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const display_animate = function (_, generator) {
|
||||
// Boolean values true and false.
|
||||
var name = this.getFieldValue("ANIMATION");
|
||||
var code = 'matrix.Image.' + name;
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const display_circle = function (_, generator) {
|
||||
var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
generator.definitions_['import_ssd1306'] = 'import ssd1306';
|
||||
var location_x = generator.valueToCode(this, 'x', generator.ORDER_ATOMIC);
|
||||
var location_y = generator.valueToCode(this, 'y', generator.ORDER_ATOMIC);
|
||||
var value_r = generator.valueToCode(this, 'r', generator.ORDER_ATOMIC);
|
||||
var checkbox_fill = this.getFieldValue("fill") == 'TRUE' ? 'True' : 'False';
|
||||
var size = this.getFieldValue('OP');
|
||||
var code = '';
|
||||
switch (checkbox_fill) {
|
||||
case "True":
|
||||
code = varName + '.show_fill_circle(' + location_x + ', ' + location_y + ', ' + value_r + ', ' + size + ')\n';
|
||||
break;
|
||||
case "False":
|
||||
code = varName + '.show_circle(' + location_x + ', ' + location_y + ', ' + value_r + ', ' + size + ')\n';
|
||||
break;
|
||||
}
|
||||
return code;
|
||||
}
|
||||
|
||||
export const display_triangle = function (_, generator) {
|
||||
var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
generator.definitions_['import_ssd1306'] = 'import ssd1306';
|
||||
var location_x0 = generator.valueToCode(this, 'x0', generator.ORDER_ATOMIC);
|
||||
var location_y0 = generator.valueToCode(this, 'y0', generator.ORDER_ATOMIC);
|
||||
var location_x1 = generator.valueToCode(this, 'x1', generator.ORDER_ATOMIC);
|
||||
var location_y1 = generator.valueToCode(this, 'y1', generator.ORDER_ATOMIC);
|
||||
var location_x2 = generator.valueToCode(this, 'x2', generator.ORDER_ATOMIC);
|
||||
var location_y2 = generator.valueToCode(this, 'y2', generator.ORDER_ATOMIC);
|
||||
var checkbox_fill = this.getFieldValue("fill") == 'TRUE' ? 'True' : 'False';
|
||||
var size = this.getFieldValue('OP');
|
||||
var code = '';
|
||||
switch (checkbox_fill) {
|
||||
case "True":
|
||||
code = varName + '.show_fill_triangle(' + location_x0 + ', ' + location_y0 + ', ' + location_x1 + ', ' + location_y1 + ', ' + location_x2 + ', ' + location_y2 + ', ' + size + ')\n';
|
||||
break;
|
||||
case "False":
|
||||
code = varName + '.show_triangle(' + location_x0 + ', ' + location_y0 + ', ' + location_x1 + ', ' + location_y1 + ', ' + location_x2 + ', ' + location_y2 + ', ' + size + ')\n';
|
||||
break;
|
||||
}
|
||||
return code;
|
||||
}
|
||||
|
||||
export const display_oled_showBitmap = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
generator.definitions_['import_ssd1306'] = 'import ssd1306';
|
||||
var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var location_x = generator.valueToCode(this, 'START_X', generator.ORDER_ATOMIC);
|
||||
var location_y = generator.valueToCode(this, 'START_Y', generator.ORDER_ATOMIC);
|
||||
var bmp = generator.valueToCode(this, 'bitmap_name', generator.ORDER_ATOMIC);
|
||||
var w = generator.valueToCode(this, 'WIDTH', generator.ORDER_ATOMIC);
|
||||
var h = generator.valueToCode(this, 'HEIGHT', generator.ORDER_ATOMIC);
|
||||
var code = varName + '.show_bitmap(' + location_x + ', ' + location_y + ', ' + bmp + ',' + w + ',' + h + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const display_oled_drawPixel = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
generator.definitions_['import_ssd1306'] = 'import ssd1306';
|
||||
var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var location_x = generator.valueToCode(this, 'POS_X', generator.ORDER_ATOMIC);
|
||||
var location_y = generator.valueToCode(this, 'POS_Y', generator.ORDER_ATOMIC);
|
||||
var code = varName + '.show_pixel(' + location_x + ', ' + location_y + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
// pe:
|
||||
export const display_matrix_use_i2c_init = function (_, generator) {
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var iv = generator.valueToCode(this, 'I2CSUB', generator.ORDER_ATOMIC);
|
||||
var key = this.getFieldValue("key");
|
||||
var code;
|
||||
if (key == '32x12 Matrix') {
|
||||
generator.definitions_['import_matrix32x12'] = 'import matrix32x12';
|
||||
code = v + ' = matrix32x12.Matrix(' + iv + ')\n';
|
||||
} else if (key == 'TM1637') {
|
||||
generator.definitions_['import_tm1637'] = 'import tm1637';
|
||||
code = v + ' = tm1637.' + key + "(" + iv + ')\n';
|
||||
}
|
||||
return code;
|
||||
}
|
||||
|
||||
export const display_show_image = function (_, generator) {
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
generator.definitions_['import_matrix32x12'] = 'import matrix32x12';
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
|
||||
var code = v + ".set_buffer(" + data + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const display_scroll_string_extern = function (_, generator) {
|
||||
generator.definitions_['import_matrix32x12'] = 'import matrix32x12';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
|
||||
var code = v + ".scroll(" + data + ")\n";
|
||||
return code;
|
||||
}
|
||||
723
boards/default_src/micropython/generators/display_extern.js
Normal file
723
boards/default_src/micropython/generators/display_extern.js
Normal file
@@ -0,0 +1,723 @@
|
||||
import { Boards } from 'mixly';
|
||||
|
||||
export const display_matrix_use_i2c_init = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var iv = generator.valueToCode(this, 'I2CSUB', generator.ORDER_ATOMIC);
|
||||
var key = this.getFieldValue("key");
|
||||
var font = '';
|
||||
if (['mpython', 'mixgo_pe', 'mixgo_nova'].indexOf(version) >= 0) {
|
||||
font = '0x700000'
|
||||
} else if (['mixgo_zero'].indexOf(version) >= 0) {
|
||||
font = '0xE00000'
|
||||
} else {
|
||||
font = '0x3A0000'
|
||||
}
|
||||
var code;
|
||||
if (key == '32x12 Matrix') {
|
||||
generator.definitions_['import_matrix32x12'] = 'import matrix32x12';
|
||||
code = v + ' = matrix32x12.Matrix(' + iv + ',font_address=' + font + ')\n';
|
||||
} else if (key == '16x8 Matrix') {
|
||||
generator.definitions_['import_matrix16x8'] = 'import matrix16x8';
|
||||
code = v + ' = matrix16x8.Matrix(' + iv + ')\n';
|
||||
}
|
||||
return code;
|
||||
}
|
||||
|
||||
export const display_matrix_extern_show_image = function (_, generator) {
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
|
||||
var code = v + ".shows(" + data + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const display_matrix_extern_show_image_or_string_delay = function (_, generator) {
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
|
||||
var space = generator.valueToCode(this, 'space', generator.ORDER_ASSIGNMENT);
|
||||
var op = this.getFieldValue('center');
|
||||
var code = v + ".shows(" + data + ',space = ' + space + ',center = ' + op + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const display_matrix_extern_show_frame_string = function (_, generator) {
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
|
||||
var code = v + ".frame(" + data + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const display_matrix_extern_show_frame_string_delay = function (_, generator) {
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
|
||||
var time = generator.valueToCode(this, 'time', generator.ORDER_ASSIGNMENT);
|
||||
var code = v + ".frame(" + data + ',delay = ' + time + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const display_matrix_extern_scroll_string = function (_, generator) {
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
|
||||
var code = v + ".scroll(" + data + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const display_matrix_extern_scroll_string_delay = function (_, generator) {
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
|
||||
var time = generator.valueToCode(this, 'time', generator.ORDER_ASSIGNMENT);
|
||||
var space = generator.valueToCode(this, 'space', generator.ORDER_ASSIGNMENT);
|
||||
var code = v + ".scroll(" + data + ',speed =' + time + ',space = ' + space + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const display_matrix_extern_clear = function (block, generator) {
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var code = v + '.fill(0)\n' + v + '.show()\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const display_matrix_extern_shift = function (a, generator) {
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var op = a.getFieldValue("OP");
|
||||
var value = generator.valueToCode(a, 'val', generator.ORDER_ATOMIC);
|
||||
var code = v + '.' + op + '(' + value + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const display_matrix_extern_get_pixel = function (block, generator) {
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var value_x = generator.valueToCode(block, 'x', generator.ORDER_ATOMIC);
|
||||
var value_y = generator.valueToCode(block, 'y', generator.ORDER_ATOMIC);
|
||||
var code = v + '.pixel(int(' + value_x + '), int(' + value_y + '))';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const display_matrix_extern_bright_point = function (_, generator) {
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);
|
||||
var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);
|
||||
var dropdown_stat = generator.valueToCode(this, 'STAT', generator.ORDER_ATOMIC);
|
||||
var code = v + '.pixel(int(' + x + '), int(' + y + '), ' + dropdown_stat + ")\n" + v + '.show()\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const display_matrix_extern_get_screen_pixel = function (_, generator) {
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var code = v + '.get_brightness()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const display_matrix_extern_bright_screen = function (_, generator) {
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);
|
||||
var code = v + '.set_brightness(' + x + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const display_matrix_extern_image_builtins = function (block, generator) {
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var dropdown_image = block.getFieldValue('image');
|
||||
var code = v + '.' + dropdown_image;
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const matrix_extern_image_arithmetic = function (a, generator) {
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var op = a.getFieldValue("OP");
|
||||
var imga = generator.valueToCode(a, 'A', generator.ORDER_ATOMIC);
|
||||
var imgb = generator.valueToCode(a, 'B', generator.ORDER_ATOMIC);
|
||||
var code = v + '.map_' + op + '(' + imga + ',' + imgb + ')';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const matrix_extern_image_invert = function (a, generator) {
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var imga = generator.valueToCode(a, 'A', generator.ORDER_ATOMIC);
|
||||
var code = v + '.map_invert(' + imga + ')';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
//oled
|
||||
export const display_use_i2c_init = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
generator.definitions_['import_ssd1306'] = 'import ssd1306';
|
||||
var i2csub = generator.valueToCode(this, 'I2CSUB', generator.ORDER_ATOMIC);
|
||||
var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var row = generator.valueToCode(this, 'row', generator.ORDER_ATOMIC);
|
||||
var column = generator.valueToCode(this, 'column', generator.ORDER_ATOMIC);
|
||||
var code = sub + " = ssd1306.SSD1306_I2C(" + row + "," + column + "," + i2csub + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const display_draw_4strings = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
generator.definitions_['import_ssd1306'] = 'import ssd1306';
|
||||
var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var value_text_line1 = generator.valueToCode(this, 'Text_line1', generator.ORDER_ASSIGNMENT) || '\'\'';
|
||||
var value_text_line2 = generator.valueToCode(this, 'Text_line2', generator.ORDER_ASSIGNMENT) || '\'\'';
|
||||
var value_text_line3 = generator.valueToCode(this, 'Text_line3', generator.ORDER_ASSIGNMENT) || '\'\'';
|
||||
var value_text_line4 = generator.valueToCode(this, 'Text_line4', generator.ORDER_ASSIGNMENT) || '\'\'';
|
||||
var code = varName + '.show_str(' + value_text_line1 + ',' + value_text_line2 + ',' + value_text_line3 + ',' + value_text_line4 + ')\n'
|
||||
return code;
|
||||
}
|
||||
|
||||
export const display_line_arbitrarily = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
generator.definitions_['import_ssd1306'] = 'import ssd1306';
|
||||
var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var location_x1 = generator.valueToCode(this, 'x1', generator.ORDER_ATOMIC);
|
||||
var location_y1 = generator.valueToCode(this, 'y1', generator.ORDER_ATOMIC);
|
||||
var location_x2 = generator.valueToCode(this, 'x2', generator.ORDER_ATOMIC);
|
||||
var location_y2 = generator.valueToCode(this, 'y2', generator.ORDER_ATOMIC);
|
||||
var code = varName + '.show_line(' + location_x1 + ', ' + location_y1 + ', ' + location_x2 + ', ' + location_y2 + ', 1)\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const display_rect = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
generator.definitions_['import_ssd1306'] = 'import ssd1306';
|
||||
var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var location_x = generator.valueToCode(this, 'x', generator.ORDER_ATOMIC);
|
||||
var location_y = generator.valueToCode(this, 'y', generator.ORDER_ATOMIC);
|
||||
var value_width = generator.valueToCode(this, 'width', generator.ORDER_ATOMIC);
|
||||
var value_height = generator.valueToCode(this, 'height', generator.ORDER_ATOMIC);
|
||||
var checkbox_fill = this.getFieldValue("fill") == 'TRUE' ? 'True' : 'False';
|
||||
var size = this.getFieldValue('OP');
|
||||
switch (checkbox_fill) {
|
||||
case "True":
|
||||
var code = varName + '.show_fill_rect(' + location_x + ', ' + location_y + ', ' + value_width + ', ' + value_height + ',' + size + ')\n';
|
||||
return code;
|
||||
case "False":
|
||||
var code = varName + '.show_rect(' + location_x + ', ' + location_y + ', ' + value_width + ', ' + value_height + ',' + size + ')\n';
|
||||
return code;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
export const display_line = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
generator.definitions_['import_ssd1306'] = 'import ssd1306';
|
||||
var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var location_x = generator.valueToCode(this, 'x', generator.ORDER_ATOMIC);
|
||||
var location_y = generator.valueToCode(this, 'y', generator.ORDER_ATOMIC);
|
||||
var value_length = generator.valueToCode(this, 'length', generator.ORDER_ATOMIC);
|
||||
var value_direction = this.getFieldValue("direction");
|
||||
var code = varName + '.show_' + value_direction + '(' + location_x + ', ' + location_y + ', ' + value_length + ', 1)\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const display_onoff = function (_, generator) {
|
||||
var code = (this.getFieldValue('ONOFF') == 'ON') ? '1' : '0';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const image_shift = function (a, generator) {
|
||||
generator.definitions_['import_matrix'] = 'import matrix';
|
||||
var op = a.getFieldValue("OP");
|
||||
var image = generator.valueToCode(a, 'img', generator.ORDER_ATOMIC);
|
||||
var value = generator.valueToCode(a, 'val', generator.ORDER_ATOMIC);
|
||||
var code = image + '.shift_' + op + '(' + value + ')';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const display_fill = function (_, generator) {
|
||||
var varName = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
generator.definitions_['import_ssd1306'] = 'import ssd1306';
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var key = this.getFieldValue('key');
|
||||
var code = varName + '.show_fill(' + key + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
// export const switch = function (_, generator) {
|
||||
// var code = this.getFieldValue('flag');
|
||||
// return [code, generator.ORDER_ATOMIC];
|
||||
// };
|
||||
|
||||
export const display_animate = function (_, generator) {
|
||||
// Boolean values true and false.
|
||||
var name = this.getFieldValue("ANIMATION");
|
||||
var code = 'matrix.Image.' + name;
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const display_circle = function (_, generator) {
|
||||
var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
generator.definitions_['import_ssd1306'] = 'import ssd1306';
|
||||
var location_x = generator.valueToCode(this, 'x', generator.ORDER_ATOMIC);
|
||||
var location_y = generator.valueToCode(this, 'y', generator.ORDER_ATOMIC);
|
||||
var value_r = generator.valueToCode(this, 'r', generator.ORDER_ATOMIC);
|
||||
var checkbox_fill = this.getFieldValue("fill") == 'TRUE' ? 'True' : 'False';
|
||||
var size = this.getFieldValue('OP');
|
||||
switch (checkbox_fill) {
|
||||
case "True":
|
||||
var code = varName + '.show_fill_circle(' + location_x + ', ' + location_y + ', ' + value_r + ', ' + size + ')\n';
|
||||
return code;
|
||||
case "False":
|
||||
var code = varName + '.show_circle(' + location_x + ', ' + location_y + ', ' + value_r + ', ' + size + ')\n';
|
||||
return code;
|
||||
}
|
||||
}
|
||||
|
||||
export const display_triangle = function (_, generator) {
|
||||
var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
generator.definitions_['import_ssd1306'] = 'import ssd1306';
|
||||
var location_x0 = generator.valueToCode(this, 'x0', generator.ORDER_ATOMIC);
|
||||
var location_y0 = generator.valueToCode(this, 'y0', generator.ORDER_ATOMIC);
|
||||
var location_x1 = generator.valueToCode(this, 'x1', generator.ORDER_ATOMIC);
|
||||
var location_y1 = generator.valueToCode(this, 'y1', generator.ORDER_ATOMIC);
|
||||
var location_x2 = generator.valueToCode(this, 'x2', generator.ORDER_ATOMIC);
|
||||
var location_y2 = generator.valueToCode(this, 'y2', generator.ORDER_ATOMIC);
|
||||
var checkbox_fill = this.getFieldValue("fill") == 'TRUE' ? 'True' : 'False';
|
||||
var size = this.getFieldValue('OP');
|
||||
switch (checkbox_fill) {
|
||||
case "True":
|
||||
var code = varName + '.show_fill_triangle(' + location_x0 + ', ' + location_y0 + ', ' + location_x1 + ', ' + location_y1 + ', ' + location_x2 + ', ' + location_y2 + ', ' + size + ')\n';
|
||||
return code;
|
||||
case "False":
|
||||
var code = varName + '.show_triangle(' + location_x0 + ', ' + location_y0 + ', ' + location_x1 + ', ' + location_y1 + ', ' + location_x2 + ', ' + location_y2 + ', ' + size + ')\n';
|
||||
return code;
|
||||
}
|
||||
}
|
||||
|
||||
export const display_oled_showBitmap = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
generator.definitions_['import_ssd1306'] = 'import ssd1306';
|
||||
var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var location_x = generator.valueToCode(this, 'START_X', generator.ORDER_ATOMIC);
|
||||
var location_y = generator.valueToCode(this, 'START_Y', generator.ORDER_ATOMIC);
|
||||
var bmp = generator.valueToCode(this, 'bitmap_name', generator.ORDER_ATOMIC);
|
||||
var w = generator.valueToCode(this, 'WIDTH', generator.ORDER_ATOMIC);
|
||||
var h = generator.valueToCode(this, 'HEIGHT', generator.ORDER_ATOMIC);
|
||||
var code = varName + '.show_bitmap(' + location_x + ', ' + location_y + ', ' + bmp + ',' + w + ',' + h + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const display_oled_drawPixel = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
generator.definitions_['import_ssd1306'] = 'import ssd1306';
|
||||
var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var location_x = generator.valueToCode(this, 'POS_X', generator.ORDER_ATOMIC);
|
||||
var location_y = generator.valueToCode(this, 'POS_Y', generator.ORDER_ATOMIC);
|
||||
var code = varName + '.show_pixel(' + location_x + ', ' + location_y + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
//tm1650
|
||||
export const display_tm_use_i2c_init = function (_, generator) {
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var iv = generator.valueToCode(this, 'I2CSUB', generator.ORDER_ATOMIC);
|
||||
var key = this.getFieldValue("key");
|
||||
var code;
|
||||
if (key == 'TM1650') {
|
||||
generator.definitions_['import_tm1650'] = 'import tm1650';
|
||||
code = v + ' = tm1650.' + key + "(" + iv + ')\n';
|
||||
} else if (key == 'TM1637') {
|
||||
generator.definitions_['import_tm1637'] = 'import tm1637';
|
||||
code = v + ' = tm1637.' + key + "(" + iv + ')\n';
|
||||
}
|
||||
return code;
|
||||
}
|
||||
|
||||
export const display_tm1650_power = function (_, generator) {
|
||||
// var type = this.getFieldValue("TYPE");
|
||||
var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var stat = this.getFieldValue("STAT");
|
||||
var code = v + '.' + stat + "()\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const display_tm1650_show_num = function (_, generator) {
|
||||
// var type = this.getFieldValue("TYPE");
|
||||
var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var val = generator.valueToCode(this, 'VALUE', generator.ORDER_ATOMIC);
|
||||
var code = v + ".shownum(" + val + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const display_tm1650_show_dot = function (_, generator) {
|
||||
// var type = this.getFieldValue("TYPE");
|
||||
var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var n = generator.valueToCode(this, 'NO', generator.ORDER_ATOMIC);
|
||||
var stat = generator.valueToCode(this, 'STAT', generator.ORDER_ATOMIC);
|
||||
var code = v + '.showDP(' + n + ", " + stat + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const display_tm1650_set_brightness = function (_, generator) {
|
||||
// var type = this.getFieldValue("TYPE");
|
||||
var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var val = generator.valueToCode(this, 'VALUE', generator.ORDER_ATOMIC);
|
||||
var code = v + ".intensity(" + val + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const tft_use_spi_init = function (_, generator) {
|
||||
generator.definitions_['import_st7789'] = 'import st7789';
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
var font = '';
|
||||
if (['mpython', 'mixgo_pe', 'mixgo_nova'].indexOf(version) >= 0) {
|
||||
font = '0x700000'
|
||||
} else if (['mixgo_zero'].indexOf(version) >= 0) {
|
||||
font = '0xE00000'
|
||||
} else {
|
||||
font = '0x3A0000'
|
||||
}
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var sv = generator.valueToCode(this, 'SPISUB', generator.ORDER_ATOMIC);
|
||||
var pv = generator.valueToCode(this, 'PINCS', generator.ORDER_ATOMIC);
|
||||
var dv = generator.valueToCode(this, 'PINDC', generator.ORDER_ATOMIC);
|
||||
var w = generator.valueToCode(this, 'WIDTH', generator.ORDER_ATOMIC);
|
||||
var h = generator.valueToCode(this, 'HEIGHT', generator.ORDER_ATOMIC);
|
||||
var op = this.getFieldValue('rotate');
|
||||
var code = v + ' = st7789.ST7789(' + sv + ',' + w + ',' + h + ',dc_pin=' + dv + ',cs_pin=' + pv + ',rotation=' + op + ',font_address=' + font + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const tft_show_image_xy = function (_, generator) {
|
||||
generator.definitions_['import_st7789'] = 'import st7789';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
|
||||
var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);
|
||||
var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);
|
||||
var size = generator.valueToCode(this, 'size', generator.ORDER_ASSIGNMENT);
|
||||
var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
if (color.slice(0, 2) == "0x") {
|
||||
var code = v + ".image(" + data + ',x = ' + x + ',y = ' + y + ',size = ' + size + ',color=' + color + ")\n";
|
||||
} else {
|
||||
const rgbValues = color.match(/\d+/g);
|
||||
const r = parseInt(rgbValues[0]);
|
||||
const g = parseInt(rgbValues[1]);
|
||||
const b = parseInt(rgbValues[2]);
|
||||
var rgb = "0x" + ((r << 16) + (g << 8) + b).toString(16).padStart(4, "0");
|
||||
var rgb565 = (rgb & 0xf80000) >> 8 | (rgb & 0xfc00) >> 5 | (rgb & 0xff) >> 3;
|
||||
var code = v + ".image(" + data + ',x = ' + x + ',y = ' + y + ',size = ' + size + ',color=0x' + rgb565.toString(16) + ")\n";
|
||||
}
|
||||
return code;
|
||||
}
|
||||
|
||||
export const display_color_seclet = function (_, generator) {
|
||||
var colour = this.getFieldValue('COLOR');
|
||||
var code = '0x' + colour.slice(1) + ''
|
||||
var rgb565 = (code & 0xf80000) >> 8 | (code & 0xfc00) >> 5 | (code & 0xff) >> 3
|
||||
return ['0x' + rgb565.toString(16), generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const tft_show_image_or_string_delay = function (_, generator) {
|
||||
generator.definitions_['import_st7789'] = 'import st7789';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
|
||||
var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);
|
||||
var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);
|
||||
var size = generator.valueToCode(this, 'size', generator.ORDER_ASSIGNMENT);
|
||||
var space = generator.valueToCode(this, 'space', generator.ORDER_ASSIGNMENT);
|
||||
var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var op = this.getFieldValue('center');
|
||||
if (color.slice(0, 2) == "0x") {
|
||||
var code = v + ".shows(" + data + ',x = ' + x + ',y = ' + y + ',size = ' + size + ',space = ' + space + ',center = ' + op + ',color=' + color + ")\n";
|
||||
} else {
|
||||
const rgbValues = color.match(/\d+/g);
|
||||
const r = parseInt(rgbValues[0]);
|
||||
const g = parseInt(rgbValues[1]);
|
||||
const b = parseInt(rgbValues[2]);
|
||||
var rgb = "0x" + ((r << 16) + (g << 8) + b).toString(16).padStart(4, "0");
|
||||
var rgb565 = (rgb & 0xf80000) >> 8 | (rgb & 0xfc00) >> 5 | (rgb & 0xff) >> 3;
|
||||
var code = v + ".shows(" + data + ',x = ' + x + ',y = ' + y + ',size = ' + size + ',space = ' + space + ',center = ' + op + ',color=0x' + rgb565.toString(16) + ")\n";
|
||||
}
|
||||
return code;
|
||||
}
|
||||
|
||||
export const tft_show_frame_string_delay = function (_, generator) {
|
||||
generator.definitions_['import_st7789'] = 'import st7789';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
|
||||
var size = generator.valueToCode(this, 'size', generator.ORDER_ASSIGNMENT);
|
||||
var time = generator.valueToCode(this, 'time', generator.ORDER_ASSIGNMENT);
|
||||
var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
if (color.slice(0, 2) == "0x") {
|
||||
var code = v + ".frame(" + data + ',size = ' + size + ',delay = ' + time + ',color=' + color + ")\n";
|
||||
} else {
|
||||
const rgbValues = color.match(/\d+/g);
|
||||
const r = parseInt(rgbValues[0]);
|
||||
const g = parseInt(rgbValues[1]);
|
||||
const b = parseInt(rgbValues[2]);
|
||||
var rgb = "0x" + ((r << 16) + (g << 8) + b).toString(16).padStart(4, "0");
|
||||
var rgb565 = (rgb & 0xf80000) >> 8 | (rgb & 0xfc00) >> 5 | (rgb & 0xff) >> 3;
|
||||
var code = v + ".frame(" + data + ',size = ' + size + ',delay = ' + time + ',color=0x' + rgb565.toString(16) + ")\n";
|
||||
}
|
||||
return code;
|
||||
}
|
||||
|
||||
export const tft_scroll_string_delay = function (_, generator) {
|
||||
generator.definitions_['import_st7789'] = 'import st7789';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
|
||||
var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);
|
||||
var size = generator.valueToCode(this, 'size', generator.ORDER_ASSIGNMENT);
|
||||
var time = generator.valueToCode(this, 'time', generator.ORDER_ASSIGNMENT);
|
||||
var space = generator.valueToCode(this, 'space', generator.ORDER_ASSIGNMENT);
|
||||
var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
if (color.slice(0, 2) == "0x") {
|
||||
var code = v + ".scroll(" + data + ',y = ' + y + ',size = ' + size + ',speed =' + time + ',space = ' + space + ',color=' + color + ")\n";
|
||||
} else {
|
||||
const rgbValues = color.match(/\d+/g);
|
||||
const r = parseInt(rgbValues[0]);
|
||||
const g = parseInt(rgbValues[1]);
|
||||
const b = parseInt(rgbValues[2]);
|
||||
var rgb = "0x" + ((r << 16) + (g << 8) + b).toString(16).padStart(4, "0");
|
||||
var rgb565 = (rgb & 0xf80000) >> 8 | (rgb & 0xfc00) >> 5 | (rgb & 0xff) >> 3;
|
||||
var code = v + ".scroll(" + data + ',y = ' + y + ',size = ' + size + ',speed =' + time + ',space = ' + space + ',color=0x' + rgb565.toString(16) + ")\n";
|
||||
}
|
||||
return code;
|
||||
}
|
||||
|
||||
export const tft_fill = function (_, generator) {
|
||||
generator.definitions_['import_st7789'] = 'import st7789';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var key = this.getFieldValue('key');
|
||||
var code = v + '.fill(st7789.' + key + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const tft_line_arbitrarily = function (_, generator) {
|
||||
generator.definitions_['import_st7789'] = 'import st7789';
|
||||
var varName = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var location_x1 = generator.valueToCode(this, 'x1', generator.ORDER_ATOMIC);
|
||||
var location_y1 = generator.valueToCode(this, 'y1', generator.ORDER_ATOMIC);
|
||||
var location_x2 = generator.valueToCode(this, 'x2', generator.ORDER_ATOMIC);
|
||||
var location_y2 = generator.valueToCode(this, 'y2', generator.ORDER_ATOMIC);
|
||||
var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
if (color.slice(0, 2) == "0x") {
|
||||
var code = varName + '.line(' + location_x1 + ', ' + location_y1 + ', ' + location_x2 + ', ' + location_y2 + ', color=' + color + ')\n';
|
||||
} else {
|
||||
const rgbValues = color.match(/\d+/g);
|
||||
const r = parseInt(rgbValues[0]);
|
||||
const g = parseInt(rgbValues[1]);
|
||||
const b = parseInt(rgbValues[2]);
|
||||
var rgb = "0x" + ((r << 16) + (g << 8) + b).toString(16).padStart(4, "0");
|
||||
var rgb565 = (rgb & 0xf80000) >> 8 | (rgb & 0xfc00) >> 5 | (rgb & 0xff) >> 3;
|
||||
var code = varName + '.line(' + location_x1 + ', ' + location_y1 + ', ' + location_x2 + ', ' + location_y2 + ', color=0x' + rgb565.toString(16) + ')\n';
|
||||
}
|
||||
return code;
|
||||
}
|
||||
|
||||
export const display_lcd_use_i2c_init = function (_, generator) {
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var iv = generator.valueToCode(this, 'I2CSUB', generator.ORDER_ATOMIC);
|
||||
var key = this.getFieldValue("key");
|
||||
var addr = generator.valueToCode(this, 'ADDR', generator.ORDER_ATOMIC);
|
||||
var code;
|
||||
generator.definitions_['import_i2clcd'] = 'import i2clcd';
|
||||
code = v + ' = i2clcd.LCD' + "(" + iv + ',lcd_width=' + key + ',i2c_addr=' + addr + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const lcd_show_image_or_string_delay = function (_, generator) {
|
||||
generator.definitions_['import_i2clcd'] = 'import i2clcd';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
|
||||
var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);
|
||||
var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);
|
||||
var op = this.getFieldValue('center');
|
||||
var code = v + ".shows(" + data + ',column = ' + x + ',line = ' + y + ',center = ' + op + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const lcd_print_string = function (_, generator) {
|
||||
generator.definitions_['import_i2clcd'] = 'import i2clcd';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
|
||||
var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);
|
||||
var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);
|
||||
var delay = generator.valueToCode(this, 'time', generator.ORDER_ASSIGNMENT);
|
||||
var code = v + ".print(" + data + ',column = ' + x + ',line = ' + y + ',delay=' + delay + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const lcd_backlight = function (_, generator) {
|
||||
generator.definitions_['import_i2clcd'] = 'import i2clcd';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var key = this.getFieldValue('key');
|
||||
var code = v + '.backlight(' + key + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const lcd_clear = function (block, generator) {
|
||||
generator.definitions_['import_i2clcd'] = 'import i2clcd';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var code = v + '.clear()\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const display_oled_use_i2c_init = function (_, generator) {
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var iv = generator.valueToCode(this, 'I2CSUB', generator.ORDER_ATOMIC);
|
||||
var addr = generator.valueToCode(this, 'ADDR', generator.ORDER_ATOMIC);
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
var font = '';
|
||||
if (['mpython', 'mixgo_pe', 'mixgo_nova'].indexOf(version) >= 0) {
|
||||
font = '0x700000'
|
||||
} else if (['mixgo_zero'].indexOf(version) >= 0) {
|
||||
font = '0xE00000'
|
||||
} else {
|
||||
font = '0x3A0000'
|
||||
}
|
||||
var code;
|
||||
generator.definitions_['import_oled128x64'] = 'import oled128x64';
|
||||
code = v + ' = oled128x64.OLED' + "(" + iv + ',address=' + addr + ',font_address=' + font + ')\n';
|
||||
|
||||
return code;
|
||||
}
|
||||
|
||||
export const extern_oled_show_image = function (_, generator) {
|
||||
generator.definitions_['import_oled128x64'] = 'import oled128x64';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
|
||||
var code = v + ".image(" + data + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const extern_oled_show_image_xy = function (_, generator) {
|
||||
generator.definitions_['import_oled128x64'] = 'import oled128x64';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
|
||||
var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);
|
||||
var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);
|
||||
var size = generator.valueToCode(this, 'size', generator.ORDER_ASSIGNMENT);
|
||||
var code = v + ".image(" + data + ',x = ' + x + ',y = ' + y + ',size = ' + size + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const extern_oled_show_string = function (_, generator) {
|
||||
generator.definitions_['import_oled128x64'] = 'import oled128x64';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
|
||||
var code = v + ".shows(" + data + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const extern_oled_show_image_or_string_delay = function (_, generator) {
|
||||
generator.definitions_['import_oled128x64'] = 'import oled128x64';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
|
||||
var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);
|
||||
var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);
|
||||
var size = generator.valueToCode(this, 'size', generator.ORDER_ASSIGNMENT);
|
||||
var space = generator.valueToCode(this, 'space', generator.ORDER_ASSIGNMENT);
|
||||
var op = this.getFieldValue('center');
|
||||
var code = v + ".shows(" + data + ',x = ' + x + ',y = ' + y + ',size = ' + size + ',space = ' + space + ',center = ' + op + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const extern_oled_show_frame_string = function (_, generator) {
|
||||
generator.definitions_['import_oled128x64'] = 'import oled128x64';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
|
||||
var code = v + ".frame(" + data + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const extern_oled_show_frame_string_delay = function (_, generator) {
|
||||
generator.definitions_['import_oled128x64'] = 'import oled128x64';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
|
||||
var size = generator.valueToCode(this, 'size', generator.ORDER_ASSIGNMENT);
|
||||
var time = generator.valueToCode(this, 'time', generator.ORDER_ASSIGNMENT);
|
||||
var code = v + ".frame(" + data + ',size = ' + size + ',delay = ' + time + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const extern_oled_scroll_string = function (_, generator) {
|
||||
generator.definitions_['import_oled128x64'] = 'import oled128x64';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
|
||||
var code = v + ".scroll(" + data + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const extern_oled_scroll_string_delay = function (_, generator) {
|
||||
generator.definitions_['import_oled128x64'] = 'import oled128x64';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
|
||||
var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);
|
||||
var size = generator.valueToCode(this, 'size', generator.ORDER_ASSIGNMENT);
|
||||
var time = generator.valueToCode(this, 'time', generator.ORDER_ASSIGNMENT);
|
||||
var space = generator.valueToCode(this, 'space', generator.ORDER_ASSIGNMENT);
|
||||
var code = v + ".scroll(" + data + ',y = ' + y + ',size = ' + size + ',speed =' + time + ',space = ' + space + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const extern_oled_clear = function (block, generator) {
|
||||
generator.definitions_['import_oled128x64'] = 'import oled128x64';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var code = v + '.fill(0)\n' + v + '.show()\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const extern_oled_shift = function (a, generator) {
|
||||
generator.definitions_['import_oled128x64'] = 'import oled128x64';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var op = a.getFieldValue("OP");
|
||||
var value = generator.valueToCode(a, 'val', generator.ORDER_ATOMIC);
|
||||
var code = v + '.' + op + '(' + value + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const extern_oled_get_pixel = function (block, generator) {
|
||||
generator.definitions_['import_oled128x64'] = 'import oled128x64';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var value_x = generator.valueToCode(block, 'x', generator.ORDER_ATOMIC);
|
||||
var value_y = generator.valueToCode(block, 'y', generator.ORDER_ATOMIC);
|
||||
var code = v + '.pixel(int(' + value_x + '), int(' + value_y + '))';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const extern_oled_bright_point = function (_, generator) {
|
||||
generator.definitions_['import_oled128x64'] = 'import oled128x64';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);
|
||||
var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);
|
||||
var dropdown_stat = generator.valueToCode(this, 'STAT', generator.ORDER_ATOMIC);
|
||||
var code = v + '.pixel(int(' + x + '), int(' + y + '), ' + dropdown_stat + ")\n" + v + '.show()\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const extern_oled_shape_rect = function (block, generator) {
|
||||
generator.definitions_['import_oled128x64'] = 'import oled128x64';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var x = generator.valueToCode(block, 'x', generator.ORDER_ATOMIC);
|
||||
var y = generator.valueToCode(block, 'y', generator.ORDER_ATOMIC);
|
||||
var w = generator.valueToCode(block, 'w', generator.ORDER_ATOMIC);
|
||||
var h = generator.valueToCode(block, 'h', generator.ORDER_ATOMIC);
|
||||
var state = block.getFieldValue('state');
|
||||
var shape = block.getFieldValue('shape');
|
||||
var code = v + '.' + shape + '(' + x + ', ' + y + ', ' + w + ', ' + h + ', ' + state + ')\n' + v + '.show()\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const extern_oled_hvline = function (block, generator) { //水平线
|
||||
generator.definitions_['import_oled128x64'] = 'import oled128x64';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var x = generator.valueToCode(block, 'x', generator.ORDER_ATOMIC);
|
||||
var y = generator.valueToCode(block, 'y', generator.ORDER_ATOMIC);
|
||||
var var_length = generator.valueToCode(block, 'length', generator.ORDER_ATOMIC);
|
||||
var state = block.getFieldValue('state');
|
||||
var hv = block.getFieldValue('dir_h_v');
|
||||
var code = v + '.' + (('0' == hv) ? 'v' : 'h') + 'line(' + x + ', ' + y + ', ' + var_length + ', ' + state + ')\n' + v + '.show()\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const extern_oled_line = function (block, generator) {
|
||||
generator.definitions_['import_oled128x64'] = 'import oled128x64';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var x1 = generator.valueToCode(block, 'x1', generator.ORDER_ATOMIC);
|
||||
var y1 = generator.valueToCode(block, 'y1', generator.ORDER_ATOMIC);
|
||||
var x2 = generator.valueToCode(block, 'x2', generator.ORDER_ATOMIC);
|
||||
var y2 = generator.valueToCode(block, 'y2', generator.ORDER_ATOMIC);
|
||||
var state = block.getFieldValue('state');
|
||||
var code = v + '.line(' + x1 + ', ' + y1 + ', ' + x2 + ', ' + y2 + ', ' + state + ')\n' + v + '.show()\n';
|
||||
return code;
|
||||
}
|
||||
916
boards/default_src/micropython/generators/display_onboard.js
Normal file
916
boards/default_src/micropython/generators/display_onboard.js
Normal file
@@ -0,0 +1,916 @@
|
||||
import { Boards } from 'mixly';
|
||||
|
||||
export const display_show_image = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2];
|
||||
generator.definitions_['import_' + version + '_onboard_matrix'] = "from " + version + " import onboard_matrix";
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
|
||||
var code = "onboard_matrix.shows(" + data + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const display_show_image_or_string_delay = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2];
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
|
||||
var space = generator.valueToCode(this, 'space', generator.ORDER_ASSIGNMENT);
|
||||
var op = this.getFieldValue('center');
|
||||
if (version == "mixgo_zero" || version == "mixgo_nova") {
|
||||
generator.definitions_['import_' + version + '_onboard_tft'] = "from " + version + " import onboard_tft";
|
||||
var code = "onboard_tft.shows(" + data + ",space = " + space + ',center = ' + op + ")\n";
|
||||
return code;
|
||||
}
|
||||
generator.definitions_['import_' + version + '_onboard_matrix'] = "from " + version + " import onboard_matrix";
|
||||
var code = "onboard_matrix.shows(" + data + ',space = ' + space + ',center = ' + op + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const display_show_frame_string = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2];
|
||||
if (version == 'mpython') {
|
||||
generator.definitions_['import_' + version + '_onboard_oled'] = "from " + version + " import onboard_oled";
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
|
||||
var code = "onboard_oled.frame(" + data + ")\n";
|
||||
} else {
|
||||
generator.definitions_['import_' + version + '_onboard_matrix'] = "from " + version + " import onboard_matrix";
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
|
||||
var code = "onboard_matrix.frame(" + data + ")\n";
|
||||
}
|
||||
return code;
|
||||
}
|
||||
|
||||
export const display_show_frame_string_delay = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2];
|
||||
generator.definitions_['import_' + version + '_onboard_matrix'] = "from " + version + " import onboard_matrix";
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
|
||||
var time = generator.valueToCode(this, 'time', generator.ORDER_ASSIGNMENT);
|
||||
var code = "onboard_matrix.frame(" + data + ',delay = ' + time + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const display_scroll_string = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2];
|
||||
if (version == 'mpython') {
|
||||
generator.definitions_['import_' + version + '_onboard_oled'] = "from " + version + " import onboard_oled";
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
|
||||
var code = "onboard_oled.scroll(" + data + ")\n";
|
||||
} else {
|
||||
generator.definitions_['import_' + version + '_onboard_matrix'] = "from " + version + " import onboard_matrix";
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
|
||||
var code = "onboard_matrix.scroll(" + data + ")\n";
|
||||
}
|
||||
return code;
|
||||
}
|
||||
|
||||
export const display_scroll_string_delay = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2];
|
||||
generator.definitions_['import_' + version + '_onboard_matrix'] = "from " + version + " import onboard_matrix";
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
|
||||
var time = generator.valueToCode(this, 'time', generator.ORDER_ASSIGNMENT);
|
||||
var space = generator.valueToCode(this, 'space', generator.ORDER_ASSIGNMENT);
|
||||
var code = "onboard_matrix.scroll(" + data + ',speed =' + time + ',space = ' + space + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const display_image_builtins = function (block, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2];
|
||||
generator.definitions_['import_' + version + '_onboard_matrix'] = "from " + version + " import onboard_matrix";
|
||||
var dropdown_image = block.getFieldValue('image');
|
||||
var code = 'onboard_matrix.' + dropdown_image;
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const display_image_builtins_all = function (block, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2];
|
||||
generator.definitions_['import_' + version + '_onboard_matrix'] = "from " + version + " import onboard_matrix";
|
||||
var dropdown_image = block.getFieldValue('image');
|
||||
var code = 'onboard_matrix.' + dropdown_image;
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const display_image_create = function (block, generator) {
|
||||
var colours = {
|
||||
"#000000": "0",
|
||||
//"#440000": "1",
|
||||
//"#660000": "2",
|
||||
//"#880000": "3",
|
||||
//"#aa0000": "4",
|
||||
//"#bb0000": "5",
|
||||
//"#cc0000": "6",
|
||||
//"#dd0000": "7",
|
||||
//"#ee0000": "8",
|
||||
"#ff0000": "1"
|
||||
}
|
||||
function pad(num) {
|
||||
let newNum = '';
|
||||
if (num.length % 2 === 1) {
|
||||
num = '0' + num;
|
||||
}
|
||||
if (num.length < 8) {
|
||||
let k = 8 - num.length
|
||||
for (let i = 1; i <= k; i++) {
|
||||
num = '0' + num;
|
||||
}
|
||||
}
|
||||
|
||||
for (let i = 1; i <= num.length; i++)
|
||||
if (i % 2 === 0 && i !== num.length)
|
||||
newNum = newNum + num[i - 1] + ',0x';
|
||||
else
|
||||
newNum += num[i - 1];
|
||||
return '0x' + newNum;
|
||||
}
|
||||
let colorList = [];
|
||||
for (let i = 0; i < 12; i++) {
|
||||
let colorRow = '';
|
||||
let colorNum = 0;
|
||||
let correct = 0;
|
||||
|
||||
for (let j = 0; j < 32; j++) {
|
||||
if (j < 8) {
|
||||
correct = 7 - j
|
||||
}
|
||||
else if (j < 16) {
|
||||
correct = 23 - j
|
||||
}
|
||||
else if (j < 24) {
|
||||
correct = 39 - j
|
||||
}
|
||||
else if (j < 32) {
|
||||
correct = 55 - j
|
||||
}
|
||||
colorNum += Number(colours[block.getFieldValue(i + '-' + j)]) * Math.pow(2, 31 - correct);
|
||||
|
||||
}
|
||||
colorRow += pad(colorNum.toString(16));
|
||||
colorList.unshift(colorRow);
|
||||
}
|
||||
let codelist = [];
|
||||
for (let i = 0; i < colorList.length; i++) {
|
||||
codelist[i] = colorList[colorList.length - 1 - i];
|
||||
}
|
||||
//var code = "bytearray(b'" + colorList.join('') + "')";
|
||||
var code = '[' + codelist + ']';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const display_clear = function (block, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2];
|
||||
if (version == 'mpython') {
|
||||
generator.definitions_['import_' + version + '_onboard_oled'] = "from " + version + " import onboard_oled";
|
||||
var code = 'onboard_oled.fill(0)\n' + 'onboard_oled.show()\n';
|
||||
}
|
||||
else {
|
||||
generator.definitions_['import_' + version + '_onboard_matrix'] = "from " + version + " import onboard_matrix";
|
||||
var code = 'onboard_matrix.fill(0)\n' + 'onboard_matrix.show()\n';
|
||||
}
|
||||
return code;
|
||||
}
|
||||
|
||||
export const image_arithmetic = function (a, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2];
|
||||
generator.definitions_['import_' + version + '_onboard_matrix'] = "from " + version + " import onboard_matrix";
|
||||
var op = a.getFieldValue("OP");
|
||||
var imga = generator.valueToCode(a, 'A', generator.ORDER_ATOMIC);
|
||||
var imgb = generator.valueToCode(a, 'B', generator.ORDER_ATOMIC);
|
||||
var code = 'onboard_matrix.map_' + op + '(' + imga + ',' + imgb + ')';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const image_invert = function (a, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2];
|
||||
generator.definitions_['import_' + version + '_onboard_matrix'] = "from " + version + " import onboard_matrix";
|
||||
var imga = generator.valueToCode(a, 'A', generator.ORDER_ATOMIC);
|
||||
var code = 'onboard_matrix.map_invert(' + imga + ')';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const display_shift = function (a, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2];
|
||||
if (version == 'mpython') {
|
||||
generator.definitions_['import_' + version + '_onboard_oled'] = "from " + version + " import onboard_oled";
|
||||
var op = a.getFieldValue("OP");
|
||||
var value = generator.valueToCode(a, 'val', generator.ORDER_ATOMIC);
|
||||
var code = 'onboard_oled.' + op + '(' + value + ')\n';
|
||||
} else {
|
||||
generator.definitions_['import_' + version + '_onboard_matrix'] = "from " + version + " import onboard_matrix";
|
||||
var op = a.getFieldValue("OP");
|
||||
var value = generator.valueToCode(a, 'val', generator.ORDER_ATOMIC);
|
||||
var code = 'onboard_matrix.' + op + '(' + value + ')\n';
|
||||
}
|
||||
return code;
|
||||
}
|
||||
|
||||
// export const onboard_oled_shift = function (a) {
|
||||
// var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
|
||||
// return code;
|
||||
// };
|
||||
|
||||
export const display_get_pixel = function (block, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2];
|
||||
if (version == 'mpython') {
|
||||
generator.definitions_['import_' + version + '_onboard_oled'] = "from " + version + " import onboard_oled";
|
||||
var value_x = generator.valueToCode(block, 'x', generator.ORDER_ATOMIC);
|
||||
var value_y = generator.valueToCode(block, 'y', generator.ORDER_ATOMIC);
|
||||
var code = 'onboard_oled.pixel(int(' + value_x + '), int(' + value_y + '))';
|
||||
} else {
|
||||
generator.definitions_['import_' + version + '_onboard_matrix'] = "from " + version + " import onboard_matrix";
|
||||
var value_x = generator.valueToCode(block, 'x', generator.ORDER_ATOMIC);
|
||||
var value_y = generator.valueToCode(block, 'y', generator.ORDER_ATOMIC);
|
||||
var code = 'onboard_matrix.pixel(int(' + value_x + '), int(' + value_y + '))';
|
||||
}
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const display_bright_point = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2];
|
||||
generator.definitions_['import_' + version + '_onboard_matrix'] = "from " + version + " import onboard_matrix";
|
||||
var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);
|
||||
var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);
|
||||
var dropdown_stat = generator.valueToCode(this, 'STAT', generator.ORDER_ATOMIC);
|
||||
var code = 'onboard_matrix.pixel(int(' + x + '), int(' + y + '), ' + dropdown_stat + ")\n" + 'onboard_matrix.show()\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const display_get_screen_pixel = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2];
|
||||
generator.definitions_['import_' + version + '_onboard_matrix'] = "from " + version + " import onboard_matrix";
|
||||
var code = 'onboard_matrix.get_brightness()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const display_bright_screen = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2];
|
||||
generator.definitions_['import_' + version + '_onboard_matrix'] = "from " + version + " import onboard_matrix";
|
||||
var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);
|
||||
var code = 'onboard_matrix.set_brightness(' + x + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
//mixgo_me onboard_matrix below:
|
||||
|
||||
export const mixgome_display_image_create = function (block, generator) {
|
||||
var colours = {
|
||||
"#000000": "0",
|
||||
"#ff0000": "1"
|
||||
}
|
||||
function pad(num) {
|
||||
let newNum = '';
|
||||
if (num.length % 2 === 1) {
|
||||
num = '0' + num;
|
||||
}
|
||||
|
||||
for (let i = 1; i <= num.length; i++)
|
||||
if (i % 2 === 0 && i !== num.length)
|
||||
newNum = newNum + num[i - 1] + '\\x';
|
||||
else
|
||||
newNum += num[i - 1];
|
||||
return '\\x' + newNum;
|
||||
}
|
||||
let colorList = [];
|
||||
for (let i = 0; i < 5; i++) {
|
||||
let colorRow = '';
|
||||
let colorNum = 0;
|
||||
for (let j = 0; j < 8; j++) {
|
||||
colorNum += Number(colours[block.getFieldValue((4 - i) + '-' + j)]) * Math.pow(2, j);
|
||||
}
|
||||
colorRow += pad(colorNum.toString(16));
|
||||
colorList.unshift(colorRow);
|
||||
}
|
||||
|
||||
var code = "bytearray(b'" + colorList.join('') + "')";
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const mixgomini_display_image_create = function (block, generator) {
|
||||
var blinkColor = '#ff0000';
|
||||
var code = '';
|
||||
for (let i = 0; i < 12; i++) {
|
||||
let value = 0;
|
||||
for (let j = 0; j < 8; j++) {
|
||||
if (block.getFieldValue(`${j}-${i}`) !== blinkColor) {
|
||||
continue;
|
||||
}
|
||||
value += 1 << j;
|
||||
}
|
||||
let temp = value.toString(16);
|
||||
code += '\\x' + Array(2 - temp.length).fill(0).join('') + temp;
|
||||
}
|
||||
code = `bytearray(b'${code}')`;
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const mixgome_display_font = function (a, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2];
|
||||
generator.definitions_['import_' + version + '_onboard_matrix'] = "from " + version + " import onboard_matrix";
|
||||
var op = a.getFieldValue("OP");
|
||||
var code = 'onboard_matrix.font(' + op + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const mixgo_display_image_create_new = function (block, generator) {
|
||||
var colours = {
|
||||
"#000000": "0",
|
||||
"#ff0000": "1"
|
||||
}
|
||||
function pad(num) {
|
||||
let newNum = '';
|
||||
if (num.length % 2 === 1) {
|
||||
num = '0' + num;
|
||||
}
|
||||
while (num.length < 4) {
|
||||
num = '0' + num;
|
||||
}
|
||||
for (let i = 1; i <= num.length; i++)
|
||||
if (i % 2 === 0 && i !== num.length)
|
||||
newNum = newNum + num[i - 1] + '\\x';
|
||||
else
|
||||
newNum += num[i - 1];
|
||||
return '\\x' + newNum;
|
||||
}
|
||||
let colorList = [];
|
||||
for (let i = 0; i < 8; i++) {
|
||||
let colorRow = '';
|
||||
let colorNum = 0;
|
||||
for (let j = 0; j < 16; j++) {
|
||||
var c = (j + 8) % 16
|
||||
colorNum += Number(colours[block.getFieldValue((7 - i) + '-' + c)]) * Math.pow(2, j);
|
||||
}
|
||||
colorRow += pad(colorNum.toString(16));
|
||||
colorList.unshift(colorRow);
|
||||
}
|
||||
|
||||
var code = "bytearray(b'" + colorList.join('') + "')";
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
//mpython
|
||||
|
||||
export const mpython_pbm_image = function (block, generator) {
|
||||
var code = block.getFieldValue('path');
|
||||
var sort = ['expression_picture', 'eye_picture', 'informatio_picture', 'object_picture', 'progres_picture']
|
||||
var img = [["Angry", "Bored", "Confused", "Happy", "Heart", "Paper", "Rock", "Sad", "Scissors", "Silly", "Sleep", "Small_heart", "Small_paper", "Small_rock", "Small_scissors", "Smile", "Surprise", "Wonderful"], ["Eyes_Angry", "Awake", "Black_eye", "Bottom_left", "Bottom_right", "Crazy_1", "Crazy_2", "Disappointed", "Dizzy", "Down", "Hurt", "Evil", "Knocked_out", "Love", "Middle_left", "Middle_right", "Neutral", "Nuclear", "Pinch_left", "Pinch_middle", "Pinch_right", "Tear", "Tired_middle", "Tired_left", "Tired_right", "Toxic", "Up", "Winking"], ["Accept", "Backward", "Decline", "Forward", "Left", "No_go", "Question_mark", "Right", "Stop_1", "Stop_2", "Thumbs_down", "Thumbs_up", "Warning"], ["Bomb", "Boom", "Fire", "Flowers", "Forest", "Lightning", "Light_off", "Light_on", "Night", "Pirate", "Snow", "Target"], ["Bar_0", "Bar_1", "Bar_2", "Bar_3", "Bar_4", "Dial_0", "Dial_1", "Dial_2", "Dial_3", "Dial_4", "Dots_0", "Dots_1", "Dots_2", "Dots_3", "Hourglass_0", "Hourglass_1", "Hourglass_2", "Timer_0", "Timer_1", "Timer_2", "Timer_3", "Timer_4", "Water_level_0", "Water_level_1", "Water_level_2", "Water_level_3"]]
|
||||
for (var i = 0; i < 5; i++) {
|
||||
if (img[i].indexOf(code) != -1) {
|
||||
var tag = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
generator.definitions_['import_' + sort[tag] + '_' + code] = "from " + sort[tag] + " import " + code;
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const onboard_oled_show_image = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
generator.definitions_['import_' + version + '_onboard_oled'] = "from " + version + " import onboard_oled";
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
|
||||
var code = "onboard_oled.image(" + data + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const onboard_oled_show_image_xy = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2];
|
||||
generator.definitions_['import_' + version + '_onboard_oled'] = "from " + version + " import onboard_oled";
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
|
||||
var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);
|
||||
var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);
|
||||
var size = generator.valueToCode(this, 'size', generator.ORDER_ASSIGNMENT);
|
||||
var code = "onboard_oled.image(" + data + ',x = ' + x + ',y = ' + y + ',size = ' + size + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const onboard_oled_show_string = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2];
|
||||
generator.definitions_['import_' + version + '_onboard_oled'] = "from " + version + " import onboard_oled";
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
|
||||
var code = "onboard_oled.shows(" + data + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const onboard_oled_show_image_or_string_delay = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2];
|
||||
generator.definitions_['import_' + version + '_onboard_oled'] = "from " + version + " import onboard_oled";
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
|
||||
var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);
|
||||
var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);
|
||||
var size = generator.valueToCode(this, 'size', generator.ORDER_ASSIGNMENT);
|
||||
var space = generator.valueToCode(this, 'space', generator.ORDER_ASSIGNMENT);
|
||||
var op = this.getFieldValue('center');
|
||||
var code = "onboard_oled.shows(" + data + ',x = ' + x + ',y = ' + y + ',size = ' + size + ',space = ' + space + ',center = ' + op + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const onboard_oled_show_frame_string_delay = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2];
|
||||
generator.definitions_['import_' + version + '_onboard_oled'] = "from " + version + " import onboard_oled";
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
|
||||
var size = generator.valueToCode(this, 'size', generator.ORDER_ASSIGNMENT);
|
||||
var time = generator.valueToCode(this, 'time', generator.ORDER_ASSIGNMENT);
|
||||
var code = "onboard_oled.frame(" + data + ',size = ' + size + ',delay = ' + time + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const onboard_oled_scroll_string_delay = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2];
|
||||
generator.definitions_['import_' + version + '_onboard_oled'] = "from " + version + " import onboard_oled";
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
|
||||
var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);
|
||||
var size = generator.valueToCode(this, 'size', generator.ORDER_ASSIGNMENT);
|
||||
var time = generator.valueToCode(this, 'time', generator.ORDER_ASSIGNMENT);
|
||||
var space = generator.valueToCode(this, 'space', generator.ORDER_ASSIGNMENT);
|
||||
var code = "onboard_oled.scroll(" + data + ',y = ' + y + ',size = ' + size + ',speed =' + time + ',space = ' + space + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const onboard_oled_bright_point = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2];
|
||||
generator.definitions_['import_' + version + '_onboard_oled'] = "from " + version + " import onboard_oled";
|
||||
var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);
|
||||
var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);
|
||||
var dropdown_stat = generator.valueToCode(this, 'STAT', generator.ORDER_ATOMIC);
|
||||
var code = 'onboard_oled.pixel(int(' + x + '), int(' + y + '), ' + dropdown_stat + ")\n" + 'onboard_oled.show()\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const mpython_display_shape_rect = function (block, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2];
|
||||
generator.definitions_['import_' + version + '_onboard_oled'] = "from " + version + " import onboard_oled";
|
||||
var x = generator.valueToCode(block, 'x', generator.ORDER_ATOMIC);
|
||||
var y = generator.valueToCode(block, 'y', generator.ORDER_ATOMIC);
|
||||
var w = generator.valueToCode(block, 'w', generator.ORDER_ATOMIC);
|
||||
var h = generator.valueToCode(block, 'h', generator.ORDER_ATOMIC);
|
||||
var state = block.getFieldValue('state');
|
||||
var shape = block.getFieldValue('shape');
|
||||
var code = 'onboard_oled.' + shape + '(' + x + ', ' + y + ', ' + w + ', ' + h + ', ' + state + ')\n' + 'onboard_oled.show()\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const mpython_display_hvline = function (block, generator) { //水平线
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2];
|
||||
generator.definitions_['import_' + version + '_onboard_oled'] = "from " + version + " import onboard_oled";
|
||||
var x = generator.valueToCode(block, 'x', generator.ORDER_ATOMIC);
|
||||
var y = generator.valueToCode(block, 'y', generator.ORDER_ATOMIC);
|
||||
var var_length = generator.valueToCode(block, 'length', generator.ORDER_ATOMIC);
|
||||
var state = block.getFieldValue('state');
|
||||
var hv = block.getFieldValue('dir_h_v');
|
||||
var code = 'onboard_oled.' + (('0' == hv) ? 'v' : 'h') + 'line(' + x + ', ' + y + ', ' + var_length + ', ' + state + ')\n' + 'onboard_oled.show()\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const mpython_display_line = function (block, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2];
|
||||
generator.definitions_['import_' + version + '_onboard_oled'] = "from " + version + " import onboard_oled";
|
||||
var x1 = generator.valueToCode(block, 'x1', generator.ORDER_ATOMIC);
|
||||
var y1 = generator.valueToCode(block, 'y1', generator.ORDER_ATOMIC);
|
||||
var x2 = generator.valueToCode(block, 'x2', generator.ORDER_ATOMIC);
|
||||
var y2 = generator.valueToCode(block, 'y2', generator.ORDER_ATOMIC);
|
||||
var state = block.getFieldValue('state');
|
||||
var code = 'onboard_oled.line(' + x1 + ', ' + y1 + ', ' + x2 + ', ' + y2 + ', ' + state + ')\n' + 'onboard_oled.show()\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
//mixbot onboard_matrix below:
|
||||
|
||||
export const mixbot_display_image_create = function (block, generator) {
|
||||
var colours = {
|
||||
"#000000": "0",
|
||||
"#ff0000": "1"
|
||||
}
|
||||
function pad(num) {
|
||||
let newNum = '';
|
||||
if (num.length % 2 === 1) {
|
||||
num = '0' + num;
|
||||
}
|
||||
|
||||
for (let i = 1; i <= num.length; i++)
|
||||
if (i % 2 === 0 && i !== num.length)
|
||||
newNum = newNum + num[i - 1] + '\\x';
|
||||
else
|
||||
newNum += num[i - 1];
|
||||
return '\\x' + newNum;
|
||||
}
|
||||
let colorList = [];
|
||||
for (let i = 0; i < 5; i++) {
|
||||
let colorRow = '';
|
||||
let colorNum = 0;
|
||||
for (let j = 0; j < 5; j++) {
|
||||
colorNum += Number(colours[block.getFieldValue((4 - i) + '-' + j)]) * Math.pow(2, j);
|
||||
}
|
||||
colorRow += pad(colorNum.toString(16));
|
||||
colorList.unshift(colorRow);
|
||||
}
|
||||
|
||||
var code = "b'" + colorList.join('') + "'";
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const mixbot_display_get_screen_pixel = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2];
|
||||
generator.definitions_['import_' + version + '_onboard_matrix'] = "from " + version + " import onboard_matrix";
|
||||
var code = 'onboard_matrix.screenbright()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const mixbot_display_get_ambientbright = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2];
|
||||
generator.definitions_['import_' + version + '_onboard_matrix'] = "from " + version + " import onboard_matrix";
|
||||
var code = 'onboard_matrix.ambientbright()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const mixbot_display_bright_screen = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2];
|
||||
generator.definitions_['import_' + version + '_onboard_matrix'] = "from " + version + " import onboard_matrix";
|
||||
var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);
|
||||
var code = 'onboard_matrix.screenbright(' + x + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const mixbot_display_rotate = function (a, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2];
|
||||
generator.definitions_['import_' + version + '_onboard_matrix'] = "from " + version + " import onboard_matrix";
|
||||
var op = a.getFieldValue("OP");
|
||||
var code = 'onboard_matrix.direction(' + op + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const bitbot_display_image_create = function (block, generator) {
|
||||
var colours = {
|
||||
"#000000": "0",
|
||||
"#ff0000": "1"
|
||||
}
|
||||
function pad(num) {
|
||||
|
||||
if (num.length == 1) {
|
||||
return '\\x0' + num + '\\x00';
|
||||
}
|
||||
if (num.length == 2) {
|
||||
return '\\x' + num + '\\x00';
|
||||
}
|
||||
if (num.length == 3) {
|
||||
return '\\x' + num[1] + num[2] + '\\x0' + num[0];
|
||||
}
|
||||
}
|
||||
let colorList = [];
|
||||
for (let i = 0; i < 12; i++) {
|
||||
let colorRow = '';
|
||||
let colorNum = 0;
|
||||
for (let j = 0; j < 12; j++) {
|
||||
colorNum += Number(colours[block.getFieldValue((11 - i) + '-' + j)]) * Math.pow(2, j);
|
||||
}
|
||||
colorRow += pad(colorNum.toString(16));
|
||||
colorList.unshift(colorRow);
|
||||
}
|
||||
|
||||
var code = "b'" + colorList.join('') + "'";
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
//mixgo_nova onboard tft below:
|
||||
export const onboard_tft_show_image = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2];
|
||||
generator.definitions_['import_' + version + '_onboard_tft'] = "from " + version + " import onboard_tft";
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
|
||||
var code = "onboard_tft.image(" + data + ", color=0xffff)\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const onboard_tft_show_image_xy = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2];
|
||||
generator.definitions_['import_' + version + '_onboard_tft'] = "from " + version + " import onboard_tft";
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
|
||||
var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);
|
||||
var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);
|
||||
var size = generator.valueToCode(this, 'size', generator.ORDER_ASSIGNMENT);
|
||||
var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
if (color.slice(0, 2) == "0x") {
|
||||
var code = "onboard_tft.image(" + data + ',x = ' + x + ',y = ' + y + ',size = ' + size + ',color=' + color + ")\n";
|
||||
} else {
|
||||
const rgbValues = color.match(/\d+/g);
|
||||
const r = parseInt(rgbValues[0]);
|
||||
const g = parseInt(rgbValues[1]);
|
||||
const b = parseInt(rgbValues[2]);
|
||||
var rgb = "0x" + ((r << 16) + (g << 8) + b).toString(16).padStart(4, "0");
|
||||
var rgb565 = (rgb & 0xf80000) >> 8 | (rgb & 0xfc00) >> 5 | (rgb & 0xff) >> 3;
|
||||
var code = "onboard_tft.image(" + data + ',x = ' + x + ',y = ' + y + ',size = ' + size + ',color=0x' + rgb565.toString(16) + ")\n";
|
||||
}
|
||||
return code;
|
||||
}
|
||||
|
||||
export const onboard_tft_show_image_or_string_delay = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2];
|
||||
generator.definitions_['import_' + version + '_onboard_tft'] = "from " + version + " import onboard_tft";
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
|
||||
var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);
|
||||
var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);
|
||||
var size = generator.valueToCode(this, 'size', generator.ORDER_ASSIGNMENT);
|
||||
var space = generator.valueToCode(this, 'space', generator.ORDER_ASSIGNMENT);
|
||||
var op = this.getFieldValue('center');
|
||||
var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
if (color.slice(0, 2) == "0x") {
|
||||
var code = "onboard_tft.shows(" + data + ',x = ' + x + ',y = ' + y + ',size = ' + size + ',space = ' + space + ',center = ' + op + ',color=' + color + ")\n";
|
||||
} else {
|
||||
const rgbValues = color.match(/\d+/g);
|
||||
const r = parseInt(rgbValues[0]);
|
||||
const g = parseInt(rgbValues[1]);
|
||||
const b = parseInt(rgbValues[2]);
|
||||
var rgb = "0x" + ((r << 16) + (g << 8) + b).toString(16).padStart(4, "0");
|
||||
var rgb565 = (rgb & 0xf80000) >> 8 | (rgb & 0xfc00) >> 5 | (rgb & 0xff) >> 3;
|
||||
var code = "onboard_tft.shows(" + data + ',x = ' + x + ',y = ' + y + ',size = ' + size + ',space = ' + space + ',center = ' + op + ',color=0x' + rgb565.toString(16) + ")\n";
|
||||
}
|
||||
return code;
|
||||
}
|
||||
|
||||
export const onboard_tft_show_frame_string = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2];
|
||||
generator.definitions_['import_' + version + '_onboard_oled'] = "from " + version + " import onboard_tft";
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
|
||||
var code = "onboard_tft.frame(" + data + ",color=0xffff)\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const onboard_tft_show_frame_string_delay = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2];
|
||||
generator.definitions_['import_' + version + '_onboard_tft'] = "from " + version + " import onboard_tft";
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
|
||||
var size = generator.valueToCode(this, 'size', generator.ORDER_ASSIGNMENT);
|
||||
var time = generator.valueToCode(this, 'time', generator.ORDER_ASSIGNMENT);
|
||||
var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
if (color.slice(0, 2) == "0x") {
|
||||
var code = "onboard_tft.frame(" + data + ',size = ' + size + ',delay = ' + time + ',color=' + color + ")\n";
|
||||
} else {
|
||||
const rgbValues = color.match(/\d+/g);
|
||||
const r = parseInt(rgbValues[0]);
|
||||
const g = parseInt(rgbValues[1]);
|
||||
const b = parseInt(rgbValues[2]);
|
||||
var rgb = "0x" + ((r << 16) + (g << 8) + b).toString(16).padStart(4, "0");
|
||||
var rgb565 = (rgb & 0xf80000) >> 8 | (rgb & 0xfc00) >> 5 | (rgb & 0xff) >> 3;
|
||||
var code = "onboard_tft.frame(" + data + ',size = ' + size + ',delay = ' + time + ',color=0x' + rgb565.toString(16) + ")\n";
|
||||
}
|
||||
return code;
|
||||
}
|
||||
|
||||
export const onboard_tft_scroll_string = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2];
|
||||
generator.definitions_['import_' + version + '_onboard_oled'] = "from " + version + " import onboard_tft";
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
|
||||
var code = "onboard_tft.scroll(" + data + ",color=0xffff)\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const onboard_tft_scroll_string_delay = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2];
|
||||
generator.definitions_['import_' + version + '_onboard_tft'] = "from " + version + " import onboard_tft";
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ASSIGNMENT);
|
||||
var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);
|
||||
var size = generator.valueToCode(this, 'size', generator.ORDER_ASSIGNMENT);
|
||||
var time = generator.valueToCode(this, 'time', generator.ORDER_ASSIGNMENT);
|
||||
var space = generator.valueToCode(this, 'space', generator.ORDER_ASSIGNMENT);
|
||||
var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
if (color.slice(0, 2) == "0x") {
|
||||
var code = "onboard_tft.scroll(" + data + ',y = ' + y + ',size = ' + size + ',speed =' + time + ',space = ' + space + ',color=' + color + ")\n";
|
||||
} else {
|
||||
const rgbValues = color.match(/\d+/g);
|
||||
const r = parseInt(rgbValues[0]);
|
||||
const g = parseInt(rgbValues[1]);
|
||||
const b = parseInt(rgbValues[2]);
|
||||
var rgb = "0x" + ((r << 16) + (g << 8) + b).toString(16).padStart(4, "0");
|
||||
var rgb565 = (rgb & 0xf80000) >> 8 | (rgb & 0xfc00) >> 5 | (rgb & 0xff) >> 3;
|
||||
var code = "onboard_tft.scroll(" + data + ',y = ' + y + ',size = ' + size + ',speed =' + time + ',space = ' + space + ',color=0x' + rgb565.toString(16) + ")\n";
|
||||
}
|
||||
return code;
|
||||
}
|
||||
|
||||
export const onboard_tft_display_shape_rect = function (block, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2];
|
||||
generator.definitions_['import_' + version + '_onboard_tft'] = "from " + version + " import onboard_tft";
|
||||
var x = generator.valueToCode(block, 'x', generator.ORDER_ATOMIC);
|
||||
var y = generator.valueToCode(block, 'y', generator.ORDER_ATOMIC);
|
||||
var w = generator.valueToCode(block, 'w', generator.ORDER_ATOMIC);
|
||||
var h = generator.valueToCode(block, 'h', generator.ORDER_ATOMIC);
|
||||
var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var shape = block.getFieldValue('shape');
|
||||
if (color.slice(0, 2) == "0x") {
|
||||
var code = 'onboard_tft.' + shape + '(' + x + ', ' + y + ', ' + w + ', ' + h + ', ' + color + ')\n' + 'onboard_tft.show()\n';
|
||||
} else {
|
||||
const rgbValues = color.match(/\d+/g);
|
||||
const r = parseInt(rgbValues[0]);
|
||||
const g = parseInt(rgbValues[1]);
|
||||
const b = parseInt(rgbValues[2]);
|
||||
var rgb = "0x" + ((r << 16) + (g << 8) + b).toString(16).padStart(4, "0");
|
||||
var rgb565 = (rgb & 0xf80000) >> 8 | (rgb & 0xfc00) >> 5 | (rgb & 0xff) >> 3;
|
||||
var code = 'onboard_tft.' + shape + '(' + x + ', ' + y + ', ' + w + ', ' + h + ', 0x' + rgb565.toString(16) + ')\n' + 'onboard_tft.show()\n';
|
||||
}
|
||||
return code;
|
||||
}
|
||||
|
||||
export const onboard_tft_display_hvline = function (block, generator) { //水平线
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2];
|
||||
generator.definitions_['import_' + version + '_onboard_tft'] = "from " + version + " import onboard_tft";
|
||||
var x = generator.valueToCode(block, 'x', generator.ORDER_ATOMIC);
|
||||
var y = generator.valueToCode(block, 'y', generator.ORDER_ATOMIC);
|
||||
var var_length = generator.valueToCode(block, 'length', generator.ORDER_ATOMIC);
|
||||
var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var hv = block.getFieldValue('dir_h_v');
|
||||
if (color.slice(0, 2) == "0x") {
|
||||
var code = 'onboard_tft.' + (('0' == hv) ? 'v' : 'h') + 'line(' + x + ', ' + y + ', ' + var_length + ', ' + color + ')\n' + 'onboard_tft.show()\n';
|
||||
} else {
|
||||
const rgbValues = color.match(/\d+/g);
|
||||
const r = parseInt(rgbValues[0]);
|
||||
const g = parseInt(rgbValues[1]);
|
||||
const b = parseInt(rgbValues[2]);
|
||||
var rgb = "0x" + ((r << 16) + (g << 8) + b).toString(16).padStart(4, "0");
|
||||
var rgb565 = (rgb & 0xf80000) >> 8 | (rgb & 0xfc00) >> 5 | (rgb & 0xff) >> 3;
|
||||
var code = 'onboard_tft.' + (('0' == hv) ? 'v' : 'h') + 'line(' + x + ', ' + y + ', ' + var_length + ', 0x' + rgb565.toString(16) + ')\n' + 'onboard_tft.show()\n';
|
||||
}
|
||||
return code;
|
||||
}
|
||||
|
||||
export const onboard_tft_display_line = function (block, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2];
|
||||
generator.definitions_['import_' + version + '_onboard_tft'] = "from " + version + " import onboard_tft";
|
||||
var x1 = generator.valueToCode(block, 'x1', generator.ORDER_ATOMIC);
|
||||
var y1 = generator.valueToCode(block, 'y1', generator.ORDER_ATOMIC);
|
||||
var x2 = generator.valueToCode(block, 'x2', generator.ORDER_ATOMIC);
|
||||
var y2 = generator.valueToCode(block, 'y2', generator.ORDER_ATOMIC);
|
||||
var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
if (color.slice(0, 2) == "0x") {
|
||||
var code = 'onboard_tft.line(' + x1 + ', ' + y1 + ', ' + x2 + ', ' + y2 + ', ' + color + ')\n' + 'onboard_tft.show()\n';
|
||||
} else {
|
||||
const rgbValues = color.match(/\d+/g);
|
||||
const r = parseInt(rgbValues[0]);
|
||||
const g = parseInt(rgbValues[1]);
|
||||
const b = parseInt(rgbValues[2]);
|
||||
var rgb = "0x" + ((r << 16) + (g << 8) + b).toString(16).padStart(4, "0");
|
||||
var rgb565 = (rgb & 0xf80000) >> 8 | (rgb & 0xfc00) >> 5 | (rgb & 0xff) >> 3;
|
||||
var code = 'onboard_tft.line(' + x1 + ', ' + y1 + ', ' + x2 + ', ' + y2 + ', 0x' + rgb565.toString(16) + ')\n' + 'onboard_tft.show()\n';
|
||||
}
|
||||
return code;
|
||||
}
|
||||
|
||||
export const onboard_tft_clear = function (block, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2];
|
||||
generator.definitions_['import_' + version + '_onboard_tft'] = "from " + version + " import onboard_tft";
|
||||
var code = 'onboard_tft.fill(0)\n' + 'onboard_tft.show()\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const onboard_tft_shift = function (a, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2];
|
||||
generator.definitions_['import_' + version + '_onboard_tft'] = "from " + version + " import onboard_tft";
|
||||
var op = a.getFieldValue("OP");
|
||||
var value = generator.valueToCode(a, 'val', generator.ORDER_ATOMIC);
|
||||
var code = 'onboard_tft.' + op + '(' + value + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const onboard_tft_get_pixel = function (block, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2];
|
||||
generator.definitions_['import_' + version + '_onboard_tft'] = "from " + version + " import onboard_tft";
|
||||
var value_x = generator.valueToCode(block, 'x', generator.ORDER_ATOMIC);
|
||||
var value_y = generator.valueToCode(block, 'y', generator.ORDER_ATOMIC);
|
||||
var code = 'hex(onboard_tft.pixel(int(' + value_x + '), int(' + value_y + ')))';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const onboard_tft_bright_point = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2];
|
||||
generator.definitions_['import_' + version + '_onboard_tft'] = "from " + version + " import onboard_tft";
|
||||
var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);
|
||||
var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);
|
||||
var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
if (color.slice(0, 2) == "0x") {
|
||||
var code = 'onboard_tft.pixel(int(' + x + '), int(' + y + '), ' + color + ")\n" + 'onboard_tft.show()\n';
|
||||
} else {
|
||||
const rgbValues = color.match(/\d+/g);
|
||||
const r = parseInt(rgbValues[0]);
|
||||
const g = parseInt(rgbValues[1]);
|
||||
const b = parseInt(rgbValues[2]);
|
||||
var rgb = "0x" + ((r << 16) + (g << 8) + b).toString(16).padStart(4, "0");
|
||||
var rgb565 = (rgb & 0xf80000) >> 8 | (rgb & 0xfc00) >> 5 | (rgb & 0xff) >> 3;
|
||||
var code = 'onboard_tft.pixel(int(' + x + '), int(' + y + '), 0x' + rgb565.toString(16) + ")\n" + 'onboard_tft.show()\n';
|
||||
}
|
||||
return code;
|
||||
}
|
||||
|
||||
export const onboard_tft_get_screen_pixel = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
generator.definitions_['import_' + version + '_onboard_tft'] = "from " + version + " import onboard_tft";
|
||||
var code = 'onboard_tft.get_brightness()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const onboard_tft_bright_screen = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
generator.definitions_['import_' + version + '_onboard_tft'] = "from " + version + " import onboard_tft";
|
||||
var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);
|
||||
var code = 'onboard_tft.set_brightness(' + x + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const onboard_tft_fill = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
generator.definitions_['import_' + version + '_onboard_tft'] = "from " + version + " import onboard_tft";
|
||||
var color = generator.valueToCode(this, 'VAR', generator.ORDER_ASSIGNMENT);
|
||||
if (color.slice(0, 2) == "0x") {
|
||||
var code = 'onboard_tft.fill(' + color + ')\nonboard_tft.show()\n';
|
||||
} else {
|
||||
const rgbValues = color.match(/\d+/g);
|
||||
const r = parseInt(rgbValues[0]);
|
||||
const g = parseInt(rgbValues[1]);
|
||||
const b = parseInt(rgbValues[2]);
|
||||
var rgb = "0x" + ((r << 16) + (g << 8) + b).toString(16).padStart(4, "0");
|
||||
var rgb565 = (rgb & 0xf80000) >> 8 | (rgb & 0xfc00) >> 5 | (rgb & 0xff) >> 3;
|
||||
var code = 'onboard_tft.fill(0x' + rgb565.toString(16) + ')\nonboard_tft.show()\n';
|
||||
}
|
||||
return code;
|
||||
}
|
||||
|
||||
export const onboard_tft_clock_init = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
generator.definitions_['import_' + version + '_Clock'] = "from " + version + " import Clock";
|
||||
var x = generator.valueToCode(this, 'x', generator.ORDER_ASSIGNMENT);
|
||||
var y = generator.valueToCode(this, 'y', generator.ORDER_ASSIGNMENT);
|
||||
var size = generator.valueToCode(this, 'size', generator.ORDER_ASSIGNMENT);
|
||||
var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ASSIGNMENT);
|
||||
var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
if (color.slice(0, 2) == "0x") {
|
||||
var code = sub + "=Clock(" + x + ',' + y + ',' + size + ',' + color + ")\n";
|
||||
} else {
|
||||
const rgbValues = color.match(/\d+/g);
|
||||
const r = parseInt(rgbValues[0]);
|
||||
const g = parseInt(rgbValues[1]);
|
||||
const b = parseInt(rgbValues[2]);
|
||||
var rgb = "0x" + ((r << 16) + (g << 8) + b).toString(16).padStart(4, "0");
|
||||
var rgb565 = (rgb & 0xf80000) >> 8 | (rgb & 0xfc00) >> 5 | (rgb & 0xff) >> 3;
|
||||
var code = sub + "=Clock(" + x + ',' + y + ',' + size + ',0x' + rgb565.toString(16) + ")\n";
|
||||
}
|
||||
return code;
|
||||
}
|
||||
|
||||
export const onboard_tft_clock_get_rtctime = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
generator.definitions_['import_' + version + '_Clock'] = "from " + version + " import Clock";
|
||||
var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ASSIGNMENT);
|
||||
var code = sub + ".set_rtctime()\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const onboard_tft_clock_set_time = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
generator.definitions_['import_' + version + '_Clock'] = "from " + version + " import Clock";
|
||||
var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ASSIGNMENT);
|
||||
var h = generator.valueToCode(this, 'h', generator.ORDER_ASSIGNMENT);
|
||||
var m = generator.valueToCode(this, 'm', generator.ORDER_ASSIGNMENT);
|
||||
var s = generator.valueToCode(this, 's', generator.ORDER_ASSIGNMENT);
|
||||
var code = sub + ".set_time(" + h + ',' + m + ',' + s + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const onboard_tft_clock_draw = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
generator.definitions_['import_' + version + '_Clock'] = "from " + version + " import Clock";
|
||||
var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ASSIGNMENT);
|
||||
var code = sub + ".draw_clock()\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const onboard_tft_clock_clear = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
generator.definitions_['import_' + version + '_Clock'] = "from " + version + " import Clock";
|
||||
var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ASSIGNMENT);
|
||||
var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
if (color.slice(0, 2) == "0x") {
|
||||
var code = sub + ".clear(" + color + ")\n";
|
||||
} else {
|
||||
const rgbValues = color.match(/\d+/g);
|
||||
const r = parseInt(rgbValues[0]);
|
||||
const g = parseInt(rgbValues[1]);
|
||||
const b = parseInt(rgbValues[2]);
|
||||
var rgb = "0x" + ((r << 16) + (g << 8) + b).toString(16).padStart(4, "0");
|
||||
var rgb565 = (rgb & 0xf80000) >> 8 | (rgb & 0xfc00) >> 5 | (rgb & 0xff) >> 3;
|
||||
var code = sub + ".clear(0x" + rgb565.toString(16) + ")\n";
|
||||
}
|
||||
return code;
|
||||
}
|
||||
|
||||
export const onboard_tft_display_shape_circle = function (block, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
generator.definitions_['import_' + version + '_onboard_tft'] = "from " + version + " import onboard_tft";
|
||||
var x = generator.valueToCode(block, 'x', generator.ORDER_ATOMIC);
|
||||
var y = generator.valueToCode(block, 'y', generator.ORDER_ATOMIC);
|
||||
var R = generator.valueToCode(block, 'r', generator.ORDER_ATOMIC);
|
||||
var color = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var shape = block.getFieldValue('shape');
|
||||
if (color.slice(0, 2) == "0x") {
|
||||
var code = 'onboard_tft.ellipse(' + x + ', ' + y + ', ' + R + ', ' + R + ', ' + color + ',' + shape + ')\n' + 'onboard_tft.show()\n';
|
||||
} else {
|
||||
const rgbValues = color.match(/\d+/g);
|
||||
const r = parseInt(rgbValues[0]);
|
||||
const g = parseInt(rgbValues[1]);
|
||||
const b = parseInt(rgbValues[2]);
|
||||
var rgb = "0x" + ((r << 16) + (g << 8) + b).toString(16).padStart(4, "0");
|
||||
var rgb565 = (rgb & 0xf80000) >> 8 | (rgb & 0xfc00) >> 5 | (rgb & 0xff) >> 3;
|
||||
var code = 'onboard_tft.ellipse(' + x + ', ' + y + ', ' + R + ', ' + R + ', 0x' + rgb565.toString(16) + ',' + shape + ')\n' + 'onboard_tft.show()\n';
|
||||
}
|
||||
return code;
|
||||
}
|
||||
95
boards/default_src/micropython/generators/factory.js
Normal file
95
boards/default_src/micropython/generators/factory.js
Normal file
@@ -0,0 +1,95 @@
|
||||
export const factory_from_import = function (_, generator) {
|
||||
var path = this.getFieldValue('path');
|
||||
var module = this.getFieldValue('module');
|
||||
generator.definitions_['import_' + path + '_' + module] = 'from ' + path + ' import ' + module;
|
||||
return '';
|
||||
}
|
||||
|
||||
export const factory_import = function (_, generator) {
|
||||
var module = this.getFieldValue('module');
|
||||
generator.definitions_['import_' + module] = 'import ' + module;
|
||||
return '';
|
||||
}
|
||||
|
||||
export const factory_function_noreturn = function (_, generator) {
|
||||
var NAME = this.getFieldValue('NAME');
|
||||
var code = new Array(this.itemCount_);
|
||||
for (var n = 0; n < this.itemCount_; n++) {
|
||||
code[n] = generator.valueToCode(this, 'ADD' + n,
|
||||
generator.ORDER_NONE) || '';
|
||||
}
|
||||
return NAME + '(' + code.join(', ') + ')\n';
|
||||
}
|
||||
|
||||
export const factory_function_return = function (_, generator) {
|
||||
var NAME = this.getFieldValue('NAME');
|
||||
var code = new Array(this.itemCount_);
|
||||
for (var n = 0; n < this.itemCount_; n++) {
|
||||
code[n] = generator.valueToCode(this, 'ADD' + n,
|
||||
generator.ORDER_NONE) || '';
|
||||
}
|
||||
return [NAME + '(' + code.join(', ') + ')', generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const factory_declare = function () {
|
||||
var TYPE = this.getFieldValue('TYPE');
|
||||
var NAME = this.getFieldValue('NAME');
|
||||
return NAME + ' = ' + TYPE + '()\n';
|
||||
}
|
||||
|
||||
export const factory_callMethod_noreturn = function (_, generator) {
|
||||
var NAME = this.getFieldValue('NAME');
|
||||
var METHOD = this.getFieldValue('METHOD');
|
||||
var code = new Array(this.itemCount_);
|
||||
for (var n = 0; n < this.itemCount_; n++) {
|
||||
code[n] = generator.valueToCode(this, 'ADD' + n,
|
||||
generator.ORDER_NONE) || '';
|
||||
}
|
||||
return NAME + '.' + METHOD + '(' + code.join(', ') + ')\n';
|
||||
}
|
||||
|
||||
export const factory_callMethod_return = function (_, generator) {
|
||||
var NAME = this.getFieldValue('NAME');
|
||||
var METHOD = this.getFieldValue('METHOD');
|
||||
var code = new Array(this.itemCount_);
|
||||
for (var n = 0; n < this.itemCount_; n++) {
|
||||
code[n] = generator.valueToCode(this, 'ADD' + n,
|
||||
generator.ORDER_NONE) || '';
|
||||
}
|
||||
return [NAME + '.' + METHOD + '(' + code.join(', ') + ')', generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const factory_block = function () {
|
||||
var VALUE = this.getFieldValue('VALUE');
|
||||
//if(!(VALUE.charAt(VALUE.length-1)==";")){
|
||||
//VALUE=VALUE+';';
|
||||
//}
|
||||
return VALUE + '\n';
|
||||
}
|
||||
|
||||
export const factory_block_return = function (_, generator) {
|
||||
var VALUE = this.getFieldValue('VALUE');
|
||||
return [VALUE, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const factory_block_with_textarea = function () {
|
||||
var VALUE = this.getFieldValue('VALUE');
|
||||
//if(!(VALUE.charAt(VALUE.length-1)==";")){
|
||||
//VALUE=VALUE+';';
|
||||
//}
|
||||
return VALUE + '\n';
|
||||
}
|
||||
|
||||
export const factory_block_return_with_textarea = function (_, generator) {
|
||||
var VALUE = this.getFieldValue('VALUE');
|
||||
return [VALUE, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const folding_block = function (_, generator) {
|
||||
var comment = this.getFieldValue('peien');
|
||||
comment = "#" + comment;
|
||||
var branch = generator.statementToCode(this, 'DO');
|
||||
branch = branch.replace(/(^\s*)|(\s*$)/g, "");//去除两端空格
|
||||
branch = branch.replace(/(\n\s\s\s\s)/g, "\n");//去除换行时空格
|
||||
return comment + '\n' + branch + '\n';
|
||||
}
|
||||
158
boards/default_src/micropython/generators/inout.js
Normal file
158
boards/default_src/micropython/generators/inout.js
Normal file
@@ -0,0 +1,158 @@
|
||||
import * as Blockly from 'blockly/core';
|
||||
|
||||
// ok
|
||||
export const inout_highlow = function (_, generator) {
|
||||
// Boolean values HIGH and LOW.
|
||||
var code = (this.getFieldValue('BOOL') == 'HIGH') ? '1' : '0';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
// ok
|
||||
export const inout_digital_write = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var dropdown_stat = generator.valueToCode(this, 'STAT', generator.ORDER_ATOMIC);
|
||||
var code = "";
|
||||
code += dropdown_pin + '.value(' + dropdown_stat + ')\n'
|
||||
return code;
|
||||
}
|
||||
|
||||
// ok
|
||||
export const inout_digital_read = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var code = "";
|
||||
code = dropdown_pin + '.value()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
// ok
|
||||
export const inout_pwm_analog_write = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
//var dropdown_stat = this.getFieldValue('STAT');
|
||||
var value_num = generator.valueToCode(this, 'NUM', generator.ORDER_ATOMIC);
|
||||
//generator.setups_['setup_output'+dropdown_pin] = 'pinMode('+dropdown_pin+', OUTPUT);';
|
||||
var code = dropdown_pin + '.duty_u16(' + value_num + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
// ok
|
||||
export const inout_analog_write = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
//var dropdown_stat = this.getFieldValue('STAT');
|
||||
var value_num = generator.valueToCode(this, 'NUM', generator.ORDER_ATOMIC);
|
||||
//generator.setups_['setup_output'+dropdown_pin] = 'pinMode('+dropdown_pin+', OUTPUT);';
|
||||
var code = dropdown_pin + '.write(' + value_num + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
// ok
|
||||
export const inout_analog_write_set = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var value_num = generator.valueToCode(this, 'NUM', generator.ORDER_ATOMIC);
|
||||
var key = this.getFieldValue('key');
|
||||
var code = dropdown_pin + '.set_analog_' + key + '(' + value_num + ')\n';
|
||||
//var code = 'pin' + dropdown_pin + '.set_analog_period(' + value_num + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const inout_pwm_analog_write_set_freq = function (_, generator) {
|
||||
//generator.definitions_['import_machine_Pin'] = "from machine import Pin";
|
||||
// generator.definitions_['import_machine_PWM'] = "from machine import PWM";
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var value_num = generator.valueToCode(this, 'NUM', generator.ORDER_ATOMIC);
|
||||
var code = dropdown_pin + '.freq(' + value_num + ')\n';
|
||||
//var code = 'pin' + dropdown_pin + '.set_analog_period(' + value_num + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
// ok
|
||||
export const inout_analog_read = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
//generator.setups_['setup_input_'+dropdown_pin] = 'pinMode('+dropdown_pin+', INPUT);';
|
||||
var code = dropdown_pin + '.read_u16()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
// ok
|
||||
export const inout_pin_pressed = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var pin = generator.valueToCode(this, 'pin', generator.ORDER_ATOMIC);
|
||||
var code = pin + '.read()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const inout_pin_attachInterrupt = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var dropdown_mode = this.getFieldValue('mode');
|
||||
var atta = generator.valueToCode(this, 'DO', generator.ORDER_ATOMIC);
|
||||
var code = 'machine.Pin(' + dropdown_pin + ').irq' + '(handler = ' + atta + ', trigger = ' + dropdown_mode + ')\n'
|
||||
//var funcName = 'attachInterrupt_func_' + dropdown_pin;
|
||||
//var branch = generator.statementToCode(this, 'DO') || generator.PASS;
|
||||
//var code2 = 'def' + ' ' + funcName + '(p):\n' + branch + '\n';
|
||||
//generator.setups_[funcName] = code2;
|
||||
return code;
|
||||
}
|
||||
|
||||
export const inout_digital_init = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var pin_obj = this.getFieldValue('PIN_OBJ') || 'pin#';
|
||||
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var dropdown_mode = this.getFieldValue('MODE');
|
||||
var varName = (pin_obj == 'pin#') ? 'pin' + dropdown_pin : generator.variableDB_.getName(pin_obj, Blockly.Variables.NAME_TYPE);
|
||||
var code = varName + ' = machine.Pin(' + dropdown_pin + ', ' + dropdown_mode + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const inout_pwm_analog_write_init = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var pin_obj = this.getFieldValue('PIN_OBJ') || 'pwm#';
|
||||
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var varName = (pin_obj == 'pwm#') ? 'pwm' + dropdown_pin : generator.variableDB_.getName(pin_obj, Blockly.Variables.NAME_TYPE);
|
||||
var code = varName + ' = machine.PWM(machine.Pin(' + dropdown_pin + '))\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
// ok
|
||||
export const inout_analog_write_init = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var pin_obj = this.getFieldValue('PIN_OBJ') || 'dac#';
|
||||
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var varName = (pin_obj == 'dac#') ? 'dac' + dropdown_pin : generator.variableDB_.getName(pin_obj, Blockly.Variables.NAME_TYPE);
|
||||
var code = varName + ' = machine.DAC(machine.Pin(' + dropdown_pin + '))\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const inout_analog_read_init = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var pin_obj = this.getFieldValue('PIN_OBJ') || 'adc#';
|
||||
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var varName = (pin_obj == 'adc#') ? 'adc' + dropdown_pin : generator.variableDB_.getName(pin_obj, Blockly.Variables.NAME_TYPE);
|
||||
var code = varName + ' = machine.ADC(machine.Pin(' + dropdown_pin + '))\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const inout_analog_atten = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
//var dropdown_stat = this.getFieldValue('STAT');
|
||||
var value_atten = this.getFieldValue('atten')
|
||||
var code = dropdown_pin + '.atten(' + value_atten + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
// ok
|
||||
export const inout_pin_pressed_init = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var pin_obj = this.getFieldValue('PIN_OBJ') || 'tc#';
|
||||
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var varName = (pin_obj == 'tc#') ? 'tc' + dropdown_pin : generator.variableDB_.getName(pin_obj, Blockly.Variables.NAME_TYPE);
|
||||
var code = varName + ' = machine.TouchPad(machine.Pin(' + dropdown_pin + '))\n';
|
||||
return code;
|
||||
}
|
||||
236
boards/default_src/micropython/generators/iot.js
Normal file
236
boards/default_src/micropython/generators/iot.js
Normal file
@@ -0,0 +1,236 @@
|
||||
export const iot_wifi_connect = function (_, generator) {
|
||||
generator.definitions_['import_mixiot'] = "import mixiot";
|
||||
var username = generator.valueToCode(this, 'WIFINAME', generator.ORDER_ATOMIC);
|
||||
var password = generator.valueToCode(this, 'PASSWORD', generator.ORDER_ATOMIC);
|
||||
var code = 'mixiot.wlan_connect(' + username + ',' + password + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const iot_onenet_connect = function (_, generator) {
|
||||
generator.definitions_['import_onenet'] = "import onenet";
|
||||
var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var client = generator.valueToCode(this, 'CLIENT', generator.ORDER_ATOMIC);
|
||||
var server = generator.valueToCode(this, 'SERVER', generator.ORDER_ATOMIC);
|
||||
var username = generator.valueToCode(this, 'USERNAME', generator.ORDER_ATOMIC);
|
||||
var password = generator.valueToCode(this, 'PASSWORD', generator.ORDER_ATOMIC);
|
||||
var topic = generator.valueToCode(this, 'TOPIC', generator.ORDER_ATOMIC);
|
||||
var subscribe = generator.valueToCode(this, 'SUB', generator.ORDER_ASSIGNMENT) || 'None';
|
||||
var code = v + ' = onenet.init_MQTT_client(' + client + ', ' + server + ', ' + username + ', ' + password + ', ' + topic + ', ' + subscribe + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const iot_onenet_disconnect = function (_, generator) {
|
||||
var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
generator.definitions_['import_onenet'] = "import onenet";
|
||||
var code = v + '.do_disconnect()\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const iot_onenet_publish_dict = function (_, generator) {
|
||||
var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var d = generator.valueToCode(this, 'DICT', generator.ORDER_ATOMIC);
|
||||
var check = this.getFieldValue("is_print") == 'TRUE' ? 'True' : 'False';
|
||||
generator.definitions_['import_onenet'] = "import onenet";
|
||||
var code = v + '.publish(' + d + ', is_print = ' + check + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const iot_onenet_check = function (_, generator) {
|
||||
var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
generator.definitions_['import_onenet'] = "import onenet";
|
||||
var code = v + '.check_msg()\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const iot_onenet_publish = function (_, generator) {
|
||||
// Create a list with any number of elements of any type.
|
||||
|
||||
//var size=window.parseFloat(this.getFieldValue('SIZE'));
|
||||
generator.definitions_['import_onenet'] = "import onenet";
|
||||
var ck = new Array(this.itemCount_);
|
||||
var cv = new Array(this.itemCount_);
|
||||
var ct = new Array(this.itemCount_);
|
||||
|
||||
var default_value = '0';
|
||||
var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
|
||||
for (let n = 0; n < this.itemCount_; n++) {
|
||||
var keyName = this.getFieldValue('KEY' + n);
|
||||
ck[n] = keyName;
|
||||
}
|
||||
for (let n = 0; n < this.itemCount_; n++) {
|
||||
cv[n] = generator.valueToCode(this, 'ADD' + n,
|
||||
generator.ORDER_NONE) || default_value;
|
||||
}
|
||||
var code = v + ".publish({";
|
||||
for (let n = 0; n < this.itemCount_; n++) {
|
||||
ct[n] = ck[n] + ': ' + cv[n];
|
||||
}
|
||||
//var code = "c.publish('$dp', pubData("+ '{' + code.join(', ') + '})\n';
|
||||
//var code =''+varName+'['+size+"]"+'='+ '{' + code.join(', ') + '}\n';
|
||||
//generator.setups_['setup_lists'+varName] = code;
|
||||
code = code + ct.join(', ') + "})\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const iot_mixio_connect = function (_, generator) {
|
||||
generator.definitions_['import_mixiot'] = "import mixiot";
|
||||
generator.definitions_['import_machine'] = "import machine";
|
||||
generator.definitions_['import_ubinascii_hexlify'] = "from ubinascii import hexlify";
|
||||
var server = generator.valueToCode(this, 'SERVER', generator.ORDER_ATOMIC);
|
||||
var username = generator.valueToCode(this, 'USERNAME', generator.ORDER_ATOMIC);
|
||||
var password = generator.valueToCode(this, 'PASSWORD', generator.ORDER_ATOMIC);
|
||||
var project = generator.valueToCode(this, 'PROJECT', generator.ORDER_ATOMIC);
|
||||
//var subscribe = generator.valueToCode(this, 'SUB', generator.ORDER_ASSIGNMENT) || '0';
|
||||
var a = "'" + username.replace("'", "").replace("'", "") + "/" + project.replace("'", "").replace("'", "") + "/'"
|
||||
var code = 'MQTT_USR_PRJ = ' + a + '\n' + 'mqtt_client = mixiot.init_MQTT_client(' + server + ', ' + username + ', ' + password + ', MQTT_USR_PRJ)\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const IOT_MIXIO_PUBLISH = function (_, generator) {
|
||||
var topic = generator.valueToCode(this, 'TOPIC', generator.ORDER_ATOMIC);
|
||||
var msg = generator.valueToCode(this, 'MSG', generator.ORDER_ATOMIC);
|
||||
generator.definitions_['import_mixiot'] = "import mixiot";
|
||||
var code = 'mqtt_client.publish(MQTT_USR_PRJ + ' + topic + ', ' + msg + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const IOT_MIXIO_SUBSCRIBE = function (_, generator) {
|
||||
var topic = generator.valueToCode(this, 'TOPIC', generator.ORDER_ATOMIC);
|
||||
var method = generator.valueToCode(this, 'METHOD', generator.ORDER_ATOMIC);
|
||||
generator.definitions_['import_mixiot'] = "import mixiot";
|
||||
var code = 'mqtt_client.set_callback(' + topic + ',' + method + ', MQTT_USR_PRJ)\n';
|
||||
code += 'mqtt_client.subscribe(MQTT_USR_PRJ + ' + topic + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const iot_mixio_disconnect = function (_, generator) {
|
||||
generator.definitions_['import_mixiot'] = "import mixiot";
|
||||
var code = 'mqtt_client.disconnect(MQTT_USR_PRJ)\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const iot_mixio_connect_only = function (_, generator) {
|
||||
generator.definitions_['import_mixiot'] = "import mixiot";
|
||||
var code = 'mqtt_client.connect()\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const iot_mixio_check = function (_, generator) {
|
||||
generator.definitions_['import_mixiot'] = "import mixiot";
|
||||
var code = 'mqtt_client.check_msg()\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const iot_mixio_format_topic = function (_, generator) {
|
||||
var code = 'mqtt_client.decode("utf-8").split("/")[-1]';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const iot_mixio_format_msg = function (_, generator) {
|
||||
var code = 'mqtt_client.decode("utf-8")';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const IOT_FORMATTING = function (_, generator) {
|
||||
generator.definitions_['import_mixpy'] = "import mixpy";
|
||||
var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var code = 'mixpy.format_content(' + v + ', mqtt_client.client_id)';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const IOT_FORMAT_STRING = function (_, generator) {
|
||||
generator.definitions_['import_mixpy'] = "import mixpy";
|
||||
var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var code = 'mixpy.format_str(' + v + ')';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const IOT_EMQX_INIT_AND_CONNECT_BY_SHARE_CODE = function (_, generator) {
|
||||
var server = generator.valueToCode(this, 'SERVER', generator.ORDER_ATOMIC);
|
||||
// var port = '1883';
|
||||
var share_code = generator.valueToCode(this, 'KEY', generator.ORDER_ATOMIC);
|
||||
generator.definitions_['import_mixiot'] = "import mixiot";
|
||||
generator.definitions_['import_machine'] = "import machine";
|
||||
generator.definitions_['import_urequests'] = "import urequests";
|
||||
generator.definitions_['import_ubinascii_hexlify'] = "from ubinascii import hexlify";
|
||||
generator.definitions_['import_mixpy_analyse_sharekey'] = "from mixpy import analyse_sharekey";
|
||||
// var mac_address = 'str(binascii.hexlify(wifi.radio.mac_address))[2:14]'
|
||||
// var socket_pool = 'socketpool.SocketPool(wifi.radio)'
|
||||
// var ssl_context = 'ssl.create_default_context()'
|
||||
var code = 'sk = analyse_sharekey(\'http://'+server.substring(1, server.length-1)+'/mixio-php/sharekey.php?sk=' + share_code + '\')\n'+
|
||||
'MQTT_USR_PRJ = sk[0]+\'/\'+sk[1]+\'/\'\n' +
|
||||
'mqtt_client = mixiot.init_MQTT_client(' + server + ', sk[0], sk[2]' + ', MQTT_USR_PRJ)\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const iot_mixly_key = function (_, generator) {
|
||||
var code = this.getFieldValue('VISITOR_ID');
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const IOT_EMQX_INIT_AND_CONNECT_BY_MIXLY_CODE = function (_, generator) {
|
||||
generator.definitions_['import_mixiot'] = "import mixiot";
|
||||
generator.definitions_['import_machine'] = "import machine";
|
||||
generator.definitions_['import_ubinascii_hexlify'] = "from ubinascii import hexlify";
|
||||
var server = generator.valueToCode(this, 'SERVER', generator.ORDER_ATOMIC);
|
||||
// var port = '1883';
|
||||
var username = '"MixIO_public"';
|
||||
var password = '"MixIO_public"';
|
||||
var mixly_code = generator.valueToCode(this, 'KEY', generator.ORDER_ATOMIC);
|
||||
var a = '"MixIO/' + mixly_code + '/default/"'
|
||||
// var mac_address = 'str(binascii.hexlify(wifi.radio.mac_address))[2:14]'
|
||||
// var socket_pool = 'socketpool.SocketPool(wifi.radio)'
|
||||
// var ssl_context = 'ssl.create_default_context()'
|
||||
var code = 'MQTT_USR_PRJ = ' + a + '\n' + 'mqtt_client = mixiot.init_MQTT_client(' + server + ', ' + username + ', ' + password + ', MQTT_USR_PRJ)\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const IOT_EMQX_PING = function (_, generator) {
|
||||
generator.definitions_['import_mixiot'] = "import mixiot";
|
||||
var code = 'mqtt_client.pingSync()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const IOT_MIXIO_NTP = function (_, generator) {
|
||||
generator.definitions_['import_mixiot'] = "import mixiot";
|
||||
var addr = generator.valueToCode(this, 'addr', generator.ORDER_ATOMIC);
|
||||
var code = 'mixiot.ntp(' + addr + ')';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const iot_client_onboard = function (_, generator) {
|
||||
var code = 'mqtt_client';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const iot_http_client = function (_, generator) {
|
||||
generator.definitions_['import_debugnet'] = "import debugnet";
|
||||
var addr = generator.valueToCode(this, 'addr', generator.ORDER_ATOMIC);
|
||||
var key = this.getFieldValue('key');
|
||||
var code = 'HTTP_client = debugnet.request("GET",' + addr + ',debug=' + key + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const iot_http_data = function (_, generator) {
|
||||
generator.definitions_['import_debugnet'] = "import debugnet";
|
||||
var key = this.getFieldValue('key');
|
||||
var code = 'HTTP_client.' + key;
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const iot_mqtt_client = function (_, generator) {
|
||||
generator.definitions_['import_debugnet'] = "import debugnet";
|
||||
var addr = generator.valueToCode(this, 'addr', generator.ORDER_ATOMIC);
|
||||
var key = this.getFieldValue('key2');
|
||||
var code = 'mqtt_client = debugnet.init_MQTT_client(' + addr + ', "MixIO_public", "MixIO_public", "MixIO/3QBAGKRL/default/",debug=' + key + ')\n';
|
||||
code += 'mqtt_client.subscribe("$SYS/hello")\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const iot_mqtt_data = function (_, generator) {
|
||||
generator.definitions_['import_mixiot'] = "import mixiot";
|
||||
var key = this.getFieldValue('key');
|
||||
var code = 'mqtt_client.' + key;
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
230
boards/default_src/micropython/generators/network.js
Normal file
230
boards/default_src/micropython/generators/network.js
Normal file
@@ -0,0 +1,230 @@
|
||||
import * as Blockly from 'blockly/core';
|
||||
|
||||
export const network_init = function (_, generator) {
|
||||
generator.definitions_['import_network'] = "import network";
|
||||
var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var mode = this.getFieldValue('mode');
|
||||
return "" + varName + " = network.WLAN(network." + mode + "_IF);\n";
|
||||
}
|
||||
|
||||
// export const network_connect = function() {
|
||||
// generator.definitions_['import_network'] = "import network";
|
||||
// // generator.setups_['class_wlan'] ='wlan.active(True)\n';
|
||||
// var varName =generator.valueToCode(this, 'VAR',generator.ORDER_ATOMIC);
|
||||
// var id = generator.valueToCode(this, 'id', generator.ORDER_ATOMIC);
|
||||
// var password = generator.valueToCode(this, 'password', generator.ORDER_ATOMIC);
|
||||
// return "if not "+varName+".isconnected():\n"+
|
||||
// " "+varName+".connect("+id+","+password+")\n"+
|
||||
// " while not "+varName+".isconnected():\n"+
|
||||
// " pass\n";
|
||||
// }
|
||||
|
||||
export const network_connect = function (_, generator) {
|
||||
generator.definitions_['import_network'] = "import network";
|
||||
// generator.setups_['class_wlan'] ='wlan.active(True)\n';
|
||||
var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var id = generator.valueToCode(this, 'id', generator.ORDER_ATOMIC);
|
||||
var password = generator.valueToCode(this, 'password', generator.ORDER_ATOMIC);
|
||||
return "" + varName + ".connect(" + id + "," + password + ")\n"
|
||||
}
|
||||
|
||||
export const network_wifi_connect = function (_, generator) {
|
||||
generator.definitions_['import_network'] = "import network";
|
||||
var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
return "" + varName + ".isconnected()\n";
|
||||
}
|
||||
|
||||
export const network_get_connect = function (_, generator) {
|
||||
generator.definitions_['import_network'] = "import network";
|
||||
var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var mode = this.getFieldValue('mode');
|
||||
var code = "" + varName + ".ifconfig()[" + mode + "]";
|
||||
return [code, generator.ORDER_ATOMIC]
|
||||
}
|
||||
|
||||
export const network_stop = function (_, generator) {
|
||||
generator.definitions_['import_network'] = "import network";
|
||||
var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
return "" + varName + ".disconnect()\n";
|
||||
}
|
||||
|
||||
export const network_open = function (_, generator) {
|
||||
generator.definitions_['import_network'] = "import network";
|
||||
var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var op = this.getFieldValue('op');
|
||||
var code = "" + varName + ".active(" + op + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const network_is_active = function (_, generator) {
|
||||
generator.definitions_['import_network'] = "import network";
|
||||
var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var code = "" + varName + ".active()";
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const network_get_wifi = function (_, generator) {
|
||||
generator.definitions_['import_network'] = "import network";
|
||||
var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var op = this.getFieldValue('op');
|
||||
var code = "" + varName + ".config('" + op + "')";
|
||||
return [code, generator.ORDER_ATOMIC]
|
||||
}
|
||||
|
||||
export const network_ap_connect = function (_, generator) {
|
||||
generator.definitions_['import_network'] = "import network";
|
||||
// generator.setups_['class_wlan'] ='ap = network.WLAN(network.AP_IF)\n'+'ap.active(True)\n';
|
||||
var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var essid = generator.valueToCode(this, 'essid', generator.ORDER_ATOMIC);
|
||||
var channel = generator.valueToCode(this, 'channel', generator.ORDER_ATOMIC);
|
||||
return "" + varName + ".config(essid = " + essid + ", channel = " + channel + ")\n";
|
||||
}
|
||||
|
||||
export const network_scan = function (_, generator) {
|
||||
generator.definitions_['import_network'] = "import network";
|
||||
var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var code = "" + varName + ".scan()";
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
|
||||
}
|
||||
|
||||
export const network_server = function (_, generator) {
|
||||
generator.definitions_['import_server_*'] = 'from server import *';
|
||||
var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
// generator.setups_['class_wlan'] ='SSID="ying"\n'+'PASSWORD="201411132040"\n';
|
||||
return 'if not ' + varName + '.isconnected():\n'
|
||||
+ ' connectWifi(SSID, PASSWORD)\n'
|
||||
+ 'ip=' + varName + '.ifconfig()[0]\n'
|
||||
+ 'print(ip)\n'
|
||||
+ 'time.sleep(1)\n'
|
||||
+ 'DATA=listenData()\n'
|
||||
}
|
||||
|
||||
export const network_socket_init = function (_, generator) {
|
||||
generator.definitions_['import_network'] = "import network";
|
||||
generator.definitions_['import_socket'] = "import socket";
|
||||
var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var mode = this.getFieldValue('mode');
|
||||
if (mode == 'UDP') {
|
||||
mode = 'socket.SOCK_DGRAM'
|
||||
}
|
||||
else if (mode == 'TCP') {
|
||||
mode = 'socket.SOCK_STREAM'
|
||||
}
|
||||
return "" + varName + " = socket.socket(socket.AF_INET," + mode + ")\n";
|
||||
}
|
||||
|
||||
export const network_socket_bind = function (_, generator) {
|
||||
generator.definitions_['import_network'] = "import network";
|
||||
generator.definitions_['import_socket'] = "import socket";
|
||||
var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var address = generator.valueToCode(this, 'address', generator.ORDER_ATOMIC);
|
||||
return "" + varName + ".bind(" + address + ")\n";
|
||||
}
|
||||
|
||||
export const network_socket_connect = function (_, generator) {
|
||||
generator.definitions_['import_network'] = "import network";
|
||||
generator.definitions_['import_socket'] = "import socket";
|
||||
var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var address = generator.valueToCode(this, 'address', generator.ORDER_ATOMIC);
|
||||
return "" + varName + ".connect(socket.getaddrinfo" + address + "[0][-1])\n";
|
||||
}
|
||||
|
||||
export const network_socket_listen = function (_, generator) {
|
||||
generator.definitions_['import_network'] = "import network";
|
||||
generator.definitions_['import_socket'] = "import socket";
|
||||
var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var queue = generator.valueToCode(this, 'queue', generator.ORDER_ATOMIC);
|
||||
return "" + varName + ".listen(" + queue + ")\n";
|
||||
}
|
||||
|
||||
export const network_socket_accept = function (_, generator) {
|
||||
generator.definitions_['import_network'] = "import network";
|
||||
generator.definitions_['import_socket'] = "import socket";
|
||||
var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var code = "" + varName + ".accept()";
|
||||
return [code, generator.ORDER_ASSIGNMENT];
|
||||
}
|
||||
|
||||
export const network_socket_receive = function (_, generator) {
|
||||
generator.definitions_['import_network'] = "import network";
|
||||
generator.definitions_['import_socket'] = "import socket";
|
||||
var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var size = generator.valueToCode(this, 'size', generator.ORDER_ATOMIC);
|
||||
var code = "" + varName + ".recv(" + size + ")";
|
||||
return [code, generator.ORDER_ASSIGNMENT];
|
||||
}
|
||||
|
||||
export const network_socket_send = function (_, generator) {
|
||||
generator.definitions_['import_network'] = "import network";
|
||||
generator.definitions_['import_socket'] = "import socket";
|
||||
var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var content = generator.valueToCode(this, 'content', generator.ORDER_ATOMIC);
|
||||
var code = "" + varName + ".send(" + content + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const network_socket_receive_from = function (_, generator) {
|
||||
generator.definitions_['import_network'] = "import network";
|
||||
generator.definitions_['import_socket'] = "import socket";
|
||||
var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var size = generator.valueToCode(this, 'size', generator.ORDER_ATOMIC);
|
||||
var code = "" + varName + ".recvfrom(" + size + ")";
|
||||
return [code, generator.ORDER_ASSIGNMENT];
|
||||
}
|
||||
|
||||
export const network_socket_send_to = function (_, generator) {
|
||||
generator.definitions_['import_network'] = "import network";
|
||||
generator.definitions_['import_socket'] = "import socket";
|
||||
var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var content = generator.valueToCode(this, 'content', generator.ORDER_ATOMIC);
|
||||
var address = generator.valueToCode(this, 'address', generator.ORDER_ATOMIC);
|
||||
var code = "" + varName + ".sendto(" + content + "," + address + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const network_socket_close = function (_, generator) {
|
||||
generator.definitions_['import_network'] = "import network";
|
||||
generator.definitions_['import_socket'] = "import socket";
|
||||
var varName = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var code = "" + varName + ".close()\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const requests_get = function (_, generator) {
|
||||
generator.definitions_.import_requests = "import requests";
|
||||
var varName = generator.variableDB_.getName(this.getFieldValue('VAR'),
|
||||
Blockly.Variables.NAME_TYPE);
|
||||
var str = generator.valueToCode(this, 'DOMAIN', generator.ORDER_ATOMIC);
|
||||
var code = varName + '= ' + 'requests.get(' + str + ')\n';
|
||||
|
||||
return code;
|
||||
}
|
||||
|
||||
export const requests_attribute = function (_, generator) {
|
||||
generator.definitions_.import_requests = "import requests";
|
||||
var varName = generator.valueToCode(this, 'VAL', generator.ORDER_ASSIGNMENT) || '0';
|
||||
var attr = this.getFieldValue('ATTR');
|
||||
var code = varName + "." + attr;
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const requests_method = function (_, generator) {
|
||||
generator.definitions_.import_requests = "import requests";
|
||||
var method = this.getFieldValue('DIR');
|
||||
var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var code = "requests." + method + "(" + str + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const ntptime_time = function (_, generator) {
|
||||
generator.definitions_['import_ntptime'] = "import ntptime";
|
||||
var str = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC);
|
||||
var code = "ntptime.time(host=" + str + ")";
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const ntptime_address = function (_, generator) {
|
||||
var code = "'" + this.getFieldValue('op') + "'";
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
29
boards/default_src/micropython/generators/nova_g1.js
Normal file
29
boards/default_src/micropython/generators/nova_g1.js
Normal file
@@ -0,0 +1,29 @@
|
||||
export const get_potential_num = function (_, generator) {
|
||||
generator.definitions_['from_nova_g1_import_ext_g1'] = 'from nova_g1 import ext_g1';
|
||||
var code = 'ext_g1.varistor()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const nova_g1_motor = function (_, generator) {
|
||||
generator.definitions_['from_nova_g1_import_ext_g1'] = 'from nova_g1 import ext_g1';
|
||||
var wheel = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var v = this.getFieldValue('direction');
|
||||
var speed = generator.valueToCode(this, 'speed', generator.ORDER_ATOMIC);
|
||||
var code = "ext_g1.motor(" + wheel + ',"' + v + '",' + speed + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const nova_g1_usb = function (_, generator) {
|
||||
generator.definitions_['from_nova_g1_import_ext_g1'] = 'from nova_g1 import ext_g1';
|
||||
var p = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var percent = generator.valueToCode(this, 'percent', generator.ORDER_ATOMIC);
|
||||
var code = "ext_g1.usb_pwm(" + p + ',' + percent + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const nova_g1_spk_en = function (_, generator) {
|
||||
generator.definitions_['from_nova_g1_import_ext_g1'] = 'from nova_g1 import ext_g1';
|
||||
var state = this.getFieldValue('state');
|
||||
var code = "ext_g1.spk_en(" + state + ")\n";
|
||||
return code;
|
||||
}
|
||||
67
boards/default_src/micropython/generators/pe_g1.js
Normal file
67
boards/default_src/micropython/generators/pe_g1.js
Normal file
@@ -0,0 +1,67 @@
|
||||
export const pe_g1_use_i2c_init = function (_, generator) {
|
||||
generator.definitions_['import_pe_g1'] = 'import pe_g1';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var iv = generator.valueToCode(this, 'I2CSUB', generator.ORDER_ATOMIC);
|
||||
var code = v + ' = pe_g1.PE_G1(' + iv + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const pe_g1_battery_left = function (_, generator) {
|
||||
generator.definitions_['import_pe_g1'] = 'import pe_g1';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var code = v + '.read_bat()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const pe_g1_dc_motor = function (_, generator) {
|
||||
generator.definitions_['import_pe_g1'] = 'import pe_g1';
|
||||
var s = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var wheel = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var v = this.getFieldValue('direction');
|
||||
var speed = generator.valueToCode(this, 'speed', generator.ORDER_ATOMIC);
|
||||
var code = s + ".motor(" + wheel + ',"' + v + '",' + speed + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const pe_g1_dc_motor_speed = function (_, generator) {
|
||||
generator.definitions_['import_pe_g1'] = 'import pe_g1';
|
||||
var s = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var wheel = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var v = 'NC';
|
||||
var code = s + ".motor(" + wheel + ',"' + v + '"' + ")\n";
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const pe_g1_servo_set_angle = function (_, generator) {
|
||||
generator.definitions_['import_pe_g1'] = 'import pe_g1';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var num = generator.valueToCode(this, 'NUM', generator.ORDER_ATOMIC);
|
||||
var code = v + '.servo180(' + dropdown_pin + ',' + num + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const pe_g1_servo_set_speed = function (_, generator) {
|
||||
generator.definitions_['import_pe_g1'] = 'import pe_g1';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var num = generator.valueToCode(this, 'NUM', generator.ORDER_ATOMIC);
|
||||
var code = v + '.servo360(' + dropdown_pin + ',' + num + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const pe_g1_servo_get_angle = function (_, generator) {
|
||||
generator.definitions_['import_pe_g1'] = 'import pe_g1';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var code = v + '.servo180(' + dropdown_pin + ')';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const pe_g1_servo_get_speed = function (_, generator) {
|
||||
generator.definitions_['import_pe_g1'] = 'import pe_g1';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var code = v + '.servo360(' + dropdown_pin + ')';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
30
boards/default_src/micropython/generators/pins.js
Normal file
30
boards/default_src/micropython/generators/pins.js
Normal file
@@ -0,0 +1,30 @@
|
||||
export const pins_digital = function (_, generator) {
|
||||
var code = this.getFieldValue('PIN');
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const pins_button = pins_digital;
|
||||
export const pins_digital_pin = pins_digital;
|
||||
export const pins_analog_pin = pins_digital;
|
||||
export const pins_analog = pins_digital;
|
||||
export const pins_pwm_pin = pins_digital;
|
||||
export const pins_pwm = pins_digital;
|
||||
export const pins_dac_pin = pins_digital;
|
||||
export const pins_dac = pins_digital;
|
||||
export const pins_touch_pin = pins_digital;
|
||||
export const pins_touch = pins_digital;
|
||||
export const espnow_channel = pins_digital;
|
||||
export const pins_interrupt = pins_digital;
|
||||
export const pins_serial = pins_digital;
|
||||
export const pins_builtinimg = pins_digital;
|
||||
export const pins_imglist = pins_digital;
|
||||
export const pins_playlist = pins_digital;
|
||||
export const pins_axis = pins_digital;
|
||||
export const pins_exlcdh = pins_digital;
|
||||
export const pins_exlcdv = pins_digital;
|
||||
export const pins_brightness = pins_digital;
|
||||
export const pins_tone_notes = pins_digital;
|
||||
export const pins_radio_power = pins_digital;
|
||||
export const pins_radio_datarate = pins_digital;
|
||||
export const pins_one_more = pins_digital;
|
||||
export const pins_digital_dot = pins_digital;
|
||||
405
boards/default_src/micropython/generators/sensor.js
Normal file
405
boards/default_src/micropython/generators/sensor.js
Normal file
@@ -0,0 +1,405 @@
|
||||
import { sensor_LTR308 } from './sensor_onboard';
|
||||
|
||||
export const sensor_mixgo_button_is_pressed = function (_, generator) {
|
||||
generator.definitions_['import_mixgo'] = 'import mixgo';
|
||||
var btn = generator.valueToCode(this, 'btn', generator.ORDER_ATOMIC);
|
||||
var code = 'mixgo.' + btn + '.is_pressed()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
//ok
|
||||
export const sensor_mixgo_button_was_pressed = function (_, generator) {
|
||||
generator.definitions_['import_mixgo'] = 'import mixgo';
|
||||
var btn = generator.valueToCode(this, 'btn', generator.ORDER_ATOMIC);
|
||||
var code = 'mixgo.' + btn + '.was_pressed()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_mixgo_button_get_presses = function (_, generator) {
|
||||
generator.definitions_['import_mixgo'] = 'import mixgo';
|
||||
var btn = generator.valueToCode(this, 'btn', generator.ORDER_ATOMIC);
|
||||
var argument = generator.valueToCode(this, 'VAR', generator.ORDER_ASSIGNMENT) || '0';
|
||||
var code = 'mixgo.' + btn + '.get_presses(' + argument + ')';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_mixgo_button_attachInterrupt = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
generator.definitions_['import_mixgo'] = 'import mixgo';
|
||||
var dropdown_btn = generator.valueToCode(this, 'btn', generator.ORDER_ATOMIC);
|
||||
var dropdown_mode = this.getFieldValue('mode');
|
||||
var atta = generator.valueToCode(this, 'DO', generator.ORDER_ATOMIC);
|
||||
var code = 'mixgo.' + dropdown_btn + '.irq' + '(handler = ' + atta + ', trigger = ' + dropdown_mode + ')\n'
|
||||
return code;
|
||||
}
|
||||
|
||||
//ok
|
||||
export const sensor_mixgo_extern_button_is_pressed = function (_, generator) {
|
||||
generator.definitions_['import_mixgo'] = 'import mixgo';
|
||||
var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var dropdown_stat = generator.valueToCode(this, 'STAT', generator.ORDER_ATOMIC);
|
||||
var code = 'mixgo.Button(' + pin + ').is_pressed(' + dropdown_stat + ')';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
//ok
|
||||
export const sensor_mixgo_extern_button_was_pressed = function (_, generator) {
|
||||
generator.definitions_['import_mixgo'] = 'import mixgo';
|
||||
var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var dropdown_stat = generator.valueToCode(this, 'STAT', generator.ORDER_ATOMIC);
|
||||
var code = 'mixgo.Button(' + pin + ').was_pressed(' + dropdown_stat + ')';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_mixgo_extern_button_get_presses = function (_, generator) {
|
||||
generator.definitions_['import_mixgo'] = 'import mixgo';
|
||||
var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var argument = generator.valueToCode(this, 'VAR', generator.ORDER_ASSIGNMENT) || '0';
|
||||
var code = 'mixgo.Button(' + pin + ').get_presses(' + argument + ')';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_mixgo_extern_button_attachInterrupt = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
generator.definitions_['import_mixgo'] = 'import mixgo';
|
||||
var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var dropdown_mode = this.getFieldValue('mode');
|
||||
var atta = generator.valueToCode(this, 'DO', generator.ORDER_ATOMIC);
|
||||
var code = 'mixgo.Button(' + pin + ').irq' + '(handler = ' + atta + ', trigger = ' + dropdown_mode + ')\n'
|
||||
return code;
|
||||
}
|
||||
|
||||
//ok
|
||||
export const sensor_mpu9250_attachGestureInterrupt = function (_, generator) {
|
||||
generator.definitions_['import_mpu9250'] = 'import mpu9250';
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var gesture = this.getFieldValue('gesture');
|
||||
var branch = generator.statementToCode(this, 'DO');
|
||||
var d = branch || generator.PASS;
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
if (v == "mpu")
|
||||
generator.definitions_['import_mixgo_mpu'] = 'from mixgo import mpu';
|
||||
var code = 'if ' + v + '.mpu9250_is_gesture("' + gesture + '"):\n' + d;
|
||||
return code;
|
||||
}
|
||||
|
||||
export const sensor_mpu9250_gesture = function (_, generator) {
|
||||
generator.definitions_['import_mpu9250'] = 'import mpu9250';
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var gesture = this.getFieldValue('gesture');
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
if (v == "mpu")
|
||||
generator.definitions_['import_mixgo_mpu'] = 'from mixgo import mpu';
|
||||
var code = v + '.mpu9250_is_gesture("' + gesture + '")';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
//ok
|
||||
export const sensor_mpu9250_get_acceleration = function (_, generator) {
|
||||
generator.definitions_['import_mpu9250'] = 'import mpu9250';
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var key = this.getFieldValue('key');
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
if (v == "mpu")
|
||||
generator.definitions_['import_mixgo_mpu'] = 'from mixgo import mpu';
|
||||
var code = v + '.mpu9250_get_' + key + '()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_adxl345_get_acceleration = function (_, generator) {
|
||||
generator.definitions_['import_adxl345'] = 'import adxl345';
|
||||
// generator.definitions_['import_machine'] = 'import machine';
|
||||
var key = this.getFieldValue('key');
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var code;
|
||||
if (key == 'x') {
|
||||
code = v + '.readX()';
|
||||
} else if (key == 'y') {
|
||||
code = v + '.readY()';
|
||||
} else if (key == 'z') {
|
||||
code = v + '.readZ()';
|
||||
} else if (key == 'values') {
|
||||
code = v + '.readXYZ()';
|
||||
}
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_mpu9250_get_magnetic = function (_, generator) {
|
||||
generator.definitions_['import_mpu9250'] = 'import mpu9250';
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var key = this.getFieldValue('key');
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
if (v == "mpu")
|
||||
generator.definitions_['import_mixgo_mpu'] = 'from mixgo import mpu';
|
||||
var code = v + '.mpu9250_magnetic_' + key + '()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_mpu9250_get_gyro = function (_, generator) {
|
||||
generator.definitions_['import_mpu9250'] = 'import mpu9250';
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var key = this.getFieldValue('key');
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
if (v == "mpu")
|
||||
generator.definitions_['import_mixgo_mpu'] = 'from mixgo import mpu';
|
||||
var code = v + '.mpu9250_gyro_' + key + '()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_mpu9250_calibrate_compass = function (_, generator) {
|
||||
generator.definitions_['import_mpu9250'] = 'import mpu9250';
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
generator.definitions_['import_mixgo_compass'] = 'from mixgo import compass';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
return '' + v + '.calibrate()\n';
|
||||
}
|
||||
|
||||
export const sensor_mpu9250_temperature = function (_, generator) {
|
||||
generator.definitions_['import_mpu9250'] = 'import mpu9250';
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
if (v == "mpu")
|
||||
generator.definitions_['import_mixgo_mpu'] = 'from mixgo import mpu';
|
||||
return [v + '.mpu9250_get_temperature()', generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_mpu9250_field_strength = function (_, generator) {
|
||||
generator.definitions_['import_mpu9250'] = 'import mpu9250';
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
if (v == "compass")
|
||||
generator.definitions_['import_mixgo_compass'] = 'from mixgo import compass';
|
||||
var compass = this.getFieldValue('compass');
|
||||
var a;
|
||||
if (compass == 'strength') {
|
||||
a = v + '.get_field_strength()';
|
||||
}
|
||||
else if (compass == 'heading') {
|
||||
a = v + '.heading()';
|
||||
}
|
||||
return [a, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_distance_hrsc04 = function (_, generator) {
|
||||
generator.definitions_['import_mixgo'] = 'import mixgo';
|
||||
generator.setups_['class_hrsc04'] =
|
||||
'class HCSR04:\n' +
|
||||
' def __init__(self, tpin=pin15, epin=pin14, spin=pin13):\n' +
|
||||
' self.trigger_pin = tpin\n' +
|
||||
' self.echo_pin = epin\n' +
|
||||
' self.sclk_pin = spin\n' +
|
||||
'\n' +
|
||||
' def distance_mm(self):\n' +
|
||||
' spi.init(baudrate=125000, sclk=self.sclk_pin,\n' +
|
||||
' mosi=self.trigger_pin, miso=self.echo_pin)\n' +
|
||||
' pre = 0\n' +
|
||||
' post = 0\n' +
|
||||
' k = -1\n' +
|
||||
' length = 500\n' +
|
||||
' resp = bytearray(length)\n' +
|
||||
' resp[0] = 0xFF\n' +
|
||||
' spi.write_readinto(resp, resp)\n' +
|
||||
' # find first non zero value\n' +
|
||||
' try:\n' +
|
||||
' i, value = next((ind, v) for ind, v in enumerate(resp) if v)\n' +
|
||||
' except StopIteration:\n' +
|
||||
' i = -1\n' +
|
||||
' if i > 0:\n' +
|
||||
' pre = bin(value).count("1")\n' +
|
||||
' # find first non full high value afterwards\n' +
|
||||
' try:\n' +
|
||||
' k, value = next((ind, v)\n' +
|
||||
' for ind, v in enumerate(resp[i:length - 2]) if resp[i + ind + 1] == 0)\n' +
|
||||
' post = bin(value).count("1") if k else 0\n' +
|
||||
' k = k + i\n' +
|
||||
' except StopIteration:\n' +
|
||||
' i = -1\n' +
|
||||
' dist= -1 if i < 0 else round((pre + (k - i) * 8. + post) * 8 * 0.172)\n' +
|
||||
' return dist\n' +
|
||||
'\n' +
|
||||
'sonar=HCSR04()\n'
|
||||
return ['sonar.distance_mm()/10.0', generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const RTC_get_time = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
if (v == "rtc")
|
||||
generator.definitions_['import_mixgo_rtc'] = 'from mixgo import rtc';
|
||||
var code = v + '.datetime()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const RTC_set_time = function (_, generator) {
|
||||
generator.definitions_['import_mixgo'] = 'import mixgo';
|
||||
var hour = generator.valueToCode(this, "hour", generator.ORDER_ASSIGNMENT);
|
||||
var minute = generator.valueToCode(this, "minute", generator.ORDER_ASSIGNMENT);
|
||||
var second = generator.valueToCode(this, "second", generator.ORDER_ASSIGNMENT);
|
||||
generator.setups_['class_DS1307'] = generator.CLASS_DS1307_INIT;
|
||||
var code = 'str(ds.Hour(' + hour + '))+ str(ds.Minute(' + minute + ')) +str(ds.Second(' + second + '))\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const RTC_set_date = function (_, generator) {
|
||||
generator.definitions_['import_mixgo'] = 'import mixgo';
|
||||
var year = generator.valueToCode(this, "year", generator.ORDER_ASSIGNMENT);
|
||||
var month = generator.valueToCode(this, "month", generator.ORDER_ASSIGNMENT);
|
||||
var day = generator.valueToCode(this, "day", generator.ORDER_ASSIGNMENT);
|
||||
generator.setups_['class_DS1307'] = generator.CLASS_DS1307_INIT;
|
||||
var code = 'str(ds.Year(' + year + '))+ str(ds.Month(' + month + ')) +str(ds.Day(' + day + '))\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const sensor_compass_reset = function (block, generator) {
|
||||
generator.definitions_['import_mpu9250'] = 'import mpu9250';
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
generator.definitions_['import_mixgo_compass'] = 'from mixgo import compass';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
return '' + v + '.reset_calibrate()\n';
|
||||
}
|
||||
|
||||
export const HCSR04 = function (_, generator) {
|
||||
generator.definitions_['import_sonar'] = 'import sonar';
|
||||
var dropdown_pin1 = generator.valueToCode(this, "PIN1", generator.ORDER_ASSIGNMENT);
|
||||
var dropdown_pin2 = generator.valueToCode(this, "PIN2", generator.ORDER_ASSIGNMENT);
|
||||
var code = 'sonar.Sonar(' + dropdown_pin1 + ', ' + dropdown_pin2 + ').checkdist()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_dht11 = function (_, generator) {
|
||||
generator.definitions_['import_dhtx'] = 'import dhtx';
|
||||
var sensor_type = this.getFieldValue('TYPE');
|
||||
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var what = this.getFieldValue('WHAT');
|
||||
var code = 'dhtx.get_dht_' + what + "('" + sensor_type + "', " + dropdown_pin + ')';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_mixgo_extern_light = function (_, generator) {
|
||||
generator.definitions_['import_mixgo'] = 'import mixgo';
|
||||
var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var code = 'mixgo.get_brightness(' + pin + ')';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_mixgo_extern_sound = function (_, generator) {
|
||||
generator.definitions_['import_mixgo'] = 'import mixgo';
|
||||
var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var code = 'mixgo.get_soundlevel(' + pin + ')';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const number1 = function (_, generator) {
|
||||
generator.definitions_['import_mixgo'] = 'import mixgo';
|
||||
var code = this.getFieldValue('op');
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_mixgo_pin_pressed = function (_, generator) {
|
||||
generator.definitions_['import_mixgo'] = 'import mixgo';
|
||||
var pin = generator.valueToCode(this, 'button', generator.ORDER_ATOMIC);
|
||||
var code = 'mixgo.' + pin + '.is_touched()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_mixgo_extern_pin_near = function (_, generator) {
|
||||
generator.definitions_['import_mixgo'] = 'import mixgo';
|
||||
var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var code = 'mixgo.' + 'Infrared(' + pin + ')()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_mixgo_pin_near = function (_, generator) {
|
||||
generator.definitions_['import_mixgo'] = 'import mixgo';
|
||||
var direction = this.getFieldValue('direction');
|
||||
var code = 'mixgo.' + 'infrared_' + direction + '()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const RTC_set_datetime = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var year = generator.valueToCode(this, "year", generator.ORDER_ASSIGNMENT);
|
||||
var month = generator.valueToCode(this, "month", generator.ORDER_ASSIGNMENT);
|
||||
var day = generator.valueToCode(this, "day", generator.ORDER_ASSIGNMENT);
|
||||
var hour = generator.valueToCode(this, "hour", generator.ORDER_ASSIGNMENT);
|
||||
var minute = generator.valueToCode(this, "minute", generator.ORDER_ASSIGNMENT);
|
||||
var second = generator.valueToCode(this, "second", generator.ORDER_ASSIGNMENT);
|
||||
var week = generator.valueToCode(this, "weekday", generator.ORDER_ASSIGNMENT);
|
||||
var millisecond = generator.valueToCode(this, "millisecond", generator.ORDER_ASSIGNMENT);
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
if (v == "rtc")
|
||||
generator.definitions_['import_mixgo_rtc'] = 'from mixgo import rtc';
|
||||
var code = v + '.datetime((' + year + ',' + month + ',' + day + ',' + week + ',' + hour + ',' + minute + ',' + second + ',' + millisecond + '))\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const sensor_rtc_init = function (_, generator) {
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var code = v + ' = machine.RTC()\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const sensor_use_i2c_init = function (_, generator) {
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var iv = generator.valueToCode(this, 'I2CSUB', generator.ORDER_ATOMIC);
|
||||
var key = this.getFieldValue('key');
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var code;
|
||||
if (key == 'MPU9250') {
|
||||
generator.definitions_['import_mpu9250'] = 'import mpu9250';
|
||||
code = v + ' = mpu9250.' + key + "(" + iv + ')\n';
|
||||
} else if (key == 'BMP280') {
|
||||
generator.definitions_['import_bmp280'] = 'import bmp280';
|
||||
code = v + ' = bmp280.' + key + "(" + iv + ')\n';
|
||||
} else if (key == 'SHT20') {
|
||||
generator.definitions_['import_sht20'] = 'import sht20';
|
||||
code = v + ' = sht20.' + key + "(" + iv + ')\n';
|
||||
} else if (key == 'ADXL345') {
|
||||
generator.definitions_['import_adxl345'] = 'import adxl345';
|
||||
code = v + ' = adxl345.' + key + "(" + iv + ')\n';
|
||||
}
|
||||
return code;
|
||||
}
|
||||
|
||||
export const sensor_bmp = function (_, generator) {
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var key = this.getFieldValue('key');
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
generator.definitions_['import_bmp280'] = 'import bmp280';
|
||||
var code = v + '.' + key;
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_sht = function (_, generator) {
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var key = this.getFieldValue('key');
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
generator.definitions_['import_sht20'] = 'import sht20';
|
||||
var code = v + '.' + key;
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_ds18x20 = function (_, generator) {
|
||||
generator.definitions_['import_ds18x20x'] = 'import ds18x20x';
|
||||
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var code = 'ds18x20x.get_ds18x20_temperature(' + dropdown_pin + ')';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_lm35 = function (_, generator) {
|
||||
generator.definitions_['import_lm35'] = 'import lm35';
|
||||
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var code = 'lm35.get_LM35_temperature(' + dropdown_pin + ')';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_button_is_pressed = sensor_mixgo_button_is_pressed;
|
||||
export const sensor_button_was_pressed = sensor_mixgo_button_was_pressed;
|
||||
export const sensor_button_get_presses = sensor_mixgo_button_get_presses;
|
||||
export const sensor_pin_pressed = sensor_mixgo_pin_pressed;
|
||||
export const sensor_pin_near = sensor_mixgo_pin_near;
|
||||
export const sensor_mixgo_light = sensor_LTR308;
|
||||
export const sensor_light = sensor_mixgo_light;
|
||||
// export const sensor_get_acceleration = sensor_mixgo_get_acceleration;
|
||||
export const dht11 = sensor_dht11;
|
||||
845
boards/default_src/micropython/generators/sensor_extern.js
Normal file
845
boards/default_src/micropython/generators/sensor_extern.js
Normal file
@@ -0,0 +1,845 @@
|
||||
import { Boards } from 'mixly';
|
||||
|
||||
export const sensor_mixgo_extern_button_is_pressed = function (_, generator) {
|
||||
generator.definitions_['import_mixgo'] = 'import mixgo';
|
||||
var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var dropdown_stat = generator.valueToCode(this, 'STAT', generator.ORDER_ATOMIC);
|
||||
var code = 'mixgo.Button(' + pin + ').is_pressed(' + dropdown_stat + ')';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
//ok
|
||||
export const sensor_mixgo_extern_button_was_pressed = function (_, generator) {
|
||||
generator.definitions_['import_mixgo'] = 'import mixgo';
|
||||
var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var dropdown_stat = generator.valueToCode(this, 'STAT', generator.ORDER_ATOMIC);
|
||||
var code = 'mixgo.Button(' + pin + ').was_pressed(' + dropdown_stat + ')';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_mixgo_extern_button_get_presses = function (_, generator) {
|
||||
generator.definitions_['import_mixgo'] = 'import mixgo';
|
||||
var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var argument = generator.valueToCode(this, 'VAR', generator.ORDER_ASSIGNMENT) || '0';
|
||||
var code = 'mixgo.Button(' + pin + ').get_presses(' + argument + ')';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_mixgo_extern_button_attachInterrupt = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
generator.definitions_['import_mixgo'] = 'import mixgo';
|
||||
var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var dropdown_mode = this.getFieldValue('mode');
|
||||
var atta = generator.valueToCode(this, 'DO', generator.ORDER_ATOMIC);
|
||||
var code = 'mixgo.Button(' + pin + ').irq' + '(handler = ' + atta + ', trigger = ' + dropdown_mode + ')\n'
|
||||
return code;
|
||||
}
|
||||
|
||||
export const sensor_mpu9250_attachGestureInterrupt = function (_, generator) {
|
||||
generator.definitions_['import_mpu9250'] = 'import mpu9250';
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var gesture = this.getFieldValue('gesture');
|
||||
var branch = generator.statementToCode(this, 'DO');
|
||||
var d = branch || generator.PASS;
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
if (v == "mpu")
|
||||
generator.definitions_['import_mixgo_mpu'] = 'from mixgo import mpu';
|
||||
var code = 'if ' + v + '.mpu9250_is_gesture("' + gesture + '"):\n' + d;
|
||||
return code;
|
||||
}
|
||||
|
||||
export const sensor_distance_hrsc04 = function (_, generator) {
|
||||
generator.definitions_['import_mixgo'] = 'import mixgo';
|
||||
generator.setups_['class_hrsc04'] =
|
||||
'class HCSR04:\n' +
|
||||
' def __init__(self, tpin=pin15, epin=pin14, spin=pin13):\n' +
|
||||
' self.trigger_pin = tpin\n' +
|
||||
' self.echo_pin = epin\n' +
|
||||
' self.sclk_pin = spin\n' +
|
||||
'\n' +
|
||||
' def distance_mm(self):\n' +
|
||||
' spi.init(baudrate=125000, sclk=self.sclk_pin,\n' +
|
||||
' mosi=self.trigger_pin, miso=self.echo_pin)\n' +
|
||||
' pre = 0\n' +
|
||||
' post = 0\n' +
|
||||
' k = -1\n' +
|
||||
' length = 500\n' +
|
||||
' resp = bytearray(length)\n' +
|
||||
' resp[0] = 0xFF\n' +
|
||||
' spi.write_readinto(resp, resp)\n' +
|
||||
' # find first non zero value\n' +
|
||||
' try:\n' +
|
||||
' i, value = next((ind, v) for ind, v in enumerate(resp) if v)\n' +
|
||||
' except StopIteration:\n' +
|
||||
' i = -1\n' +
|
||||
' if i > 0:\n' +
|
||||
' pre = bin(value).count("1")\n' +
|
||||
' # find first non full high value afterwards\n' +
|
||||
' try:\n' +
|
||||
' k, value = next((ind, v)\n' +
|
||||
' for ind, v in enumerate(resp[i:length - 2]) if resp[i + ind + 1] == 0)\n' +
|
||||
' post = bin(value).count("1") if k else 0\n' +
|
||||
' k = k + i\n' +
|
||||
' except StopIteration:\n' +
|
||||
' i = -1\n' +
|
||||
' dist= -1 if i < 0 else round((pre + (k - i) * 8. + post) * 8 * 0.172)\n' +
|
||||
' return dist\n' +
|
||||
'\n' +
|
||||
'sonar=HCSR04()\n'
|
||||
return ['sonar.distance_mm()/10.0', generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const RTC_set_time = function (_, generator) {
|
||||
generator.definitions_['import_mixgo'] = 'import mixgo';
|
||||
var hour = generator.valueToCode(this, "hour", generator.ORDER_ASSIGNMENT);
|
||||
var minute = generator.valueToCode(this, "minute", generator.ORDER_ASSIGNMENT);
|
||||
var second = generator.valueToCode(this, "second", generator.ORDER_ASSIGNMENT);
|
||||
generator.setups_['class_DS1307'] = generator.CLASS_DS1307_INIT;
|
||||
var code = 'str(ds.Hour(' + hour + '))+ str(ds.Minute(' + minute + ')) +str(ds.Second(' + second + '))\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const RTC_set_date = function (_, generator) {
|
||||
generator.definitions_['import_mixgo'] = 'import mixgo';
|
||||
var year = generator.valueToCode(this, "year", generator.ORDER_ASSIGNMENT);
|
||||
var month = generator.valueToCode(this, "month", generator.ORDER_ASSIGNMENT);
|
||||
var day = generator.valueToCode(this, "day", generator.ORDER_ASSIGNMENT);
|
||||
generator.setups_['class_DS1307'] = generator.CLASS_DS1307_INIT;
|
||||
var code = 'str(ds.Year(' + year + '))+ str(ds.Month(' + month + ')) +str(ds.Day(' + day + '))\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const sensor_mixgo_extern_light = function (_, generator) {
|
||||
generator.definitions_['import_mixgo'] = 'import mixgo';
|
||||
var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var code = 'mixgo.get_brightness(' + pin + ')';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_mixgo_extern_sound = function (_, generator) {
|
||||
generator.definitions_['import_mixgo'] = 'import mixgo';
|
||||
var pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var code = 'mixgo.get_soundlevel(' + pin + ')';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_mixgo_extern_pin_near = function (_, generator) {
|
||||
generator.definitions_['import_mixgo'] = 'import mixgo';
|
||||
var direction = this.getFieldValue('direction');
|
||||
var code = 'mixgo.' + 'infrared_' + direction + '.near()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_rtc_init = function (_, generator) {
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var code = v + ' = machine.RTC()\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const sensor_bmp = function (_, generator) {
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var key = this.getFieldValue('key');
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
generator.definitions_['import_bmp280'] = 'import bmp280';
|
||||
var code = v + '.' + key;
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_sht = function (_, generator) {
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var key = this.getFieldValue('key');
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
generator.definitions_['import_sht20'] = 'import sht20';
|
||||
var code = v + '.' + key;
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
//pe
|
||||
export const sensor_use_i2c_init = function (_, generator) {
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var iv = generator.valueToCode(this, 'I2CSUB', generator.ORDER_ATOMIC);
|
||||
var key = this.getFieldValue('key');
|
||||
var code;
|
||||
if (key == 'MPU9250') {
|
||||
generator.definitions_['import_mpu9250'] = 'import mpu9250';
|
||||
code = v + ' = mpu9250.' + key + "(" + iv + ')\n';
|
||||
} else if (key == 'BMP280') {
|
||||
generator.definitions_['import_bmp280'] = 'import bmp280';
|
||||
code = v + ' = bmp280.' + key + "(" + iv + ')\n';
|
||||
} else if (key == 'SHT20') {
|
||||
generator.definitions_['import_sht20'] = 'import sht20';
|
||||
code = v + ' = sht20.' + key + "(" + iv + ')\n';
|
||||
} else if (key == 'ADXL345') {
|
||||
generator.definitions_['import_adxl345'] = 'import adxl345';
|
||||
code = v + ' = adxl345.' + key + "(" + iv + ')\n';
|
||||
} else if (key == 'LTR308') {
|
||||
generator.definitions_['import_ltr308al'] = 'import ltr308al';
|
||||
code = v + ' = ltr308al.LTR_308ALS(' + iv + ')\n';
|
||||
} else if (key == 'LTR381RGB') {
|
||||
generator.definitions_['import_ltr381rgb'] = 'import ltr381rgb';
|
||||
code = v + ' = ltr381rgb.LTR_381RGB(' + iv + ')\n';
|
||||
} else if (key == 'HP203X') {
|
||||
generator.definitions_['import_hp203x'] = 'import hp203x';
|
||||
code = v + ' = hp203x.HP203X(' + iv + ')\n';
|
||||
} else if (key == 'SHTC3') {
|
||||
generator.definitions_['import_shtc3'] = 'import shtc3';
|
||||
code = v + ' = shtc3.' + key + "(" + iv + ')\n';
|
||||
} else if (key == 'AHT21') {
|
||||
generator.definitions_['import_ahtx0'] = 'import ahtx0';
|
||||
code = v + ' = ahtx0.AHTx0(' + iv + ')\n';
|
||||
} else if (key == 'VL53L0X') {
|
||||
generator.definitions_['import_vl53l0x'] = 'import vl53l0x';
|
||||
code = v + ' = vl53l0x.' + key + "(" + iv + ')\n';
|
||||
} else if (key == 'QMC5883L') {
|
||||
generator.definitions_['import_qmc5883l'] = 'import qmc5883l';
|
||||
code = v + ' = qmc5883l.Compass(' + iv + ')\n';
|
||||
} else if (key == 'MAX30102') {
|
||||
generator.definitions_['import_max30102'] = 'import max30102';
|
||||
code = v + ' = max30102.MAX30102(' + iv + ')\n';
|
||||
} else if (key == 'APDS9960') {
|
||||
generator.definitions_['import_apds9960'] = 'import apds9960';
|
||||
code = v + ' = apds9960.APDS9960(' + iv + ')\n';
|
||||
} else if (key == 'RFID') {
|
||||
generator.definitions_['import_rc522'] = 'import rc522';
|
||||
code = v + ' = rc522.RC522(' + iv + ')\n';
|
||||
}
|
||||
return code;
|
||||
}
|
||||
|
||||
export const sensor_MAX30102_extern = function (_, generator) {
|
||||
generator.definitions_['import_max30102'] = 'import max30102';
|
||||
var key = this.getFieldValue('key');
|
||||
var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var code = sub + '.heartrate()' + key;
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_APDS9960_extern = function (_, generator) {
|
||||
generator.definitions_['import_apds9960'] = 'import apds9960';
|
||||
var key = this.getFieldValue('key');
|
||||
var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var code = sub + '.' + key + '()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_LTR308_extern = function (_, generator) {
|
||||
generator.definitions_['import_ltr308al'] = 'import ltr308al';
|
||||
var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var code = sub + '.getdata()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_hp203_extern = function (_, generator) {
|
||||
var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var key = this.getFieldValue('key');
|
||||
generator.definitions_['import_hp203x'] = 'import hp203x';
|
||||
var code = sub + '.' + key;
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_ltr381_extern = function (_, generator) {
|
||||
var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var key = this.getFieldValue('key');
|
||||
generator.definitions_['import_ltr381rgb'] = 'import ltr381rgb';
|
||||
var code = sub + '.getdata()' + key;
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_LTR390UV_extern = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
generator.definitions_['import_time'] = 'import time';
|
||||
generator.definitions_['import_ltr390uv'] = 'import ltr390uv';
|
||||
var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var key = this.getFieldValue('key');
|
||||
if (key == 'E') {
|
||||
var code = sub + '.ambient_light()';
|
||||
} else {
|
||||
var code = sub + '.ultraviolet()';
|
||||
}
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_QMC5883L_extern = function (_, generator) {
|
||||
var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var key = this.getFieldValue('key');
|
||||
generator.definitions_['import_qmc5883l'] = 'import qmc5883l';
|
||||
var code = sub + '.' + key;
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_shtc3_extern = function (_, generator) {
|
||||
var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var key = this.getFieldValue('key');
|
||||
generator.definitions_['import_shtc3'] = 'import shtc3';
|
||||
var code = sub + '.' + key + '()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_aht11_extern = function (_, generator) {
|
||||
var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var key = this.getFieldValue('key');
|
||||
generator.definitions_['import_ahtx0'] = 'import ahtx0';
|
||||
var code = sub + '.' + key + '()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_VL530LX_extern = function (_, generator) {
|
||||
var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
generator.definitions_['import_vl53l0x'] = 'import vl53l0x';
|
||||
var code = sub + '.read()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_use_spi_init = function (_, generator) {
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var sv = generator.valueToCode(this, 'SPISUB', generator.ORDER_ATOMIC);
|
||||
var pv = generator.valueToCode(this, 'PINSUB', generator.ORDER_ATOMIC);
|
||||
var key = this.getFieldValue('key');
|
||||
var code;
|
||||
if (key == 'RFID') {
|
||||
generator.definitions_['import_rc522'] = 'import rc522';
|
||||
var code = v + ' = rc522.RC522(' + sv + ',' + pv + ')\n';
|
||||
} else if (key == 'Weather') {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
generator.definitions_['import_' + version] = 'import ' + version;
|
||||
generator.definitions_['import_ws_lora'] = 'import ws_lora';
|
||||
if (version == 'mixgo_pe') {
|
||||
var code = v + ' = ws_lora.Weather(' + sv + ',' + pv + ')\n';
|
||||
} else if (version == 'mixgo_nova') {
|
||||
var code = v + ' = ws_lora.Weather(' + sv + ',' + pv + ',' + version + '.onboard_i2c_soft' + ')\n';
|
||||
} else {
|
||||
var code = v + ' = ws_lora.Weather(' + sv + ',' + pv + ',' + version + '.onboard_i2c' + ')\n';
|
||||
}
|
||||
}
|
||||
return code;
|
||||
}
|
||||
|
||||
export const extern_rfid_read = function (_, generator) {
|
||||
var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var sector = generator.valueToCode(this, 'SECTOR', generator.ORDER_ATOMIC);
|
||||
var key = this.getFieldValue('key');
|
||||
generator.definitions_['import_rc522'] = 'import rc522';
|
||||
var code = sub + '.read_card(' + sector + ',"' + key + '")';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const extern_rfid_readid = function (_, generator) {
|
||||
var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
generator.definitions_['import_rc522'] = 'import rc522';
|
||||
var code = sub + '.read_card(0, x="id")';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const extern_rfid_readcontent = function (_, generator) {
|
||||
var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var sector = generator.valueToCode(this, 'SECTOR', generator.ORDER_ATOMIC);
|
||||
generator.definitions_['import_rc522'] = 'import rc522';
|
||||
var code = sub + '.read_card(' + sector + ')';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const extern_rfid_write = function (_, generator) {
|
||||
var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var sector = generator.valueToCode(this, 'SECTOR', generator.ORDER_ATOMIC);
|
||||
var cnt = generator.valueToCode(this, 'CONTENT', generator.ORDER_ATOMIC);
|
||||
generator.definitions_['import_rc522'] = 'import rc522';
|
||||
var code = sub + '.write_card(' + cnt + ',' + sector + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const extern_rfid_write_return = function (_, generator) {
|
||||
var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var sector = generator.valueToCode(this, 'SECTOR', generator.ORDER_ATOMIC);
|
||||
var cnt = generator.valueToCode(this, 'CONTENT', generator.ORDER_ATOMIC);
|
||||
generator.definitions_['import_rc522'] = 'import rc522';
|
||||
var code = sub + '.write_card(' + cnt + ',' + sector + ')';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const extern_rfid_status = function (_, generator) {
|
||||
var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var key = this.getFieldValue('key');
|
||||
generator.definitions_['import_rc522'] = 'import rc522';
|
||||
var code = sub + '.scan_card()==' + key;
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const weather_data = function (_, generator) {
|
||||
var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var key = this.getFieldValue('key');
|
||||
generator.definitions_['import_ws_lora'] = 'import ws_lora';
|
||||
var code = sub + '.' + key;
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const weather_have_data = function (_, generator) {
|
||||
var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
generator.definitions_['import_ws_lora'] = 'import ws_lora';
|
||||
var code = sub + '.any()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const weather_uart_mixio = function (_, generator) {
|
||||
var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var base = generator.valueToCode(this, 'BASE', generator.ORDER_ATOMIC);
|
||||
generator.definitions_['import_ws_lora'] = 'import ws_lora';
|
||||
var code = sub + '.uart_mixio(topic=' + base + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const weather_set_label = function (_, generator) {
|
||||
var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
generator.definitions_['import_ws_lora'] = 'import ws_lora';
|
||||
var code = new Array(this.itemCount_);
|
||||
var default_value = '0';
|
||||
for (var n = 0; n < this.itemCount_; n++) {
|
||||
code[n] = generator.valueToCode(this, 'ADD' + n,
|
||||
generator.ORDER_NONE) || default_value;
|
||||
}
|
||||
var code = sub + '.label(' + code.join(', ') + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const sensor_mixgoce_hot_wheel_is_touched = function (_, generator) {
|
||||
var key = this.getFieldValue('key');
|
||||
var stat = this.getFieldValue('stat');
|
||||
generator.definitions_['import_tpwheel'] = 'import tpwheel';
|
||||
var code = 'tpwheel.TouchPadWheels(' + key + ').' + stat;
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_mixgoce_hot_wheel_degrees = function (_, generator) {
|
||||
generator.definitions_['import_tpwheel'] = 'import tpwheel';
|
||||
var code = 'tpwheel.hot_wheels_degree()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const esp32_s2_weather_init = function (_, generator) {
|
||||
generator.definitions_['import_weather'] = 'import weather';
|
||||
generator.definitions_['import_board_*'] = 'from board import *';
|
||||
var wd = generator.valueToCode(this, 'wd', generator.ORDER_ATOMIC);
|
||||
var ws = generator.valueToCode(this, 'ws', generator.ORDER_ATOMIC);
|
||||
var rain = generator.valueToCode(this, 'rain', generator.ORDER_ATOMIC);
|
||||
var code = "wd = weather.Weather_wd(" + wd + ")\n"
|
||||
code += "ws = weather.Weather_ws(" + ws + ")\n"
|
||||
code += "rain = weather.Weather_rain(" + rain + ")\n"
|
||||
return code;
|
||||
}
|
||||
|
||||
export const esp32_s2_weather_wd = function (_, generator) {
|
||||
generator.definitions_['import_weather'] = 'import weather';
|
||||
var code = 'wd.wind_direction()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const esp32_s2_weather_rain = function (_, generator) {
|
||||
generator.definitions_['import_weather'] = 'import weather';
|
||||
var rain = generator.valueToCode(this, 'rain', generator.ORDER_ATOMIC);
|
||||
var code = 'rain.rain_count(time_Hour=' + rain + ')';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const esp32_s2_weather_ws = function (_, generator) {
|
||||
generator.definitions_['import_weather'] = 'import weather';
|
||||
var key = this.getFieldValue('key');
|
||||
if (key == 'ALL') {
|
||||
var code = 'ws.wind_speed()';
|
||||
} else {
|
||||
var code = 'ws.wind_speed()[' + key + ']';
|
||||
}
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const HCSR04 = function (_, generator) {
|
||||
generator.definitions_['import_sonar'] = 'import sonar';
|
||||
var dropdown_pin1 = generator.valueToCode(this, "PIN1", generator.ORDER_ASSIGNMENT);
|
||||
var dropdown_pin2 = generator.valueToCode(this, "PIN2", generator.ORDER_ASSIGNMENT);
|
||||
var code = 'sonar.Sonar(' + dropdown_pin1 + ',' + dropdown_pin2 + ').checkdist()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const PS2_init = function (_, generator) {
|
||||
generator.definitions_['import_ps2'] = 'import ps2';
|
||||
//generator.definitions_['import_board'] = 'import board';
|
||||
var PS2_CLK = this.getFieldValue('PS2_CLK');
|
||||
var PS2_DOU = this.getFieldValue('PS2_DOU');
|
||||
var PS2_DIN = this.getFieldValue('PS2_DIN');
|
||||
var PS2_CS = this.getFieldValue('PS2_CS');
|
||||
var code = 'mixgope_ps = ps2.PS2Controller(' + PS2_CLK + ',' + PS2_DOU + ',' + PS2_DIN + ',' + PS2_CS + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const PS2_vibration = function (_, generator) {
|
||||
generator.definitions_['import_ps2'] = 'import ps2';
|
||||
var ss = this.getFieldValue('smotorstate');
|
||||
var amp = generator.valueToCode(this, 'AMP', generator.ORDER_ATOMIC);
|
||||
var code = "mixgope_ps.PS2_vibration(" + ss + ',' + amp + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const PS2_Button = function (_, generator) {
|
||||
generator.definitions_['import_ps2'] = 'import ps2';
|
||||
var bt = this.getFieldValue('psbt');
|
||||
var code = "mixgope_ps.PS2_keydata()[0] & (ps2." + bt + ")";
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const PS2_Buttons = function (_, generator) {
|
||||
generator.definitions_['import_ps2'] = 'import ps2';
|
||||
var bt = this.getFieldValue('psbt');
|
||||
var code = "ps2." + bt;
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const PS2_State = function (_, generator) {
|
||||
generator.definitions_['import_ps2'] = 'import ps2';
|
||||
var bt = this.getFieldValue('btstate');
|
||||
var code = "mixgope_ps.PS2_keydata()[" + bt + "]";
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const PS2_stk = function (_, generator) {
|
||||
generator.definitions_['import_ps2'] = 'import ps2';
|
||||
var stk = this.getFieldValue('psstk');
|
||||
var code = "mixgope_ps.PS2_keydata()[1][" + stk + "]";
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const RTC_set_datetime = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var year = generator.valueToCode(this, "year", generator.ORDER_ASSIGNMENT);
|
||||
var month = generator.valueToCode(this, "month", generator.ORDER_ASSIGNMENT);
|
||||
var day = generator.valueToCode(this, "day", generator.ORDER_ASSIGNMENT);
|
||||
var hour = generator.valueToCode(this, "hour", generator.ORDER_ASSIGNMENT);
|
||||
var minute = generator.valueToCode(this, "minute", generator.ORDER_ASSIGNMENT);
|
||||
var second = generator.valueToCode(this, "second", generator.ORDER_ASSIGNMENT);
|
||||
var week = generator.valueToCode(this, "weekday", generator.ORDER_ASSIGNMENT);
|
||||
var millisecond = generator.valueToCode(this, "millisecond", generator.ORDER_ASSIGNMENT);
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
if (v == "rtc")
|
||||
generator.definitions_['import_mixgo_rtc'] = 'from mixgo import rtc';
|
||||
var code = v + '.datetime((' + year + ',' + month + ',' + day + ',' + week + ',' + hour + ',' + minute + ',' + second + ',' + millisecond + '))\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const RTC_get_time = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
if (v == "rtc")
|
||||
generator.definitions_['import_mixgo_rtc'] = 'from mixgo import rtc';
|
||||
var code = v + '.datetime()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_dht11 = function (_, generator) {
|
||||
generator.definitions_['import_dhtx'] = 'import dhtx';
|
||||
var sensor_type = this.getFieldValue('TYPE');
|
||||
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var what = this.getFieldValue('WHAT');
|
||||
var code = 'dhtx.' + sensor_type + "(" + dropdown_pin + ').' + what + '()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const PS2_init_new = function (_, generator) {
|
||||
generator.definitions_['import_ps2'] = 'import ps2';
|
||||
//generator.definitions_['import_board'] = 'import board';
|
||||
var PS2_CLK = generator.valueToCode(this, 'CLK', generator.ORDER_ATOMIC);
|
||||
var PS2_DOU = generator.valueToCode(this, 'DOU', generator.ORDER_ATOMIC);
|
||||
var PS2_DIN = generator.valueToCode(this, 'DIN', generator.ORDER_ATOMIC);
|
||||
var PS2_CS = generator.valueToCode(this, 'CS', generator.ORDER_ATOMIC);
|
||||
var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var code = sub + ' = ps2.PS2Controller(' + PS2_CLK + ',' + PS2_DOU + ',' + PS2_DIN + ',' + PS2_CS + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const PS2_vibration_new = function (_, generator) {
|
||||
generator.definitions_['import_ps2'] = 'import ps2';
|
||||
var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var ss = this.getFieldValue('smotorstate');
|
||||
var amp = generator.valueToCode(this, 'AMP', generator.ORDER_ATOMIC);
|
||||
var code = sub + ".vibration(" + ss + ',' + amp + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const PS2_Buttons_new = function (_, generator) {
|
||||
generator.definitions_['import_ps2'] = 'import ps2';
|
||||
var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var bt = this.getFieldValue('psbt');
|
||||
var code = sub + '.button(ps2.' + bt + ')';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const PS2_stk_new = function (_, generator) {
|
||||
generator.definitions_['import_ps2'] = 'import ps2';
|
||||
var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var stk = this.getFieldValue('psstk');
|
||||
var code = sub + ".analog(ps2.PSS_" + stk + ")";
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_use_uart_init = function (_, generator) {
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var key = this.getFieldValue('key');
|
||||
var s = this.getFieldValue('sensor');
|
||||
var code = ''
|
||||
if (s == 'PM') {
|
||||
generator.definitions_['import_pm2_5'] = 'import pm2_5';
|
||||
code = v + '=pm2_5.PM2_5(' + key + ')\n';
|
||||
} else if (s == 'GNSS') {
|
||||
generator.definitions_['import_gnss'] = 'import gnss';
|
||||
code = v + '=gnss.NMEA0183(' + key + ')\n';
|
||||
}
|
||||
return code;
|
||||
}
|
||||
|
||||
export const pm25_get_data = function (_, generator) {
|
||||
generator.definitions_['import_pm2_5'] = 'import pm2_5';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var pm = this.getFieldValue('pm');
|
||||
var code = v + ".concentration()" + pm;
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const gnss_get_data = function (_, generator) {
|
||||
var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var key = this.getFieldValue('key');
|
||||
generator.definitions_['import_gnss'] = 'import gnss';
|
||||
var code = sub + '.' + key;
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const gnss_have_data = function (_, generator) {
|
||||
var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
generator.definitions_['import_gnss'] = 'import gnss';
|
||||
var code = sub + '.any()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
//mixbot/feiyi extern below:
|
||||
export const robot_button_extern_get_value = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
var mode = this.getFieldValue('mode');
|
||||
var num = this.getFieldValue('num');
|
||||
if (version == 'mixbot') {
|
||||
generator.definitions_['import_mixbot_ext_ext_button'] = 'from mixbot_ext import ext_button';
|
||||
var code = 'ext_button.value(' + mode + ")" + num;
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
} else if (version == 'feiyi') {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
generator.definitions_['import_i2cdevice'] = 'import i2cdevice';
|
||||
if (mode == "0") {
|
||||
generator.definitions_['import_left_ext_i2c'] = 'ext_i2c_left = i2cdevice.I2C_device(scl = machine.Pin(0), sda = machine.Pin(1), freq = 10000)';
|
||||
generator.definitions_['import_left_button'] = 'ext_button_left = i2cdevice.Buttonx5(ext_i2c_left)';
|
||||
var code = 'ext_button_left.value()' + num;
|
||||
} else if (mode == "1") {
|
||||
generator.definitions_['import_right_ext_i2c'] = 'ext_i2c_right = i2cdevice.I2C_device(scl = machine.Pin(2), sda = machine.Pin(3), freq = 10000)';
|
||||
generator.definitions_['import_right_button'] = 'ext_button_right = i2cdevice.Buttonx5(ext_i2c_right)';
|
||||
var code = 'ext_button_right.value()' + num;
|
||||
}
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
}
|
||||
|
||||
export const robot_touch_extern_get_value = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
var mode = this.getFieldValue('mode');
|
||||
if (version == 'mixbot') {
|
||||
generator.definitions_['import_mixbot_ext_ext_collision'] = 'from mixbot_ext import ext_collision';
|
||||
var code = 'ext_collision.value(' + mode + ")";
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
} else if (version == 'feiyi') {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
generator.definitions_['import_i2cdevice'] = 'import i2cdevice';
|
||||
if (mode == "0") {
|
||||
generator.definitions_['import_left_ext_i2c'] = 'ext_i2c_left = i2cdevice.I2C_device(scl = machine.Pin(0), sda = machine.Pin(1), freq = 10000)';
|
||||
generator.definitions_['import_left_collision'] = 'ext_collision_left = i2cdevice.Button(ext_i2c_left)';
|
||||
var code = 'ext_collision_left.value()';
|
||||
} else if (mode == "1") {
|
||||
generator.definitions_['import_right_ext_i2c'] = 'ext_i2c_right = i2cdevice.I2C_device(scl = machine.Pin(2), sda = machine.Pin(3), freq = 10000)';
|
||||
generator.definitions_['import_right_collision'] = 'ext_collision_right = i2cdevice.Button(ext_i2c_right)';
|
||||
var code = 'ext_collision_right.value()';
|
||||
}
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
}
|
||||
|
||||
export const robot_infrared_extern_get_value = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
if (version == 'mixbot') {
|
||||
var mode = this.getFieldValue('mode');
|
||||
generator.definitions_['import_mixbot_ext_ext_infrared'] = 'from mixbot_ext import ext_infrared';
|
||||
var code = 'ext_infrared.value(' + mode + ")";
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
} else if (version == 'feiyi') {
|
||||
var mode = this.getFieldValue('mode');
|
||||
generator.definitions_['import_feiyi_onboard_bot51'] = 'from feiyi import onboard_bot51';
|
||||
var code = 'onboard_bot51.read_ps(' + mode + ")";
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
}
|
||||
|
||||
export const robot_infrared_extern_grey_get_value = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
var mode = this.getFieldValue('mode');
|
||||
if (version == 'feiyi') {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
generator.definitions_['import_i2cdevice'] = 'import i2cdevice';
|
||||
if (mode == "0") {
|
||||
generator.definitions_['import_left_ext_i2c'] = 'ext_i2c_left = i2cdevice.I2C_device(scl = machine.Pin(0), sda = machine.Pin(1), freq = 10000)';
|
||||
generator.definitions_['import_left_grey_near'] = 'ext_grey_near_left = i2cdevice.Infrared(ext_i2c_left)';
|
||||
var code = 'ext_grey_near_left.value()';
|
||||
} else if (mode == "1") {
|
||||
generator.definitions_['import_right_ext_i2c'] = 'ext_i2c_right = i2cdevice.I2C_device(scl = machine.Pin(2), sda = machine.Pin(3), freq = 10000)';
|
||||
generator.definitions_['import_right_grey_near'] = 'ext_grey_near_right = i2cdevice.Infrared(ext_i2c_right)';
|
||||
var code = 'ext_grey_near_right.value()';
|
||||
}
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
}
|
||||
|
||||
export const robot_potentiometer_extern_get_value = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
var mode = this.getFieldValue('mode');
|
||||
if (version == 'mixbot') {
|
||||
generator.definitions_['import_mixbot_ext_ext_potentiometer'] = 'from mixbot_ext import ext_potentiometer';
|
||||
var code = 'ext_potentiometer.value(' + mode + ")";
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
} else if (version == 'feiyi') {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
generator.definitions_['import_i2cdevice'] = 'import i2cdevice';
|
||||
if (mode == "0") {
|
||||
generator.definitions_['import_left_ext_i2c'] = 'ext_i2c_left = i2cdevice.I2C_device(scl = machine.Pin(0), sda = machine.Pin(1), freq = 10000)';
|
||||
generator.definitions_['import_left_potentiometer'] = 'ext_potentiometer_left = i2cdevice.Dimmer(ext_i2c_left)';
|
||||
var code = 'ext_potentiometer_left.value()';
|
||||
} else if (mode == "1") {
|
||||
generator.definitions_['import_right_ext_i2c'] = 'ext_i2c_right = i2cdevice.I2C_device(scl = machine.Pin(2), sda = machine.Pin(3), freq = 10000)';
|
||||
generator.definitions_['import_right_potentiometer'] = 'ext_potentiometer_right = i2cdevice.Dimmer(ext_i2c_right)';
|
||||
var code = 'ext_potentiometer_right.value()';
|
||||
}
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
}
|
||||
|
||||
export const robot_color_extern_get_value = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
var mode = this.getFieldValue('mode');
|
||||
var color = this.getFieldValue('color');
|
||||
if (version == 'mixbot') {
|
||||
generator.definitions_['import_mixbot_ext_ext_color'] = 'from mixbot_ext import ext_color';
|
||||
var code = 'ext_color.recognition(' + mode + ")" + color;
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
} else if (version == 'feiyi') {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
generator.definitions_['import_i2cdevice'] = 'import i2cdevice';
|
||||
if (mode == "0") {
|
||||
generator.definitions_['import_left_ext_i2c'] = 'ext_i2c_left = i2cdevice.I2C_device(scl = machine.Pin(0), sda = machine.Pin(1), freq = 10000)';
|
||||
generator.definitions_['import_left_color'] = 'ext_color_left = i2cdevice.Color_ID(ext_i2c_left)';
|
||||
var code = 'ext_color_left.recognition()' + color;
|
||||
} else if (mode == "1") {
|
||||
generator.definitions_['import_right_ext_i2c'] = 'ext_i2c_right = i2cdevice.I2C_device(scl = machine.Pin(2), sda = machine.Pin(3), freq = 10000)';
|
||||
generator.definitions_['import_right_color'] = 'ext_color_right = i2cdevice.Color_ID(ext_i2c_right)';
|
||||
var code = 'ext_color_right.recognition()' + color;
|
||||
}
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
}
|
||||
|
||||
export const robot_sonar_extern_get_value = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
var mode = this.getFieldValue('mode');
|
||||
if (version == 'mixbot') {
|
||||
generator.definitions_['import_mixbot_ext_ext_sonar'] = 'from mixbot_ext import ext_sonar';
|
||||
var code = 'ext_sonar.value(' + mode + ")";
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
} else if (version == 'feiyi') {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
generator.definitions_['import_i2cdevice'] = 'import i2cdevice';
|
||||
if (mode == "0") {
|
||||
generator.definitions_['import_left_ext_i2c'] = 'ext_i2c_left = i2cdevice.I2C_device(scl = machine.Pin(0), sda = machine.Pin(1), freq = 10000)';
|
||||
generator.definitions_['import_left_sonar'] = 'ext_sonar_left = i2cdevice.Sonar(ext_i2c_left)';
|
||||
var code = 'ext_sonar_left.value()';
|
||||
} else if (mode == "1") {
|
||||
generator.definitions_['import_right_ext_i2c'] = 'ext_i2c_right = i2cdevice.I2C_device(scl = machine.Pin(2), sda = machine.Pin(3), freq = 10000)';
|
||||
generator.definitions_['import_right_sonar'] = 'ext_sonar_right = i2cdevice.Sonar(ext_i2c_right)';
|
||||
var code = 'ext_sonar_right.value()';
|
||||
}
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
}
|
||||
|
||||
export const robot_sonar_extern_led = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
var mode = this.getFieldValue('mode');
|
||||
var light = generator.valueToCode(this, 'light', generator.ORDER_ATOMIC);
|
||||
var op = generator.valueToCode(this, 'bright', generator.ORDER_ATOMIC);
|
||||
if (version == 'mixbot') {
|
||||
generator.definitions_['import_mixbot_ext_ext_sonar'] = 'from mixbot_ext import ext_sonar';
|
||||
var code = 'ext_sonar.led(' + mode + ',' + light + ',' + op + ")\n";
|
||||
return code;
|
||||
} else if (version == 'feiyi') {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
generator.definitions_['import_i2cdevice'] = 'import i2cdevice';
|
||||
if (mode == "0") {
|
||||
generator.definitions_['import_left_ext_i2c'] = 'ext_i2c_left = i2cdevice.I2C_device(scl = machine.Pin(0), sda = machine.Pin(1), freq = 10000)';
|
||||
generator.definitions_['import_left_sonar'] = 'ext_sonar_left = i2cdevice.Sonar(ext_i2c_left)';
|
||||
var code = 'ext_sonar_left.led(0,' + light + ',' + op + ')\n';
|
||||
} else if (mode == "1") {
|
||||
generator.definitions_['import_right_ext_i2c'] = 'ext_i2c_right = i2cdevice.I2C_device(scl = machine.Pin(2), sda = machine.Pin(3), freq = 10000)';
|
||||
generator.definitions_['import_right_sonar'] = 'ext_sonar_right = i2cdevice.Sonar(ext_i2c_right)';
|
||||
var code = 'ext_sonar_right.led(0,' + light + ',' + op + ')\n';
|
||||
}
|
||||
return code;
|
||||
}
|
||||
}
|
||||
|
||||
export const mixbot_sensor_extern_get_addr = function (_, generator) {
|
||||
var name = this.getFieldValue('name');
|
||||
generator.definitions_['import_mixbot_ext_' + name] = 'from mixbot_ext import ' + name;
|
||||
var code = name + '.addr_get()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const mixbot_sensor_extern_set_addr = function (_, generator) {
|
||||
var name = this.getFieldValue('name');
|
||||
generator.definitions_['import_mixbot_ext_' + name] = 'from mixbot_ext import ' + name;
|
||||
var oldaddr = generator.valueToCode(this, 'old', generator.ORDER_ATOMIC);
|
||||
var newaddr = generator.valueToCode(this, 'new', generator.ORDER_ATOMIC);
|
||||
var code = name + '.addr_set(' + oldaddr + ',' + newaddr + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const sensor_weather_solo_init = function (_, generator) {
|
||||
generator.definitions_['import_ws_solo'] = 'import ws_solo';
|
||||
var wd = generator.valueToCode(this, 'wd', generator.ORDER_ATOMIC);
|
||||
var ws = generator.valueToCode(this, 'ws', generator.ORDER_ATOMIC);
|
||||
var rain = generator.valueToCode(this, 'rain', generator.ORDER_ATOMIC);
|
||||
var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var code = sub + ' = ws_solo.Weather_Solo(' + wd + ', ' + ws + ', ' + rain + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const sensor_weather_solo_wd = function (_, generator) {
|
||||
generator.definitions_['import_ws_solo'] = 'import ws_solo';
|
||||
var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var key = this.getFieldValue('key');
|
||||
var code = sub + '.wind_direction()' + key + '';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_weather_solo_ws = function (_, generator) {
|
||||
generator.definitions_['import_ws_solo'] = 'import ws_solo';
|
||||
var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var key = this.getFieldValue('key');
|
||||
var code = sub + '.wind_speed()' + key + '';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_weather_solo_rain = function (_, generator) {
|
||||
generator.definitions_['import_ws_solo'] = 'import ws_solo';
|
||||
var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var time = generator.valueToCode(this, 'time', generator.ORDER_ATOMIC);
|
||||
var key = this.getFieldValue('key');
|
||||
var code = sub + '.rain_count(' + time + ')' + key + '';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
735
boards/default_src/micropython/generators/sensor_onboard.js
Normal file
735
boards/default_src/micropython/generators/sensor_onboard.js
Normal file
@@ -0,0 +1,735 @@
|
||||
import { Boards } from 'mixly';
|
||||
import { sensor_dht11 } from './sensor_extern.js';
|
||||
|
||||
export const sensor_mixgo_button_is_pressed = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
generator.definitions_['import_' + version] = 'import ' + version;
|
||||
var btn = generator.valueToCode(this, 'btn', generator.ORDER_ATOMIC);
|
||||
var code = version + '.' + btn + '.is_pressed()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
//ok
|
||||
export const sensor_mixgo_button_was_pressed = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
generator.definitions_['import_' + version] = 'import ' + version;
|
||||
var btn = generator.valueToCode(this, 'btn', generator.ORDER_ATOMIC);
|
||||
var code = version + '.' + btn + '.was_pressed()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_mixgo_button_get_presses = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
generator.definitions_['import_' + version] = 'import ' + version;
|
||||
var btn = generator.valueToCode(this, 'btn', generator.ORDER_ATOMIC);
|
||||
var argument = generator.valueToCode(this, 'VAR', generator.ORDER_ASSIGNMENT) || '0';
|
||||
var code = version + '.' + btn + '.get_presses(' + argument + ')';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_mixgo_button_attachInterrupt = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
generator.definitions_['import_' + version] = 'import ' + version;
|
||||
var dropdown_btn = generator.valueToCode(this, 'btn', generator.ORDER_ATOMIC);
|
||||
var dropdown_mode = this.getFieldValue('mode');
|
||||
var atta = generator.valueToCode(this, 'DO', generator.ORDER_ATOMIC);
|
||||
var code = version + '.' + dropdown_btn + '.irq' + '(handler = ' + atta + ', trigger = ' + dropdown_mode + ')\n'
|
||||
return code;
|
||||
}
|
||||
|
||||
//ok
|
||||
export const sensor_mixgocar42_button_is_pressed = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
generator.definitions_['import_' + version] = 'import ' + version;
|
||||
var code = version + '.' + 'button.is_pressed()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
//ok
|
||||
export const sensor_mixgocar42_button_was_pressed = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
generator.definitions_['import_' + version] = 'import ' + version;
|
||||
var code = version + '.' + 'button.was_pressed()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_mixgocar42_button_get_presses = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
generator.definitions_['import_' + version] = 'import ' + version;
|
||||
var argument = generator.valueToCode(this, 'VAR', generator.ORDER_ASSIGNMENT) || '0';
|
||||
var code = version + '.' + 'button.get_presses(' + argument + ')';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_mixgocar42_button_attachInterrupt = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
generator.definitions_['import_' + version] = 'import ' + version;
|
||||
var dropdown_mode = this.getFieldValue('mode');
|
||||
var atta = generator.valueToCode(this, 'DO', generator.ORDER_ATOMIC);
|
||||
var code = version + '.' + 'button.irq' + '(handler = ' + atta + ', trigger = ' + dropdown_mode + ')\n'
|
||||
return code;
|
||||
}
|
||||
|
||||
export const HCSR04 = function (_, generator) {
|
||||
generator.definitions_['import_sonar'] = 'import sonar';
|
||||
var dropdown_pin1 = generator.valueToCode(this, "PIN1", generator.ORDER_ASSIGNMENT);
|
||||
var dropdown_pin2 = generator.valueToCode(this, "PIN2", generator.ORDER_ASSIGNMENT);
|
||||
var code = 'sonar.Sonar(' + dropdown_pin1 + ', ' + dropdown_pin2 + ').checkdist()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const number1 = function (_, generator) {
|
||||
var code = this.getFieldValue('op');
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const number2 = function (_, generator) {
|
||||
var code = this.getFieldValue('op');
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const number3 = function (_, generator) {
|
||||
var code = this.getFieldValue('op');
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const number4 = function (_, generator) {
|
||||
var code = this.getFieldValue('op');
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const number5 = function (_, generator) {
|
||||
var code = this.getFieldValue('op');
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const number6 = function (_, generator) {
|
||||
var code = this.getFieldValue('op');
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const number7 = function (_, generator) {
|
||||
var code = this.getFieldValue('op');
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_mixgo_pin_near_single = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
generator.definitions_['import_' + version + '_onboard_als'] = "from " + version + " import onboard_als";
|
||||
var code = 'onboard_als.ps_nl()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_mixgo_pin_near_double = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
generator.definitions_['import_' + version] = 'import ' + version;
|
||||
var direction = this.getFieldValue('direction');
|
||||
var code = version + '.' + 'infrared_' + direction + '()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_mixgo_pin_near = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
var direction = this.getFieldValue('direction');
|
||||
generator.definitions_['import_' + version + '_' + direction] = 'from ' + version + ' import onboard_als_' + direction;
|
||||
var code = 'onboard_als_' + direction + '.ps_nl()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_mixgo_nova_pin_near = sensor_mixgo_pin_near;
|
||||
|
||||
export const sensor_mixgo_LTR308 = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
var direction = this.getFieldValue('direction');
|
||||
generator.definitions_['import_' + version + '_' + direction] = 'from ' + version + ' import onboard_als_' + direction;
|
||||
var code = 'onboard_als_' + direction + '.als_vis()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_mixgo_nova_LTR308 = sensor_mixgo_LTR308;
|
||||
|
||||
export const sensor_ds18x20 = function (_, generator) {
|
||||
generator.definitions_['import_ds18x20x'] = 'import ds18x20x';
|
||||
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var code = 'ds18x20x.get_ds18x20_temperature(' + dropdown_pin + ')';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_lm35 = function (_, generator) {
|
||||
generator.definitions_['import_lm35'] = 'import lm35';
|
||||
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
|
||||
var code = 'lm35.get_LM35_temperature(' + dropdown_pin + ')';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_LTR308 = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
if (version == "mixgo") {
|
||||
generator.definitions_['import_mixgo'] = 'import mixgo';
|
||||
return ['mixgo.get_brightness()', generator.ORDER_ATOMIC];
|
||||
} else if (version == "mixgo_ce") {
|
||||
generator.definitions_['import_mixgo_ce'] = 'import mixgo_ce';
|
||||
return ['mixgo_ce.get_brightness()', generator.ORDER_ATOMIC];
|
||||
} else if (version == "mpython") {
|
||||
generator.definitions_['import_mpython_onboard_light'] = 'from mpython import onboard_light';
|
||||
return ['onboard_light.brightness()', generator.ORDER_ATOMIC];
|
||||
}
|
||||
generator.definitions_['import_' + version + '_onboard_als'] = "from " + version + " import onboard_als";
|
||||
var code = 'onboard_als.als_vis()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
// else{return ['', generator.ORDER_ATOMIC];}
|
||||
}
|
||||
|
||||
export const sensor_sound = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
if (version == 'mixbot') {
|
||||
generator.definitions_['import_' + version + '_sound'] = 'from ' + version + ' import sound';
|
||||
var code = 'sound.loudness()';
|
||||
} else if (version == 'mixgo_zero') {
|
||||
generator.definitions_['import_mixgo_zero_voice_sound_level'] = "from mixgo_zero_voice import sound_level";
|
||||
var code = 'sound_level()';
|
||||
} else if (version == 'mixgo_nova') {
|
||||
generator.definitions_['import_mixgo_nova_voice_sound_level'] = "from mixgo_nova_voice import sound_level";
|
||||
var code = 'sound_level()';
|
||||
} else if (version == "mixgo") {
|
||||
generator.definitions_['import_mixgo'] = 'import mixgo';
|
||||
return ['mixgo.get_soundlevel()', generator.ORDER_ATOMIC];
|
||||
} else if (version == "mpython") {
|
||||
generator.definitions_['import_mpython_onboard_sound'] = 'from mpython import onboard_sound';
|
||||
return ['onboard_sound.soundlevel()', generator.ORDER_ATOMIC];
|
||||
} else if (version == "mixgo_mini") {
|
||||
generator.definitions_['import_' + version + '_onboard_bot'] = 'from ' + version + ' import onboard_bot';
|
||||
var code = 'onboard_bot.soundlevel()';
|
||||
} else {
|
||||
generator.definitions_['import_' + version + '_onboard_sound'] = 'from ' + version + ' import onboard_sound';
|
||||
var code = 'onboard_sound.read()';
|
||||
}
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
// export const sensor_mixgo_nova_sound = function (_, generator) {
|
||||
// var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
// return [code, generator.ORDER_ATOMIC];
|
||||
// }
|
||||
|
||||
export const sensor_hp203 = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
var key = this.getFieldValue('key');
|
||||
generator.definitions_['import_' + version + '_onboard_bps'] = "from " + version + " import onboard_bps";
|
||||
var code = 'onboard_bps.' + key;
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_aht11 = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
var key = this.getFieldValue('key');
|
||||
if (version == 'mixgo_nova' || version == 'mixgo_zero') {
|
||||
generator.definitions_['import_' + version + '_onboard_ths'] = "from " + version + " import onboard_ths";
|
||||
var code = 'onboard_ths.' + key + '()';
|
||||
} else {
|
||||
generator.definitions_['import_' + version + '_onboard_ths'] = "from " + version + " import onboard_ths";
|
||||
var code = 'onboard_ths.' + key + '()';
|
||||
}
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_get_temperature = function (_, generator) {
|
||||
generator.definitions_['import_feiyi_onboard_acc'] = 'from feiyi import onboard_acc';
|
||||
return ['onboard_acc.temperature()', generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const rfid_readid = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
generator.definitions_['import_' + version + '_onboard_rfid'] = "from " + version + " import onboard_rfid";
|
||||
var code = 'onboard_rfid.read_card(0, x="id")';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const rfid_readcontent = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
var sector = generator.valueToCode(this, 'SECTOR', generator.ORDER_ATOMIC);
|
||||
generator.definitions_['import_' + version + '_onboard_rfid'] = "from " + version + " import onboard_rfid";
|
||||
var code = 'onboard_rfid.read_card(' + sector + ', x="content")';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const rfid_write = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
var sector = generator.valueToCode(this, 'SECTOR', generator.ORDER_ATOMIC);
|
||||
var cnt = generator.valueToCode(this, 'CONTENT', generator.ORDER_ATOMIC);
|
||||
generator.definitions_['import_' + version + '_onboard_rfid'] = "from " + version + " import onboard_rfid";
|
||||
var code = 'onboard_rfid.write_card(' + cnt + ',' + sector + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const rfid_write_return = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
var sector = generator.valueToCode(this, 'SECTOR', generator.ORDER_ATOMIC);
|
||||
var cnt = generator.valueToCode(this, 'CONTENT', generator.ORDER_ATOMIC);
|
||||
generator.definitions_['import_' + version + '_onboard_rfid'] = "from " + version + " import onboard_rfid";
|
||||
var code = 'onboard_rfid.write_card(' + cnt + ',' + sector + ')';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_get_acceleration = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
var key = this.getFieldValue('key');
|
||||
if (key == 'strength') {
|
||||
if (version == 'mixbot') {
|
||||
generator.definitions_['import_' + version + '_acc_gyr'] = 'from ' + version + ' import acc_gyr';
|
||||
var code = 'acc_gyr.strength()';
|
||||
} else {
|
||||
generator.definitions_['import_' + version + '_onboard_acc'] = "from " + version + " import onboard_acc";
|
||||
var code = 'onboard_acc.strength()';
|
||||
}
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
if (version == 'mixbot') {
|
||||
generator.definitions_['import_' + version + '_acc_gyr'] = 'from ' + version + ' import acc_gyr';
|
||||
var code = 'acc_gyr.accelerometer()' + key;
|
||||
} else if (version == 'mpython') {
|
||||
generator.definitions_['import_mpython_motion'] = 'from mpython import motion';
|
||||
var code = 'motion.accelerometer()' + key;
|
||||
} else {
|
||||
generator.definitions_['import_' + version + '_onboard_acc'] = "from " + version + " import onboard_acc";
|
||||
var code = 'onboard_acc.acceleration()' + key;
|
||||
}
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_eulerangles = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
generator.definitions_['import_' + version + '_onboard_acc'] = "from " + version + " import onboard_acc";
|
||||
var angle = this.getFieldValue('angle');
|
||||
var code = 'onboard_acc.eulerangles()' + angle;
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_mpu9250_gesture = function (_, generator) {
|
||||
generator.definitions_['import_mpu9250'] = 'import mpu9250';
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var gesture = this.getFieldValue('gesture');
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
if (v == "mpu")
|
||||
generator.definitions_['import_mixgo_mpu'] = 'from mixgo import mpu';
|
||||
var code = v + '.mpu9250_is_gesture("' + gesture + '")';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
//ok
|
||||
export const sensor_mpu9250_get_acceleration = function (_, generator) {
|
||||
generator.definitions_['import_mpu9250'] = 'import mpu9250';
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var key = this.getFieldValue('key');
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
if (v == "mpu")
|
||||
generator.definitions_['import_mixgo_mpu'] = 'from mixgo import mpu';
|
||||
var code = v + '.mpu9250_get_' + key + '()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_mixgoce_pin_pressed = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
var pin = generator.valueToCode(this, 'button', generator.ORDER_ATOMIC);
|
||||
if (version == 'mixgo_mini') {
|
||||
generator.definitions_['import_' + version + '_onboard_bot'] = 'from ' + version + ' import onboard_bot';
|
||||
var code = 'onboard_bot.touched(' + pin + ')';
|
||||
} else {
|
||||
generator.definitions_['import_' + version] = 'import ' + version;
|
||||
var code = version + '.touched(' + pin + ')';
|
||||
}
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_mixgo_touch_slide = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
if (version == 'mixgo_mini') {
|
||||
generator.definitions_['import_' + version + '_onboard_bot'] = 'from ' + version + ' import onboard_bot';
|
||||
var code = 'onboard_bot.touch_slide()';
|
||||
} else {
|
||||
generator.definitions_['import_' + version] = 'import ' + version;
|
||||
var code = version + '.touch_slide(3,4)';
|
||||
}
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_mixgo_pin_pressed = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
generator.definitions_['import_' + version] = 'import ' + version;
|
||||
var pin = generator.valueToCode(this, 'button', generator.ORDER_ATOMIC);
|
||||
var code = version + '.' + pin + '.is_touched()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_mpython_pin_pressed = function (_, generator) {
|
||||
generator.definitions_['import_mpython'] = 'import mpython';
|
||||
var pin = generator.valueToCode(this, 'button', generator.ORDER_ATOMIC);
|
||||
var code = 'mpython.touch_' + pin + '.is_touched()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_adxl345_get_acceleration = function (_, generator) {
|
||||
generator.definitions_['import_adxl345'] = 'import adxl345';
|
||||
// generator.definitions_['import_machine'] = 'import machine';
|
||||
var key = this.getFieldValue('key');
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
var code;
|
||||
if (key == 'x') {
|
||||
code = v + '.readX()';
|
||||
} else if (key == 'y') {
|
||||
code = v + '.readY()';
|
||||
} else if (key == 'z') {
|
||||
code = v + '.readZ()';
|
||||
} else if (key == 'values') {
|
||||
code = v + '.readXYZ()';
|
||||
}
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_mpu9250_get_magnetic = function (_, generator) {
|
||||
generator.definitions_['import_mpu9250'] = 'import mpu9250';
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var key = this.getFieldValue('key');
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
if (v == "mpu")
|
||||
generator.definitions_['import_mixgo_mpu'] = 'from mixgo import mpu';
|
||||
var code = v + '.mpu9250_magnetic_' + key + '()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_mpu9250_get_gyro = function (_, generator) {
|
||||
generator.definitions_['import_mpu9250'] = 'import mpu9250';
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var key = this.getFieldValue('key');
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
if (v == "mpu")
|
||||
generator.definitions_['import_mixgo_mpu'] = 'from mixgo import mpu';
|
||||
var code = v + '.mpu9250_gyro_' + key + '()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_mpu9250_calibrate_compass = function (_, generator) {
|
||||
generator.definitions_['import_mpu9250'] = 'import mpu9250';
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
generator.definitions_['import_mixgo_compass'] = 'from mixgo import compass';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
return '' + v + '.calibrate()\n';
|
||||
}
|
||||
|
||||
export const sensor_mpu9250_temperature = function (_, generator) {
|
||||
generator.definitions_['import_mpu9250'] = 'import mpu9250';
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
if (v == "mpu")
|
||||
generator.definitions_['import_mixgo_mpu'] = 'from mixgo import mpu';
|
||||
return [v + '.mpu9250_get_temperature()', generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_mpu9250_field_strength = function (_, generator) {
|
||||
generator.definitions_['import_mpu9250'] = 'import mpu9250';
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
if (v == "compass")
|
||||
generator.definitions_['import_mixgo_compass'] = 'from mixgo import compass';
|
||||
var compass = this.getFieldValue('compass');
|
||||
var a;
|
||||
if (compass == 'strength') {
|
||||
a = v + '.get_field_strength()';
|
||||
} else if (compass == 'heading') {
|
||||
a = v + '.heading()';
|
||||
}
|
||||
return [a, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_compass_reset = function (block, generator) {
|
||||
generator.definitions_['import_mpu9250'] = 'import mpu9250';
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
generator.definitions_['import_mixgo_compass'] = 'from mixgo import compass';
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
return '' + v + '.reset_calibrate()\n';
|
||||
}
|
||||
|
||||
export const sensor_onboard_mpu9250_gesture = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var gesture = this.getFieldValue('gesture');
|
||||
generator.definitions_['import_mixgo_onboard_mpu'] = 'from mixgo import onboard_mpu';
|
||||
var code = 'onboard_mpu.mpu9250_is_gesture("' + gesture + '")';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_onboard_mpu9250_get_acceleration = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var key = this.getFieldValue('key');
|
||||
generator.definitions_['import_mixgo_onboard_mpu'] = 'from mixgo import onboard_mpu';
|
||||
var code = 'onboard_mpu.mpu9250_get_' + key + '()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_onboard_mpu9250_get_magnetic = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var key = this.getFieldValue('key');
|
||||
generator.definitions_['import_mixgo_onboard_mpu'] = 'from mixgo import onboard_mpu';
|
||||
var code = 'onboard_mpu.mpu9250_magnetic_' + key + '()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_onboard_mpu9250_get_gyro = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var key = this.getFieldValue('key');
|
||||
generator.definitions_['import_mixgo_onboard_mpu'] = 'from mixgo import onboard_mpu';
|
||||
var code = 'onboard_mpu.mpu9250_gyro_' + key + '()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_onboard_mpu9250_calibrate_compass = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
generator.definitions_['import_mixgo_onboard_compass'] = 'from mixgo import onboard_compass';
|
||||
return '' + 'onboard_compass.calibrate()\n';
|
||||
}
|
||||
|
||||
export const sensor_onboard_mpu9250_temperature = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
generator.definitions_['import_mixgo_onboard_mpu'] = 'from mixgo import onboard_mpu';
|
||||
return ['onboard_mpu.mpu9250_get_temperature()', generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_onboard_mpu9250_field_strength = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
generator.definitions_['import_mixgo_onboard_compass'] = 'from mixgo import onboard_compass';
|
||||
var compass = this.getFieldValue('compass');
|
||||
var a;
|
||||
if (compass == 'strength') {
|
||||
a = 'onboard_compass.get_field_strength()';
|
||||
} else if (compass == 'heading') {
|
||||
a = 'onboard_compass.heading()';
|
||||
}
|
||||
return [a, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_onboard_compass_reset = function (block, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
generator.definitions_['import_mixgo_onboard_compass'] = 'from mixgo import onboard_compass';
|
||||
return '' + 'onboard_compass.reset_calibrate()\n';
|
||||
}
|
||||
|
||||
export const onboard_RTC_set_datetime = function (_, generator) {
|
||||
generator.definitions_['import_ntptime'] = "import ntptime";
|
||||
var year = generator.valueToCode(this, "year", generator.ORDER_ASSIGNMENT);
|
||||
var month = generator.valueToCode(this, "month", generator.ORDER_ASSIGNMENT);
|
||||
var day = generator.valueToCode(this, "day", generator.ORDER_ASSIGNMENT);
|
||||
var hour = generator.valueToCode(this, "hour", generator.ORDER_ASSIGNMENT);
|
||||
var minute = generator.valueToCode(this, "minute", generator.ORDER_ASSIGNMENT);
|
||||
var second = generator.valueToCode(this, "second", generator.ORDER_ASSIGNMENT);
|
||||
var code = 'ntptime.settime((' + year + ',' + month + ',' + day + ',' + hour + ',' + minute + ',' + second + ',0,0))\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const onboard_RTC_settime_string = function (_, generator) {
|
||||
var cnt = generator.valueToCode(this, 'CONTENT', generator.ORDER_ATOMIC);
|
||||
generator.definitions_['import_ntptime'] = "import ntptime";
|
||||
var code = 'ntptime.settime(' + cnt + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const onboard_RTC_get_time = function (_, generator) {
|
||||
generator.definitions_['import_time'] = 'import time';
|
||||
var code = 'time.localtime()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const onboard_RTC_get_timestamp = function (_, generator) {
|
||||
generator.definitions_['import_time'] = 'import time';
|
||||
var time = generator.valueToCode(this, 'LIST', generator.ORDER_ATOMIC);
|
||||
var code = 'time.mktime(' + time + ')';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const onboard_RTC_timestamp_totuple = function (_, generator) {
|
||||
generator.definitions_['import_time'] = 'import time';
|
||||
var ts = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
|
||||
var code = 'time.localtime(' + ts + ')';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
//mixgo_cc onboard_sensor generators:
|
||||
|
||||
export const sensor_mixgo_cc_mmc5603_get_magnetic = function (_, generator) {
|
||||
var key = this.getFieldValue('key');
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
if (key == 'all') {
|
||||
generator.definitions_['import_' + version + 'onboard_mgs'] = "from " + version + " import onboard_mgs";
|
||||
var code = 'onboard_mgs.getstrength()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
if (version == 'mpython') {
|
||||
generator.definitions_['import_mpython_magnetic'] = 'from mpython import magnetic';
|
||||
var code = 'magnetic.getdata()' + key;
|
||||
} else {
|
||||
generator.definitions_['import_' + version + '_onboard_mgs'] = "from " + version + " import onboard_mgs";
|
||||
var code = 'onboard_mgs.getdata()' + key;
|
||||
}
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_mixgo_cc_mmc5603_get_angle = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
if (version == 'mpython') {
|
||||
generator.definitions_['import_mpython_magnetic'] = 'from mpython import magnetic';
|
||||
var code = 'magnetic.getangle()';
|
||||
} else {
|
||||
generator.definitions_['import_' + version + '_onboard_mgs'] = "from " + version + " import onboard_mgs";
|
||||
var code = 'onboard_mgs.getangle()';
|
||||
}
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_mixgo_cc_mmc5603_calibrate_compass = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
generator.definitions_['import_' + version + '_onboard_mgs'] = "from " + version + " import onboard_mgs";
|
||||
var code = 'onboard_mgs.calibrate()\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
//mixgo_me onboard_sensor generators:
|
||||
|
||||
export const sensor_mixgome_temperature = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
if (version == 'mixgo_mini') {
|
||||
generator.definitions_['import_mixgo_mini_onboard_temperature'] = 'from mixgo_mini import onboard_temperature';
|
||||
var code = 'onboard_temperature()';
|
||||
} else {
|
||||
generator.definitions_['import_mixgo_me_onboard_acc'] = "from mixgo_me import onboard_acc";
|
||||
var code = 'onboard_acc.temperature()';
|
||||
}
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
//mixgo_ce onboard_sensor generators:
|
||||
export const sensor_mixgoce_temperature = function (_, generator) {
|
||||
generator.definitions_['import_mixgo_ce'] = "import mixgo_ce";
|
||||
var code = 'mixgo_ce.get_temperature()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
//mpython onboard_sensor:
|
||||
|
||||
export const sensor_mpython_qmi8658_get_gyro = function (_, generator) {
|
||||
var key = this.getFieldValue('key');
|
||||
generator.definitions_['import_mpython_motion'] = 'from mpython import motion';
|
||||
var code = 'motion.gyroscope()' + key;
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_mpython_qmi8658_temperature = function (_, generator) {
|
||||
generator.definitions_['import_mpython_motion'] = 'from mpython import motion';
|
||||
return ['motion.temperature()', generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_rm_pin_near_double = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
var direction = this.getFieldValue('direction');
|
||||
generator.definitions_['import_' + version + '_adc' + direction] = 'from ' + version + ' import adc' + direction;
|
||||
var code = 'adc' + direction + '.read()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_rm_battery_left = function (_, generator) {
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
if (version == 'feiyi') {
|
||||
generator.definitions_['import_feiyi_onboard_bot51'] = 'from feiyi import onboard_bot51';
|
||||
var code = 'onboard_bot51.read_bat()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
generator.definitions_['import_' + version + '_battery'] = 'from ' + version + ' import battery';
|
||||
var code = 'battery.voltage()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_rm_acc = function (_, generator) {
|
||||
var key = this.getFieldValue('key');
|
||||
generator.definitions_['import_rm_e1_gyro'] = 'from rm_e1 import gyro';
|
||||
var code = 'gyro.acceleration()' + key;
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
//car4.2
|
||||
export const sensor_mixgocar_pin_near_line = function (_, generator) {
|
||||
var key = this.getFieldValue('key');
|
||||
generator.definitions_['import_mixgocar_c3_onboard_info'] = 'from mixgocar_c3 import onboard_info';
|
||||
var code = 'onboard_info.patrol()' + key;
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_mixgocar_pin_near = function (_, generator) {
|
||||
var key = this.getFieldValue('key');
|
||||
generator.definitions_['import_mixgocar_c3_onboard_info'] = 'from mixgocar_c3 import onboard_info';
|
||||
var code = 'onboard_info.obstacle()' + key;
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_mixgocar_pin_near_state_change = function (_, generator) {
|
||||
var key = this.getFieldValue('key');
|
||||
generator.definitions_['import_mixgocar_c3_onboard_info'] = 'from mixgocar_c3 import onboard_info';
|
||||
var code = 'onboard_info.ir_mode(onboard_info.' + key + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const sensor_mixgocar_battery_left = function (_, generator) {
|
||||
generator.definitions_['import_mixgocar_c3_onboard_info'] = 'from mixgocar_c3 import onboard_info';
|
||||
var code = 'onboard_info.read_bat()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
//mixbot onboard_sensor below:
|
||||
|
||||
export const sensor_mixbot_patrol_calibrate = function (_, generator) {
|
||||
var key = this.getFieldValue('key');
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
generator.definitions_['import_' + version + '_patrol'] = 'from ' + version + ' import patrol';
|
||||
var code = 'patrol.correct(patrol.CORRECTING_' + key + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const sensor_mixbot_patrol_value = function (_, generator) {
|
||||
var key = this.getFieldValue('key');
|
||||
var version = Boards.getSelectedBoardKey().split(':')[2]
|
||||
generator.definitions_['import_' + version + '_patrol'] = 'from ' + version + ' import patrol';
|
||||
var code = 'patrol.getdata()' + key + '';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_mixbot_temperature = function (_, generator) {
|
||||
generator.definitions_['import_mixbot_acc_gyr'] = "from mixbot import acc_gyr";
|
||||
var code = 'acc_gyr.temperature()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_mixbot_get_gyro = function (_, generator) {
|
||||
var key = this.getFieldValue('key');
|
||||
generator.definitions_['import_mixbot_acc_gyr'] = "from mixbot import acc_gyr";
|
||||
var code = 'acc_gyr.gyroscope()' + key;
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_bitbot_ALS = function (_, generator) {
|
||||
generator.definitions_['import_feiyi_onboard_bot51'] = 'from feiyi import onboard_bot51';
|
||||
var mode = generator.valueToCode(this, 'mode', generator.ORDER_ATOMIC);
|
||||
var code = 'onboard_bot51.' + 'read_als(' + mode + ')';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const bitbot_als_num = function (_, generator) {
|
||||
var code = this.getFieldValue('PIN');
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const sensor_button_is_pressed = sensor_mixgo_button_is_pressed;
|
||||
export const sensor_button_was_pressed = sensor_mixgo_button_was_pressed;
|
||||
export const sensor_button_get_presses = sensor_mixgo_button_get_presses;
|
||||
export const sensor_pin_pressed = sensor_mixgo_pin_pressed;
|
||||
export const sensor_pin_near = sensor_mixgo_pin_near;
|
||||
export const sensor_mixgo_light = sensor_LTR308;
|
||||
export const sensor_light = sensor_mixgo_light;
|
||||
export const dht11 = sensor_dht11;
|
||||
126
boards/default_src/micropython/generators/serial.js
Normal file
126
boards/default_src/micropython/generators/serial.js
Normal file
@@ -0,0 +1,126 @@
|
||||
export const serial_print = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var dropdown_uart = this.getFieldValue('mode');
|
||||
var content = generator.valueToCode(this, 'CONTENT', generator.ORDER_ATOMIC) || '""'
|
||||
var code = "uart" + dropdown_uart + ".write(str(" + content + "))\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const serial_print_byte = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var dropdown_uart = this.getFieldValue('mode');
|
||||
var content = generator.valueToCode(this, 'CONTENT', generator.ORDER_ATOMIC) || '""'
|
||||
var code = "uart" + dropdown_uart + ".write(" + content + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const serial_println = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var dropdown_uart = this.getFieldValue('mode');
|
||||
var content = generator.valueToCode(this, 'CONTENT', generator.ORDER_ATOMIC) || '""'
|
||||
var code = "uart" + dropdown_uart + ".write(str(" + content + ")+'\\r\\n')\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const serial_print_hex = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var dropdown_uart = this.getFieldValue('mode');
|
||||
var dropdown_stat = this.getFieldValue('STAT');
|
||||
var content = generator.valueToCode(this, 'CONTENT', generator.ORDER_ATOMIC) || '0';
|
||||
var code = "uart" + dropdown_uart + ".write(str(" + dropdown_stat + "(" + content + "))+'\\r\\n')\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const serial_any = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var dropdown_uart = this.getFieldValue('mode');
|
||||
var code = "uart" + dropdown_uart + ".any()";
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const serial_readstr = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var dropdown_uart = this.getFieldValue('mode');
|
||||
var code = "uart" + dropdown_uart + ".read()";
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const serial_readline = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var dropdown_uart = this.getFieldValue('mode');
|
||||
var code = "uart" + dropdown_uart + ".readline()";
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const serial_softserial = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var dropdown_uart = this.getFieldValue('mode')
|
||||
var baudrate = this.getFieldValue('baudrate');
|
||||
return "uart" + dropdown_uart + "=machine.UART(" + dropdown_uart + ", " + baudrate + ")\n";
|
||||
}
|
||||
|
||||
export const serial_softserial_new = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var rx = generator.valueToCode(this, 'RX', generator.ORDER_ATOMIC);
|
||||
var tx = generator.valueToCode(this, 'TX', generator.ORDER_ATOMIC);
|
||||
var dropdown_uart = this.getFieldValue('mode')
|
||||
var baudrate = this.getFieldValue('baudrate');
|
||||
return "uart" + dropdown_uart + "=machine.UART(" + dropdown_uart + ", tx=" + tx + ", rx=" + rx + ", baudrate=" + baudrate + ")\n";
|
||||
}
|
||||
|
||||
export const system_input = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '""';
|
||||
return ['input(' + str + ')', generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const system_print = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '""';
|
||||
var code = "print(" + str + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const system_print_inline = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '""';
|
||||
var code = "print(" + str + ',end ="")\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const system_print_end = function (_, generator) {
|
||||
var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '""';
|
||||
var end = generator.valueToCode(this, 'END', generator.ORDER_ATOMIC) || '""';
|
||||
var code = "print(" + str + ',end =' + end + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const system_print_many = function (_, generator) {
|
||||
var code = new Array(this.itemCount_);
|
||||
var default_value = '0';
|
||||
|
||||
for (var n = 0; n < this.itemCount_; n++) {
|
||||
|
||||
code[n] = generator.valueToCode(this, 'ADD' + n,
|
||||
generator.ORDER_NONE) || default_value;
|
||||
}
|
||||
|
||||
var code = 'print(' + code.join(', ') + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const serial_send_to_ai = function (_, generator) {
|
||||
generator.definitions_['import_uart_com'] = 'import uart_com';
|
||||
var dropdown_uart = this.getFieldValue('mode');
|
||||
var dropdown_stat = this.getFieldValue('STAT');
|
||||
var content = generator.valueToCode(this, 'CONTENT', generator.ORDER_ATOMIC) || '0';
|
||||
var code = "uart_com.send(uart" + dropdown_uart + ", " + content + ", repeat=" + dropdown_stat + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const serial_read_from_ai = function (_, generator) {
|
||||
generator.definitions_['import_uart_com'] = 'import uart_com';
|
||||
var dropdown_uart = this.getFieldValue('mode');
|
||||
var code = "uart_com.recv(uart" + dropdown_uart + ")";
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
194
boards/default_src/micropython/generators/system.js
Normal file
194
boards/default_src/micropython/generators/system.js
Normal file
@@ -0,0 +1,194 @@
|
||||
import { Profile } from 'mixly';
|
||||
|
||||
export const system_run_in_background = function (_, generator) {
|
||||
var branch = generator.statementToCode(this, 'do');
|
||||
return 'control.inBackground(() => {\n' + branch + '})\n';
|
||||
}
|
||||
|
||||
export const system_reset = function () {
|
||||
return 'control.reset()\n';
|
||||
}
|
||||
|
||||
export const system_wait = function (_, generator) {
|
||||
var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC) || Profile.default.serial;
|
||||
return 'control.waitMicros(' + data + ')\n';
|
||||
}
|
||||
|
||||
export const system_raise_event = function (_, generator) {
|
||||
var source = generator.valueToCode(this, 'system_event_bus_source', generator.ORDER_ATOMIC) || Profile.default.serial;
|
||||
var value = generator.valueToCode(this, 'system_event_bus_value', generator.ORDER_ATOMIC) || Profile.default.serial;
|
||||
return 'control.raiseEvent(' + source + ', ' + value + ')\n';
|
||||
}
|
||||
|
||||
export const system_on_event = function (_, generator) {
|
||||
var source = generator.valueToCode(this, 'system_event_bus_source', generator.ORDER_ATOMIC) || Profile.default.serial;
|
||||
var value = generator.valueToCode(this, 'system_event_bus_value', generator.ORDER_ATOMIC) || Profile.default.serial;
|
||||
var branch = generator.statementToCode(this, 'do');
|
||||
return 'control.onEvent(' + source + ', ' + value + ', () => {\n' + branch + ')\n';
|
||||
}
|
||||
|
||||
export const system_timestamp = function (_, generator) {
|
||||
return ['control.eventTimestamp()', generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const system_value = function (_, generator) {
|
||||
return ['control.eventValue()', generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const system_event_bus_source = function (_, generator) {
|
||||
return [this.getFieldValue('key'), generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const system_event_bus_value = function (_, generator) {
|
||||
return [this.getFieldValue('key'), generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const system_device_name = function (_, generator) {
|
||||
return ['control.deviceName()', generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const system_device_serial_number = function (_, generator) {
|
||||
return ['control.deviceSerialNumber()', generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
//ok
|
||||
export const Panic_with_status_code = function (_, generator) {
|
||||
var status_code = generator.valueToCode(this, 'STATUS_CODE', generator.ORDER_ATOMIC) || '1000'
|
||||
var code = 'panic(' + status_code + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
//ok
|
||||
export const controls_millis = function (_, generator) {
|
||||
generator.definitions_['import_time'] = 'import time';
|
||||
var dropdown_time = this.getFieldValue('Time');
|
||||
switch (dropdown_time) {
|
||||
case "ms":
|
||||
var code = 'time.ticks_ms()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
case "us":
|
||||
var code = 'time.ticks_us()';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
}
|
||||
|
||||
//ok
|
||||
export const controls_end_program = function () {
|
||||
return 'while True:\n pass\n';
|
||||
}
|
||||
|
||||
//ok
|
||||
export const reset = function (_, generator) {
|
||||
generator.definitions_['import_mixgo'] = 'import mixgo';
|
||||
return 'reset()\n';
|
||||
}
|
||||
|
||||
export const controls_uname = function (_, generator) {
|
||||
generator.definitions_['import_os'] = 'import os';
|
||||
return 'os.uname()';
|
||||
}
|
||||
|
||||
export const controls_delay = function (_, generator) {
|
||||
// generator.definitions_.import_time = "import time";
|
||||
generator.definitions_['import_time'] = 'import time';
|
||||
var delay_time = generator.valueToCode(this, 'DELAY_TIME', generator.ORDER_ATOMIC) || '1000'
|
||||
var dropdown_time = this.getFieldValue('Time');
|
||||
switch (dropdown_time) {
|
||||
case "s":
|
||||
var code = 'time.sleep(' + delay_time + ')\n';
|
||||
return code;
|
||||
case "ms":
|
||||
var code = 'time.sleep_ms(' + delay_time + ')\n';
|
||||
return code;
|
||||
case "us":
|
||||
var code = 'time.sleep_us(' + delay_time + ')\n';
|
||||
return code;
|
||||
}
|
||||
}
|
||||
|
||||
export const controls_delay_new = function (_, generator) {
|
||||
// generator.definitions_.import_time = "import time";
|
||||
generator.definitions_['import_time'] = 'import time';
|
||||
var delay_time = generator.valueToCode(this, 'DELAY_TIME', generator.ORDER_ATOMIC) || '1000'
|
||||
var dropdown_time = this.getFieldValue('Time');
|
||||
switch (dropdown_time) {
|
||||
case "s":
|
||||
var code = 'time.sleep(' + delay_time + ')\n';
|
||||
return code;
|
||||
case "ms":
|
||||
var code = 'time.sleep_ms(' + delay_time + ')\n';
|
||||
return code;
|
||||
case "us":
|
||||
var code = 'time.sleep_us(' + delay_time + ')\n';
|
||||
return code;
|
||||
}
|
||||
}
|
||||
|
||||
export const timer = function (_, generator) {
|
||||
generator.definitions_['import_mixgo'] = 'import mixgo';
|
||||
var v = generator.valueToCode(this, "VAR", generator.ORDER_NONE) || "None";
|
||||
var period = generator.valueToCode(this, "period", generator.ORDER_NONE) || "0";
|
||||
var mode = generator.valueToCode(this, "mode", generator.ORDER_NONE) || "None";
|
||||
var callback = generator.valueToCode(this, "callback", generator.ORDER_NONE) || "None";
|
||||
// var callback = generator.valueToCode(this, "callback", generator.ORDER_NONE) || "None";
|
||||
var code = v + ".init(period = " + period + ", mode = Timer." + mode + ", callback = " + callback + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const system_timer = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var v = generator.valueToCode(this, "VAR", generator.ORDER_NONE) || "None";
|
||||
var period = generator.valueToCode(this, "period", generator.ORDER_NONE) || "0";
|
||||
var mode = this.getFieldValue('mode');
|
||||
//var branch = generator.statementToCode(this, 'callback') || generator.PASS;
|
||||
var callback = generator.valueToCode(this, "callback", generator.ORDER_NONE) || "None";
|
||||
//var code = v + ".init(period = " + period + ", mode = machine.Timer." + mode + ", callback = " + v + "_callback_func)\n";
|
||||
//generator.setups_['timer_callback_func'] = 'def ' + v + '_callback_func(t):\n' + branch + '\n';
|
||||
var code = v + ".init(period = " + period + ", mode = machine.Timer." + mode + ", callback = " + callback + ")\n";
|
||||
return code;
|
||||
}
|
||||
|
||||
export const system_ticks_diff = function (_, generator) {
|
||||
generator.definitions_['import_time'] = 'import time';
|
||||
var end = generator.valueToCode(this, "END", generator.ORDER_NONE) || "0";
|
||||
var start = generator.valueToCode(this, "START", generator.ORDER_NONE) || "0";
|
||||
var code = "time.ticks_diff(" + end + ", " + start + ")";
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const system_timer_init = function (_, generator) {
|
||||
var v = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var code = v + ' = machine.Timer(0)\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const system_wdt_init = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var period = generator.valueToCode(this, "period", generator.ORDER_NONE) || "0";
|
||||
var code = 'wdt = machine.WDT(timeout= ' + period + ')\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const system_wdt_feed = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var code = 'wdt.feed()\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const system_machine_reset = function (_, generator) {
|
||||
generator.definitions_['import_machine'] = 'import machine';
|
||||
var code = 'machine.reset()\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const system_bitbot_shutdown = function (_, generator) {
|
||||
generator.definitions_['import_bitbot_onboard_bot51'] = 'from bitbot import onboard_bot51';
|
||||
var code = 'onboard_bot51.shutdown()\n';
|
||||
return code;
|
||||
}
|
||||
|
||||
export const Timer_init = system_timer_init;
|
||||
export const timer2 = system_timer;
|
||||
export const time_ticks_diff = system_ticks_diff;
|
||||
export const base_delay = controls_delay;
|
||||
27
boards/default_src/micropython/generators/weather.js
Normal file
27
boards/default_src/micropython/generators/weather.js
Normal file
@@ -0,0 +1,27 @@
|
||||
export const WEATHER_NOW = function (_, generator) {
|
||||
generator.definitions_['import_seniverse_api'] = "import seniverse_api";
|
||||
var dropdown_mode = this.getFieldValue('mode');
|
||||
var key = generator.valueToCode(this, 'key', generator.ORDER_ATOMIC);
|
||||
var addr = generator.valueToCode(this, 'addr', generator.ORDER_ATOMIC);
|
||||
var code = 'seniverse_api.' + dropdown_mode + '(' + key + ',' + addr + ')';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const WEATHER_DAILY = function (_, generator) {
|
||||
generator.definitions_['import_seniverse_api'] = "import seniverse_api";
|
||||
var dropdown_mode = this.getFieldValue('mode');
|
||||
var key = generator.valueToCode(this, 'key', generator.ORDER_ATOMIC);
|
||||
var addr = generator.valueToCode(this, 'addr', generator.ORDER_ATOMIC);
|
||||
var day = generator.valueToCode(this, 'day', generator.ORDER_ATOMIC);
|
||||
var code = 'seniverse_api.' + dropdown_mode + '(' + key + ',' + addr + ',' + day + ')';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
|
||||
export const WEATHER_HOUR = function (_, generator) {
|
||||
generator.definitions_['import_seniverse_api'] = "import seniverse_api";
|
||||
var key = generator.valueToCode(this, 'key', generator.ORDER_ATOMIC);
|
||||
var addr = generator.valueToCode(this, 'addr', generator.ORDER_ATOMIC);
|
||||
var hour = generator.valueToCode(this, 'hour', generator.ORDER_ATOMIC);
|
||||
var code = 'seniverse_api.weather_hourly(' + key + ',' + addr + ',' + hour + ')';
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
0
boards/default_src/micropython/index.js
Normal file
0
boards/default_src/micropython/index.js
Normal file
BIN
boards/default_src/micropython/origin/build/HZK12.bin
Normal file
BIN
boards/default_src/micropython/origin/build/HZK12.bin
Normal file
Binary file not shown.
BIN
boards/default_src/micropython/origin/build/HZK16.bin
Normal file
BIN
boards/default_src/micropython/origin/build/HZK16.bin
Normal file
Binary file not shown.
56
boards/default_src/micropython/origin/build/lib/adxl345.py
Normal file
56
boards/default_src/micropython/origin/build/lib/adxl345.py
Normal file
@@ -0,0 +1,56 @@
|
||||
#ADXL345
|
||||
import time
|
||||
import ustruct
|
||||
from micropython import const
|
||||
|
||||
DATA_FORMAT = const(0x31)
|
||||
BW_RATE = const(0x2c)
|
||||
POWER_CTL = const(0x2d)
|
||||
INT_ENABLE = const(0x2E)
|
||||
OFSX = const(0x1e)
|
||||
OFSY = const(0x1f)
|
||||
OFSZ = const(0x20)
|
||||
|
||||
class ADXL345:
|
||||
def __init__(self, i2c, address=0X53):
|
||||
self._device = i2c
|
||||
self._address = address
|
||||
for addr in self._device.scan():
|
||||
if self._device.readfrom_mem(addr, 0, 1)[0] == 0xe5:
|
||||
self._address = addr
|
||||
break
|
||||
else:
|
||||
raise AttributeError("Cannot find a ADXL345")
|
||||
|
||||
self._wreg(DATA_FORMAT,0x2B) #16g量程
|
||||
self._wreg(BW_RATE,0x0A) #数据输出速度为100Hz
|
||||
self._wreg(INT_ENABLE,0x00) #不使用中断
|
||||
|
||||
self._wreg(OFSX,0x00)
|
||||
self._wreg(OFSY,0x00)
|
||||
self._wreg(OFSZ,0x00)
|
||||
self._wreg(POWER_CTL,0x08) #链接使能,测量模式
|
||||
time.sleep(0.5)
|
||||
|
||||
def readXYZ(self):
|
||||
x, = ustruct.unpack('<h', self._rreg(0x32,2))
|
||||
y, = ustruct.unpack('<h', self._rreg(0x34,2))
|
||||
z, = ustruct.unpack('<h', self._rreg(0x36,2))
|
||||
return (x/256,y/256,z/256)
|
||||
|
||||
def readX(self):
|
||||
return self.readXYZ()[0]
|
||||
|
||||
def readY(self):
|
||||
return self.readXYZ()[1]
|
||||
|
||||
def readZ(self):
|
||||
return self.readXYZ()[2]
|
||||
|
||||
def _wreg(self, reg, val):
|
||||
'''Write memory address'''
|
||||
self._device.writeto_mem(self._address,reg,val.to_bytes(1, 'little'))
|
||||
|
||||
def _rreg(self, reg,nbytes=1):
|
||||
'''Read memory address'''
|
||||
return self._device.readfrom_mem(self._address, reg, nbytes)[0] if nbytes<=1 else self._device.readfrom_mem(self._address, reg, nbytes)[0:nbytes]
|
||||
88
boards/default_src/micropython/origin/build/lib/ahtx0.py
Normal file
88
boards/default_src/micropython/origin/build/lib/ahtx0.py
Normal file
@@ -0,0 +1,88 @@
|
||||
"""
|
||||
AHT21
|
||||
|
||||
Micropython library for the AHT21(temperature,humidity)
|
||||
=======================================================
|
||||
|
||||
#Changed from circuitpython to micropython 20220211
|
||||
#Format unified 20220623
|
||||
|
||||
dahanzimin From the Mixly Team
|
||||
"""
|
||||
import utime
|
||||
from micropython import const
|
||||
|
||||
AHTX0_I2CADDR_DEFAULT = const(0x38) # Default I2C address
|
||||
AHTX0_CMD_INITIALIZE = const(0xE1) # Initialization command
|
||||
AHTX0_CMD_TRIGGER = const(0xAC) # Trigger reading command
|
||||
AHTX0_CMD_SOFTRESET = const(0xBA) # Soft reset command
|
||||
AHTX0_STATUS_BUSY = const(0x80) # Status bit for busy
|
||||
AHTX0_STATUS_CALIBRATED = const(0x08) # Status bit for calibrated
|
||||
|
||||
class AHTx0:
|
||||
"""Interface library for AHT10/AHT20 temperature+humidity sensors"""
|
||||
def __init__(self, i2c, address=AHTX0_I2CADDR_DEFAULT):
|
||||
utime.sleep_ms(20) # 20ms delay to wake up
|
||||
self._i2c = i2c
|
||||
self._address = address
|
||||
self._buf = bytearray(6)
|
||||
self.reset()
|
||||
if not self.initialize():
|
||||
raise AttributeError("Cannot find a AHTx0")
|
||||
self._temp = None
|
||||
self._humidity = None
|
||||
|
||||
def reset(self):
|
||||
"""Perform a soft-reset of the AHT"""
|
||||
self._buf[0] = AHTX0_CMD_SOFTRESET
|
||||
self._i2c.writeto(self._address, self._buf[0:1])
|
||||
utime.sleep_ms(20) # 20ms delay to wake up
|
||||
|
||||
def initialize(self):
|
||||
"""Ask the sensor to self-initialize. Returns True on success, False otherwise"""
|
||||
self._buf[0] = AHTX0_CMD_INITIALIZE
|
||||
self._buf[1] = 0x08
|
||||
self._buf[2] = 0x00
|
||||
self._i2c.writeto(self._address, self._buf[0:3])
|
||||
self._wait_for_idle()
|
||||
if not self.status() & AHTX0_STATUS_CALIBRATED:
|
||||
return False
|
||||
return True
|
||||
|
||||
def status(self):
|
||||
"""The status byte initially returned from the sensor, see datasheet for details"""
|
||||
self._read_to_buffer()
|
||||
return self._buf[0]
|
||||
|
||||
def _read_to_buffer(self):
|
||||
self._i2c.readfrom_into(self._address, self._buf)
|
||||
|
||||
def _trigger_measurement(self):
|
||||
"""Internal function for triggering the AHT to read temp/humidity"""
|
||||
self._buf[0] = AHTX0_CMD_TRIGGER
|
||||
self._buf[1] = 0x33
|
||||
self._buf[2] = 0x00
|
||||
self._i2c.writeto(self._address, self._buf[0:3])
|
||||
|
||||
def _wait_for_idle(self):
|
||||
while self.status() & AHTX0_STATUS_BUSY:
|
||||
utime.sleep_ms(5)
|
||||
|
||||
def _perform_measurement(self):
|
||||
self._trigger_measurement()
|
||||
self._wait_for_idle()
|
||||
self._read_to_buffer()
|
||||
|
||||
def humidity(self):
|
||||
"""The measured relative humidity in percent."""
|
||||
self._perform_measurement()
|
||||
self._humidity = (self._buf[1] << 12) | (self._buf[2] << 4) | (self._buf[3] >> 4)
|
||||
self._humidity = (self._humidity * 100) / 0x100000
|
||||
return self._humidity
|
||||
|
||||
def temperature(self):
|
||||
"""The measured temperature in degrees Celcius."""
|
||||
self._perform_measurement()
|
||||
self._temp = ((self._buf[3] & 0xF) << 16) | (self._buf[4] << 8) | self._buf[5]
|
||||
self._temp = ((self._temp * 200.0) / 0x100000) - 50
|
||||
return self._temp
|
||||
59
boards/default_src/micropython/origin/build/lib/ap3216c.py
Normal file
59
boards/default_src/micropython/origin/build/lib/ap3216c.py
Normal file
@@ -0,0 +1,59 @@
|
||||
"""
|
||||
AP3216C
|
||||
|
||||
MicroPython library for the AP3216C(ALS,PS,IRS)
|
||||
=======================================================
|
||||
#Preliminary composition 20240630
|
||||
|
||||
@dahanzimin From the Mixly Team
|
||||
"""
|
||||
import time
|
||||
from micropython import const
|
||||
|
||||
AP3216_ADD = const(0x1E)
|
||||
AP_SYS_CMD = const(0x00)
|
||||
AP_DAT = const(0x0A)
|
||||
AP_ALS_CMD = const(0x10)
|
||||
AP_PS_CMD = const(0x20)
|
||||
AP_PS_LED = const(0x21)
|
||||
Resolution = 0.35
|
||||
|
||||
class AP3216C:
|
||||
def __init__(self, i2c_bus, addr=AP3216_ADD):
|
||||
self._device = i2c_bus
|
||||
self._address = addr
|
||||
self._wreg(AP_SYS_CMD, 0x04) # SW reset
|
||||
time.sleep_ms(100)
|
||||
self._wreg(AP_SYS_CMD, 0x03) # 011: ALS and PS+IR functions active
|
||||
self._wreg(AP_ALS_CMD, 0x00) # Range 1: 0 ~ 20661 Lux. Resolution = 0.35 lux/count.
|
||||
self._wreg(AP_PS_CMD, 0x09) # PS gain:10
|
||||
self._wreg(AP_PS_LED, 0x23) # PS LED pulse:10
|
||||
|
||||
def _wreg(self, reg, val):
|
||||
'''Write memory address'''
|
||||
self._device.writeto_mem(self._address,reg,val.to_bytes(1, 'little'))
|
||||
|
||||
def _rreg(self, reg, nbytes=1):
|
||||
'''Read memory address'''
|
||||
return self._device.readfrom_mem(self._address, reg, nbytes)[0] if nbytes<=1 else self._device.readfrom_mem(self._address, reg, nbytes)[0:nbytes]
|
||||
|
||||
@property
|
||||
def getdata(self):
|
||||
'''处理获取数据'''
|
||||
#buf = self._rreg(AP_DAT, 6)
|
||||
ir = (self._rreg(AP_DAT + 0) & 0x03) | self._rreg(AP_DAT + 1) << 2
|
||||
als= (self._rreg(AP_DAT + 2) | self._rreg(AP_DAT + 3) << 8) * Resolution
|
||||
ps = (self._rreg(AP_DAT + 4) & 0x0F) | (self._rreg(AP_DAT + 5) & 0x3F) << 4
|
||||
return round(als, 2), ir, ps
|
||||
|
||||
def als_vis(self):
|
||||
'''可见光Lux'''
|
||||
return self.getdata[0]
|
||||
|
||||
def als_ir(self):
|
||||
'''红外Lux'''
|
||||
return self.getdata[1]
|
||||
|
||||
def ps_nl(self):
|
||||
'''接近距离'''
|
||||
return self.getdata[2]
|
||||
294
boards/default_src/micropython/origin/build/lib/apds9960.py
Normal file
294
boards/default_src/micropython/origin/build/lib/apds9960.py
Normal file
@@ -0,0 +1,294 @@
|
||||
"""
|
||||
APDS9960`
|
||||
|
||||
MicroPython library for the APDS9960(Supports gesture, proximity, and color detection)
|
||||
=======================================================
|
||||
|
||||
#Preliminary composition 20220224
|
||||
#base on https://github.com/adafruit/Adafruit_CircuitPython_BusDevice 20220623
|
||||
|
||||
dahanzimin From the Mixly Team
|
||||
"""
|
||||
|
||||
import time
|
||||
from micropython import const
|
||||
|
||||
_DEVICE_ID = const(0xAB)
|
||||
_APDS9960_ENABLE = const(0x80)
|
||||
_APDS9960_ATIME = const(0x81)
|
||||
_APDS9960_PILT = const(0x89)
|
||||
_APDS9960_PIHT = const(0x8B)
|
||||
_APDS9960_PERS = const(0x8C)
|
||||
_APDS9960_CONTROL = const(0x8F)
|
||||
_APDS9960_ID = const(0x92)
|
||||
_APDS9960_STATUS = const(0x93)
|
||||
_APDS9960_CDATAL = const(0x94)
|
||||
_APDS9960_PDATA = const(0x9C)
|
||||
_APDS9960_GPENTH = const(0xA0)
|
||||
_APDS9960_GEXTH = const(0xA1)
|
||||
_APDS9960_GCONF1 = const(0xA2)
|
||||
_APDS9960_GCONF2 = const(0xA3)
|
||||
_APDS9960_GPULSE = const(0xA6)
|
||||
_APDS9960_GCONF4 = const(0xAB)
|
||||
_APDS9960_GFLVL = const(0xAE)
|
||||
_APDS9960_GSTATUS = const(0xAF)
|
||||
_APDS9960_AICLEAR = const(0xE7)
|
||||
_APDS9960_GFIFO_U = const(0xFC)
|
||||
_BIT_MASK_ENABLE_EN = const(0x01)
|
||||
_BIT_MASK_ENABLE_COLOR = const(0x02)
|
||||
_BIT_MASK_ENABLE_PROX = const(0x04)
|
||||
_BIT_MASK_ENABLE_PROX_INT = const(0x20)
|
||||
_BIT_MASK_ENABLE_GESTURE = const(0x40)
|
||||
_BIT_MASK_STATUS_AVALID = const(0x01)
|
||||
_BIT_MASK_STATUS_GINT = const(0x04)
|
||||
_BIT_MASK_GSTATUS_GFOV = const(0x02)
|
||||
_BIT_MASK_GCONF4_GFIFO_CLR = const(0x04)
|
||||
_BIT_POS_PERS_PPERS = const(4)
|
||||
_BIT_MASK_PERS_PPERS = const(0xF0)
|
||||
_BIT_POS_CONTROL_AGAIN = const(0)
|
||||
_BIT_MASK_CONTROL_AGAIN = const(3)
|
||||
_BIT_POS_CONTROL_PGAIN = const(2)
|
||||
_BIT_MASK_CONTROL_PGAIN = const(0x0C)
|
||||
_BIT_POS_GCONF2_GGAIN = const(5)
|
||||
_BIT_MASK_GCONF2_GGAIN = const(0x60)
|
||||
|
||||
class APDS9960:
|
||||
def __init__(self, i2c, address=0x39):
|
||||
self._device = i2c
|
||||
self._address = address
|
||||
self._select = [True,True,True]
|
||||
|
||||
if self._rreg(_APDS9960_ID) != _DEVICE_ID:
|
||||
raise AttributeError("Cannot find a APDS9960")
|
||||
|
||||
self.enable(True) # Re-enable sensor and wait 10ms for the power on delay to finish
|
||||
time.sleep(0.010)
|
||||
self._wreg(_APDS9960_GPENTH, 0x05) # Enter gesture engine at >= 5 proximity counts
|
||||
self._wreg(_APDS9960_GEXTH, 0x1E) # Exit gesture engine if all counts drop below 30
|
||||
self._wreg(_APDS9960_GCONF1, 0x82) # GEXPERS: 2 (4 cycles), GEXMSK: 0 (default) GFIFOTH: 2 (8 datasets)
|
||||
self._wreg(_APDS9960_GCONF2, 0x41) # GGAIN: 2 (4x), GLDRIVE: 100 mA (default), GWTIME: 1 (2.8ms)
|
||||
self._wreg(_APDS9960_GPULSE, 0x85) # GPULSE: 5 (6 pulses), GPLEN: 2 (16 us)
|
||||
self.color_integration_time(256) # ATIME: 256 (712ms color integration time, max count of 65535)
|
||||
|
||||
# method for reading and writing to I2C
|
||||
def _wreg(self, reg, val):
|
||||
'''Write memory address'''
|
||||
self._device.writeto_mem(self._address,reg,val.to_bytes(1, 'little'))
|
||||
|
||||
def _writecmdonly(self, val):
|
||||
"""Writes a command and 0 bytes of data to the I2C device"""
|
||||
self._device.writeto(self._address,val.to_bytes(1, 'little'))
|
||||
|
||||
def _rreg(self, reg,nbytes=1):
|
||||
'''Read memory address'''
|
||||
return self._device.readfrom_mem(self._address, reg, nbytes)[0] if nbytes<=1 else self._device.readfrom_mem(self._address, reg, nbytes)[0:nbytes]
|
||||
|
||||
def _get_bit(self, reg, mask):
|
||||
"""Gets a single bit value from the I2C device's register"""
|
||||
return bool(self._rreg(reg) & mask)
|
||||
|
||||
def _set_bit(self, reg, mask, value):
|
||||
"""Sets a single bit value in the I2C device's register"""
|
||||
buf=self._rreg(reg)
|
||||
buf= buf | mask if value else buf & ~mask
|
||||
self._wreg(reg,buf)
|
||||
|
||||
def _set_bits(self, reg, pos, mask, value):
|
||||
"""Sets a multi-bit value in the I2C device's register"""
|
||||
buf=self._rreg(reg)
|
||||
buf = (buf & ~mask) | (value << pos)
|
||||
self._wreg(reg,buf)
|
||||
|
||||
def _color_data16(self, reg):
|
||||
"""Sends a command and reads 2 bytes of data from the I2C device"""
|
||||
buf = self._rreg(reg,2)
|
||||
return buf[1] << 8 | buf[0]
|
||||
|
||||
def enable(self, value):
|
||||
"""sensor is enabled"""
|
||||
self._set_bit(_APDS9960_ENABLE, _BIT_MASK_ENABLE_EN, value)
|
||||
|
||||
def enable_proximity(self, value):
|
||||
"""sensor's proximity engine is enabled."""
|
||||
self._set_bit(_APDS9960_ENABLE, _BIT_MASK_ENABLE_PROX, value)
|
||||
|
||||
def proximity_gain(self, value):
|
||||
"""""Proximity sensor gain value"""
|
||||
# proximity_gain" "Gain Multiplier" "Note"
|
||||
# 0, "1x", "Power-on Default"
|
||||
# 1, "2x", ""
|
||||
# 2, "4x", ""
|
||||
# 3, "8x", ""
|
||||
self._set_bits(_APDS9960_CONTROL, _BIT_POS_CONTROL_PGAIN, _BIT_MASK_CONTROL_PGAIN, value)
|
||||
|
||||
def enable_gesture(self, value):
|
||||
"""sensor's gesture engine is enabled"""
|
||||
self._set_bit(_APDS9960_ENABLE, _BIT_MASK_ENABLE_GESTURE, value)
|
||||
|
||||
def gesture_gain(self, value):
|
||||
"""Gesture mode gain value"""
|
||||
# "gesture_gain" "Gain Multiplier" "Note"
|
||||
# 0, "1x", "Power-on Default"
|
||||
# 1, "2x", ""
|
||||
# 2, "4x", "Driver Default"
|
||||
# 3, "8x", ""
|
||||
self._set_bits(_APDS9960_GCONF2, _BIT_POS_GCONF2_GGAIN, _BIT_MASK_GCONF2_GGAIN, value)
|
||||
|
||||
def enable_color(self, value):
|
||||
"""sensor's color/light engine is enabled"""
|
||||
self._set_bit(_APDS9960_ENABLE, _BIT_MASK_ENABLE_COLOR, value)
|
||||
|
||||
def color_gain(self, value):
|
||||
"""Color/light sensor gain value"""
|
||||
# "color_gain" "Gain Multiplier" "Note"
|
||||
# 0, "1x", "Power-on Default"
|
||||
# 1, "4x", "Driver Default"
|
||||
# 2, "16x", ""
|
||||
# 3, "64x", ""
|
||||
self._set_bits(_APDS9960_CONTROL, _BIT_POS_CONTROL_AGAIN, _BIT_MASK_CONTROL_AGAIN, value)
|
||||
|
||||
def color_integration_time(self, value):
|
||||
"""Color/light sensor gain"""
|
||||
# "color_integration_time" "Time" "Max Count" "Note"
|
||||
# 1, "2.78 ms", 1025, "Power-on Default"
|
||||
# 10, "27.8 ms", 10241, ""
|
||||
# 37, "103 ms", 37889, ""
|
||||
# 72, "200 ms", 65535, ""
|
||||
# 256, "712 ms", 65535, "Driver Default"
|
||||
self._wreg(_APDS9960_ATIME, 256 - value)
|
||||
|
||||
## PROXIMITY
|
||||
def proximity(self,gain=2):
|
||||
"""Proximity sensor data"""
|
||||
if self._select[0]:
|
||||
self._select=[False,True,True]
|
||||
self.enable_proximity(True)
|
||||
self.enable_gesture(False)
|
||||
self.enable_color(False)
|
||||
self.proximity_gain(gain)
|
||||
|
||||
return self._rreg(_APDS9960_PDATA)
|
||||
|
||||
## GESTURE
|
||||
def gesture(self,gain=3):
|
||||
"""Gesture sensor data"""
|
||||
# If FIFOs have overflowed we're already way too late, so clear those FIFOs and wait
|
||||
if self._select[1]:
|
||||
self._select=[True,False,True]
|
||||
self.enable_proximity(True)
|
||||
self.enable_gesture(True)
|
||||
self.enable_color(False)
|
||||
self.gesture_gain(gain)
|
||||
|
||||
if self._get_bit(_APDS9960_GSTATUS, _BIT_MASK_GSTATUS_GFOV):
|
||||
self._set_bit(_APDS9960_GCONF4, _BIT_MASK_GCONF4_GFIFO_CLR, True)
|
||||
wait_cycles = 0
|
||||
while ( not self._get_bit(_APDS9960_STATUS, _BIT_MASK_STATUS_GINT) and wait_cycles <= 30 ):
|
||||
time.sleep(0.003)
|
||||
wait_cycles += 1
|
||||
|
||||
frame = []
|
||||
datasets_available = self._rreg(_APDS9960_GFLVL)
|
||||
if (self._get_bit(_APDS9960_STATUS, _BIT_MASK_STATUS_GINT) and datasets_available > 0 ):
|
||||
|
||||
buffer = bytearray(128)
|
||||
buffer_dataset = bytearray(4)
|
||||
while True:
|
||||
dataset_count = self._rreg(_APDS9960_GFLVL)
|
||||
if dataset_count == 0:
|
||||
break
|
||||
buffer=self._rreg(_APDS9960_GFIFO_U,min(128, 1 + (dataset_count * 4)))
|
||||
# Unpack data stream into more usable U/D/L/R datasets for analysis
|
||||
idx = 0
|
||||
for i in range(dataset_count):
|
||||
idx = i * 4
|
||||
buffer_dataset[0] = buffer[idx]
|
||||
buffer_dataset[1] = buffer[idx + 1]
|
||||
buffer_dataset[2] = buffer[idx + 2]
|
||||
buffer_dataset[3] = buffer[idx + 3]
|
||||
|
||||
if ((not all(val == 255 for val in buffer_dataset))
|
||||
and (not all(val == 0 for val in buffer_dataset))
|
||||
and (all(val >= 30 for val in buffer_dataset))
|
||||
):
|
||||
if len(frame) < 2:
|
||||
frame.append(tuple(buffer_dataset))
|
||||
else:
|
||||
frame[1] = tuple(buffer_dataset)
|
||||
time.sleep(0.03)
|
||||
if len(frame) < 2:
|
||||
return None
|
||||
# Determine our up/down and left/right ratios along with our first/last deltas
|
||||
f_r_ud = ((frame[0][0] - frame[0][1]) * 100) // (frame[0][0] + frame[0][1])
|
||||
f_r_lr = ((frame[0][2] - frame[0][3]) * 100) // (frame[0][2] + frame[0][3])
|
||||
l_r_ud = ((frame[1][0] - frame[1][1]) * 100) // (frame[1][0] + frame[1][1])
|
||||
l_r_lr = ((frame[1][2] - frame[1][3]) * 100) // (frame[1][2] + frame[1][3])
|
||||
delta_ud = l_r_ud - f_r_ud
|
||||
delta_lr = l_r_lr - f_r_lr
|
||||
# Make our first guess at what gesture we saw, if any
|
||||
state_ud = 0
|
||||
state_lr = 0
|
||||
if delta_ud >= 30:
|
||||
state_ud = 1
|
||||
elif delta_ud <= -30:
|
||||
state_ud = -1
|
||||
|
||||
if delta_lr >= 30:
|
||||
state_lr = 1
|
||||
elif delta_lr <= -30:
|
||||
state_lr = -1
|
||||
# Make our final decision based on our first guess and, if required, the delta data
|
||||
gesture_found = 0
|
||||
# Easy cases
|
||||
if state_ud == -1 and state_lr == 0:
|
||||
gesture_found = 1
|
||||
elif state_ud == 1 and state_lr == 0:
|
||||
gesture_found = 2
|
||||
elif state_ud == 0 and state_lr == -1:
|
||||
gesture_found = 3
|
||||
elif state_ud == 0 and state_lr == 1:
|
||||
gesture_found = 4
|
||||
# Not so easy cases
|
||||
if gesture_found == 0:
|
||||
if state_ud == -1 and state_lr == 1:
|
||||
if abs(delta_ud) > abs(delta_lr):
|
||||
gesture_found = 1
|
||||
else:
|
||||
gesture_found = 4
|
||||
elif state_ud == 1 and state_lr == -1:
|
||||
if abs(delta_ud) > abs(delta_lr):
|
||||
gesture_found = 2
|
||||
else:
|
||||
gesture_found = 3
|
||||
elif state_ud == -1 and state_lr == -1:
|
||||
if abs(delta_ud) > abs(delta_lr):
|
||||
gesture_found = 1
|
||||
else:
|
||||
gesture_found = 3
|
||||
elif state_ud == 1 and state_lr == 1:
|
||||
if abs(delta_ud) > abs(delta_lr):
|
||||
gesture_found = 2
|
||||
else:
|
||||
gesture_found = 3
|
||||
|
||||
dir_lookup = [None,"left", "right", "down", "up"]
|
||||
return dir_lookup[gesture_found]
|
||||
|
||||
## COLOR
|
||||
def color(self,gain=1):
|
||||
"""Tuple containing red, green, blue, and clear light intensity values"""
|
||||
if self._select[2]:
|
||||
self._select=[True,True,False]
|
||||
self.enable_proximity(False)
|
||||
self.enable_gesture(False)
|
||||
self.enable_color(True)
|
||||
self.color_gain(gain)
|
||||
|
||||
while not self._get_bit(_APDS9960_STATUS, _BIT_MASK_STATUS_AVALID):
|
||||
time.sleep(0.005) #"""Color data ready flag"""
|
||||
return (
|
||||
self._color_data16(_APDS9960_CDATAL + 2),
|
||||
self._color_data16(_APDS9960_CDATAL + 4),
|
||||
self._color_data16(_APDS9960_CDATAL + 6),
|
||||
self._color_data16(_APDS9960_CDATAL),
|
||||
)
|
||||
114
boards/default_src/micropython/origin/build/lib/baidu_speech.py
Normal file
114
boards/default_src/micropython/origin/build/lib/baidu_speech.py
Normal file
@@ -0,0 +1,114 @@
|
||||
"""
|
||||
Baidu ASR API
|
||||
|
||||
MicroPython library for Baidu ASR API
|
||||
=======================================================
|
||||
|
||||
#Preliminary composition 20230223
|
||||
#https://ai.baidu.com/ai-doc/SPEECH/Ek39uxgre
|
||||
#https://ai.baidu.com/unit/home#/home
|
||||
|
||||
@dahanzimin From the Mixly Team
|
||||
"""
|
||||
|
||||
import json,gc
|
||||
import urequests,array
|
||||
from ubinascii import hexlify
|
||||
from machine import Timer,unique_id
|
||||
|
||||
'''Set constant'''
|
||||
_framerate=8000
|
||||
_unique_id=hexlify(unique_id()).decode()
|
||||
|
||||
def urequests_api(method, url, **kw):
|
||||
'''Request data'''
|
||||
try:
|
||||
return json.loads(urequests.request(method, url, **kw).text)
|
||||
except Exception as e:
|
||||
raise RuntimeError("API request failed or WiFi is not connected",e)
|
||||
|
||||
def fetch_token(API_Key,Secret_Key):
|
||||
"""Get access_token"""
|
||||
url='http://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id={}&client_secret={}'.format(API_Key,Secret_Key)
|
||||
results=urequests_api("GET",url)
|
||||
if "error_description" in results.keys():
|
||||
raise ValueError(results["error_description"])
|
||||
if "access_token" in results.keys():
|
||||
return results["access_token"]
|
||||
|
||||
class Recorder:
|
||||
def __init__(self, adc,timer=2):
|
||||
self._timer=Timer(timer)
|
||||
self._mic=adc
|
||||
|
||||
def _timer_callback(self,timer):
|
||||
'''Timer callback read microphone'''
|
||||
try:
|
||||
_mic=self._mic.read_u16()-32768
|
||||
self._pcm_buffer.append(_mic &0xFF)
|
||||
self._pcm_buffer.append(_mic >>8)
|
||||
self._record_time-=1
|
||||
except:
|
||||
print("Warning: MemoryError!")
|
||||
self._pcm_buffer=bytearray()
|
||||
gc.collect()
|
||||
self._record_time=0
|
||||
|
||||
def record(self,record_time=1):
|
||||
"""Call timer to record audio"""
|
||||
self._pcm_buffer=bytearray()
|
||||
gc.collect()
|
||||
self._record_time=record_time*_framerate
|
||||
self._timer.init(freq =_framerate, mode = Timer.PERIODIC, callback = self._timer_callback)
|
||||
while True:
|
||||
if self._record_time <= 0:
|
||||
self._timer.deinit()
|
||||
gc.collect()
|
||||
return self._pcm_buffer
|
||||
|
||||
class ASR(Recorder):
|
||||
def __init__(self, adc, API_Key, Secret_Key, timer=2):
|
||||
self._token=fetch_token(API_Key,Secret_Key)
|
||||
super().__init__(adc,timer)
|
||||
|
||||
def recognize(self,record_time=1,dev_pid=1537):
|
||||
"""Access API to get voice results"""
|
||||
pcm_buffer=self.record(record_time)
|
||||
if max(pcm_buffer)>=250:
|
||||
url='http://vop.baidu.com/server_api?dev_pid={}&cuid={}&token={}'.format(dev_pid,_unique_id,self._token)
|
||||
headers = {'Content-Type': 'audio/pcm; rate={}'.format(_framerate)}
|
||||
results=urequests_api("POST",url,data=pcm_buffer,headers=headers)
|
||||
if results["err_no"] != 0:
|
||||
raise ValueError(results["err_msg"],results["err_no"])
|
||||
elif results["err_msg"] == "success.":
|
||||
gc.collect()
|
||||
return results["result"][0]
|
||||
else:
|
||||
return ''
|
||||
|
||||
class UNIT:
|
||||
def __init__(self, API_Key, Secret_Key):
|
||||
self._token=fetch_token(API_Key,Secret_Key)
|
||||
self._session_id=""
|
||||
|
||||
def chatbot(self,chatbot_id,query):
|
||||
"""Access API to intelligent dialog"""
|
||||
if len(query) > 0:
|
||||
url='https://aip.baidubce.com/rpc/2.0/unit/service/v3/chat?access_token={}'.format(self._token)
|
||||
data={"log_id":"log"+_unique_id,
|
||||
"version":"3.0",
|
||||
"service_id":chatbot_id,
|
||||
"session_id":self._session_id,
|
||||
"request":{"query":query,"terminal_id":_unique_id}}
|
||||
headers = {"content-type": "application/json"}
|
||||
results=urequests_api("POST",url,data=json.dumps(data).encode(),headers=headers)
|
||||
if results["error_code"] != 0:
|
||||
raise ValueError(results["error_msg"],results["error_code"])
|
||||
elif results["error_msg"] == "success":
|
||||
self._session_id=results["result"]['session_id']
|
||||
gc.collect()
|
||||
return results["result"]['responses'][0]['actions'][0]['say']
|
||||
else:
|
||||
return ''
|
||||
|
||||
gc.collect()
|
||||
@@ -0,0 +1,79 @@
|
||||
# Helpers for generating BLE advertising payloads.
|
||||
|
||||
from micropython import const
|
||||
import struct
|
||||
import bluetooth
|
||||
|
||||
# Advertising payloads are repeated packets of the following form:
|
||||
# 1 byte data length (N + 1)
|
||||
# 1 byte type (see constants below)
|
||||
# N bytes type-specific data
|
||||
|
||||
_ADV_TYPE_FLAGS = const(0x01)
|
||||
_ADV_TYPE_NAME = const(0x09)
|
||||
_ADV_TYPE_UUID16_COMPLETE = const(0x3)
|
||||
_ADV_TYPE_UUID32_COMPLETE = const(0x5)
|
||||
_ADV_TYPE_UUID128_COMPLETE = const(0x7)
|
||||
_ADV_TYPE_UUID16_MORE = const(0x2)
|
||||
_ADV_TYPE_UUID32_MORE = const(0x4)
|
||||
_ADV_TYPE_UUID128_MORE = const(0x6)
|
||||
_ADV_TYPE_APPEARANCE = const(0x19)
|
||||
|
||||
|
||||
# Generate a payload to be passed to gap_advertise(adv_data=...).
|
||||
def advertising_payload(limited_disc=False, br_edr=False, name=None, services=None, appearance=0):
|
||||
payload = bytearray()
|
||||
|
||||
def _append(adv_type, value):
|
||||
nonlocal payload
|
||||
payload += struct.pack("BB", len(value) + 1, adv_type) + value
|
||||
|
||||
_append(
|
||||
_ADV_TYPE_FLAGS,
|
||||
struct.pack("B", (0x01 if limited_disc else 0x02) + (0x18 if br_edr else 0x04)),
|
||||
)
|
||||
|
||||
if name:
|
||||
_append(_ADV_TYPE_NAME, name.encode())
|
||||
|
||||
if services:
|
||||
for uuid in services:
|
||||
b = bytes(uuid)
|
||||
if len(b) == 2:
|
||||
_append(_ADV_TYPE_UUID16_COMPLETE, b)
|
||||
elif len(b) == 4:
|
||||
_append(_ADV_TYPE_UUID32_COMPLETE, b)
|
||||
elif len(b) == 16:
|
||||
_append(_ADV_TYPE_UUID128_COMPLETE, b)
|
||||
|
||||
# See org.bluetooth.characteristic.gap.appearance.xml
|
||||
if appearance:
|
||||
_append(_ADV_TYPE_APPEARANCE, struct.pack("<h", appearance))
|
||||
|
||||
return payload
|
||||
|
||||
|
||||
def decode_field(payload, adv_type):
|
||||
i = 0
|
||||
result = []
|
||||
while i + 1 < len(payload):
|
||||
if payload[i + 1] == adv_type:
|
||||
result.append(payload[i + 2 : i + payload[i] + 1])
|
||||
i += 1 + payload[i]
|
||||
return result
|
||||
|
||||
|
||||
def decode_name(payload):
|
||||
n = decode_field(payload, _ADV_TYPE_NAME)
|
||||
return str(n[0], "utf-8") if n else ""
|
||||
|
||||
|
||||
def decode_services(payload):
|
||||
services = []
|
||||
for u in decode_field(payload, _ADV_TYPE_UUID16_COMPLETE):
|
||||
services.append(bluetooth.UUID(struct.unpack("<h", u)[0]))
|
||||
for u in decode_field(payload, _ADV_TYPE_UUID32_COMPLETE):
|
||||
services.append(bluetooth.UUID(struct.unpack("<d", u)[0]))
|
||||
for u in decode_field(payload, _ADV_TYPE_UUID128_COMPLETE):
|
||||
services.append(bluetooth.UUID(u))
|
||||
return services
|
||||
217
boards/default_src/micropython/origin/build/lib/ble_central.py
Normal file
217
boards/default_src/micropython/origin/build/lib/ble_central.py
Normal file
@@ -0,0 +1,217 @@
|
||||
"""
|
||||
Bluetooth-Central
|
||||
|
||||
Micropython library for the Bluetooth-Central
|
||||
=======================================================
|
||||
#Preliminary composition 20221018
|
||||
#https://github.com/micropython/micropython/tree/master/examples/bluetooth
|
||||
|
||||
dahanzimin From the Mixly Team
|
||||
"""
|
||||
import time,gc
|
||||
import bluetooth
|
||||
from micropython import const
|
||||
from ubinascii import hexlify,unhexlify
|
||||
from ble_advertising import decode_services, decode_name
|
||||
|
||||
_IRQ_CENTRAL_CONNECT = const(1)
|
||||
_IRQ_CENTRAL_DISCONNECT = const(2)
|
||||
_IRQ_GATTS_WRITE = const(3)
|
||||
_IRQ_GATTS_READ_REQUEST = const(4)
|
||||
_IRQ_SCAN_RESULT = const(5)
|
||||
_IRQ_SCAN_DONE = const(6)
|
||||
_IRQ_PERIPHERAL_CONNECT = const(7)
|
||||
_IRQ_PERIPHERAL_DISCONNECT = const(8)
|
||||
_IRQ_GATTC_SERVICE_RESULT = const(9)
|
||||
_IRQ_GATTC_SERVICE_DONE = const(10)
|
||||
_IRQ_GATTC_CHARACTERISTIC_RESULT = const(11)
|
||||
_IRQ_GATTC_CHARACTERISTIC_DONE = const(12)
|
||||
_IRQ_GATTC_DESCRIPTOR_RESULT = const(13)
|
||||
_IRQ_GATTC_DESCRIPTOR_DONE = const(14)
|
||||
_IRQ_GATTC_READ_RESULT = const(15)
|
||||
_IRQ_GATTC_READ_DONE = const(16)
|
||||
_IRQ_GATTC_WRITE_DONE = const(17)
|
||||
_IRQ_GATTC_NOTIFY = const(18)
|
||||
_IRQ_GATTC_INDICATE = const(19)
|
||||
|
||||
_ADV_IND = const(0x00)
|
||||
_ADV_DIRECT_IND = const(0x01)
|
||||
_ADV_SCAN_IND = const(0x02)
|
||||
_ADV_NONCONN_IND = const(0x03)
|
||||
|
||||
_UART_SERVICE_UUID = bluetooth.UUID(0x1101)
|
||||
_UART_RX_CHAR_UUID = bluetooth.UUID("6E400002-B5A3-F393-E0A9-E50E24DCCA9E")
|
||||
_UART_TX_CHAR_UUID = bluetooth.UUID("6E400003-B5A3-F393-E0A9-E50E24DCCA9E")
|
||||
|
||||
|
||||
class BLESimpleCentral:
|
||||
def __init__(self):
|
||||
self._ble = bluetooth.BLE()
|
||||
self._scan_flg = True
|
||||
self._ble.active(True)
|
||||
self._ble.irq(self._irq)
|
||||
self._reset()
|
||||
self.scan()
|
||||
|
||||
def _reset(self):
|
||||
# Cached name and address from a successful scan.
|
||||
self._name = None
|
||||
self._addr_type = None
|
||||
self._addr = None
|
||||
|
||||
# Callbacks for completion of various operations.
|
||||
# These reset back to None after being invoked.
|
||||
self._conn_callback = None
|
||||
self._read_callback = None
|
||||
|
||||
# Persistent callback for when new data is notified from the device.
|
||||
self._notify_callback = None
|
||||
self._write_data=None
|
||||
|
||||
# Connected device.
|
||||
self._conn_handle = None
|
||||
self._start_handle = None
|
||||
self._end_handle = None
|
||||
self._tx_handle = None
|
||||
self._rx_handle = None
|
||||
|
||||
def _irq(self, event, data):
|
||||
if event == _IRQ_SCAN_RESULT:
|
||||
addr_type, addr, adv_type, rssi, adv_data = data
|
||||
|
||||
if adv_type in (_ADV_IND, _ADV_DIRECT_IND) and _UART_SERVICE_UUID in decode_services(adv_data):
|
||||
# Found a potential device, remember it and stop scanning.
|
||||
self._addr_type = addr_type
|
||||
self._addr = bytes(addr) # Note: addr buffer is owned by caller so need to copy it.
|
||||
self._name = decode_name(adv_data) or "?"
|
||||
if self._addr in self._info[2]:
|
||||
self._ble.gap_scan(None)
|
||||
else:
|
||||
self._info[0].append(self._name)
|
||||
self._info[1].append(self._addr_type)
|
||||
self._info[2].append(self._addr)
|
||||
self._info[3].append(rssi)
|
||||
|
||||
elif event == _IRQ_SCAN_DONE:
|
||||
self._scan_flg = False
|
||||
|
||||
elif event == _IRQ_PERIPHERAL_CONNECT:
|
||||
# Connect successful.
|
||||
conn_handle, addr_type, addr = data
|
||||
if addr_type == self._addr_type and addr == self._addr:
|
||||
self._conn_handle = conn_handle
|
||||
self._ble.gattc_discover_services(self._conn_handle)
|
||||
|
||||
elif event == _IRQ_PERIPHERAL_DISCONNECT:
|
||||
# Disconnect (either initiated by us or the remote end).
|
||||
conn_handle, _, _ = data
|
||||
if conn_handle == self._conn_handle:
|
||||
# If it was initiated by us, it'll already be reset.
|
||||
self._reset()
|
||||
|
||||
elif event == _IRQ_GATTC_SERVICE_RESULT:
|
||||
# Connected device returned a service.
|
||||
conn_handle, start_handle, end_handle, uuid = data
|
||||
print("service", data)
|
||||
if conn_handle == self._conn_handle and uuid == _UART_SERVICE_UUID:
|
||||
self._start_handle, self._end_handle = start_handle, end_handle
|
||||
|
||||
elif event == _IRQ_GATTC_SERVICE_DONE:
|
||||
# Service query complete.
|
||||
if self._start_handle and self._end_handle:
|
||||
self._ble.gattc_discover_characteristics(
|
||||
self._conn_handle, self._start_handle, self._end_handle
|
||||
)
|
||||
else:
|
||||
print("Failed to find uart service.")
|
||||
|
||||
elif event == _IRQ_GATTC_CHARACTERISTIC_RESULT:
|
||||
# Connected device returned a characteristic.
|
||||
conn_handle, def_handle, value_handle, properties, uuid = data
|
||||
if conn_handle == self._conn_handle and uuid == _UART_RX_CHAR_UUID:
|
||||
self._rx_handle = value_handle
|
||||
if conn_handle == self._conn_handle and uuid == _UART_TX_CHAR_UUID:
|
||||
self._tx_handle = value_handle
|
||||
|
||||
elif event == _IRQ_GATTC_CHARACTERISTIC_DONE:
|
||||
# Characteristic query complete.
|
||||
if self._tx_handle is not None and self._rx_handle is not None:
|
||||
# We've finished connecting and discovering device, fire the connect callback.
|
||||
if self._conn_callback:
|
||||
self._conn_callback()
|
||||
else:
|
||||
print("Failed to find uart rx characteristic.")
|
||||
|
||||
elif event == _IRQ_GATTC_WRITE_DONE:
|
||||
conn_handle, value_handle, status = data
|
||||
print("TX complete")
|
||||
|
||||
elif event == _IRQ_GATTC_NOTIFY:
|
||||
conn_handle, value_handle, notify_data = data
|
||||
if conn_handle == self._conn_handle and value_handle == self._tx_handle:
|
||||
try:
|
||||
self._write_data=bytes(notify_data).decode().strip()
|
||||
except:
|
||||
self._write_data=bytes(notify_data)
|
||||
if self._notify_callback:
|
||||
self._notify_callback(self._write_data)
|
||||
|
||||
# Returns true if we've successfully connected and discovered characteristics.
|
||||
def is_connected(self):
|
||||
return (self._conn_handle is not None and self._tx_handle is not None and self._rx_handle is not None)
|
||||
|
||||
# Find a device advertising the environmental sensor service.
|
||||
def scan(self):
|
||||
self._info = [[],[],[],[]]
|
||||
self._ble.gap_scan(10000, 30000, 30000)
|
||||
while self._scan_flg:
|
||||
time.sleep_ms(10)
|
||||
self._scan_flg = True
|
||||
info=[]
|
||||
for i in range(len(self._info[0])):
|
||||
info.append([self._info[0][i],self._info[1][i],hexlify(self._info[2][i]).decode(),self._info[3][i]])
|
||||
return info
|
||||
|
||||
# Connect to the specified device (otherwise use cached address from a scan).
|
||||
def connect(self, name=None,mac=None, callback=None):
|
||||
if mac and unhexlify(mac) in self._info[2]:
|
||||
index=self._info[2].index(unhexlify(mac))
|
||||
self._addr_type=self._info[1][index]
|
||||
self._addr=unhexlify(mac)
|
||||
elif name and name in self._info[0]:
|
||||
index=self._info[0].index(name)
|
||||
self._addr_type=self._info[1][index]
|
||||
self._addr=self._info[2][index]
|
||||
else:
|
||||
raise ValueError("Bluetooth was not found")
|
||||
self._conn_callback = callback
|
||||
self._ble.gap_connect(self._addr_type, self._addr)
|
||||
return True
|
||||
|
||||
# Disconnect from current device.
|
||||
def disconnect(self):
|
||||
if not self._conn_handle:
|
||||
return
|
||||
self._ble.gap_disconnect(self._conn_handle)
|
||||
self._reset()
|
||||
gc.collect()
|
||||
|
||||
# Send data over the UART
|
||||
def send(self, v, response=False):
|
||||
if not self.is_connected():
|
||||
return
|
||||
self._ble.gattc_write(self._conn_handle, self._rx_handle, v, 1 if response else 0)
|
||||
|
||||
# Set handler for when data is received over the UART.
|
||||
def recv(self, callback= None):
|
||||
if callback:
|
||||
self._notify_callback = callback
|
||||
else:
|
||||
write_data=self._write_data
|
||||
self._write_data=None
|
||||
return write_data
|
||||
|
||||
@property
|
||||
def mac(self):
|
||||
'''Get mac address'''
|
||||
return hexlify(self._ble.config('mac')[1]).decode()
|
||||
@@ -0,0 +1,37 @@
|
||||
"""
|
||||
Bluetooth remote control handle
|
||||
|
||||
Micropython library for the Bluetooth remote control handle
|
||||
=======================================================
|
||||
#Preliminary composition 202200704
|
||||
|
||||
dahanzimin From the Mixly Team
|
||||
"""
|
||||
|
||||
from ble_peripheral import BLESimplePeripheral
|
||||
|
||||
class Handle(BLESimplePeripheral):
|
||||
def __init__(self):
|
||||
super().__init__(name="TUDAO_MASTER")
|
||||
self._buffer=bytearray(14)
|
||||
|
||||
def _receive_cb(self, data):
|
||||
if self._on_receive:
|
||||
if data !=self._buffer:
|
||||
self._buffer=data
|
||||
key=self._deal(self._buffer)
|
||||
self._on_receive(key[0],key[1],key[2],key[3])
|
||||
|
||||
def recv(self,callback):
|
||||
self._on_receive = callback
|
||||
if callback:
|
||||
super().recv(self._receive_cb)
|
||||
|
||||
def _u2s(self,n):
|
||||
return n if n < (1 << 7) else n - (1 << 8)
|
||||
|
||||
def _deal(self,data):
|
||||
if data[0]== 0xff and data[1]== 0xfe and data[12]== 0xfd and data[13]== 0xfc:
|
||||
return self._u2s(data[5]),self._u2s(data[6]),self._u2s(data[7]),self._u2s(data[8])
|
||||
else:
|
||||
return None,None,None,None
|
||||
@@ -0,0 +1,91 @@
|
||||
"""
|
||||
Bluetooth-Peripheral
|
||||
|
||||
Micropython library for the Bluetooth-Peripheral
|
||||
=======================================================
|
||||
#Preliminary composition 20221018
|
||||
#https://github.com/micropython/micropython/tree/master/examples/bluetooth
|
||||
|
||||
dahanzimin From the Mixly Team
|
||||
"""
|
||||
|
||||
import bluetooth
|
||||
from micropython import const
|
||||
from ubinascii import hexlify
|
||||
from ble_advertising import advertising_payload
|
||||
|
||||
_IRQ_CENTRAL_CONNECT = const(1)
|
||||
_IRQ_CENTRAL_DISCONNECT = const(2)
|
||||
_IRQ_GATTS_WRITE = const(3)
|
||||
|
||||
_FLAG_READ = const(0x0002)
|
||||
_FLAG_WRITE_NO_RESPONSE = const(0x0004)
|
||||
_FLAG_WRITE = const(0x0008)
|
||||
_FLAG_NOTIFY = const(0x0010)
|
||||
|
||||
_UART_UUID = bluetooth.UUID(0x1101)
|
||||
_UART_TX = (bluetooth.UUID("6E400003-B5A3-F393-E0A9-E50E24DCCA9E"),_FLAG_READ | _FLAG_NOTIFY,)
|
||||
_UART_RX = (bluetooth.UUID("6E400002-B5A3-F393-E0A9-E50E24DCCA9E"),_FLAG_WRITE | _FLAG_WRITE_NO_RESPONSE,)
|
||||
_UART_SERVICE = (_UART_UUID,(_UART_TX, _UART_RX),)
|
||||
|
||||
class BLESimplePeripheral:
|
||||
def __init__(self, name=None):
|
||||
self._ble = bluetooth.BLE()
|
||||
self._ble.active(True)
|
||||
self._ble.irq(self._irq)
|
||||
((self._handle_tx, self._handle_rx),) = self._ble.gatts_register_services((_UART_SERVICE,))
|
||||
self._connections = set()
|
||||
self._write_callback = None
|
||||
self._write_data = None
|
||||
if (name is '') or (name is None):
|
||||
name = "Mixgo_" + self.mac[-6:].upper()
|
||||
print("Bluetooth name:", name)
|
||||
self._payload = advertising_payload(name=name, services=[_UART_UUID])
|
||||
self._advertise()
|
||||
|
||||
def _irq(self, event, data):
|
||||
# Track connections so we can send notifications.
|
||||
if event == _IRQ_CENTRAL_CONNECT:
|
||||
conn_handle, _, _ = data
|
||||
print("New connection", conn_handle)
|
||||
self._connections.add(conn_handle)
|
||||
elif event == _IRQ_CENTRAL_DISCONNECT:
|
||||
conn_handle, _, _ = data
|
||||
print("Disconnected", conn_handle)
|
||||
self._connections.remove(conn_handle)
|
||||
# Start advertising again to allow a new connection.
|
||||
self._advertise()
|
||||
elif event == _IRQ_GATTS_WRITE:
|
||||
conn_handle, value_handle = data
|
||||
value = self._ble.gatts_read(value_handle)
|
||||
if value_handle == self._handle_rx:
|
||||
try:
|
||||
self._write_data=value.decode().strip()
|
||||
except:
|
||||
self._write_data=value
|
||||
if self._write_callback:
|
||||
self._write_callback(self._write_data)
|
||||
|
||||
def send(self, data):
|
||||
for conn_handle in self._connections:
|
||||
self._ble.gatts_notify(conn_handle, self._handle_tx, data)
|
||||
|
||||
def is_connected(self):
|
||||
return len(self._connections) > 0
|
||||
|
||||
def _advertise(self, interval_us=500000):
|
||||
print("Starting advertising")
|
||||
self._ble.gap_advertise(interval_us, adv_data=self._payload)
|
||||
|
||||
def recv(self, callback= None):
|
||||
if callback:
|
||||
self._write_callback = callback
|
||||
else:
|
||||
write_data=self._write_data
|
||||
self._write_data=None
|
||||
return write_data
|
||||
|
||||
@property
|
||||
def mac(self):
|
||||
'''Get mac address'''
|
||||
return hexlify(self._ble.config('mac')[1]).decode()
|
||||
@@ -0,0 +1,86 @@
|
||||
"""
|
||||
Bluetooth-uart-Peripheral
|
||||
|
||||
Micropython library for the Bluetooth-uart-Peripheral
|
||||
=======================================================
|
||||
#Preliminary composition 202200628
|
||||
#https://github.com/micropython/micropython/tree/master/examples/bluetooth
|
||||
|
||||
dahanzimin From the Mixly Team
|
||||
"""
|
||||
|
||||
import bluetooth
|
||||
from ble_advertising import advertising_payload
|
||||
from micropython import const
|
||||
|
||||
_IRQ_CENTRAL_CONNECT = const(1)
|
||||
_IRQ_CENTRAL_DISCONNECT = const(2)
|
||||
_IRQ_GATTS_WRITE = const(3)
|
||||
|
||||
_FLAG_READ = const(0x0002)
|
||||
_FLAG_WRITE_NO_RESPONSE = const(0x0004)
|
||||
_FLAG_WRITE = const(0x0008)
|
||||
_FLAG_NOTIFY = const(0x0010)
|
||||
|
||||
_UART_UUID = bluetooth.UUID("0000fff0-0000-1000-8000-00805f9b34fb")
|
||||
_UART_TX = (bluetooth.UUID("0000fff1-0000-1000-8000-00805f9b34fb"),_FLAG_READ | _FLAG_NOTIFY,)
|
||||
_UART_RX = (bluetooth.UUID("0000fff2-0000-1000-8000-00805f9b34fb"),_FLAG_WRITE | _FLAG_WRITE_NO_RESPONSE,)
|
||||
_UART_SERVICE = (_UART_UUID,(_UART_TX, _UART_RX),)
|
||||
|
||||
class BLEUART:
|
||||
def __init__(self, name="mpy-uart", rxbuf=100):
|
||||
self._ble = bluetooth.BLE()
|
||||
self._ble.active(True)
|
||||
self._ble.irq(self._irq)
|
||||
((self._tx_handle, self._rx_handle),) = self._ble.gatts_register_services((_UART_SERVICE,))
|
||||
self._ble.gatts_set_buffer(self._rx_handle, rxbuf, True)
|
||||
self._connections = set()
|
||||
self._rx_buffer = bytearray()
|
||||
self._handler = None
|
||||
self._payload = advertising_payload(name=name, services=[_UART_UUID])
|
||||
self._advertise()
|
||||
|
||||
def irq(self, handler):
|
||||
self._handler = handler
|
||||
|
||||
def _irq(self, event, data):
|
||||
# Track connections so we can send notifications.
|
||||
if event == _IRQ_CENTRAL_CONNECT:
|
||||
conn_handle, _, _ = data
|
||||
print("Bluetooth connected")
|
||||
self._connections.add(conn_handle)
|
||||
elif event == _IRQ_CENTRAL_DISCONNECT:
|
||||
conn_handle, _, _ = data
|
||||
print("Bluetooth disconnected")
|
||||
if conn_handle in self._connections:
|
||||
self._connections.remove(conn_handle)
|
||||
# Start advertising again to allow a new connection.
|
||||
self._advertise()
|
||||
elif event == _IRQ_GATTS_WRITE:
|
||||
conn_handle, value_handle = data
|
||||
if conn_handle in self._connections and value_handle == self._rx_handle:
|
||||
self._rx_buffer += self._ble.gatts_read(self._rx_handle)
|
||||
if self._handler:
|
||||
self._handler()
|
||||
|
||||
def any(self):
|
||||
return len(self._rx_buffer)
|
||||
|
||||
def read(self, sz=None):
|
||||
if not sz:
|
||||
sz = len(self._rx_buffer)
|
||||
result = self._rx_buffer[0:sz]
|
||||
self._rx_buffer = self._rx_buffer[sz:]
|
||||
return result
|
||||
|
||||
def write(self, data):
|
||||
for conn_handle in self._connections:
|
||||
self._ble.gatts_notify(conn_handle, self._tx_handle, data)
|
||||
|
||||
def close(self):
|
||||
for conn_handle in self._connections:
|
||||
self._ble.gap_disconnect(conn_handle)
|
||||
self._connections.clear()
|
||||
|
||||
def _advertise(self, interval_us=500000):
|
||||
self._ble.gap_advertise(interval_us, adv_data=self._payload)
|
||||
@@ -0,0 +1,67 @@
|
||||
# Proof-of-concept of a REPL over BLE UART.
|
||||
# Set the EoL characters to \r\n.
|
||||
|
||||
import io
|
||||
import os
|
||||
from machine import Timer
|
||||
from micropython import schedule
|
||||
from ble_uart_peripheral import BLEUART
|
||||
|
||||
_MP_STREAM_POLL = const(3)
|
||||
_MP_STREAM_POLL_RD = const(0x0001)
|
||||
|
||||
# Batch writes into 50ms intervals.
|
||||
Define_timer = Timer(2)
|
||||
|
||||
def schedule_in(handler, delay_ms):
|
||||
def _wrap(_arg):
|
||||
handler()
|
||||
if Define_timer:
|
||||
Define_timer.init(mode=Timer.ONE_SHOT, period=delay_ms, callback=_wrap)
|
||||
else:
|
||||
schedule(_wrap, None)
|
||||
|
||||
# Simple buffering stream to support the dupterm requirements.
|
||||
class BLEUARTStream(io.IOBase):
|
||||
def __init__(self, name="mpy-repl"):
|
||||
self._uart = BLEUART(name)
|
||||
self._tx_buf = bytearray()
|
||||
self._uart.irq(self._on_rx)
|
||||
|
||||
def _on_rx(self):
|
||||
if hasattr(os, "dupterm_notify"):
|
||||
os.dupterm_notify(None)
|
||||
|
||||
def read(self, sz=None):
|
||||
return self._uart.read(sz)
|
||||
|
||||
def readinto(self, buf):
|
||||
avail = self._uart.read(len(buf))
|
||||
if not avail:
|
||||
return None
|
||||
for i in range(len(avail)):
|
||||
buf[i] = avail[i]
|
||||
return len(avail)
|
||||
|
||||
def ioctl(self, op, arg):
|
||||
if op == _MP_STREAM_POLL:
|
||||
if self._uart.any():
|
||||
return _MP_STREAM_POLL_RD
|
||||
return 0
|
||||
|
||||
def _flush(self):
|
||||
data = self._tx_buf[0:100]
|
||||
self._tx_buf = self._tx_buf[100:]
|
||||
self._uart.write(data)
|
||||
if self._tx_buf:
|
||||
schedule_in(self._flush, 50)
|
||||
|
||||
def write(self, buf):
|
||||
empty = not self._tx_buf
|
||||
self._tx_buf += buf
|
||||
if empty:
|
||||
schedule_in(self._flush, 50)
|
||||
|
||||
def start(ble_name="mpy-repl"):
|
||||
stream = BLEUARTStream(name=ble_name)
|
||||
os.dupterm(stream)
|
||||
377
boards/default_src/micropython/origin/build/lib/blynklib.py
Normal file
377
boards/default_src/micropython/origin/build/lib/blynklib.py
Normal file
@@ -0,0 +1,377 @@
|
||||
# Copyright (c) 2019-2020 Anton Morozenko
|
||||
# Copyright (c) 2015-2019 Volodymyr Shymanskyy.
|
||||
# See the file LICENSE for copying permission.
|
||||
|
||||
__version__ = '0.2.6'
|
||||
|
||||
import usocket as socket
|
||||
import utime as time
|
||||
import ustruct as struct
|
||||
import uselect as select
|
||||
from micropython import const
|
||||
|
||||
ticks_ms = time.ticks_ms
|
||||
sleep_ms = time.sleep_ms
|
||||
|
||||
IOError = OSError
|
||||
|
||||
LOGO = """
|
||||
___ __ __
|
||||
/ _ )/ /_ _____ / /__
|
||||
/ _ / / // / _ \\/ '_/
|
||||
/____/_/\\_, /_//_/_/\\_\\
|
||||
/___/ for Python v{}\n""".format(__version__)
|
||||
|
||||
|
||||
def stub_log(*args):
|
||||
pass
|
||||
|
||||
|
||||
class BlynkError(Exception):
|
||||
pass
|
||||
|
||||
|
||||
class RedirectError(Exception):
|
||||
def __init__(self, server, port):
|
||||
self.server = server
|
||||
self.port = port
|
||||
|
||||
|
||||
class Protocol(object):
|
||||
MSG_RSP = const(0)
|
||||
MSG_LOGIN = const(2)
|
||||
MSG_PING = const(6)
|
||||
MSG_TWEET = const(12)
|
||||
MSG_EMAIL = const(13)
|
||||
MSG_NOTIFY = const(14)
|
||||
MSG_BRIDGE = const(15)
|
||||
MSG_HW_SYNC = const(16)
|
||||
MSG_INTERNAL = const(17)
|
||||
MSG_PROPERTY = const(19)
|
||||
MSG_HW = const(20)
|
||||
MSG_REDIRECT = const(41)
|
||||
MSG_HEAD_LEN = const(5)
|
||||
|
||||
STATUS_INVALID_TOKEN = const(9)
|
||||
STATUS_OK = const(200)
|
||||
VPIN_MAX_NUM = const(32)
|
||||
|
||||
_msg_id = 1
|
||||
|
||||
def _get_msg_id(self, **kwargs):
|
||||
if 'msg_id' in kwargs:
|
||||
return kwargs['msg_id']
|
||||
self._msg_id += const(1)
|
||||
return self._msg_id if self._msg_id <= const(0xFFFF) else const(1)
|
||||
|
||||
def _pack_msg(self, msg_type, *args, **kwargs):
|
||||
data = ('\0'.join([str(curr_arg) for curr_arg in args])).encode('utf-8')
|
||||
return struct.pack('!BHH', msg_type, self._get_msg_id(**kwargs), len(data)) + data
|
||||
|
||||
def parse_response(self, rsp_data, msg_buffer):
|
||||
msg_args = []
|
||||
msg_len = 0
|
||||
try:
|
||||
msg_type, msg_id, h_data = struct.unpack('!BHH', rsp_data[:self.MSG_HEAD_LEN])
|
||||
msg_len = self.MSG_HEAD_LEN + h_data
|
||||
except Exception as p_err:
|
||||
raise BlynkError('Message parse error: {}'.format(p_err))
|
||||
if msg_id == 0:
|
||||
raise BlynkError('invalid msg_id == 0')
|
||||
elif h_data >= msg_buffer:
|
||||
raise BlynkError('Command too long. Length = {}'.format(h_data))
|
||||
elif msg_type in (self.MSG_RSP, self.MSG_PING):
|
||||
pass
|
||||
elif msg_type in (self.MSG_HW, self.MSG_BRIDGE, self.MSG_INTERNAL, self.MSG_REDIRECT):
|
||||
msg_body = rsp_data[self.MSG_HEAD_LEN: msg_len]
|
||||
msg_args = [itm.decode('utf-8') for itm in msg_body.split(b'\0')]
|
||||
else:
|
||||
raise BlynkError("Unknown message type: '{}'".format(msg_type))
|
||||
return msg_type, msg_id, h_data, msg_args, msg_len
|
||||
|
||||
def heartbeat_msg(self, heartbeat, rcv_buffer):
|
||||
return self._pack_msg(self.MSG_INTERNAL, 'ver', __version__, 'buff-in', rcv_buffer, 'h-beat', heartbeat,
|
||||
'dev', 'mpython')
|
||||
|
||||
def login_msg(self, token):
|
||||
return self._pack_msg(self.MSG_LOGIN, token)
|
||||
|
||||
def ping_msg(self):
|
||||
return self._pack_msg(self.MSG_PING)
|
||||
|
||||
def response_msg(self, *args, **kwargs):
|
||||
return self._pack_msg(self.MSG_RSP, *args, **kwargs)
|
||||
|
||||
def virtual_write_msg(self, v_pin, *val):
|
||||
return self._pack_msg(self.MSG_HW, 'vw', v_pin, *val)
|
||||
|
||||
def virtual_sync_msg(self, *pins):
|
||||
return self._pack_msg(self.MSG_HW_SYNC, 'vr', *pins)
|
||||
|
||||
def email_msg(self, to, subject, body):
|
||||
return self._pack_msg(self.MSG_EMAIL, to, subject, body)
|
||||
|
||||
def tweet_msg(self, msg):
|
||||
return self._pack_msg(self.MSG_TWEET, msg)
|
||||
|
||||
def notify_msg(self, msg):
|
||||
return self._pack_msg(self.MSG_NOTIFY, msg)
|
||||
|
||||
def set_property_msg(self, pin, prop, *val):
|
||||
return self._pack_msg(self.MSG_PROPERTY, pin, prop, *val)
|
||||
|
||||
def internal_msg(self, *args):
|
||||
return self._pack_msg(self.MSG_INTERNAL, *args)
|
||||
|
||||
|
||||
class Connection(Protocol):
|
||||
SOCK_MAX_TIMEOUT = const(5)
|
||||
SOCK_TIMEOUT = 0.05
|
||||
EAGAIN = const(11)
|
||||
ETIMEDOUT = const(60)
|
||||
RETRIES_TX_DELAY = const(2)
|
||||
RETRIES_TX_MAX_NUM = const(3)
|
||||
RECONNECT_SLEEP = const(1)
|
||||
TASK_PERIOD_RES = const(50)
|
||||
DISCONNECTED = const(0)
|
||||
CONNECTING = const(1)
|
||||
AUTHENTICATING = const(2)
|
||||
AUTHENTICATED = const(3)
|
||||
|
||||
_state = None
|
||||
_socket = None
|
||||
_last_rcv_time = 0
|
||||
_last_ping_time = 0
|
||||
_last_send_time = 0
|
||||
|
||||
def __init__(self, token, server='blynk-cloud.com', port=80, heartbeat=10, rcv_buffer=1024, log=stub_log):
|
||||
self.token = token
|
||||
self.server = server
|
||||
self.port = port
|
||||
self.heartbeat = heartbeat
|
||||
self.rcv_buffer = rcv_buffer
|
||||
self.log = log
|
||||
|
||||
def _set_socket_timeout(self, timeout):
|
||||
if getattr(self._socket, 'settimeout', None):
|
||||
self._socket.settimeout(timeout)
|
||||
else:
|
||||
p = select.poll()
|
||||
p.register(self._socket)
|
||||
p.poll(int(timeout * const(1000)))
|
||||
|
||||
def send(self, data):
|
||||
retries = self.RETRIES_TX_MAX_NUM
|
||||
while retries > 0:
|
||||
try:
|
||||
retries -= 1
|
||||
self._last_send_time = ticks_ms()
|
||||
return self._socket.send(data)
|
||||
except (IOError, OSError):
|
||||
sleep_ms(self.RETRIES_TX_DELAY)
|
||||
|
||||
def receive(self, length, timeout):
|
||||
d_buff = b''
|
||||
try:
|
||||
self._set_socket_timeout(timeout)
|
||||
d_buff += self._socket.recv(length)
|
||||
if len(d_buff) >= length:
|
||||
d_buff = d_buff[:length]
|
||||
return d_buff
|
||||
except (IOError, OSError) as err:
|
||||
if str(err) == 'timed out':
|
||||
return b''
|
||||
if str(self.EAGAIN) in str(err) or str(self.ETIMEDOUT) in str(err):
|
||||
return b''
|
||||
raise
|
||||
|
||||
def is_server_alive(self):
|
||||
now = ticks_ms()
|
||||
h_beat_ms = self.heartbeat * const(1000)
|
||||
rcv_delta = time.ticks_diff(now, self._last_rcv_time)
|
||||
ping_delta = time.ticks_diff(now, self._last_ping_time)
|
||||
send_delta = time.ticks_diff(now, self._last_send_time)
|
||||
if rcv_delta > h_beat_ms + (h_beat_ms // const(2)):
|
||||
return False
|
||||
if (ping_delta > h_beat_ms // const(10)) and (send_delta > h_beat_ms or rcv_delta > h_beat_ms):
|
||||
self.send(self.ping_msg())
|
||||
self.log('Heartbeat time: {}'.format(now))
|
||||
self._last_ping_time = now
|
||||
return True
|
||||
|
||||
def _get_socket(self):
|
||||
try:
|
||||
self._state = self.CONNECTING
|
||||
self._socket = socket.socket()
|
||||
self._socket.connect(socket.getaddrinfo(self.server, self.port)[0][-1])
|
||||
self._set_socket_timeout(self.SOCK_TIMEOUT)
|
||||
self.log('Connected to server')
|
||||
except Exception as g_exc:
|
||||
raise BlynkError('Server connection failed: {}'.format(g_exc))
|
||||
|
||||
def _authenticate(self):
|
||||
self.log('Authenticating device...')
|
||||
self._state = self.AUTHENTICATING
|
||||
self.send(self.login_msg(self.token))
|
||||
rsp_data = self.receive(self.rcv_buffer, self.SOCK_MAX_TIMEOUT)
|
||||
if not rsp_data:
|
||||
raise BlynkError('Auth stage timeout')
|
||||
msg_type, _, status, args, _ = self.parse_response(rsp_data, self.rcv_buffer)
|
||||
if status != self.STATUS_OK:
|
||||
if status == self.STATUS_INVALID_TOKEN:
|
||||
raise BlynkError('Invalid Auth Token')
|
||||
if msg_type == self.MSG_REDIRECT:
|
||||
raise RedirectError(*args)
|
||||
raise BlynkError('Auth stage failed. Status={}'.format(status))
|
||||
self._state = self.AUTHENTICATED
|
||||
self.log('Access granted')
|
||||
|
||||
def _set_heartbeat(self):
|
||||
self.send(self.heartbeat_msg(self.heartbeat, self.rcv_buffer))
|
||||
rcv_data = self.receive(self.rcv_buffer, self.SOCK_MAX_TIMEOUT)
|
||||
if not rcv_data:
|
||||
raise BlynkError('Heartbeat stage timeout')
|
||||
_, _, status, _, _ = self.parse_response(rcv_data, self.rcv_buffer)
|
||||
if status != self.STATUS_OK:
|
||||
raise BlynkError('Set heartbeat returned code={}'.format(status))
|
||||
self.log('Heartbeat = {} sec. MaxCmdBuffer = {} bytes'.format(self.heartbeat, self.rcv_buffer))
|
||||
|
||||
def connected(self):
|
||||
return True if self._state == self.AUTHENTICATED else False
|
||||
|
||||
|
||||
class Blynk(Connection):
|
||||
_CONNECT_TIMEOUT = const(30) # 30sec
|
||||
_VPIN_WILDCARD = '*'
|
||||
_VPIN_READ = 'read v'
|
||||
_VPIN_WRITE = 'write v'
|
||||
_INTERNAL = 'internal_'
|
||||
_CONNECT = 'connect'
|
||||
_DISCONNECT = 'disconnect'
|
||||
_VPIN_READ_ALL = '{}{}'.format(_VPIN_READ, _VPIN_WILDCARD)
|
||||
_VPIN_WRITE_ALL = '{}{}'.format(_VPIN_WRITE, _VPIN_WILDCARD)
|
||||
_events = {}
|
||||
|
||||
def __init__(self, token, **kwargs):
|
||||
Connection.__init__(self, token, **kwargs)
|
||||
self._start_time = ticks_ms()
|
||||
self._last_rcv_time = ticks_ms()
|
||||
self._last_send_time = ticks_ms()
|
||||
self._last_ping_time = ticks_ms()
|
||||
self._state = self.DISCONNECTED
|
||||
print(LOGO)
|
||||
|
||||
def connect(self, timeout=_CONNECT_TIMEOUT):
|
||||
end_time = time.time() + timeout
|
||||
while not self.connected():
|
||||
if self._state == self.DISCONNECTED:
|
||||
try:
|
||||
self._get_socket()
|
||||
self._authenticate()
|
||||
self._set_heartbeat()
|
||||
self._last_rcv_time = ticks_ms()
|
||||
self.log('Registered events: {}\n'.format(list(self._events.keys())))
|
||||
self.call_handler(self._CONNECT)
|
||||
return True
|
||||
except BlynkError as b_err:
|
||||
self.disconnect(b_err)
|
||||
sleep_ms(self.TASK_PERIOD_RES)
|
||||
except RedirectError as r_err:
|
||||
self.disconnect()
|
||||
self.server = r_err.server
|
||||
self.port = r_err.port
|
||||
sleep_ms(self.TASK_PERIOD_RES)
|
||||
if time.time() >= end_time:
|
||||
return False
|
||||
|
||||
def disconnect(self, err_msg=None):
|
||||
self.call_handler(self._DISCONNECT)
|
||||
if self._socket:
|
||||
self._socket.close()
|
||||
self._state = self.DISCONNECTED
|
||||
if err_msg:
|
||||
self.log('[ERROR]: {}\nConnection closed'.format(err_msg))
|
||||
time.sleep(self.RECONNECT_SLEEP)
|
||||
|
||||
def virtual_write(self, v_pin, *val):
|
||||
return self.send(self.virtual_write_msg(v_pin, *val))
|
||||
|
||||
def virtual_sync(self, *v_pin):
|
||||
return self.send(self.virtual_sync_msg(*v_pin))
|
||||
|
||||
def email(self, to, subject, body):
|
||||
return self.send(self.email_msg(to, subject, body))
|
||||
|
||||
def tweet(self, msg):
|
||||
return self.send(self.tweet_msg(msg))
|
||||
|
||||
def notify(self, msg):
|
||||
return self.send(self.notify_msg(msg))
|
||||
|
||||
def set_property(self, v_pin, property_name, *val):
|
||||
return self.send(self.set_property_msg(v_pin, property_name, *val))
|
||||
|
||||
def internal(self, *args):
|
||||
return self.send(self.internal_msg(*args))
|
||||
|
||||
def handle_event(blynk, event_name):
|
||||
class Deco(object):
|
||||
def __init__(self, func):
|
||||
self.func = func
|
||||
# wildcard 'read V*' and 'write V*' events handling
|
||||
if str(event_name).lower() in (blynk._VPIN_READ_ALL, blynk._VPIN_WRITE_ALL):
|
||||
event_base_name = str(event_name).split(blynk._VPIN_WILDCARD)[0]
|
||||
for i in range(blynk.VPIN_MAX_NUM + 1):
|
||||
blynk._events['{}{}'.format(event_base_name.lower(), i)] = func
|
||||
else:
|
||||
blynk._events[str(event_name).lower()] = func
|
||||
|
||||
def __call__(self):
|
||||
return self.func()
|
||||
|
||||
return Deco
|
||||
|
||||
def call_handler(self, event, *args, **kwargs):
|
||||
if event in self._events.keys():
|
||||
self.log("Event: ['{}'] -> {}".format(event, args))
|
||||
self._events[event](*args, **kwargs)
|
||||
|
||||
def process(self, msg_type, msg_id, msg_len, msg_args):
|
||||
if msg_type == self.MSG_RSP:
|
||||
self.log('Response status: {}'.format(msg_len))
|
||||
elif msg_type == self.MSG_PING:
|
||||
self.send(self.response_msg(self.STATUS_OK, msg_id=msg_id))
|
||||
elif msg_type in (self.MSG_HW, self.MSG_BRIDGE, self.MSG_INTERNAL):
|
||||
if msg_type == self.MSG_INTERNAL:
|
||||
self.call_handler("{}{}".format(self._INTERNAL, msg_args[0]), msg_args[1:])
|
||||
elif len(msg_args) >= const(3) and msg_args[0] == 'vw':
|
||||
self.call_handler("{}{}".format(self._VPIN_WRITE, msg_args[1]), int(msg_args[1]), msg_args[2:])
|
||||
elif len(msg_args) == const(2) and msg_args[0] == 'vr':
|
||||
self.call_handler("{}{}".format(self._VPIN_READ, msg_args[1]), int(msg_args[1]))
|
||||
|
||||
def read_response(self, timeout=0.5):
|
||||
end_time = time.ticks_ms() + int(timeout * const(1000))
|
||||
while time.ticks_diff(end_time, time.ticks_ms()) > 0:
|
||||
rsp_data = self.receive(self.rcv_buffer, self.SOCK_TIMEOUT)
|
||||
if rsp_data:
|
||||
self._last_rcv_time = ticks_ms()
|
||||
while rsp_data:
|
||||
msg_type, msg_id, h_data, msg_args, msg_len = self.parse_response(rsp_data, self.rcv_buffer)
|
||||
self.process(msg_type, msg_id, h_data, msg_args)
|
||||
rsp_data = rsp_data[msg_len:]
|
||||
|
||||
def run(self):
|
||||
if not self.connected():
|
||||
self.connect()
|
||||
else:
|
||||
try:
|
||||
self.read_response(timeout=self.SOCK_TIMEOUT)
|
||||
if not self.is_server_alive():
|
||||
self.disconnect('Server is offline')
|
||||
except KeyboardInterrupt:
|
||||
raise
|
||||
except BlynkError as b_err:
|
||||
self.log(b_err)
|
||||
self.disconnect()
|
||||
except Exception as g_exc:
|
||||
self.log(g_exc)
|
||||
133
boards/default_src/micropython/origin/build/lib/blynktimer.py
Normal file
133
boards/default_src/micropython/origin/build/lib/blynktimer.py
Normal file
@@ -0,0 +1,133 @@
|
||||
# Copyright (c) 2019-2020 Anton Morozenko
|
||||
"""
|
||||
Polling timers for functions.
|
||||
Registers timers and performs run once or periodical function execution after defined time intervals.
|
||||
"""
|
||||
# select.select call used as polling waiter where it is possible
|
||||
# cause time.sleep sometimes may load CPU up to 100% with small polling wait interval
|
||||
try:
|
||||
# cpython
|
||||
import time
|
||||
import select
|
||||
|
||||
polling_wait = lambda x: select.select([], [], [], x)
|
||||
polling_wait(0.01)
|
||||
except OSError:
|
||||
# windows case where select.select call fails
|
||||
polling_wait = lambda x: time.sleep(x)
|
||||
|
||||
except ImportError:
|
||||
# micropython
|
||||
import utime as time
|
||||
|
||||
try:
|
||||
from uselect import select as s_select
|
||||
|
||||
polling_wait = lambda x: s_select([], [], [], x)
|
||||
except ImportError:
|
||||
# case when micropython port does not support select.select
|
||||
polling_wait = lambda x: time.sleep(x)
|
||||
|
||||
WAIT_SEC = 0.05
|
||||
MAX_TIMERS = 16
|
||||
DEFAULT_INTERVAL = 10
|
||||
|
||||
|
||||
class TimerError(Exception):
|
||||
pass
|
||||
|
||||
|
||||
class Timer(object):
|
||||
timers = {}
|
||||
|
||||
def __init__(self, no_timers_err=True):
|
||||
self.no_timers_err = no_timers_err
|
||||
|
||||
def _get_func_name(self, obj):
|
||||
"""retrieves a suitable name for a function"""
|
||||
if hasattr(obj, 'func'):
|
||||
# handles nested decorators
|
||||
return self._get_func_name(obj.func)
|
||||
# simply returns 'timer' if on port without function attrs
|
||||
return getattr(obj, '__name__', 'timer')
|
||||
|
||||
def register(blynk, *args, **kwargs):
|
||||
# kwargs with defaults are used cause PEP 3102 no supported by Python2
|
||||
interval = kwargs.pop('interval', DEFAULT_INTERVAL)
|
||||
run_once = kwargs.pop('run_once', False)
|
||||
stopped = kwargs.pop('stopped', False)
|
||||
|
||||
class Deco(object):
|
||||
def __init__(self, func):
|
||||
self.func = func
|
||||
if len(list(Timer.timers.keys())) >= MAX_TIMERS:
|
||||
raise TimerError('Max allowed timers num={}'.format(MAX_TIMERS))
|
||||
_timer = _Timer(interval, func, run_once, stopped, *args, **kwargs)
|
||||
Timer.timers['{}_{}'.format(len(list(Timer.timers.keys())), blynk._get_func_name(func))] = _timer
|
||||
|
||||
def __call__(self, *f_args, **f_kwargs):
|
||||
return self.func(*f_args, **f_kwargs)
|
||||
|
||||
return Deco
|
||||
|
||||
@staticmethod
|
||||
def stop(t_id):
|
||||
timer = Timer.timers.get(t_id, None)
|
||||
if timer is None:
|
||||
raise TimerError('Timer id={} not found'.format(t_id))
|
||||
Timer.timers[t_id].stopped = True
|
||||
|
||||
@staticmethod
|
||||
def start(t_id):
|
||||
timer = Timer.timers.get(t_id, None)
|
||||
if timer is None:
|
||||
raise TimerError('Timer id={} not found'.format(t_id))
|
||||
Timer.timers[t_id].stopped = False
|
||||
Timer.timers[t_id].fire_time = None
|
||||
Timer.timers[t_id].fire_time_prev = None
|
||||
|
||||
@staticmethod
|
||||
def is_stopped(t_id):
|
||||
timer = Timer.timers.get(t_id, None)
|
||||
if timer is None:
|
||||
raise TimerError('Timer id={} not found'.format(t_id))
|
||||
return timer.stopped
|
||||
|
||||
def get_timers(self):
|
||||
states = {True: 'Stopped', False: 'Running'}
|
||||
return {k: states[v.stopped] for k, v in self.timers.items()}
|
||||
|
||||
def run(self):
|
||||
polling_wait(WAIT_SEC)
|
||||
timers_intervals = [curr_timer.run() for curr_timer in Timer.timers.values() if not curr_timer.stopped]
|
||||
if not timers_intervals and self.no_timers_err:
|
||||
raise TimerError('Running timers not found')
|
||||
return timers_intervals
|
||||
|
||||
|
||||
class _Timer(object):
|
||||
def __init__(self, interval, deco, run_once, stopped, *args, **kwargs):
|
||||
self.interval = interval
|
||||
self.deco = deco
|
||||
self.args = args
|
||||
self.run_once = run_once
|
||||
self.kwargs = kwargs
|
||||
self.fire_time = None
|
||||
self.fire_time_prev = None
|
||||
self.stopped = stopped
|
||||
|
||||
def run(self):
|
||||
timer_real_interval = 0
|
||||
if self.fire_time is None:
|
||||
self.fire_time = time.time() + self.interval
|
||||
if self.fire_time_prev is None:
|
||||
self.fire_time_prev = time.time()
|
||||
curr_time = time.time()
|
||||
if curr_time >= self.fire_time:
|
||||
self.deco(*self.args, **self.kwargs)
|
||||
if self.run_once:
|
||||
self.stopped = True
|
||||
timer_real_interval = curr_time - self.fire_time_prev
|
||||
self.fire_time_prev = self.fire_time
|
||||
self.fire_time = curr_time + self.interval
|
||||
return timer_real_interval
|
||||
162
boards/default_src/micropython/origin/build/lib/bmp280.py
Normal file
162
boards/default_src/micropython/origin/build/lib/bmp280.py
Normal file
@@ -0,0 +1,162 @@
|
||||
from ustruct import unpack as unp
|
||||
import utime
|
||||
|
||||
# Power Modes
|
||||
NORMAL = 0
|
||||
BMP280_TEMP_OS_SKIP = 0
|
||||
BMP280_TEMP_OS_1 = 1
|
||||
BMP280_TEMP_OS_2 = 2
|
||||
BMP280_TEMP_OS_4 = 3
|
||||
BMP280_TEMP_OS_8 = 4
|
||||
BMP280_TEMP_OS_16 = 5
|
||||
BMP280_PRES_OS_SKIP = 0
|
||||
BMP280_PRES_OS_1 = 1
|
||||
BMP280_PRES_OS_2 = 2
|
||||
BMP280_PRES_OS_4 = 3
|
||||
BMP280_PRES_OS_8 = 4
|
||||
BMP280_PRES_OS_16 = 5
|
||||
# BMP280 Temperature Registers
|
||||
BMP280_REGISTER_DIG_T1 = 0x88
|
||||
BMP280_REGISTER_DIG_T2 = 0x8A
|
||||
BMP280_REGISTER_DIG_T3 = 0x8C
|
||||
# BMP280 Pressure Registers
|
||||
BMP280_REGISTER_DIG_P1 = 0x8E
|
||||
BMP280_REGISTER_DIG_P2 = 0x90
|
||||
BMP280_REGISTER_DIG_P3 = 0x92
|
||||
BMP280_REGISTER_DIG_P4 = 0x94
|
||||
BMP280_REGISTER_DIG_P5 = 0x96
|
||||
BMP280_REGISTER_DIG_P6 = 0x98
|
||||
BMP280_REGISTER_DIG_P7 = 0x9A
|
||||
BMP280_REGISTER_DIG_P8 = 0x9C
|
||||
BMP280_REGISTER_DIG_P9 = 0x9E
|
||||
BMP280_REGISTER_ID = 0xD0
|
||||
BMP280_REGISTER_RESET = 0xE0
|
||||
BMP280_REGISTER_STATUS = 0xF3
|
||||
BMP280_REGISTER_CONTROL = 0xF4
|
||||
BMP280_REGISTER_CONFIG = 0xF5 # IIR filter config
|
||||
BMP280_REGISTER_DATA = 0xF7
|
||||
|
||||
class BMP280:
|
||||
def __init__(self, i2c_bus, addr=0x77):
|
||||
self._bmp_i2c = i2c_bus
|
||||
self._i2c_addr = addr
|
||||
self.chip_id = self._read(BMP280_REGISTER_ID, 2)
|
||||
|
||||
self._T1 = unp('<H', self._read(BMP280_REGISTER_DIG_T1, 2))[0]
|
||||
self._T2 = unp('<h', self._read(BMP280_REGISTER_DIG_T2, 2))[0]
|
||||
self._T3 = unp('<h', self._read(BMP280_REGISTER_DIG_T3, 2))[0]
|
||||
self._P1 = unp('<H', self._read(BMP280_REGISTER_DIG_P1, 2))[0]
|
||||
self._P2 = unp('<h', self._read(BMP280_REGISTER_DIG_P2, 2))[0]
|
||||
self._P3 = unp('<h', self._read(BMP280_REGISTER_DIG_P3, 2))[0]
|
||||
self._P4 = unp('<h', self._read(BMP280_REGISTER_DIG_P4, 2))[0]
|
||||
self._P5 = unp('<h', self._read(BMP280_REGISTER_DIG_P5, 2))[0]
|
||||
self._P6 = unp('<h', self._read(BMP280_REGISTER_DIG_P6, 2))[0]
|
||||
self._P7 = unp('<h', self._read(BMP280_REGISTER_DIG_P7, 2))[0]
|
||||
self._P8 = unp('<h', self._read(BMP280_REGISTER_DIG_P8, 2))[0]
|
||||
self._P9 = unp('<h', self._read(BMP280_REGISTER_DIG_P9, 2))[0]
|
||||
|
||||
self._t_os = BMP280_TEMP_OS_2 # temperature oversampling
|
||||
self._p_os = BMP280_PRES_OS_16 # pressure oversampling
|
||||
# output raw
|
||||
self._t_raw = 0
|
||||
self._t_fine = 0
|
||||
self._t = 0
|
||||
self._p_raw = 0
|
||||
self._p = 0
|
||||
self._read_wait_ms = 100 # interval between forced measure and readout
|
||||
self._new_read_ms = 200 # interval between
|
||||
self._last_read_ts = 0
|
||||
|
||||
def _read(self, addr, size=1):
|
||||
return self._bmp_i2c.readfrom_mem(self._i2c_addr, addr, size)
|
||||
|
||||
def _write(self, addr, b_arr):
|
||||
if not type(b_arr) is bytearray:
|
||||
b_arr = bytearray([b_arr])
|
||||
return self._bmp_i2c.writeto_mem(self._i2c_addr, addr, b_arr)
|
||||
|
||||
def _gauge(self):
|
||||
# TODO limit new reads
|
||||
now = utime.ticks_ms()
|
||||
if utime.ticks_diff(now, self._last_read_ts) > self._new_read_ms:
|
||||
self._last_read_ts = now
|
||||
r = self._t_os + (self._p_os << 3) + (1 << 6)
|
||||
self._write(BMP280_REGISTER_CONTROL, r)
|
||||
utime.sleep_ms(100) # TODO calc sleep
|
||||
d = self._read(BMP280_REGISTER_DATA, 6) # read all data at once (as by spec)
|
||||
self._p_raw = (d[0] << 12) + (d[1] << 4) + (d[2] >> 4)
|
||||
self._t_raw = (d[3] << 12) + (d[4] << 4) + (d[5] >> 4)
|
||||
self._t_fine = 0
|
||||
self._t = 0
|
||||
self._p = 0
|
||||
|
||||
def load_test_calibration(self):
|
||||
self._T1 = 27504
|
||||
self._T2 = 26435
|
||||
self._T3 = -1000
|
||||
self._P1 = 36477
|
||||
self._P2 = -10685
|
||||
self._P3 = 3024
|
||||
self._P4 = 2855
|
||||
self._P5 = 140
|
||||
self._P6 = -7
|
||||
self._P7 = 15500
|
||||
self._P8 = -14600
|
||||
self._P9 = 6000
|
||||
|
||||
def load_test_data(self):
|
||||
self._t_raw = 519888
|
||||
self._p_raw = 415148
|
||||
|
||||
def print_calibration(self):
|
||||
print("T1: {} {}".format(self._T1, type(self._T1)))
|
||||
print("T2: {} {}".format(self._T2, type(self._T2)))
|
||||
print("T3: {} {}".format(self._T3, type(self._T3)))
|
||||
print("P1: {} {}".format(self._P1, type(self._P1)))
|
||||
print("P2: {} {}".format(self._P2, type(self._P2)))
|
||||
print("P3: {} {}".format(self._P3, type(self._P3)))
|
||||
print("P4: {} {}".format(self._P4, type(self._P4)))
|
||||
print("P5: {} {}".format(self._P5, type(self._P5)))
|
||||
print("P6: {} {}".format(self._P6, type(self._P6)))
|
||||
print("P7: {} {}".format(self._P7, type(self._P7)))
|
||||
print("P8: {} {}".format(self._P8, type(self._P8)))
|
||||
print("P9: {} {}".format(self._P9, type(self._P9)))
|
||||
|
||||
def _calc_t_fine(self):
|
||||
# From datasheet page 22
|
||||
self._gauge()
|
||||
if self._t_fine == 0:
|
||||
var1 = (((self._t_raw >> 3) - (self._T1 << 1)) * self._T2) >> 11
|
||||
var2 = (((((self._t_raw >> 4) - self._T1) * ((self._t_raw >> 4) - self._T1)) >> 12) * self._T3) >> 14
|
||||
self._t_fine = var1 + var2
|
||||
|
||||
# @property
|
||||
def get_BMP_temperature(self):
|
||||
self._calc_t_fine()
|
||||
if self._t == 0:
|
||||
self._t = ((self._t_fine * 5 + 128) >> 8) / 100.
|
||||
return self._t
|
||||
|
||||
# @property
|
||||
def get_BMP_pressure(self):
|
||||
# From datasheet page 22
|
||||
self._calc_t_fine()
|
||||
if self._p == 0:
|
||||
var1 = self._t_fine - 128000
|
||||
var2 = var1 * var1 * self._P6
|
||||
var2 = var2 + ((var1 * self._P5) << 17)
|
||||
var2 = var2 + (self._P4 << 35)
|
||||
var1 = ((var1 * var1 * self._P3) >> 8) + ((var1 * self._P2) << 12)
|
||||
var1 = (((1 << 47) + var1) * self._P1) >> 33
|
||||
|
||||
if var1 == 0:
|
||||
return 0
|
||||
|
||||
p = 1048576 - self._p_raw
|
||||
p = int((((p << 31) - var2) * 3125) / var1)
|
||||
var1 = (self._P9 * (p >> 13) * (p >> 13)) >> 25
|
||||
var2 = (self._P8 * p) >> 19
|
||||
|
||||
p = ((p + var1 + var2) >> 8) + (self._P7 << 4)
|
||||
self._p = p / 256.0
|
||||
return self._p
|
||||
85
boards/default_src/micropython/origin/build/lib/cc_g1.py
Normal file
85
boards/default_src/micropython/origin/build/lib/cc_g1.py
Normal file
@@ -0,0 +1,85 @@
|
||||
"""
|
||||
CC_G1
|
||||
|
||||
Micropython library for the CC_G1(Remote control handle)
|
||||
=======================================================
|
||||
|
||||
#Preliminary composition 20231222
|
||||
|
||||
@dahanzimin From the Mixly Team
|
||||
"""
|
||||
from micropython import const
|
||||
from machine import Pin,SoftI2C
|
||||
|
||||
_CC_G1_ADDRESS = const(0x27)
|
||||
_CC_G1_ID = const(0x00)
|
||||
_CC_G1_VBAT = const(0x01)
|
||||
_CC_G1_ADC = const(0x03)
|
||||
_CC_G1_KEY = const(0x07)
|
||||
|
||||
class Handle:
|
||||
def __init__(self, i2c_bus, addr=_CC_G1_ADDRESS):
|
||||
self._i2c=i2c_bus
|
||||
self._addr = addr
|
||||
if self._rreg(_CC_G1_ID)!= 0x27:
|
||||
raise AttributeError("Cannot find a CC_G1")
|
||||
|
||||
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 read_bat(self, ratio=5/1023):
|
||||
'''Read battery power'''
|
||||
vbat = self._rreg(_CC_G1_VBAT)<<2 | self._rreg(_CC_G1_VBAT+1)>>6
|
||||
return round(vbat*ratio, 2)
|
||||
|
||||
def read_joystick(self, ratio=100/1023):
|
||||
'''Read joystick'''
|
||||
y_axis = 1023 - (self._rreg(_CC_G1_ADC) << 2 | self._rreg(_CC_G1_ADC + 1) >> 6)
|
||||
x_axis = self._rreg(_CC_G1_ADC + 2 ) << 2 | self._rreg(_CC_G1_ADC + 3) >> 6
|
||||
return round(x_axis*ratio), round(y_axis*ratio)
|
||||
|
||||
def read_key(self, index):
|
||||
'''Read key1~6'''
|
||||
if not 0 <= index <= 5:
|
||||
raise ValueError("The key number must be a number in the range: 0~5")
|
||||
if index<=4:
|
||||
return bool(self._rreg(_CC_G1_KEY) >> index & 0x01)
|
||||
else:
|
||||
return bool(self._rreg(_CC_G1_KEY) >> 7 & 0x01)
|
||||
|
||||
def shutdown(self, flag=True):
|
||||
"""This function is only available on battery power"""
|
||||
if flag:
|
||||
self._wreg(_CC_G1_KEY, (self._rreg(_CC_G1_KEY)) & 0XBF)
|
||||
else:
|
||||
self._wreg(_CC_G1_KEY, (self._rreg(_CC_G1_KEY)) | 0X40)
|
||||
|
||||
'''Select instantiation objects'''
|
||||
try:
|
||||
#MixGo CC/ME
|
||||
ext_i2c = SoftI2C(scl=Pin(0), sda=Pin(1), freq=100000)
|
||||
handle = Handle(ext_i2c)
|
||||
except:
|
||||
try:
|
||||
#MixGo CE
|
||||
ext_i2c = SoftI2C(scl=Pin(17), sda=Pin(18), freq=100000)
|
||||
handle = Handle(ext_i2c)
|
||||
except:
|
||||
try:
|
||||
#MixGo Mini
|
||||
ext_i2c = SoftI2C(scl=Pin(8), sda=Pin(7), freq=100000)
|
||||
handle = Handle(ext_i2c)
|
||||
except:
|
||||
print("MixGo board cannot find a CC_G1")
|
||||
147
boards/default_src/micropython/origin/build/lib/ch914x_at.py
Normal file
147
boards/default_src/micropython/origin/build/lib/ch914x_at.py
Normal file
@@ -0,0 +1,147 @@
|
||||
"""
|
||||
Bluetooth AT
|
||||
|
||||
Micropython library for the Bluetooth AT(WCH)
|
||||
=======================================================
|
||||
|
||||
#Preliminary composition 20230106
|
||||
|
||||
dahanzimin From the Mixly Team
|
||||
"""
|
||||
from machine import Pin
|
||||
from time import sleep_ms
|
||||
|
||||
class AT:
|
||||
def __init__(self, pin,times=5):
|
||||
self.at_pin = Pin(pin, Pin.OUT)
|
||||
self.at_pin.value(1)
|
||||
self._times = times
|
||||
self._flag = [0,0,0,0,0,0,0,0] #mac0,1 name2,3 power4,5 power6,7
|
||||
self._power = [0,1,2,3,-3,-8,-14,-20]
|
||||
sleep_ms(100)
|
||||
|
||||
def _str_reverse(self,data):
|
||||
data=data.split(':')
|
||||
data.reverse()
|
||||
data=":".join(data)
|
||||
return data
|
||||
|
||||
def ble_mac(self, mac=None):
|
||||
sleep_ms(200)
|
||||
if mac is None:
|
||||
if not (self._flag[0] >= self._times and self._times != 0):
|
||||
self._flag[0]+=1
|
||||
self.at_pin.value(0)
|
||||
sleep_ms(10)
|
||||
data=input('AT+MAC?\r\n')
|
||||
input()
|
||||
self.at_pin.value(1)
|
||||
print('BLE_MAC:',self._str_reverse(data))
|
||||
sleep_ms(100)
|
||||
return self._str_reverse(data)
|
||||
else:
|
||||
print('Please delete this command and upload other programs again')
|
||||
else:
|
||||
if not (self._flag[1] >= self._times and self._times != 0):
|
||||
self._flag[1]+=1
|
||||
self.at_pin.value(0)
|
||||
sleep_ms(10)
|
||||
data=input('AT+MAC={}\r\n'.format(self._str_reverse(mac)))
|
||||
print('\r\n')
|
||||
self.at_pin.value(1)
|
||||
print('BLE_MAC:',mac,data)
|
||||
sleep_ms(100)
|
||||
return True if data is "OK" else False
|
||||
else:
|
||||
print('Please delete this command and upload other programs again')
|
||||
|
||||
def ble_name(self, name=None):
|
||||
sleep_ms(200)
|
||||
if name is None:
|
||||
if not (self._flag[2] >= self._times and self._times != 0):
|
||||
self._flag[2]+=1
|
||||
self.at_pin.value(0)
|
||||
sleep_ms(10)
|
||||
data=input('AT+NAME?\r\n')
|
||||
input()
|
||||
input()
|
||||
self.at_pin.value(1)
|
||||
print('BLE_NAME:',data)
|
||||
sleep_ms(100)
|
||||
return data
|
||||
else:
|
||||
print('Please delete this command and upload other programs again')
|
||||
else:
|
||||
if not (self._flag[3] >= self._times and self._times != 0):
|
||||
self._flag[3]+=1
|
||||
self.at_pin.value(0)
|
||||
sleep_ms(10)
|
||||
data=input('AT+NAME='+name+'\r\n')
|
||||
print('\r\n')
|
||||
self.at_pin.value(1)
|
||||
print('BLE_NAME:',name,data)
|
||||
sleep_ms(100)
|
||||
return True if data is "OK" else False
|
||||
else:
|
||||
print('Please delete this command and upload other programs again')
|
||||
|
||||
def ble_power(self, power=None):
|
||||
sleep_ms(200)
|
||||
if power is None:
|
||||
if not (self._flag[4] >= self._times and self._times != 0):
|
||||
self._flag[4]+=1
|
||||
self.at_pin.value(0)
|
||||
sleep_ms(10)
|
||||
data=input('AT+TPL?\r\n')
|
||||
input()
|
||||
print(' \r\n')
|
||||
self.at_pin.value(1)
|
||||
data=self._power[int(data[4:])]
|
||||
print('BLE_Power: {}DB'.format(data))
|
||||
sleep_ms(100)
|
||||
return data
|
||||
else:
|
||||
print('Please delete this command and upload other programs again')
|
||||
else:
|
||||
if not (self._flag[5] >= self._times and self._times != 0):
|
||||
self._flag[5]+=1
|
||||
self.at_pin.value(0)
|
||||
sleep_ms(10)
|
||||
data=input('AT+TPL={}\r\n'.format(self._power.index(power)))
|
||||
print('\r\n')
|
||||
self.at_pin.value(1)
|
||||
print('BLE_Power:',str(power)+'DB',data)
|
||||
sleep_ms(100)
|
||||
return True if data is "OK" else False
|
||||
else:
|
||||
print('Please delete this command and upload other programs again')
|
||||
|
||||
def ble_pname(self, name=None):
|
||||
sleep_ms(200)
|
||||
if name is None:
|
||||
if not (self._flag[6] >= self._times and self._times != 0):
|
||||
self._flag[6]+=1
|
||||
self.at_pin.value(0)
|
||||
sleep_ms(10)
|
||||
data=input('AT+PNAME?\r\n')
|
||||
input()
|
||||
input()
|
||||
self.at_pin.value(1)
|
||||
print('BLE_PNAME:',data)
|
||||
sleep_ms(100)
|
||||
return data
|
||||
else:
|
||||
print('Please delete this command and upload other programs again')
|
||||
else:
|
||||
if not (self._flag[7] >= self._times and self._times != 0):
|
||||
self._flag[7]+=1
|
||||
self.at_pin.value(0)
|
||||
sleep_ms(10)
|
||||
data=input('AT+PNAME='+name+'\r\n')
|
||||
print('\r\n')
|
||||
self.at_pin.value(1)
|
||||
print('BLE_PNAME:',name,data)
|
||||
sleep_ms(100)
|
||||
return True if data is "OK" else False
|
||||
else:
|
||||
print('Please delete this command and upload other programs again')
|
||||
166
boards/default_src/micropython/origin/build/lib/debugnet.py
Normal file
166
boards/default_src/micropython/origin/build/lib/debugnet.py
Normal file
@@ -0,0 +1,166 @@
|
||||
"""
|
||||
Debugnet(HTTP,MQTT)
|
||||
|
||||
MicroPython library for network request debugging
|
||||
=======================================================
|
||||
|
||||
#Preliminary composition 20230225
|
||||
|
||||
@dahanzimin From the Mixly Team
|
||||
"""
|
||||
import time
|
||||
from umqtt import MQTTClient
|
||||
from ubinascii import hexlify
|
||||
from machine import unique_id
|
||||
from urequests import Response
|
||||
from usocket import socket,getaddrinfo,SOCK_STREAM
|
||||
from mixiot import WILL_TOPIC,ADDITIONAL_TOPIC
|
||||
|
||||
class socket_d(socket):
|
||||
def __init__(self,*args,debug=False,**kw):
|
||||
super().__init__(*args,**kw)
|
||||
self._debug=debug
|
||||
self.client_len=0
|
||||
self.server_len=0
|
||||
|
||||
def write(self,*args):
|
||||
super().write(*args)
|
||||
self.client_len=min(self.client_len+len(args[0]),65535)
|
||||
if self._debug:
|
||||
print('client:',args[0])
|
||||
|
||||
def readline(self,*args):
|
||||
buf=super().readline(*args)
|
||||
self.server_len=min(self.server_len+len(buf),65535) if buf else self.server_len
|
||||
if self._debug:
|
||||
print('server:',buf)
|
||||
return buf
|
||||
|
||||
def read(self,*args):
|
||||
buf=super().read(*args)
|
||||
self.server_len=min(self.server_len+len(buf),65535) if buf else self.server_len
|
||||
if self._debug:
|
||||
print('server:',buf)
|
||||
return buf
|
||||
|
||||
#HTTP
|
||||
def request(method, url, data=None, json=None, headers={}, stream=None, parse_headers=True, debug=False):
|
||||
redir_cnt = 1
|
||||
while True:
|
||||
try:
|
||||
proto, dummy, host, path = url.split("/", 3)
|
||||
except ValueError:
|
||||
proto, dummy, host = url.split("/", 2)
|
||||
path = ""
|
||||
if proto == "http:":
|
||||
port = 80
|
||||
elif proto == "https:":
|
||||
import ussl
|
||||
port = 443
|
||||
else:
|
||||
raise ValueError("Unsupported protocol: " + proto)
|
||||
if ":" in host:
|
||||
host, port = host.split(":", 1)
|
||||
port = int(port)
|
||||
ai = getaddrinfo(host, port, 0, SOCK_STREAM)
|
||||
ai = ai[0]
|
||||
resp_d = None
|
||||
if parse_headers is not False:
|
||||
resp_d = {}
|
||||
s = socket_d(ai[0], ai[1], ai[2], debug=debug)
|
||||
try:
|
||||
s.connect(ai[-1])
|
||||
if proto == "https:":
|
||||
s = ussl.wrap_socket(s, server_hostname=host)
|
||||
s.write(b"%s /%s HTTP/1.0\r\n" % (method, path))
|
||||
if not "Host" in headers:
|
||||
s.write(b"Host: %s\r\n" % host)
|
||||
for k in headers:
|
||||
s.write(k)
|
||||
s.write(b": ")
|
||||
s.write(headers[k])
|
||||
s.write(b"\r\n")
|
||||
if json is not None:
|
||||
assert data is None
|
||||
import ujson
|
||||
data = ujson.dumps(json)
|
||||
s.write(b"Content-Type: application/json\r\n")
|
||||
if data:
|
||||
s.write(b"Content-Length: %d\r\n" % len(data))
|
||||
s.write(b"Connection: close\r\n\r\n")
|
||||
if data:
|
||||
s.write(data)
|
||||
l = s.readline()
|
||||
l = l.split(None, 2)
|
||||
status = int(l[1])
|
||||
reason = ""
|
||||
if len(l) > 2:
|
||||
reason = l[2].rstrip()
|
||||
while True:
|
||||
l = s.readline()
|
||||
if not l or l == b"\r\n":
|
||||
break
|
||||
if l.startswith(b"Transfer-Encoding:"):
|
||||
if b"chunked" in l:
|
||||
raise ValueError("Unsupported " + l)
|
||||
elif l.startswith(b"Location:") and 300 <= status <= 399:
|
||||
if not redir_cnt:
|
||||
raise ValueError("Too many redirects")
|
||||
redir_cnt -= 1
|
||||
url = l[9:].decode().strip()
|
||||
status = 300
|
||||
break
|
||||
if parse_headers is False:
|
||||
pass
|
||||
elif parse_headers is True:
|
||||
l = l.decode()
|
||||
k, v = l.split(":", 1)
|
||||
resp_d[k] = v.strip()
|
||||
else:
|
||||
parse_headers(l, resp_d)
|
||||
except OSError:
|
||||
s.close()
|
||||
raise
|
||||
if status != 300:
|
||||
break
|
||||
resp = Response(s)
|
||||
resp.status_code = status
|
||||
resp.reason = reason
|
||||
resp.client_len=s.client_len
|
||||
resp.server_len=s.server_len
|
||||
if resp_d is not None:
|
||||
resp.headers = resp_d
|
||||
return resp
|
||||
|
||||
class MQTT_Client(MQTTClient):
|
||||
def __init__(self,*args,debug=False,**kw):
|
||||
super().__init__(*args,**kw)
|
||||
self.sock = socket_d(debug=debug)
|
||||
|
||||
@property
|
||||
def client_len(self): #The length of client data obtained
|
||||
_len=self.sock.client_len
|
||||
self.sock.client_len=0
|
||||
return _len
|
||||
|
||||
@property
|
||||
def server_len(self): #The length of server data obtained
|
||||
_len=self.sock.server_len
|
||||
self.sock.server_len=0
|
||||
return _len
|
||||
|
||||
def time_msg(self,utc=28800): #Get server time information
|
||||
msg=self.wait_msg()
|
||||
if isinstance(msg, dict):
|
||||
if msg['topic'] =='$SYS/hello':
|
||||
val=time.gmtime(int(msg['msg'])//1000-946684800+utc)[0:7]
|
||||
return str(val).replace(' ','')[1:-1]
|
||||
|
||||
#MQTT
|
||||
def init_MQTT_client(address, username, password, MQTT_USR_PRJ, debug=False):
|
||||
client = MQTT_Client(hexlify(unique_id()), address, 1883, username, password, debug=debug)
|
||||
client.set_last_will(topic=MQTT_USR_PRJ+WILL_TOPIC, msg=client.client_id, qos=2)
|
||||
if client.connect()==0:
|
||||
client.publish(MQTT_USR_PRJ+ADDITIONAL_TOPIC, client.client_id, qos=0)
|
||||
time.sleep_ms(200)
|
||||
return client
|
||||
60
boards/default_src/micropython/origin/build/lib/dhtx.py
Normal file
60
boards/default_src/micropython/origin/build/lib/dhtx.py
Normal file
@@ -0,0 +1,60 @@
|
||||
# DHT11/DHT22 driver for MicroPython
|
||||
# MIT license; Copyright (c) 2016 Damien P. George
|
||||
|
||||
from time import sleep
|
||||
try:
|
||||
from esp import dht_readinto
|
||||
except:
|
||||
from machine import dht_readinto
|
||||
from machine import Pin
|
||||
|
||||
class DHTBase:
|
||||
__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):
|
||||
if self.__first_init:
|
||||
self.__first_init = False
|
||||
self.pin = Pin(pin)
|
||||
self.buf = bytearray(5)
|
||||
self.err = 0
|
||||
|
||||
def measure(self):
|
||||
buf = bytearray(5)
|
||||
try:
|
||||
dht_readinto(self.pin, buf)
|
||||
if (buf[0] + buf[1] + buf[2] + buf[3]) & 0xFF == buf[4]:
|
||||
self.buf = buf
|
||||
self.err = 0
|
||||
except:
|
||||
if self.err > 10:
|
||||
raise AttributeError("DHTx operation error")
|
||||
self.err += 1
|
||||
sleep(0.5)
|
||||
return
|
||||
|
||||
class DHT11(DHTBase):
|
||||
def humidity(self):
|
||||
self.measure()
|
||||
return self.buf[0]
|
||||
|
||||
def temperature(self):
|
||||
self.measure()
|
||||
return self.buf[2]
|
||||
|
||||
class DHT22(DHTBase):
|
||||
def humidity(self):
|
||||
self.measure()
|
||||
return (self.buf[0] << 8 | self.buf[1]) * 0.1
|
||||
|
||||
def temperature(self):
|
||||
self.measure()
|
||||
t = ((self.buf[2] & 0x7F) << 8 | self.buf[3]) * 0.1
|
||||
if self.buf[2] & 0x80:
|
||||
t = -t
|
||||
return t
|
||||
@@ -0,0 +1,21 @@
|
||||
#Take the picture bytes in expression_picture.py
|
||||
#--dahanzimin From the Mixly Team
|
||||
|
||||
Angry=b'P4\n64\n64\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00?\xfc\x00\x00\x00\x00\x00\x03\xff\xff\xc0\x00\x00\x00\x00\x0f\xff\xff\xf0\x00\x00\x00\x00\x7f\xff\xff\xfc\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x03\xff\xfd\x7f\xff\xc0\x00\x00\x07\xff\x80\x01\xff\xe0\x00\x00\x0f\xfc\x00\x00\x7f\xf0\x00\x00\x1f\xf8\x00\x00\x1f\xf8\x00\x00?\xe0\x00\x01\x87\xfc\x00\x00\x7f\x80\x00\x01\xd9\xfe\x00\x00\xff\x00\x00\x07\xfc\xff\x00\x01\xfe\x00\x00\x07\xfe\x7f\x80\x01\xfc\x00\x00\x03\x1c?\x80\x03\xf8\x00\x00\x0f\x18\x1f\xc0\x03\xf0\x00\x00\x0e\xdc\x0f\xc0\x07\xf0\x00\x00\x07\xfc\x0f\xe0\x07\xe0\x00\x00\x07\xf8\x07\xe0\x0f\xc0\x00\x00\x02`\x03\xf0\x0f\xc0\x00\x00\x00 \x03\xf0\x1f\xc0\x00\x00\x00\x00\x03\xf8\x1f\x83\x00\x00\x00\x00\xc1\xf8\x1f\x83\xc0\x00\x00\x03\xc1\xf8\x1f\x03\xf0\x00\x00\x1f\xc1\xf8?\x07\xfe\x00\x00?\xe0\xfc?\x03\xff\x80\x01\xff\xc0\xfc?\x03\xff\xe0\x07\xff\xc0\xfc?\x03\xff\xe0\x03\xff\x80\xfc?\x01\xff\xc0\x03\xff\x80|?\x00\xff\x80\x01\xff\x00\xfc>\x00>\x00\x00|\x00|?\x00\x00\x00\x00\x00\x00\xfc?\x00\x00\x00\x00\x00\x00\xfc?\x00\x00\x00\x00\x00\x00\xfc?\x00\x00\x00\x00\x00\x00\xfc\x1f\x00\x00\x00\x00\x00\x00\xfc?\x00\x00\x00\x00\x00\x01\xf8\x1f\x80\x00\x00\x00\x00\x01\xf8\x1f\x80\x00\x00\x00\x00\x01\xf8\x0f\xc0\x00\x00\x00\x00\x01\xf8\x1f\xc0\x00\x00\x00\x00\x03\xf0\x0f\xc0\x00\x00\x00\x00\x07\xf0\x07\xe0\x00\x03\x80\x00\x07\xe0\x07\xf0\x00\x07\xc0\x00\x0f\xe0\x03\xf0\x00\x0f\xf0\x00\x0f\xc0\x03\xf8\x00\x1e\xf8\x00\x1f\xc0\x01\xfc\x00\x1c~\x00?\x80\x01\xfe\x00\x00\x1c\x00\x7f\x80\x00\xff\x00\x00\x04\x00\xff\x00\x00\x7f\xc0\x00\x00\x01\xfe\x00\x00?\xe0\x00\x00\x07\xfc\x00\x00\x1f\xf8\x00\x00\x1f\xf8\x00\x00\x0f\xfe\x00\x00\x7f\xf0\x00\x00\x07\xff\xc0\x05\xff\xe0\x00\x00\x01\xff\xff\xff\xff\x80\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00?\xff\xff\xfc\x00\x00\x00\x00\x0f\xff\xff\xf0\x00\x00\x00\x00\x03\xff\xff\xc0\x00\x00\x00\x00\x00?\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
|
||||
Bored=b'P4\n64\n64\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00?\xfc\x00\x00\x00\x00\x00\x03\xff\xff\xc0\x00\x00\x00\x00\x0f\xff\xff\xf0\x00\x00\x00\x00\x7f\xff\xff\xfc\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x03\xff\xfd\x7f\xff\xc0\x00\x00\x07\xff\x80\x01\xff\xe0\x00\x00\x0f\xfc\x00\x00\x7f\xf0\x00\x00\x1f\xf8\x00\x00\x1f\xf8\x00\x00?\xc0\x00\x00\x07\xfc\x00\x00\x7f\xc0\x00\x00\x01\xfe\x00\x00\xff\x00\x00\x00\x00\xff\x00\x01\xfe\x00\x00\x00\x00\x7f\x00\x01\xfc\x00\x00\x00\x00?\x80\x03\xf8\x00\x00\x00\x00\x1f\xc0\x03\xf0\x00\x00\x00\x00\x0f\xc0\x07\xf0\x00\x00\x00\x00\x0f\xe0\x07\xe0\x00\x00\x00\x00\x07\xf0\x0f\xe0\x00\x00\x00\x00\x07\xf0\x0f\xc0\x00\x00\x00\x00\x03\xf0\x1f\x80\x00\x00\x00\x00\x03\xf8\x1f\x80\x00\x00\x00\x00\x01\xf8\x1f\x83[\x00\x00\xdfA\xf8\x1f\x87\xff\x80\x01\xff\xe0\xf8?\x07\xff\x00\x01\xff\xe0\xfc?\x01}\x00\x00\x8e\x00\xfc?\x000\x00\x00\x0e\x00\xfc?\x00p\x00\x00\x1c\x00\xfc>\x05~\x80\x00_\xc0|?\x07\xff\x80\x01\xff\xe0\xfc?\x07\xff\x80\x01\xff\xe0\xfc>\x02D\x00\x00\xa4\x80|?\x00\x00\x00\x00\x00\x00\xfc?\x00\x00\x00\x00\x00\x00\xfc?\x00\x00\x00\x00\x00\x00\xfc\x1f\x00\x00\x00\x00\x00\x00\xfc?\x80\x00\x00\x00\x00\x01\xf8\x1f\x80\x00\x00\x00\x00\x01\xf8\x1f\x80\x00\x00\x00\x00\x01\xf8\x0f\xc0\x00\x00\x00\x00\x01\xf8\x0f\xc0\x00\x07\xf0\x00\x03\xf0\x0f\xe0\x00\x1f\xfc\x00\x07\xf0\x07\xe0\x00?\xfe\x00\x07\xe0\x07\xf0\x00|\x1f\x00\x07\xe0\x03\xf8\x00p\x07\x00\x1f\xc0\x03\xf8\x00\xe0\x07\x80\x1f\xc0\x01\xfc\x00s\xe3\x80?\x80\x00\xfe\x00c\xf3\x00\x7f\x00\x00\xff\x00\x03\xe0\x00\xff\x00\x00\x7f\xc0\x00\x00\x01\xfe\x00\x00?\xe0\x00\x00\x07\xfc\x00\x00\x1f\xf0\x00\x00\x1f\xf8\x00\x00\x0f\xfe\x00\x00\x7f\xf0\x00\x00\x07\xff\xc0\x01\xff\xe0\x00\x00\x03\xff\xfa\xbf\xff\x80\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00?\xff\xff\xfe\x00\x00\x00\x00\x0f\xff\xff\xf0\x00\x00\x00\x00\x01\xff\xff\xc0\x00\x00\x00\x00\x00_\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
|
||||
Confused=b'P4\n64\n64\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00?\xfc\x00\x00\x00\x00\x00\x03\xff\xff\xc0\x00\x00\x00\x00\x0f\xff\xff\xf0\x00\x00\x00\x00\x7f\xff\xff\xfc\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x03\xff\xfd\x7f\xff\xc0\x00\x00\x07\xff\x80\x01\xff\xe0\x00\x00\x0f\xfc\x00\x00\x7f\xf0\x00\x00\x1f\xf8\x00\x00\x1f\xf8\x00\x00?\xc0\x00\x00\x07\xfc\x00\x00\x7f\xc0\x00\x00\x01\xfe\x00\x00\xff\x00\x00\x00\x00\xff\x00\x01\xfe\x00\x00\x00\x00\x7f\x00\x01\xfc\x00\x00\x00\x00?\x80\x03\xf8\x06\x00\x00\x00\x1f\xc0\x03\xf0\x0f\x00\x01\xfc\x1f\xc0\x07\xf0\x1f\x00\x01\xff\x0f\xe0\x07\xe0?\x00\x01\xff\x87\xe0\x0f\xc0~\x00\x00\xff\xc7\xf0\x0f\xdf\xfc\x00\x00\x07\xe3\xf0\x1f\xdf\xf8\x00\x00\x01\xf3\xf8\x1f\x9f\xe0\x00\x00\x00\xf1\xf8\x1f\x8f(\x00\x00\x18\xe1\xf8\x1f\x00~\x00\x00~!\xf8?\x00\xff\x00\x00\xfe\x00\xfc?\x00\xff\x80\x00\xff\x00\xfc?\x00\xff\x80\x01\xff\x00\xfc?\x00\xff\x00\x01\xff\x00\xfc?\x00\xff\x80\x00\xff\x00\xfc?\x00~\x00\x00\xfe\x00\xfc>\x00>\x00\x00|\x00|?\x00\x00\x00\x00\x00\x00\xfc?\x00\x00\x00\x00\x00\x00\xfc?\x00\x00\x00\x00\x00\x00\xfc?\x00\x00\x00\x00\x00\x00\xfc\x1f\x00\x00\x00\x00\x00\x00\xf8?\x80\x00\x00\x00\x00\x01\xfc\x1f\x80\x00\x00\x00\x00\x01\xf8\x1f\x80\x00\x00\x00\x00\x01\xf8\x0f\xc0\x00\x00\x00\x00\x01\xf8\x0f\xc0\x00\x00\x00\x00\x03\xf0\x0f\xe0\x00\x00\x00\x00\x03\xf0\x07\xe0\x00\x00\x00\x00\x07\xe0\x07\xf0\x00\x1f\x80\x00\x0f\xe0\x03\xf0\x00?\xc0\x00\x0f\xc0\x03\xf8\x00?\xc7\x00\x1f\xc0\x01\xfc\x009\xe7\x00?\x80\x00\xfe\x001\xe7\x00\x7f\x80\x00\xff\x000\xfe\x00\xff\x00\x00\x7f\xc0\x00~\x03\xfe\x00\x00?\xe0\x00<\x07\xfc\x00\x00\x1f\xf8\x00\x00\x1f\xf8\x00\x00\x0f\xfe\x00\x00\x7f\xf0\x00\x00\x07\xff\xc0\x01\xff\xe0\x00\x00\x03\xff\xff\xff\xff\x80\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00?\xfe\xff\xfc\x00\x00\x00\x00\x0f\xff\xff\xf8\x00\x00\x00\x00\x01\xff\xff\x80\x00\x00\x00\x00\x00?\xfa\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
|
||||
Happy=b'P4\n64\n64\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00?\xfc\x00\x00\x00\x00\x00\x03\xff\xff\xc0\x00\x00\x00\x00\x0f\xff\xff\xf0\x00\x00\x00\x00?\xff\xff\xfc\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x03\xff\xff\x7f\xff\xc0\x00\x00\x07\xff\x80\x03\xff\xe0\x00\x00\x0f\xfc\x00\x00?\xf0\x00\x00\x1f\xf0\x00\x00\x1f\xf8\x00\x00?\xe0\x00\x00\x07\xfc\x00\x00\x7f\x80\x00\x00\x01\xfe\x00\x00\xff\x00\x00\x00\x00\xff\x00\x00\xfe\x00\x00\x00\x00\x7f\x00\x03\xfc\x00\x00\x00\x00?\x80\x03\xf8\x00\x00\x00\x00\x1f\xc0\x03\xf8\x00\x00\x00\x00\x0f\xc0\x07\xe0\x00\x00\x00\x00\x0f\xe0\x07\xe0\x00\x00\x00\x00\x07\xf0\x0f\xe0\x00\x00\x00\x00\x07\xf0\x0f\xc0\x00\x00\x00\x00\x03\xf0\x1f\xc0\x00\x00\x00\x00\x03\xf8\x1f\x80\x00\x00\x00\x00\x01\xf8\x1f\x80\x14\x00\x008\x01\xf8\x1f\x00~\x00\x00~\x00\xf8?\x00\xff\x00\x00\xff\x00\xfc?\x00\xff\x80\x01\xff\x00\xfc?\x00\xff\x00\x01\xff\x00\xfc?\x00\xff\x80\x00\xff\x00\xfc?\x00\xff\x00\x00\xff\x00\xfc?\x00\x7f\x00\x00\xfe\x00|>\x00<\x00\x00|\x00\xfc?\x00\x00\x00\x00\x00\x00|?\x00\x00\x00\x00\x00\x00\xfc?\x00\x00\x00\x00\x00\x00\xfc?\x00\x00\x00\x00\x00\x00\xfc\x1f\x00\x00\x00\x00\x00\x00\xf8?\x80\x00\x00\x00\x00\x01\xfc\x1f\x80\x00\x00\x00\x00\x01\xf8\x1f\x80\x00\x00\x00\x00\x01\xf8\x1f\xc0\x00\x00\x00\x00\x01\xf8\x0f\xc0\x00\x00\x00\x00\x03\xf0\x0f\xe0\x02\xfa\xd5\x80\x07\xf0\x07\xe0\x03\xff\xff\xc0\x07\xe0\x07\xf0\x07\xff\xff\xe0\x0f\xe0\x03\xf8\x03\xff\xff\xc0\x0f\xc0\x03\xf8\x03\xff\xff\xc0\x1f\xc0\x01\xfc\x01\xff\xff\x80?\x80\x01\xfe\x01\xff\xff\x80\x7f\x80\x00\xff\x00\xff\xff\x00\xff\x00\x00\x7f\x80\x7f\xfe\x03\xfe\x00\x00?\xe0?\xfc\x07\xfc\x00\x00\x1f\xf0\x07\xf0\x1f\xf8\x00\x00\x0f\xfe\x00\x00\x7f\xf0\x00\x00\x07\xff\xc0\x01\xff\xe0\x00\x00\x03\xff\xfe\xbf\xff\x80\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00?\xff\xff\xfc\x00\x00\x00\x00\x0f\xff\xff\xf0\x00\x00\x00\x00\x01\xff\xff\xc0\x00\x00\x00\x00\x00?\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
|
||||
Heart=b'P4\n64\n64\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\xfe\x00\x00\x7f\xc0\x00\x00\x1f\xff\xc0\x03\xff\xf8\x00\x00\x7f\xff\xf0\x0f\xff\xfe\x00\x00\xff\xff\xf8\x1f\xff\xff\x00\x01\xff\xff\xfe\x7f\xff\xff\x80\x03\xff\xff\xff\x7f\xff\xff\xc0\x07\xff\xff\xff\xff\xff\xff\xe0\x0f\xff\xff\xff\xff\xff\xff\xf0\x0f\xff\xff\xff\xff\xff\xff\xf0\x1f\xff\xff\xff\xff\xff\xff\xf8\x1f\xff\xff\xff\xff\xff\xff\xf8\x1f\xff\xff\xff\xff\xff\xff\xf8?\xff\xff\xff\xff\xff\xff\xfc?\xff\xff\xff\xff\xff\xff\xfc?\xff\xff\xff\xff\xff\xff\xfc?\xff\xff\xff\xff\xff\xff\xfc?\xff\xff\xff\xff\xff\xff\xfc?\xff\xff\xff\xff\xff\xff\xfc?\xff\xff\xff\xff\xff\xff\xfc?\xff\xff\xff\xff\xff\xff\xfc?\xff\xff\xff\xff\xff\xff\xf8\x1f\xff\xff\xff\xff\xff\xff\xfc\x1f\xff\xff\xff\xff\xff\xff\xf8\x1f\xff\xff\xff\xff\xff\xff\xf8\x0f\xff\xff\xff\xff\xff\xff\xf0\x0f\xff\xff\xff\xff\xff\xff\xf0\x07\xff\xff\xff\xff\xff\xff\xe0\x07\xff\xff\xff\xff\xff\xff\xc0\x03\xff\xff\xff\xff\xff\xff\xc0\x01\xff\xff\xff\xff\xff\xff\x80\x00\xff\xff\xff\xff\xff\xff\x80\x00\xff\xff\xff\xff\xff\xff\x00\x00\x7f\xff\xff\xff\xff\xfe\x00\x00?\xff\xff\xff\xff\xfc\x00\x00\x1f\xff\xff\xff\xff\xf8\x00\x00\x0f\xff\xff\xff\xff\xf0\x00\x00\x07\xff\xff\xff\xff\xe0\x00\x00\x03\xff\xff\xff\xff\xc0\x00\x00\x01\xff\xff\xff\xff\xc0\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x7f\xff\xff\xfe\x00\x00\x00\x00?\xff\xff\xfc\x00\x00\x00\x00\x1f\xff\xff\xf8\x00\x00\x00\x00\x0f\xff\xff\xf0\x00\x00\x00\x00\x07\xff\xff\xe0\x00\x00\x00\x00\x03\xff\xff\xc0\x00\x00\x00\x00\x01\xff\xff\x80\x00\x00\x00\x00\x00\xff\xfe\x00\x00\x00\x00\x00\x00?\xfe\x00\x00\x00\x00\x00\x00\x1f\xf8\x00\x00\x00\x00\x00\x00\x0f\xf0\x00\x00\x00\x00\x00\x00\x07\xe0\x00\x00\x00\x00\x00\x00\x03\xc0\x00\x00\x00\x00\x00\x00\x01\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
|
||||
Paper=b'P4\n64\n64\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00|\x00\x00\x00\x00\x00\x00\x01\xff\x00`\x00\x00\x00\x00\x01\xff\x83\xfc\x00\x00\x00\x00\x07\xff\xc7\xff\x00\x00\x00\x00\x07\xe7\xcf\xff\x80\x00\x00\x00\x0f\x83\xff\xff\x80\x00\x00\x00\x0f\x03\xff\x07\x80\x00\x00\x00\x0f\x03\xfe\x07\xc0\x00\x00\x00\x1f\x01\xfc\x03\xc0\x00\x00\x00\x1e\x01\xf8\x03\xc0\x00\x00\x00\x1e\x01\xf8\x07\xcc\x00\x00\x00\x1e\x03\xf0\x07\xff\x00\x00\x00\x1e\x03\xe0\x0f\xff\x80\x00\xbc\x1e\x03\xe0\x0f\xff\xc0\x01\xff\x1e\x03\xc0\x1f\xff\xc0\x03\xff\xfe\x03\xc0?\xc3\xe0\x07\xff\xfe\x01\xc0?\x81\xe0\x07\xc7\xfe\x00\x00~\x01\xe0\x07\x81\xfe\x00\x00\xfc\x01\xe0\x0f\x80\xfe\x00\x01\xf8\x03\xe0\x0f\x80~\x00\x01\xf0\x07\xc0\x07\x80>\x00\x00\xe0\x0f\xc0\x07\x80\x1e\x00\x00@\x1f\x80\x07\xc0\x0e\x00\x00\x00?\x00\x03\xe0\x06\x00\x00\x00~\x00\x03\xe0\x06\x00\x00\x00\xfc\x00\x01\xf0\x02\x00\x00\x03\xff\x00\x00\xf8\x00\x00\x00\x07\xff\xc0\x00\xfc\x00\x00\x00\x07\xff\xe0\x00|\x00\x00\x00\x07\xff\xe0\x00>\x00\x00\x00\x03\x81\xf0\x00\x1e\x00\x00\x00\x00\x00\xf0\x00\x1e\x00\x00\x00\x00\x00\xf0\x00\x1e\x00\x00\x00\x00\x01\xf0\x00\x1e\x00\x00\x00\x00\x03\xf0\x00\x1e\x00\x00\x00\x00\x07\xe0\x00>\x00\x00\x00\x00\x7f\xc0\x00<\x00\x00\x00\xff\xff\x80\x00|\x00\x00\x01\xff\xff\x00\x00|\x00\x00\x03\xff\xfc\x00\x00<\x00\x00\x03\xff\xe0\x00\x00<\x00\x00\x07\xe0\x00\x00\x00>\x00\x00\x0f\x80\x00\x00\x00>\x00\x00\x1f\x80\x00\x00\x00\x1f\x00\x00?\x00\x00\x00\x00\x0f\x80\x00~\x00\x00\x00\x00\x0f\xc0\x00\xfc\x00\x00\x00\x00\x07\xf0\x03\xf8\x00\x00\x00\x00\x03\xf8\x07\xf0\x00\x00\x00\x00\x01\xff?\xc0\x00\x00\x00\x00\x00\x7f\xff\x80\x00\x00\x00\x00\x00?\xff\x00\x00\x00\x00\x00\x00\x0f\xfc\x00\x00\x00\x00\x00\x00\x03\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
|
||||
Rock=b'P4\n64\n64\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00~\x00\x00\x00\x00\x00\x00\xc1\xff\xc0\x00\x00\x00\x00\x07\xff\xff\xe0\x00\x00\x00\x00\x1f\xff\xff\xf0\x00\x00\x00\x00?\xff\xc3\xf8\x00\x00\x00\x00?\xff\x00\xff\xf0\x00\x00\x00|\x0f\x00\x7f\xfc\x00\x00\x00x\x0e\x00\xff\xfe\x00\x00\x07\xf8\x1e\x03\xff\xff\x00\x00\x1f\xf8\x1c\x0f\xf0\x1f\x80\x00?\xf0\x1c\x1f\x80\x0f\xc0\x00\x7f\xf0\x1c\x1e\x00\x07\xe0\x00\xfe\xf0\x1e<\x00\x03\xe0\x00\xf8p\x1e8\x00\x01\xe0\x00\xf0p\x0e8\x00\x01\xf0\x01\xf0x\x0e8\x00\x00\xf0\x01\xe0x\x0f8\x00\x00\xf0\x01\xe0<\x078\x00\x00\xf0\x01\xe0<\x07\xfc\x0f\x00\xf0\x03\xe0\x1e\x03\xbf\xff\x00\xf0\x0f\xf0\x1f\x03\xff\xff\x00\xf8\x1f\xf0\x0f\x81\xef\xfc\x00\xf8\x1f\xf0\x07\xc0\xff\xe0\x00x>x\x03\xe0\xff\x80\x00\xf8><\x01\xf1\xfc\x00\x00\xf8<>\x00\xff\xf0\x00\x00\xf8<\x1f\x00\x7f\xc0\x00\x00\xf0<\x0f\x80?\x00\x00\x00\xf0>\x07\xc0~\x00\x00\x00\xf0\x1e\x03\xe1\xf8\x00\x00\x00\xf0\x1f\x01\xf3\xf0\x00\x00\x01\xf0\x1f\x00\xff\xc0\x00\x00\x01\xe0\x0f\x80\x7f\x80\x00\x00\x01\xe0\x0f\x80\x1f\x00\x00\x00\x03\xe0\x07\xc0\x1e\x00\x00\x00\x03\xe0\x03\xe0<\x00\x00\x00\x07\xc0\x03\xf8x\x00\x00\x00\x0f\xc0\x01\xfcx\x00\x00\x00\x1f\x80\x00\xff\xf0\x00\x00\x00\x7f\x00\x00?\xf0\x00\x00\x01\xfe\x00\x00\x1f\xf0\x00\x00\x07\xfc\x00\x00\x07\xf0\x00\x00\x1f\xf0\x00\x00\x00\xf8\x00\x00?\xc0\x00\x00\x00|\x00\x00\xff\x80\x00\x00\x00~\x00\x03\xfe\x00\x00\x00\x00?\x00\x0f\xf8\x00\x00\x00\x00\x1f\x80?\xe0\x00\x00\x00\x00\x1f\xe0\xff\x80\x00\x00\x00\x00\x07\xff\xfe\x00\x00\x00\x00\x00\x03\xff\xf8\x00\x00\x00\x00\x00\x01\xff\xe0\x00\x00\x00\x00\x00\x00\x7f\xc0\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
|
||||
Sad=b'P4\n64\n64\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00?\xfc\x00\x00\x00\x00\x00\x03\xff\xff\xc0\x00\x00\x00\x00\x0f\xff\xff\xf0\x00\x00\x00\x00?\xff\xff\xfc\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x03\xff\xfe\xff\xff\xc0\x00\x00\x07\xff\x80\x03\xff\xe0\x00\x00\x0f\xfe\x00\x00\x7f\xf0\x00\x00\x1f\xf0\x00\x00\x1f\xf8\x00\x00?\xe0\x00\x00\x07\xfc\x00\x00\x7f\x80\x00\x00\x01\xfe\x00\x00\xff\x00\x00\x00\x00\xff\x00\x01\xfe\x00\x00\x00\x00\x7f\x00\x01\xfc\x00\x00\x00\x00?\x80\x03\xf8\x00\x00\x00\x00\x1f\xc0\x03\xf0\x00\x00\x00\x00\x1f\xc0\x07\xf0\x00\x00\x00\x00\x0f\xe0\x0f\xe0\x00\x00\x00\x00\x07\xe0\x07\xe0\x00\x00\x00\x00\x07\xf0\x0f\xc0\x00\x00\x00\x00\x03\xf0\x1f\xc0\x00\x00\x00\x00\x01\xf8\x1f\x80\x00\x00\x00\x00\x01\xf8\x1f\x80\x00\x00\x00\x00\x01\xf8?\x00\x00\x00\x00\x00\x01\xfc\x1f\x07\xff\xe0\x0f\xff\xc0\xf8?\x07\xff\xe0\x0f\xff\xe0\xfc?\x07\xff\xf0\x0f\xff\xc0\xfc?\x07\xff\xe0\x0f\xff\xc0\xfc?\x00\x7f\x00\x00\xfe\x00\xfc?\x00?\x00\x00\xfc\x00\xfc>\x00\x7f\x00\x00\xfe\x00|?\x00?\x00\x00~\x00\xfc?\x00~\x00\x00\xfe\x00\xfc?\x00?\x00\x00\xfe\x00\xfc?\x00\x7f\x00\x00\xfc\x00\xfc\x1f\x00\x7f\x00\x00\xfe\x00\xf8\x1f\x00?\x00\x00\xfe\x01\xfc\x1f\x80\x7f\x00\x00\xfe\x01\xf8\x1f\x80\x7f\x00\x00\xfe\x01\xf8\x1f\xc0?\x00\x00|\x01\xf8\x0f\xc0\x7f\x00\x00\xfe\x03\xf0\x0f\xe0\x7f\x0f\xe0\xfe\x03\xf0\x07\xe0?\x1f\xf8\xfe\x07\xe0\x07\xf0\x7f\x7f\xfe\xfc\x0f\xe0\x03\xf0\x7f|?~\x0f\xc0\x03\xf8?\xf0\x0f\xfe\x1f\xc0\x01\xfc\x7f\xe0\x07\xfe?\x80\x00\xfe\x7f\xc0\x03\xfe\x7f\x00\x00\xff?@\x02\xfe\xff\x00\x00\x7f\xff\x00\x00\xff\xfe\x00\x00?\xff\x00\x00\xff\xfc\x00\x00\x1f\xff\x00\x00\xff\xf8\x00\x00\x0f\xff\x00\x00\xff\xf0\x00\x00\x07\xff\xc0\x00\xff\xe0\x00\x00\x01\xff\xff\x7f\xff\x80\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00?\xff\xff\xfc\x00\x00\x00\x00\x0f\xff\xff\xf8\x00\x00\x00\x00\x03\xff\xff\x80\x00\x00\x00\x00\x00?\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
|
||||
Scissors=b'P4\n64\n64\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x80\x00\x00\x00\x00\x00\x00?\xf0\x00\x00\x00\x00\x00\x00\xff\xfc\x00\x00\x00\x00\x00\x01\xff\xff\x00\x00\x00\x00\x00\x01\xf8\xff\x80\x00\x00\x00\x00\x03\xe0\x1f\xc0\x00\x00\x00\x00\x07\xc0\x07\xf0\x00\x00\x00\x00\x07\xc0\x03\xf8\x00\x00\x00\x00\x07\x80\x01\xfc\x00\x00\x00\x00\x07\x80\x00~\x00\x00\x00\x00\x07\x80\x00?\x00\x00\x00\x00\x07\x80\x00\x1f\xfc\x00\x00\x00\x07\xc0\x00\x0f\xff\x80\x00\x00\x03\xe0\x00\x07\xff\xe0\x00\x00\x03\xf0\x00\x03\xff\xf8\x00\x00\x01\xf8\x00\x00\xe7\xfc\x00\x00\x00\xfc\x00\x01\xe0\xfe\x00\x00\x00\x7f\x00\x01\xe0?\x00\x00\x03\xff\x80\x01\xc0\x1f\x80\x00\x7f\xff\xe0\x03\xc0\x1f\x80\x01\xff\xff\xf8\x03\x80\x1f\xc0\x03\xff\xff\xff\x03\x80\x1f\xe0\x07\xff\xff\xff\x07\x80\x1f\xe0\x0f\xc0\x01\xff\x07\x00\x1f\xe0\x0f\x80\x00\x1e\x07\x00=\xf0\x1f\x00\x00\x00\x07\x00<\xf0\x1e\x00\x00\x00\x07\x008\xf0\x1e\x00\x00\x00\x0f\x00x\xf0\x1e\x00\x00\x00\x7f\x00\xf0\xf0\x1f\x00\x00\x01\xff\x00\xf0\xf8\x0f\x00\x00\x07\xff\x01\xe0\xf8\x0f\x80\x00\x0f\xef\x03\xc0x\x0f\xe0\x00?\x07\x87\xc0\xf8\x07\xff\x7f\xfe\x03\xff\x80\xf8\x03\xff\xff\xfc\x03\xff\x00\xf8\x01\xff\xff\xf8\x01\xfe\x00\xf0\x00\x7f\xff\xf8\x07\xff\x00\xf0\x00\x01\xd0|\x7f\xff\xc0\xf0\x00\x00\x00\x7f\xff\xff\xe0\xf0\x00\x00\x00?\xfc\x01\xf1\xf0\x00\x00\x00\x1f\xe0\x00\xf1\xe0\x00\x00\x00\x0f\x00\x00s\xe0\x00\x00\x00\x0f\x00\x00s\xe0\x00\x00\x00\x0f\x00\x00\xff\xc0\x00\x00\x00\x0f\x00\x00\xff\x80\x00\x00\x00\x0f\x80\x03\xff\x00\x00\x00\x00\x07\xf0\xff\xfe\x00\x00\x00\x00\x07\xff\xff\xfc\x00\x00\x00\x00\x03\xff\xff\xc0\x00\x00\x00\x00\x01\xff\xfe\x00\x00\x00\x00\x00\x007@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
|
||||
Silly=b'P4\n64\n64\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00?\xfc\x00\x00\x00\x00\x00\x03\xff\xff\xc0\x00\x00\x00\x00\x0f\xff\xff\xf0\x00\x00\x00\x00?\xff\xff\xfc\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x03\xff\xf4\x1f\xff\xc0\x00\x00\x07\xff\x00\x01\xff\xe0\x00\x00\x0f\xfc\x00\x00?\xf0\x00\x00\x1f\xf0\x00\x00\x0f\xf8\x00\x00?\xc0\x00\x00\x03\xfc\x00\x00\x7f\x80\x00\x00\x01\xfe\x00\x00\xff\x00\x00\x00\x00\xff\x00\x00\xfc\x00\x00\x00\x00?\x00\x01\xfc\x00\x00\x00\x00?\x80\x03\xf8\x00\x00\x00\x00\x1f\xc0\x07\xf0\x01\x00\x00\x00\x0f\xc0\x07\xe0\x03\x80\x01\xe0\x07\xe0\x07\xe0\x07\x80\x01\xe0\x07\xe0\x0f\xc0\x0f\x80\x01\xf0\x03\xf0\x0f\xc0?\x00\x00\xfc\x03\xf0\x1f\x87\xfe\x00\x00\x7f\xe1\xf8\x1f\x87\xfc\x00\x00?\xe1\xf8\x1f\x07\xf8\x00\x00\x0f\xf0\xf8\x1f\x07\xcc\x00\x00s\xe1\xf8?\x00\x1f\x00\x00\xf8\x00\xfc?\x00?\x80\x01\xfc\x00\xfc?\x00\x7f\xc0\x03\xfc\x00|>\x00\x7f\xc0\x01\xfe\x00\xfc>\x00?\x80\x03\xfe\x00|>\x00?\x80\x01\xfc\x00|?\x00?\x80\x00\xf8\x00|>\x00\x0e\x00\x00p\x00\xfc>\x00\x00\x00\x00\x00\x00|?\x00\x00\x00\x00\x00\x00\xfc?\x00\x00\x00\x00\x00\x00\xfc\x1f\x00\x00\x03\xc0\x00\x00\xf8?\x00\x00\x07\xe0\x00\x00\xfc\x1f\x00\x00\x0f\xe0\x00\x00\xf8\x1f\x80\x00\x07\xe0\x00\x01\xf8\x1f\x80\x00\x07\xf0\x00\x01\xf8\x0f\xc0\x00\x0f\xe0\x00\x03\xf0\x0f\xc0\x00\x0f\xe0\x00\x03\xf0\x07\xe0\x00\x07\xe0\x00\x07\xe0\x07\xe0\x00\x07\xf0\x00\x07\xe0\x07\xf0\x00\x0f\xe0\x00\x0f\xc0\x03\xf8\x00\x07\xe0\x00\x1f\xc0\x01\xfc\x00\x0f\xf0\x00?\x80\x00\xfc\x00\x07\xe0\x00?\x00\x00\xff\x00\x07\xe0\x00\xff\x00\x00\x7f\x80\x07\xc0\x01\xfe\x00\x00?\xc0\x00\x80\x03\xfc\x00\x00\x1f\xf0\x00\x00\x0f\xf8\x00\x00\x0f\xfc\x00\x00?\xf0\x00\x00\x07\xff\x00\x01\xff\xe0\x00\x00\x01\xff\xfa7\xff\x80\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00?\xff\xff\xfc\x00\x00\x00\x00\x0f\xff\xff\xf0\x00\x00\x00\x00\x03\xff\xff\xc0\x00\x00\x00\x00\x00?\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
|
||||
Sleep=b'P4\n64\n64\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00?\xfc\x00\x00\x00\x00\x00\x03\xff\xff\xc0\x00\x00\x00\x00\x0f\xff\xff\xf0\x00\x00\x00\x00\x7f\xff\xff\xfc\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x03\xff\xfd\x7f\xff\xc0\x00\x00\x07\xff\x80\x01\xff\xe0\x00\x00\x0f\xfc\x00\x00\x7f\xf0\x00\x00\x1f\xf8\x00\x00\x1f\xf8\x00\x00?\xc0\x00\x00\x07\xfc\x00\x00\x7f\xc0\x00\x00\x01\xfe\x00\x00\xff\x00\x00\x00\x00\xff\x00\x01\xfe\x00\x00\x00\x00\x7f\x00\x01\xfc\x00\x00\x00\x00?\x80\x03\xf8\x00\x00\x00\x03\xff\xc0\x03\xf0\x00\x00\x00\x07\xef\xc0\x07\xf0\x00\x00\x00\x00\xef\xe0\x07\xe0\x00\x00\x00\x01\xc7\xe0\x0f\xe0\x00\x00\x00\x07\xa7\xf0\x0f\xc0\x00\x00\x00\x07\xe3\xf0\x1f\x80\x00\x00\x00\xf3C\xf8\x1f\x80\x00\x00\x01\xf8\x01\xf8\x1f\x80\x00\x00\x00p\x01\xf8\x1f\x80\x00\x00\x00\xe0\x00\xf8?\x00\x00\x00\x01\xf8\x00\xfc?\x00\x00\x00\x00\xf0\x00\xfc?\x00\x00\x00\x00\x00\x00\xfc?\x00\x00\x00\x00\x00\x00\xfc>\x03\xff\xe0\x07\xaf\xc0\xfc?\x03\xff\xe0\x07\xff\xc0\xfc?\x03\xff\xe0\x07\xff\xc0|?\x01\xff\x80\x03\xff\x80\xfc>\x00\x00\x00\x00\x10\x00\xfc?\x00\x00\x00\x00\x00\x00\xfc?\x00\x00\x00\x00\x00\x00\xfc\x1f\x00\x00\x00\x00\x00\x00\xfc?\x80\x00\x00\x00\x00\x00\xf8\x1f\x80\x00\x00\x00\x00\x01\xf8\x1f\x80\x00\x01@\x00\x01\xf8\x1f\xc0\x00\x1f\xf8\x00\x03\xf8\x0f\xc0\x00\x7f\xfe\x00\x03\xf0\x0f\xe0\x00\xff\xff\x00\x03\xf0\x07\xe0\x01\xff\xff\x80\x07\xe0\x07\xf0\x01\xff\xff\x80\x0f\xe0\x03\xf0\x03\xff\xff\xc0\x0f\xc0\x03\xf8\x03\xff\xff\xc0?\xc0\x01\xfc\x01\xff\xff\x80?\x80\x00\xfe\x01\xff\xff\x80\x7f\x80\x00\xff\x00|\x00\x00\xff\x00\x00\x7f\x80x\x00\x01\xfe\x00\x00?\xe0<\x00\x07\xfc\x00\x00\x1f\xf88\x00\x1f\xf8\x00\x00\x0f\xfe\x00\x00\x7f\xf0\x00\x00\x07\xff\x80\x03\xff\xe0\x00\x00\x03\xff\xfd\xff\xff\x80\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00?\xff\xff\xfc\x00\x00\x00\x00\x0f\xff\xff\xf8\x00\x00\x00\x00\x03\xff\xff\x80\x00\x00\x00\x00\x00?\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
|
||||
Small_heart=b'P4\n64\n64\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1f\xe0\x07\xf8\x00\x00\x00\x00\x7f\xf8\x1f\xfe\x00\x00\x00\x00\xff\xfe?\xff\x00\x00\x00\x01\xff\xff\x7f\xff\x80\x00\x00\x03\xff\xff\xff\xff\xc0\x00\x00\x07\xff\xff\xff\xff\xe0\x00\x00\x07\xff\xff\xff\xff\xe0\x00\x00\x0f\xff\xff\xff\xff\xf0\x00\x00\x0f\xff\xff\xff\xff\xf0\x00\x00\x0f\xff\xff\xff\xff\xf0\x00\x00\x0f\xff\xff\xff\xff\xf0\x00\x00\x0f\xff\xff\xff\xff\xf0\x00\x00\x0f\xff\xff\xff\xff\xf0\x00\x00\x0f\xff\xff\xff\xff\xf0\x00\x00\x0f\xff\xff\xff\xff\xe0\x00\x00\x07\xff\xff\xff\xff\xe0\x00\x00\x07\xff\xff\xff\xff\xe0\x00\x00\x03\xff\xff\xff\xff\xc0\x00\x00\x03\xff\xff\xff\xff\xc0\x00\x00\x01\xff\xff\xff\xff\x80\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x7f\xff\xff\xff\x00\x00\x00\x00\x7f\xff\xff\xfc\x00\x00\x00\x00?\xff\xff\xfc\x00\x00\x00\x00\x1f\xff\xff\xf8\x00\x00\x00\x00\x0f\xff\xff\xe0\x00\x00\x00\x00\x07\xff\xff\xe0\x00\x00\x00\x00\x01\xff\xff\xc0\x00\x00\x00\x00\x01\xff\xff\x00\x00\x00\x00\x00\x00\x7f\xff\x00\x00\x00\x00\x00\x00\x7f\xfc\x00\x00\x00\x00\x00\x00\x1f\xf8\x00\x00\x00\x00\x00\x00\x0f\xf8\x00\x00\x00\x00\x00\x00\x07\xe0\x00\x00\x00\x00\x00\x00\x03\xc0\x00\x00\x00\x00\x00\x00\x01\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
|
||||
Small_paper=b'P4\n32\n32\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x00\x00\x1f\x1e\x00\x00;\xbf\x00\x001\xf3\x00\x00q\xe1\x80\x00a\xc3\xa0\x00a\x83\xf0\x1fa\x87\xf8?\xe1\x87\x181\xe0\x0e\x180\xe0\x1c80`\x08p\x18 \x00\xe0\x1c\x00\x01\xf0\x0e\x00\x03\xf8\x06\x00\x01\x1c\x06\x00\x00\x0c\x06\x00\x00\x1c\x06\x00\x00\xf8\x0e\x00\x1f\xf0\x06\x00\x1f\x80\x06\x000\x00\x07\x00p\x00\x03\x80\xe0\x00\x01\xc3\xc0\x00\x00\xff\x00\x00\x00>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
|
||||
Small_rock=b'P4\n32\n32\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x00\x00?\xf8\x00\x00\x7f\x9c\x00\x00\xe3\x0f\xe0\x03\xc6\x1f\xf0\x07\xc6p8\x0e\xc6`\x18\x0c\xc2@\x1c\x18\xc3@\x0c\x18c\xe3\x0c<q\xff\x0c|8\xf8\x0cf\x1d\xe0\x0cg\x0f\x80\x0cc\x8e\x00\x0cq\xdc\x00\x1c0\xf0\x00\x188`\x00\x18\x1c\xc0\x008\x0f\xc0\x00\xf0\x07\xc0\x03\xe0\x00\xc0\x07\x80\x00\xe0\x1e\x00\x00px\x00\x00?\xe0\x00\x00\x1f\x80\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
|
||||
Small_scissors=b'P4\n32\n32\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00|\x00\x00\x01\xff\x00\x00\x01\x87\x80\x00\x03\x81\xc0\x00\x03\x00\xe0\x00\x03\x00~\x00\x01\x80?\x80\x01\xc0\x0b\xe0\x00\xf0\x18p\x0f\xf8\x18p\x1f\xff\x10x8\x1f0xp\x000l`\x000\xccp\x01\xf0\xcc0\x03\xb1\x8c?\xfe\x1f\x0c\x1f\xfc\x1e\x0c\x01\xce\xff\x8c\x00\x07\xe1\xdc\x00\x03\x00\xd8\x00\x03\x00\xf8\x00\x03\x01\xf0\x00\x03\xff\xe0\x00\x01\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
|
||||
Smile=b'P4\n64\n64\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00?\xfc\x00\x00\x00\x00\x00\x03\xff\xff\xc0\x00\x00\x00\x00\x0f\xff\xff\xf0\x00\x00\x00\x00?\xff\xff\xfc\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x03\xff\xff\x7f\xff\xc0\x00\x00\x07\xff\x80\x03\xff\xe0\x00\x00\x0f\xfc\x00\x00?\xf0\x00\x00\x1f\xf0\x00\x00\x1f\xf8\x00\x00?\xe0\x00\x00\x07\xfc\x00\x00\x7f\x80\x00\x00\x01\xfe\x00\x00\xff\x00\x00\x00\x00\xff\x00\x00\xfe\x00\x00\x00\x00\x7f\x00\x03\xfc\x00\x00\x00\x00?\x80\x03\xf8\x00\x00\x00\x00\x1f\xc0\x03\xf8\x00\x00\x00\x00\x0f\xc0\x07\xe0\x00\x00\x00\x00\x0f\xe0\x07\xe0\x00\x00\x00\x00\x07\xe0\x0f\xe0\x00\x00\x00\x00\x07\xf0\x0f\xc0\x00\x00\x00\x00\x03\xf0\x1f\xc0?\x00\x01\xfc\x03\xf8\x1f\x80\x7f\xc0\x03\xfe\x01\xf8\x1f\x80\xff\xe0\x07\xff\x01\xf8\x1f\x01\xff\xf0\x0f\xff\x81\xf8?\x03\xfb\xf0\x1f\xef\xc0\xfc?\x03\xe0\xf8\x1f\x07\xc0\xfc?\x03\xc0\xf8\x1f\x07\xc0\xfc?\x07\xc0\xf8\x1e\x03\xc0\xfc?\x03\xc0x\x1e\x03\xe0|?\x03\xc0x\x1e\x03\xc0\xfc?\x01\x80 \x0c\x00\x80\xfc>\x00\x00\x00\x00\x00\x00\xfc?\x00\x00\x00\x00\x00\x00|?\x00\x00\x00\x00\x00\x00\xfc?\x00\x00\x00\x00\x00\x00\xfc?\x00\x00\x00\x00\x00\x00\xf8\x1f\x80\x00\x00\x00\x00\x01\xfc\x1f\x80\x00\x00\x00\x00\x01\xf8\x1f\x80\x00\x00\x00\x00\x01\xf8\x0f\xc0\x00\x00\x00\x00\x01\xf0\x0f\xc0\x0e\x00\x000\x03\xf8\x0f\xe0\x0f\x00\x00x\x07\xe0\x07\xe0\x1f\x00\x00\xf0\x07\xf0\x07\xf0\x0f\x00\x00\xf0\x0f\xe0\x03\xf0\x07\x80\x01\xf0\x0f\xc0\x03\xf8\x07\xc0\x03\xe0\x1f\xc0\x01\xfc\x07\xe0\x07\xe0?\x80\x01\xfe\x03\xfc\x1f\xc0\x7f\x80\x00\xff\x01\xff\xff\x80\xff\x00\x00\x7f\xc0\xff\xfe\x03\xfe\x00\x00?\xe0?\xfc\x07\xfc\x00\x00\x1f\xf0\x0f\xf0\x1f\xf8\x00\x00\x0f\xfe\x00\x00?\xf0\x00\x00\x07\xff\xc0\x03\xff\xe0\x00\x00\x03\xff\xff\x7f\xff\x80\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00?\xff\xff\xfc\x00\x00\x00\x00\x0f\xff\xff\xf0\x00\x00\x00\x00\x03\xff\xff\x80\x00\x00\x00\x00\x00?\xfa\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
|
||||
Surprise=b'P4\n64\n64\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00?\xfc\x00\x00\x00\x00\x00\x03\xff\xff\xc0\x00\x00\x00\x00\x0f\xff\xff\xf0\x00\x00\x00\x00\x7f\xff\xff\xfc\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x03\xff\xfd\x7f\xff\xc0\x00\x00\x07\xff\x80\x01\xff\xe0\x00\x00\x0f\xfc\x00\x00\x7f\xf0\x00\x00\x1f\xf8\x00\x00\x1f\xf8\x00\x00?\xc0\x00\x00\x07\xfc\x00\x00\x7f\xc0\x00\x00\x01\xfe\x00\x00\xff\x00\x00\x00\x00\xff\x00\x01\xfe\x00\x00\x00\x00\x7f\x00\x01\xfc\x00\x00\x00\x00?\x80\x03\xf8\x00\x00\x00\x00\x1f\xc0\x03\xf0\x00\x00\x00\x00\x1f\xc0\x07\xf0\x00\x00\x00\x00\x0f\xe0\x07\xe0\x00\x00\x00\x00\x07\xf0\x0f\xc0\x00\x00\x00\x00\x07\xf0\x0f\xc0\x10\x00\x00\x10\x03\xf0\x1f\xc0>\x00\x00|\x01\xf8\x1f\x80\x7f\x00\x00~\x01\xf8\x1f\x80\xff\x00\x00\xff\x01\xf8\x1f\x80\xff\x80\x01\xff\x00\xf8?\x00\xff\x00\x01\xff\x00\xfc?\x00\xff\x80\x01\xff\x00\xfc?\x00\xff\x00\x00\xff\x00\xfc?\x00\xff\x80\x01\xff\x00\xfc>\x00\x7f\x00\x00\xff\x00\xfc?\x00~\x00\x00~\x00|?\x00>\x00\x008\x00\xfc>\x00\x00\x00\x00\x00\x00\xfc?\x00\x00\x00\x00\x00\x00|?\x00\x00\x00\x00\x00\x00\xfc?\x00\x00\x00\x00\x00\x00\xfc?\x00\x00\x00\x00\x00\x00\xfc\x1f\x80\x00\x00\x00\x00\x01\xf8\x1f\x80\x00\x03\xc0\x00\x01\xf8\x1f\x80\x00\x07\xe0\x00\x01\xf8\x1f\xc0\x00\x0f\xf0\x00\x01\xf8\x0f\xc0\x00\x0f\xf0\x00\x03\xf0\x0f\xe0\x00\x0f\xf0\x00\x07\xf0\x07\xe0\x00\x0f\xf8\x00\x07\xe0\x07\xf0\x00\x1f\xf0\x00\x0f\xe0\x03\xf8\x00\x0f\xf8\x00\x0f\xc0\x03\xf8\x00\x0f\xf0\x00\x1f\xc0\x01\xfc\x00\x0f\xf0\x00?\x80\x00\xfe\x00\x0f\xe0\x00\x7f\x80\x00\xff\x00\x07\xe0\x00\xff\x00\x00\x7f\xc0\x03\xc0\x03\xfe\x00\x00?\xe0\x00\x00\x07\xfc\x00\x00\x1f\xf8\x00\x00\x1f\xf8\x00\x00\x0f\xfe\x00\x00\x7f\xf0\x00\x00\x07\xff\x80\x03\xff\xe0\x00\x00\x01\xff\xff\xff\xff\x80\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00?\xff\xff\xfc\x00\x00\x00\x00\x0f\xff\xff\xf0\x00\x00\x00\x00\x03\xff\xff\x80\x00\x00\x00\x00\x00/\xfa\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
|
||||
Wonderful=b'P4\n64\n64\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00?\xfc\x00\x00\x00\x00\x00\x03\xff\xff\xc0\x00\x00\x00\x00\x0f\xff\xff\xf0\x00\x00\x00\x00?\xff\xff\xfc\x00\x00\x02\x00\xff\xff\xff\xff\x00\x00\x07\x03\xff\xff\x7f\xff\xc0\x00\x07\x87\xff\x80\x03\xff\xe0\x00\x1f\xcf\xfc\x00\x00\x7f\xf0\x00\x1f\xdf\xf8\x00\x00\x1f\xf8\x00\x07?\xe0\x00\x00\x07\xfc\x00\x02\x7f\x80\x00\x00\x19\xfe\x00\x02\xff\x00\x00\x00\x1c\xff\x00\x00\xfe\x00\x00\x00>\x7f\x00\x01\xfc\x00\x00\x00\x7f?\x80\x03\xf8\x00\x00\x00\x1c\x1f\xc0\x03\xf0\x00\x00\x00\x18\x1f\xe0\x07\xf0\x00\x00\x00\x08\x0f\xe0\x07\xe0\x00\x00\x00\x00\x07\xe0\x0f\xe0\x00\x00\x00\x00\x07\xf0\x0f\xc0<\x00\x008\x03\xf0\x1f\x80\xff\x00\x00\xff\x01\xf8\x1f\x80\xff\x80\x01\xff\x01\xf8\x1f\x81\xff\x80\x01\xff\x81\xf8?\x83\xff\xc0\x01\xff\xc0\xfc\x1f\x01\xff\xc0\x03\xff\x80\xf8?\x03\xff\xc0\x03\xff\xc0\xfc?\x01\xff\xc0\x03\xff\x80\xfc?\x01\xff\x80\x01\xff\x80\xfc>\x00\xff\x80\x01\xff\x80|?\x00~\x00\x00\xfe\x00\xfc?\x00\x1c\x00\x008\x00\xfc>\x00\x00\x00\x00\x00\x00|?\x00\x00\x00\x00\x00\x00\xfc?\x00\x00\x00\x00\x00\x00\xfc?\x00\x00\x00\x00\x00\x00\xfc?\x00\x00\x00\x00\x00\x00\xf8\x1f\x80\x00\x00\x00\x00\x01\xfc\x1f\x80\x00\x00\x00\x00\x01\xf8\x1f\x80\x00\x00\x00\x00\x01\xf8\x1f\xc0\x00\x00\x00\x01\x03\xf0\x0f\xc0\x00\x00\x00\x01\x83\xf8\x0f\xe0\x00\xff\xff\x03\xc3\xf0\x07\xe0\x00\xff\xff\x0f\xe7\xe0\x07\xf0\x00\xff\xff\x07\xcf\xe0\x03\xf0\x00\x7f\xff\x01\x9f\xc0\x03\xf8\x00\x7f\xfe\x01\x9f\xc0\x01\xfc\x00?\xfc\x00?\x80\x00\xfe\x00\x1f\xf8\x00\x7f\x80\x00\xff\x00\x07\xe0\x00\xff\x00\x00\x7f\x80\x00\x00\x01\xfe\x00\x00?\xe0\x00\x00\x07\xfc\x00\x00\x1f\xf8\x00\x00\x1f\xf8\x00\x00\x0f\xfe\x00\x00\x7f\xf0\x00\x00\x07\xff\xc0\x01\xff\xe0\x00\x00\x03\xff\xff\xff\xff\x80\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00?\xff\xff\xfc\x00\x00\x00\x00\x0f\xff\xff\xf0\x00\x00\x00\x00\x03\xff\xff\x80\x00\x00\x00\x00\x00?\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
|
||||
@@ -0,0 +1,31 @@
|
||||
#Take the picture bytes in eye_picture.py
|
||||
#--dahanzimin From the Mixly Team
|
||||
|
||||
Eyes_Angry=b'P4\n89 64\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x1f\xff\xff\x00\x00\x00?\xff\xfc\x00\x7f\x00\x7f\xff\xff\xc0\x00\x01\xff\xff\xff\x80\x7f\x01\xff\xff\xff\xf0\x00\x03\xff\xff\xff\xc0\x7f\x03\xe0\x00\x00\xf8\x00\x07\xc0\x00\x03\xe0\x7f\x07\x80\x00\x00<\x00\x0f\x00\x00\x00\xf0\x7f\x07\x00\x00\x00\x1c\x00\x1e\x00\x00\x00x\x7f\x0e\x00\x00\x00\x0e\x00\x1c\x00\x00\x008\x7f\x0e\x00\x00\x00\x0e\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1e\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1f\x80\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1f\xe0\x00\x00\x07\x000\x00\x00\x00\x1c\x7f\x1d\xf8\x00\x00\x07\x000\x00\x00\x00|\x7f\x1c\xfe\x00\x00\x07\x000\x00\x00\x01\xfc\x7f\x1c?\x80\x00\x07\x000\x00\x00\x07\xfc\x7f\x1c\x0f\xe0\x00\x07\x000\x00\x00\x1f\x8c\x7f\x1c\x03\xf8\x00\x07\x000\x00\x00~\x0c\x7f\x1c\x00\xfe\x00\x07\x000\x00\x01\xf8\x0c\x7f\x1c\x00?\x80\x07\x000\x00\x07\xe0\x0c\x7f\x1c\x00\x0f\xe0\x07\x000\x00\x1f\x80\x0c\x7f\x1c\x00\x07\xf8\x07\x000\x00\x7f\x00\x0c\x7f\x1c\x00\x0f\xfe\x07\x000\x01\xfc\x00\x0c\x7f\x1c\x00\x1f\xff\x87\x000\x07\xf6\x80\x0c\x7f\x1c\x00?\x9f\xe7\x000\x1f\xf2\x00\x0c\x7f\x1c\x00\xbf\xbb\xff\x000\x7f\xef\x00\x0c\x7f\x1c\x00\x7f\xfc\xff\x001\xff\xff@\x0c\x7f\x1c\x00\x7f\xfc?\x00?\xff\xff\x00\x0c\x7f\x1c\x00\x7f\xfc\x0f\x00?\xaf\xff@\x0c\x7f\x1c\x00?\xf8\x07\x00>\x0f\xff\x00\x0c\x7f\x1c\x00\xbf\xfa\x07\x008\x07\xfe\x00\x1c\x7f\x0e\x00\x1f\xf0\x0e\x008\x17\xfe\x80\x1c\x7f\x0e\x00\x0f\xe0\x0e\x00<\x03\xfc\x00<\x7f\x0f\x00\x03\x80\x1e\x00\x1c\x04\xf2\x008\x7f\x07\x80\x04 <\x00\x1e\x01\x08\x00x\x7f\x03\xc0\x00\x00x\x00\x0f\x80\x00\x01\xf0\x7f\x01\xf8\x00\x03\xf0\x00\x07\xe0\x00\x07\xe0\x7f\x00\xff\xff\xff\xe0\x00\x03\xff\xff\xff\xc0\x7f\x00?\xff\xff\x80\x00\x00\xff\xff\xff\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f'
|
||||
Awake=b'P4\n89 64\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x1f\xff\xff\x00\x00\x00?\xff\xfc\x00\x7f\x00\x7f\xff\xff\xc0\x00\x01\xff\xff\xff\x80\x7f\x01\xff\xff\xff\xf0\x00\x03\xff\xff\xff\xc0\x7f\x03\xe0\x00\x00\xf8\x00\x07\xc0\x00\x03\xe0\x7f\x07\x80\x00\x00<\x00\x0f\x00\x00\x00\xf0\x7f\x07\x00\x00\x00\x1c\x00\x1e\x00\x00\x00x\x7f\x0e\x00\x00\x00\x0e\x00\x1c\x00\x00\x008\x7f\x0e\x00\x00\x00\x0e\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1f\x00\x00\x00\x07\x000\x00\x00\x00|\x7f\x1f\xf8\x00\x00\x07\x000\x00\x00\x07\xfc\x7f\x1f\xff\xc0\x00\x07\x000\x00\x01\xff\xfc\x7f\x1c\x1f\xff\x00\x07\x000\x00?\xfe\x0c\x7f\x1c\x00\xff\xf0\x07\x000\x07\xff\xc0\x0c\x7f\x1c\x00?\xff\x87\x000\x7f\xfe\x00\x0c\x7f\x1c\x01\x7f\xff\xff\x00?\xff\xff\x00\x0c\x7f\x1c\x00~i\xff\x00?\xe1\xfd\xa0\x0c\x7f\x1c\x02\xfeh\x0f\x00<\x03\xf9\xc0\x0c\x7f\x1c\x01\xff\xf0\x07\x000\x03\xff\xc0\x0c\x7f\x1c\x01\xff\xf0\x07\x000\x0b\xff\xd0\x0c\x7f\x1c\x01\xff\xf0\x07\x000\x03\xff\xc0\x0c\x7f\x1c\x01\xff\xf0\x07\x000\x0b\xff\xd0\x0c\x7f\x1c\x02\xff\xe8\x07\x000\x03\xff\xc0\x0c\x7f\x1c\x00\xff\xc0\x07\x000\x05\xff\xa0\x0c\x7f\x1c\x01\x7f\xd0\x07\x000\x00\xff\x00\x0c\x7f\x1c\x00\x1f\x00\x07\x000\x00~\x00\x0c\x7f\x1c\x00@@\x07\x000\x00\x81\x00\x0c\x7f\x1c\x00\n\x00\x07\x000\x00(\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x0e\x00\x00\x00\x0e\x008\x00\x00\x00\x1c\x7f\x0e\x00\x00\x00\x0e\x00<\x00\x00\x00<\x7f\x0f\x00\x00\x00\x1e\x00\x1c\x00\x00\x008\x7f\x07\x80\x00\x00<\x00\x1e\x00\x00\x00x\x7f\x03\xc0\x00\x00x\x00\x0f\x80\x00\x01\xf0\x7f\x01\xf8\x00\x03\xf0\x00\x07\xe0\x00\x07\xe0\x7f\x00\xff\xff\xff\xe0\x00\x03\xff\xff\xff\xc0\x7f\x00?\xff\xff\x80\x00\x00\xff\xff\xff\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f'
|
||||
Black_eye=b'P4\n89 64\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00?\xff\xfc\x00\x7f\x00\x00\x00\x00\x00\x00\x01\xff\xff\xff\x80\x7f\x00\x00\x00\x00\x00\x00\x03\xff\xff\xff\xc0\x7f\x00\x1f\xff\xfe\x00\x00\x07\xc0\x00\x03\xe0\x7f\x00\x7f\xff\xff\xc0\x00\x0f\x00\x00\x00\xf0\x7f\x01\xff\xff\xff\xf0\x00\x1e\x00\x00\x00x\x7f\x03\xfa\xaa\xab\xf8\x00\x1c\x00\x00\x008\x7f\x07\xd2U%|\x008\x00\x00\x00\x1c\x7f\x07\xad\xaa\xda\xbc\x008\x00\x00\x00\x1c\x7f\x0fRU%^\x008\x00\x00\x00\x1c\x7f\x0fm\xaa\xda\xae\x000\x00\x00\x00\x0c\x7f\x1e\x92U$\xaf\x000\x00\x00\x00\x0c\x7f\x1dm\xaa\xdbW\x000\x00\x00\x00\x0c\x7f\x1e\x92U$\xaf\x000\x00\x00\x00\x0c\x7f\x1dm\xaa\xdbW\x000\x00\x00\x00\x0c\x7f\x1c\x92U$\xaf\x000\x00\x00\x00\x0c\x7f\x1fm\xaa\xdbW\x000\x00\x00\x00\x0c\x7f\x1c\x92U$\x97\x000\x00\x00\x00\x0c\x7f\x1f\xff\xff\xff\xff\x000\x00B\x00\x0c\x7f\x1f\xff\xff\xff\xff\x000\x018\x80\x0c\x7f\x1f\xff\xff\xff\xff\x000\x00\x7f\x00\x0c\x7f\x1c\x00\x7f\xc0\x07\x000\x05\xfd\xa0\x0c\x7f\x1c\x00\xfe`\x07\x000\x01\xfc\x80\x0c\x7f\x1c\x02\xfe\xe8\x07\x000\x03\xfb\xc0\x0c\x7f\x1c\x01\xff\xf0\x07\x000\x0b\xff\xd0\x0c\x7f\x1c\x01\xff\xf0\x07\x000\x03\xff\xc0\x0c\x7f\x1c\x01\xff\xf0\x07\x000\x0b\xff\xd0\x0c\x7f\x1c\x02\xff\xe8\x07\x000\x03\xff\xc0\x0c\x7f\x1c\x00\xff\xe0\x07\x000\x01\xff\x80\x0c\x7f\x1f\xff\xff\xff\xff\x000\x05\xff\xa0\x0c\x7f\x1f\xff\xff\xff\xff\x000\x00\xff\x00\x0c\x7f\x1f\xff\xff\xff\xff\x000\x01<\x80\x0c\x7f\x1dUUUW\x000\x00B\x00\x0c\x7f\x1dT\x92UW\x000\x00\x00\x00\x0c\x7f\x1e\xabm\xaa\xaf\x000\x00\x00\x00\x0c\x7f\x1dT\x92UW\x000\x00\x00\x00\x0c\x7f\x1fKm\xaa\xaf\x000\x00\x00\x00\x0c\x7f\x0e\xb4\x92U\xae\x000\x00\x00\x00\x0c\x7f\x0fKm\xaa^\x008\x00\x00\x00\x1c\x7f\x07\xb4\x92U\xbc\x008\x00\x00\x00\x1c\x7f\x07\xcbm\xaa|\x00<\x00\x00\x00<\x7f\x03\xf4\x92K\xf8\x00\x1c\x00\x00\x008\x7f\x01\xff\xff\xff\xf0\x00\x1e\x00\x00\x00x\x7f\x00\x7f\xff\xff\xc0\x00\x0f\x80\x00\x01\xf0\x7f\x00\x1f\xff\xff\x00\x00\x07\xe0\x00\x07\xe0\x7f\x00\x00\x00\x00\x00\x00\x03\xff\xff\xff\xc0\x7f\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f'
|
||||
Bottom_left=b'P4\n89 64\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x1f\xff\xff\x00\x00\x00?\xff\xfc\x00\x7f\x00\x7f\xff\xff\xc0\x00\x01\xff\xff\xff\x80\x7f\x01\xff\xff\xff\xf0\x00\x03\xff\xff\xff\xc0\x7f\x03\xe0\x00\x00\xf8\x00\x07\xc0\x00\x03\xe0\x7f\x07\x80\x00\x00<\x00\x0f\x00\x00\x00\xf0\x7f\x07\x00\x00\x00\x1c\x00\x1e\x00\x00\x00x\x7f\x0e\x00\x00\x00\x0e\x00\x1c\x00\x00\x008\x7f\x0e\x00\x00\x00\x0e\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x02\x80\x00\x07\x000\x05\x00\x00\x0c\x7f\x1c\x10\x10\x00\x07\x000 @\x00\x0c\x7f\x1c\x07\xc8\x00\x07\x000\x1f\x80\x00\x0c\x7f\x1c_\xf0\x00\x07\x000?\xc0\x00\x0c\x7f\x1c\x1f\x98\x00\x07\x001\x7fh\x00\x0c\x7f\x1c\xbf\x9a\x00\x07\x000\xfep\x00\x0c\x7f\x1c\x7f\xfc\x00\x07\x000\xff\xf0\x00\x0c\x7f\x1c\x7f\xfc\x00\x07\x002\xff\xf4\x00\x0c\x7f\x1c\x7f\xfc\x00\x07\x000\xff\xf0\x00\x0c\x7f\x1c\x7f\xfc\x00\x07\x002\xff\xf4\x00\x0c\x7f\x1c\xbf\xfa\x00\x07\x000\xff\xf0\x00\x0c\x7f\x1c?\xf0\x00\x07\x001\x7f\xe8\x00\x0c\x7f\x1c_\xf4\x00\x07\x000?\xc0\x00\x0c\x7f\x1c\x07\xc0\x00\x07\x000\x1f\x80\x00\x0c\x7f\x1c\x10\x10\x00\x07\x008 @\x00\x1c\x7f\x0e\x02\x80\x00\x0e\x008\n\x00\x00\x1c\x7f\x0e\x00\x00\x00\x0e\x00<\x00\x00\x00<\x7f\x0f\x00\x00\x00\x1e\x00\x1c\x00\x00\x008\x7f\x07\x80\x00\x00<\x00\x1e\x00\x00\x00x\x7f\x03\xc0\x00\x00x\x00\x0f\x80\x00\x01\xf0\x7f\x01\xf8\x00\x03\xf0\x00\x07\xe0\x00\x07\xe0\x7f\x00\xff\xff\xff\xe0\x00\x03\xff\xff\xff\xc0\x7f\x00?\xff\xff\x80\x00\x00\xff\xff\xff\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f'
|
||||
Bottom_right=b'P4\n89 64\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x1f\xff\xff\x00\x00\x00?\xff\xfc\x00\x7f\x00\x7f\xff\xff\xc0\x00\x01\xff\xff\xff\x80\x7f\x01\xff\xff\xff\xf0\x00\x03\xff\xff\xff\xc0\x7f\x03\xe0\x00\x00\xf8\x00\x07\xc0\x00\x03\xe0\x7f\x07\x80\x00\x00<\x00\x0f\x00\x00\x00\xf0\x7f\x07\x00\x00\x00\x1c\x00\x1e\x00\x00\x00x\x7f\x0e\x00\x00\x00\x0e\x00\x1c\x00\x00\x008\x7f\x0e\x00\x00\x00\x0e\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00(\x07\x000\x00\x00P\x0c\x7f\x1c\x00\x01\x01\x07\x000\x00\x02\x04\x0c\x7f\x1c\x00\x00|\x87\x000\x00\x01\xf8\x0c\x7f\x1c\x00\x05\xff\x07\x000\x00\x03\xfc\x0c\x7f\x1c\x00\x01\xf9\x87\x000\x00\x17\xf6\x8c\x7f\x1c\x00\x0b\xf9\xa7\x000\x00\x0f\xe7\x0c\x7f\x1c\x00\x07\xff\xc7\x000\x00\x0f\xff\x0c\x7f\x1c\x00\x07\xff\xc7\x000\x00/\xffL\x7f\x1c\x00\x07\xff\xc7\x000\x00\x0f\xff\x0c\x7f\x1c\x00\x07\xff\xc7\x000\x00/\xffL\x7f\x1c\x00\x0b\xff\xa7\x000\x00\x0f\xff\x0c\x7f\x1c\x00\x03\xff\x07\x000\x00\x17\xfe\x8c\x7f\x1c\x00\x05\xffG\x000\x00\x03\xfc\x0c\x7f\x1c\x00\x00|\x07\x000\x00\x01\xf8\x0c\x7f\x1c\x00\x01\x01\x07\x008\x00\x02\x04\x1c\x7f\x0e\x00\x00(\x0e\x008\x00\x00\xa0\x1c\x7f\x0e\x00\x00\x00\x0e\x00<\x00\x00\x00<\x7f\x0f\x00\x00\x00\x1e\x00\x1c\x00\x00\x008\x7f\x07\x80\x00\x00<\x00\x1e\x00\x00\x00x\x7f\x03\xc0\x00\x00x\x00\x0f\x80\x00\x01\xf0\x7f\x01\xf8\x00\x03\xf0\x00\x07\xe0\x00\x07\xe0\x7f\x00\xff\xff\xff\xe0\x00\x03\xff\xff\xff\xc0\x7f\x00?\xff\xff\x80\x00\x00\xff\xff\xff\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f'
|
||||
Crazy_1=b'P4\n89 64\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x1f\xff\xff\x00\x00\x00?\xff\xfc\x00\x7f\x00\x7f\xff\xff\xc0\x00\x01\xff\xff\xff\x80\x7f\x01\xff\xff\xff\xf0\x00\x03\xff\xff\xff\xc0\x7f\x03\xe0\x00\x00\xf8\x00\x07\xc0\x00\x03\xe0\x7f\x07\x80\x00\x00<\x00\x0f\x00\x00\x00\xf0\x7f\x07\x00\x00\x00\x1c\x00\x1e\x00\x00\x00x\x7f\x0e\x00\x00\x00\x0e\x00\x1c\x00\x00\x008\x7f\x0e\x00\x00\x00\x0e\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x1c\x01\x08\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\xe0\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x03\xf8\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x07\xfc\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x0f\xe6\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c/\xee\x80\x07\x000\x00\x00\x00\x0c\x7f\x1c\x1f\xff\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x1f\xff\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x1f\xff\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x0f\xfe\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c/\xfe\x80\x07\x000\x00\x00\x00\x0c\x7f\x1c\x07\xfc\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x03\xf8\x00\x07\x000\x00\x01@\x0c\x7f\x1c\x00\xe0\x00\x07\x000\x00\x08\x10\x0c\x7f\x1c\x01\x08\x00\x07\x000\x00\x07\xe0\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x0f\xf0\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00_\xda\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00?\x9c\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00?\xfc\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\xbf\xfd\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00?\xfc\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\xbf\xfd\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00?\xfc\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00_\xfa\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x0f\xf0\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x07\xe0\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x08\x10\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x02\x80\x0c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x0e\x00\x00\x00\x0e\x008\x00\x00\x00\x1c\x7f\x0e\x00\x00\x00\x0e\x00<\x00\x00\x00<\x7f\x0f\x00\x00\x00\x1e\x00\x1c\x00\x00\x008\x7f\x07\x80\x00\x00<\x00\x1e\x00\x00\x00x\x7f\x03\xc0\x00\x00x\x00\x0f\x80\x00\x01\xf0\x7f\x01\xf8\x00\x03\xf0\x00\x07\xe0\x00\x07\xe0\x7f\x00\xff\xff\xff\xe0\x00\x03\xff\xff\xff\xc0\x7f\x00?\xff\xff\x80\x00\x00\xff\xff\xff\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f'
|
||||
Crazy_2=b'P4\n89 64\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x1f\xff\xff\x00\x00\x00?\xff\xfc\x00\x7f\x00\x7f\xff\xff\xc0\x00\x01\xff\xff\xff\x80\x7f\x01\xff\xff\xff\xf0\x00\x03\xff\xff\xff\xc0\x7f\x03\xe0\x00\x00\xf8\x00\x07\xc0\x00\x03\xe0\x7f\x07\x80\x00\x00<\x00\x0f\x00\x00\x00\xf0\x7f\x07\x00\x00\x00\x1c\x00\x1e\x00\x00\x00x\x7f\x0e\x00\x00\x00\x0e\x00\x1c\x00\x00\x008\x7f\x0e\x00\x00\x00\x0e\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x000\x00\x04 \x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x13\x88\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x07\xf0\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00_\xda\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x1f\xc8\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00?\xbc\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\xbf\xfd\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00?\xfc\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\xbf\xfd\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00?\xfc\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x1f\xf8\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00_\xfa\x0c\x7f\x1c\x00\xa0\x00\x07\x000\x00\x0f\xf0\x0c\x7f\x1c\x04\x04\x00\x07\x000\x00\x13\xc8\x0c\x7f\x1c\x01\xf2\x00\x07\x000\x00\x04 \x0c\x7f\x1c\x17\xfc\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x07\xe6\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c/\xe6\x80\x07\x000\x00\x00\x00\x0c\x7f\x1c\x1f\xff\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x1f\xff\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x1f\xff\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x1f\xff\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c/\xfe\x80\x07\x000\x00\x00\x00\x0c\x7f\x1c\x0f\xfc\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x17\xfd\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x01\xf0\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x04\x04\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\xa0\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x0e\x00\x00\x00\x0e\x008\x00\x00\x00\x1c\x7f\x0e\x00\x00\x00\x0e\x00<\x00\x00\x00<\x7f\x0f\x00\x00\x00\x1e\x00\x1c\x00\x00\x008\x7f\x07\x80\x00\x00<\x00\x1e\x00\x00\x00x\x7f\x03\xc0\x00\x00x\x00\x0f\x80\x00\x01\xf0\x7f\x01\xf8\x00\x03\xf0\x00\x07\xe0\x00\x07\xe0\x7f\x00\xff\xff\xff\xe0\x00\x03\xff\xff\xff\xc0\x7f\x00?\xff\xff\x80\x00\x00\xff\xff\xff\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f'
|
||||
Disappointed=b'P4\n89 64\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x1f\xff\xff\x00\x00\x00?\xff\xfc\x00\x7f\x00\x7f\xff\xff\xc0\x00\x01\xff\xff\xff\x80\x7f\x01\xff\xff\xff\xf0\x00\x03\xff\xff\xff\xc0\x7f\x03\xe0\x00\x1f\xf8\x00\x07\xfc\x00\x03\xe0\x7f\x07\x80\x00><\x00\x0f\x1e\x00\x00\xf0\x7f\x07\x00\x00|\x1c\x00\x1e\x0f\x00\x00x\x7f\x0e\x00\x00\xf8\x0e\x00\x1c\x07\x80\x008\x7f\x0e\x00\x01\xf0\x0e\x008\x03\xc0\x00\x1c\x7f\x1c\x00\x03\xe0\x07\x008\x01\xe0\x00\x1c\x7f\x1c\x00\x07\xc0\x07\x008\x00\xf0\x00\x1c\x7f\x1c\x00\x0f\x80\x07\x000\x00x\x00\x0c\x7f\x1c\x00\x1f\x00\x07\x000\x00<\x00\x0c\x7f\x1c\x00>\x00\x07\x000\x00\x1e\x00\x0c\x7f\x1c\x00|@\x07\x000\x00\x9f\x00\x0c\x7f\x1c\x00\xff \x07\x000\x00\x7f\x80\x0c\x7f\x1c\x01\xff\xc0\x07\x000\x00\xff\xc0\x0c\x7f\x1c\x03\xfe`\x07\x000\x05\xfd\xe0\x0c\x7f\x1c\x07\xfeh\x07\x000\x03\xf9\xf0\x0c\x7f\x1c\x0f\xff\xf0\x07\x000\x03\xff\xf8\x0c\x7f\x1c\x1f\xff\xf0\x07\x000\x0b\xff\xfc\x0c\x7f\x1c?\xff\xf0\x07\x000\x03\xff\xde\x0c\x7f\x1c}\xff\xf0\x07\x000\x0b\xff\xdf\x0c\x7f\x1c\xfa\xff\xe8\x07\x000\x03\xff\xc7\x8c\x7f\x1d\xf0\xff\xc0\x07\x000\x05\xff\xa3\xcc\x7f\x1f\xe1\x7f\xd0\x07\x000\x00\xff\x01\xfc\x7f\x1f\xc0\x1f\x00\x07\x000\x00~\x00\xfc\x7f\x1f\x80@@\x07\x000\x00\x81\x00|\x7f\x1f\x00\n\x00\x07\x000\x00(\x00<\x7f\x1e\x00\x00\x00\x07\x000\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x0e\x00\x00\x00\x0e\x008\x00\x00\x00\x1c\x7f\x0e\x00\x00\x00\x0e\x00<\x00\x00\x00<\x7f\x0f\x00\x00\x00\x1e\x00\x1c\x00\x00\x008\x7f\x07\x80\x00\x00<\x00\x1e\x00\x00\x00x\x7f\x03\xc0\x00\x00x\x00\x0f\x80\x00\x01\xf0\x7f\x01\xf8\x00\x03\xf0\x00\x07\xe0\x00\x07\xe0\x7f\x00\xff\xff\xff\xe0\x00\x03\xff\xff\xff\xc0\x7f\x00?\xff\xff\x80\x00\x00\xff\xff\xff\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f'
|
||||
Dizzy=b'P4\n89 64\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x1f\xff\xff\x00\x00\x00?\xff\xfc\x00\x7f\x00\x7f\xff\xff\xc0\x00\x01\xff\xff\xff\x80\x7f\x01\xff\xff\xff\xf0\x00\x03\xff\xff\xff\xc0\x7f\x03\xe0\x00\x00\xf8\x00\x07\xc0\x00\x03\xe0\x7f\x07\x80\x00\x00<\x00\x0f\x00\x00\x00\xf0\x7f\x07\x00\x00\x00\x1c\x00\x1e\x00\x00\x00x\x7f\x0e\x00\x00\x00\x0e\x00\x1c\x00\x00\x008\x7f\x0e\x00\x00\x00\x0e\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x000\x00\x07\x000\x00\xc0\x00\x0c\x7f\x1c\x00\xf0\x00\x07\x000\x03\xc0\x00\x0c\x7f\x1c\x01\xc0\x00\x07\x000\x07\x00\x00\x0c\x7f\x1c\x03\x9f\xe0\x07\x000\x0e\x7f\x80\x0c\x7f\x1c\x07<\xf8\x07\x000\x1c\xf3\xe0\x0c\x7f\x1c\x06`\x1c\x07\x000\x19\x80p\x0c\x7f\x1c\x0c\xc7\xcc\x07\x0003\x1f0\x0c\x7f\x1c\x0c\xcf\xe6\x07\x0003?\x98\x0c\x7f\x1c\r\x98v\x07\x0006a\xd8\x0c\x7f\x1c\r\x9b3\x07\x0006l\xcc\x0c\x7f\x1c\r\x9b\xb3\x07\x0006n\xcc\x0c\x7f\x1c\r\x9f\xb3\x07\x0006~\xcc\x0c\x7f\x1c\x0c\xcf6\x07\x0003<\xd8\x0c\x7f\x1c\x0e\xe0f\x07\x000;\x81\x98\x0c\x7f\x1c\x06y\xee\x07\x000\x19\xe7\xb8\x0c\x7f\x1c\x03\x1f\x8c\x07\x000\x0c~0\x0c\x7f\x1c\x03\x80\x18\x07\x000\x0e\x00`\x0c\x7f\x1c\x00\xf0p\x07\x000\x03\xc1\xc0\x0c\x7f\x1c\x00\x7f\xe0\x07\x000\x01\xff\x80\x0c\x7f\x1c\x00\x0f\x00\x07\x000\x00<\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x0e\x00\x00\x00\x0e\x008\x00\x00\x00\x1c\x7f\x0e\x00\x00\x00\x0e\x00<\x00\x00\x00<\x7f\x0f\x00\x00\x00\x1e\x00\x1c\x00\x00\x008\x7f\x07\x80\x00\x00<\x00\x1e\x00\x00\x00x\x7f\x03\xc0\x00\x00x\x00\x0f\x80\x00\x01\xf0\x7f\x01\xf8\x00\x03\xf0\x00\x07\xe0\x00\x07\xe0\x7f\x00\xff\xff\xff\xe0\x00\x03\xff\xff\xff\xc0\x7f\x00?\xff\xff\x80\x00\x00\xff\xff\xff\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f'
|
||||
Down=b'P4\n89 64\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x1f\xff\xff\x00\x00\x00?\xff\xfc\x00\x7f\x00\x7f\xff\xff\xc0\x00\x01\xff\xff\xff\x80\x7f\x01\xff\xff\xff\xf0\x00\x03\xff\xff\xff\xc0\x7f\x03\xe0\x00\x00\xf8\x00\x07\xc0\x00\x03\xe0\x7f\x07\x80\x00\x00<\x00\x0f\x00\x00\x00\xf0\x7f\x07\x00\x00\x00\x1c\x00\x1e\x00\x00\x00x\x7f\x0e\x00\x00\x00\x0e\x00\x1c\x00\x00\x008\x7f\x0e\x00\x00\x00\x0e\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\n\x00\x07\x000\x00(\x00\x0c\x7f\x1c\x00@@\x07\x000\x00\x81\x00\x0c\x7f\x1c\x00\x9f\x00\x07\x000\x00~\x00\x0c\x7f\x1c\x00\x7f\xd0\x07\x000\x00\xff\x00\x0c\x7f\x1c\x00\xfe`\x07\x000\x05\xfd\xa0\x0c\x7f\x1c\x02\xfeh\x07\x000\x03\xf9\xc0\x0c\x7f\x1c\x01\xff\xf0\x07\x000\x03\xff\xc0\x0c\x7f\x1c\x01\xff\xf0\x07\x000\x0b\xff\xd0\x0c\x7f\x1c\x01\xff\xf0\x07\x000\x03\xff\xc0\x0c\x7f\x1c\x01\xff\xf0\x07\x000\x0b\xff\xd0\x0c\x7f\x1c\x02\xff\xe8\x07\x000\x03\xff\xc0\x0c\x7f\x1c\x00\x7f\xe0\x07\x008\x05\xff\xa0\x1c\x7f\x0e\x01\x7f\xd0\x0e\x008\x00\xff\x00\x1c\x7f\x0e\x00\x1f\x00\x0e\x00<\x00~\x00<\x7f\x0f\x00@@\x1e\x00\x1c\x00\x81\x008\x7f\x07\x80\x15\x00<\x00\x1e\x00\x14\x00x\x7f\x03\xc0\x00\x00x\x00\x0f\x80\x00\x01\xf0\x7f\x01\xf8\x00\x03\xf0\x00\x07\xe0\x00\x07\xe0\x7f\x00\xff\xff\xff\xe0\x00\x03\xff\xff\xff\xc0\x7f\x00?\xff\xff\x80\x00\x00\xff\xff\xff\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f'
|
||||
Evil=b'P4\n89 64\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x0f\xff\xff\x00\x00\x00?\xff\xfc\x00\x7f\x00\x7f\xff\xff\xc0\x00\x01\xff\xff\xff\x80\x7f\x01\xff\xff\xff\xf0\x00\x03\xff\xff\xff\xc0\x7f\x03\xe0\x00\x00\xf8\x00\x07\xc0\x00\x03\xe0\x7f\x07\xf0\x00\x00<\x00\x0f\x00\x00\x03\xf0\x7f\x07\xf8\x00\x00\x1c\x00\x1e\x00\x00\x07\xf8\x7f\x0e<\x00\x00\x0e\x00\x1c\x00\x00\x0e8\x7f\x0e\x1e\x00\x00\x0e\x008\x00\x00<\x1c\x7f\x1c\x0f\x00\x00\x07\x008\x00\x00x\x1c\x7f\x1c\x07\x80\x00\x07\x008\x00\x00\xf0\x1c\x7f\x1c\x01\xe0\x00\x07\x000\x00\x01\xe0\x0c\x7f\x1c\x00\xf0\x00\x07\x000\x00\x03\xc0\x0c\x7f\x1c\x00x\x00\x07\x000\x00\x07\x80\x0c\x7f\x1c\x00<\x00\x07\x000\x00\x0e\x00\x0c\x7f\x1c\x00\x1e\x00\x07\x000\x00>\x00\x0c\x7f\x1c\x00O\x00\x07\x000\x00|\x80\x0c\x7f\x1c\x00?\x80\x07\x000\x00\xff\x00\x0c\x7f\x1c\x00\x7f\xe0\x07\x000\x01\xfd\xa0\x0c\x7f\x1c\x00\xfe\xf0\x07\x000\x03\xfc\x80\x0c\x7f\x1c\x02\xfe\xf8\x07\x000\x07\xfb\xc0\x0c\x7f\x1c\x01\xff\xfc\x07\x000\x1f\xff\xd0\x0c\x7f\x1c\x01\xff\xfe\x07\x000?\xff\xc0\x0c\x7f\x1c\x01\xff\xff\x07\x000\x7f\xff\xd0\x0c\x7f\x1c\x00\xff\xe3\xc7\x000\xf3\xff\xc0\x0c\x7f\x1c\x02\xff\xe9\xe7\x001\xe1\xff\x80\x0c\x7f\x1c\x00\x7f\xc0\xf7\x003\xc5\xff\xa0\x0c\x7f\x1c\x00?\x80\x7f\x00?\x00\xff\x00\x0c\x7f\x1c\x00\x0e\x00?\x00>\x01<\x80\x0c\x7f\x1c\x00\x10\x80\x1f\x00<\x00B\x00\x0c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x0e\x00\x00\x00\x0e\x008\x00\x00\x00\x1c\x7f\x0e\x00\x00\x00\x0e\x00<\x00\x00\x00<\x7f\x0f\x00\x00\x00\x1e\x00\x1c\x00\x00\x008\x7f\x07\x80\x00\x00<\x00\x1e\x00\x00\x00x\x7f\x03\xc0\x00\x00x\x00\x0f\x80\x00\x01\xf0\x7f\x01\xf8\x00\x03\xf0\x00\x07\xe0\x00\x07\xe0\x7f\x00\xff\xff\xff\xe0\x00\x03\xff\xff\xff\xc0\x7f\x00?\xff\xff\x80\x00\x00\xff\xff\xff\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f'
|
||||
Hurt=b'P4\n89 64\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x1f\xff\xff\x00\x00\x00?\xff\xfc\x00\x7f\x00\x7f\xff\xff\xc0\x00\x01\xff\xff\xff\x80\x7f\x01\xff\xff\xff\xf0\x00\x03\xff\xff\xff\xc0\x7f\x03\xe0\x00\x00\xf8\x00\x07\xc0\x00\x03\xe0\x7f\x07\x80\x00\x00<\x00\x0f\x00\x00\x00\xf0\x7f\x07\x00\x00\x00\x1c\x00\x1e\x00\x00\x00x\x7f\x0e\x00\x00\x00\x0e\x00\x1c\x00\x00\x008\x7f\x0e\x00\x00\x00\x0e\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x0f\x008\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00?\x00>\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\xff\x00?\x80\x00\x00\x0c\x7f\x1c\x00\x00\x03\xff\x00?\xe0\x00\x00\x0c\x7f\x1c\x00\x00\x0f\xe7\x001\xf8\x00\x00\x0c\x7f\x1c\x00\x00?\x87\x000~\x00\x00\x0c\x7f\x1c\x00\x00\xfe\x07\x000\x1f\x80\x00\x0c\x7f\x1c\x00\x03\xf8\x07\x000\x07\xe0\x00\x0c\x7f\x1c\x00\x0f\xf0\x07\x000\x03\xf8\x00\x0c\x7f\x1c\x00?\x80\x07\x000\x04\xfe\x00\x0c\x7f\x1c\x00\xff\xe0\x07\x000\x03\xff\x80\x0c\x7f\x1c\x03\xff\xf0\x07\x000\x17\xff\xe0\x0c\x7f\x1c\x0f\xff\x98\x07\x000\x07\xf3\xf8\x0c\x7f\x1c?\xbf\xba\x07\x000\x0f\xef~\x0c\x7f\x1c\xff\x7f\xfc\x07\x000/\xff_\x8c\x7f\x1d\xf8\x7f\xfc\x07\x000\x0f\xff\x07\xec\x7f\x1f\xe0\x7f\xfc\x07\x000/\xffA\xfc\x7f\x1f\x80?\xf8\x07\x000\x0f\xff\x00|\x7f\x1e\x00\xbf\xfa\x07\x008\x07\xfe\x00\x1c\x7f\x0e\x00\x1f\xf0\x0e\x008\x17\xfe\x80\x1c\x7f\x0e\x00\x0f\xe0\x0e\x00<\x03\xfc\x00<\x7f\x0f\x00\x03\x80\x1e\x00\x1c\x04\xf2\x008\x7f\x07\x80\x04 <\x00\x1e\x01\x08\x00x\x7f\x03\xc0\x00\x00x\x00\x0f\x80\x00\x01\xf0\x7f\x01\xf8\x00\x03\xf0\x00\x07\xe0\x00\x07\xe0\x7f\x00\xff\xff\xff\xe0\x00\x03\xff\xff\xff\xc0\x7f\x00?\xff\xff\x80\x00\x00\xff\xff\xff\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f'
|
||||
Knocked_out=b'P4\n89 64\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x1f\xff\xff\x00\x00\x00?\xff\xfc\x00\x7f\x00\x7f\xff\xff\xc0\x00\x01\xff\xff\xff\x80\x7f\x01\xff\xff\xff\xf0\x00\x03\xff\xff\xff\xc0\x7f\x03\xe0\x00\x00\xf8\x00\x07\xc0\x00\x03\xe0\x7f\x07\x80\x00\x00<\x00\x0f\x00\x00\x00\xf0\x7f\x07\x00\x00\x00\x1c\x00\x1e\x00\x00\x00x\x7f\x0e\x00\x00\x00\x0e\x00\x1c\x00\x00\x008\x7f\x0e\x00\x00\x00\x0e\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x0e\x00\x07\x000\x00\x18\x00\x0c\x7f\x1c\x00\x0e\x00\x07\x000\x00\x18\x00\x0c\x7f\x1c\x00\x0e\x00\x07\x000\x00\x18\x00\x0c\x7f\x1c\x00\x0e\x00\x07\x000\x00\x18\x00\x0c\x7f\x1c\x00\x0e\x00\x07\x000\x00\x18\x00\x0c\x7f\x1c\x00\x0e\x00\x07\x000\x00\x18\x00\x0c\x7f\x1c\x00\x0e\x00\x07\x000\x00\x18\x00\x0c\x7f\x1c\x00\x0e\x00\x07\x000\x00\x18\x00\x0c\x7f\x1c\x0f\xff\xfe\x07\x000\x1f\xff\xf8\x0c\x7f\x1c\x0f\xff\xfe\x07\x000?\xff\xfc\x0c\x7f\x1c\x0f\xff\xfe\x07\x000?\xff\xf8\x0c\x7f\x1c\x00\x0e\x00\x07\x000\x00\x18\x00\x0c\x7f\x1c\x00\x0e\x00\x07\x000\x00\x18\x00\x0c\x7f\x1c\x00\x0e\x00\x07\x000\x00\x18\x00\x0c\x7f\x1c\x00\x0e\x00\x07\x000\x00\x18\x00\x0c\x7f\x1c\x00\x0e\x00\x07\x000\x00\x18\x00\x0c\x7f\x1c\x00\x0e\x00\x07\x000\x00\x18\x00\x0c\x7f\x1c\x00\x0e\x00\x07\x000\x00\x18\x00\x0c\x7f\x1c\x00\x0e\x00\x07\x000\x00\x18\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x0e\x00\x00\x00\x0e\x008\x00\x00\x00\x1c\x7f\x0e\x00\x00\x00\x0e\x00<\x00\x00\x00<\x7f\x0f\x00\x00\x00\x1e\x00\x1c\x00\x00\x008\x7f\x07\x80\x00\x00<\x00\x1e\x00\x00\x00x\x7f\x03\xc0\x00\x00x\x00\x0f\x80\x00\x01\xf0\x7f\x01\xf8\x00\x03\xf0\x00\x07\xe0\x00\x07\xe0\x7f\x00\xff\xff\xff\xe0\x00\x03\xff\xff\xff\xc0\x7f\x00?\xff\xff\x80\x00\x00\xff\xff\xff\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f'
|
||||
Love=b'P4\n89 64\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x1f\xff\xff\x00\x00\x00?\xff\xfc\x00\x7f\x00\x7f\xff\xff\xc0\x00\x01\xff\xff\xff\x80\x7f\x01\xff\xff\xff\xf0\x00\x03\xff\xff\xff\xc0\x7f\x03\xe0\x00\x00\xf8\x00\x07\xc0\x00\x03\xe0\x7f\x07\x80\x00\x00<\x00\x0f\x00\x00\x00\xf0\x7f\x07\x00\x00\x00\x1c\x00\x1e\x00\x00\x00x\x7f\x0e\x00\x00\x00\x0e\x00\x1c\x00\x00\x008\x7f\x0e\x00\x00\x00\x0e\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x07\xe0\xfc\x07\x000\x0f\x81\xf0\x0c\x7f\x1c\x0f\xd1\xfa\x07\x000\x1fC\xf8\x0c\x7f\x1c\x1f\xeb\xfd\x07\x000?\xa7\xf4\x0c\x7f\x1c\x1f\xff\xfd\x07\x000\x7f\xff\xfa\x0c\x7f\x1c?\xff\xfe\x07\x000\x7f\xff\xfa\x0c\x7f\x1c?\xff\xff\x87\x000\x7f\xff\xfe\x0c\x7f\x1c?\xff\xff\x87\x000\x7f\xff\xfe\x0c\x7f\x1c?\xff\xff\x87\x000\x7f\xff\xfe\x0c\x7f\x1c\x1f\xff\xff\x07\x000\x7f\xff\xfe\x0c\x7f\x1c\x1f\xff\xff\x07\x000\x7f\xff\xfe\x0c\x7f\x1c\x1f\xff\xff\x07\x000?\xff\xfc\x0c\x7f\x1c\x0f\xff\xfe\x07\x000\x1f\xff\xf8\x0c\x7f\x1c\x03\xff\xf8\x07\x000\x0f\xff\xf0\x0c\x7f\x1c\x01\xff\xf0\x07\x000\x07\xff\xe0\x0c\x7f\x1c\x00\xff\xe0\x07\x000\x03\xff\xc0\x0c\x7f\x1c\x00\x7f\xc0\x07\x000\x01\xff\x80\x0c\x7f\x1c\x00?\x80\x07\x000\x00~\x00\x0c\x7f\x1c\x00\x1f\x00\x07\x000\x00<\x00\x0c\x7f\x1c\x00\x0e\x00\x07\x000\x00\x18\x00\x0c\x7f\x1c\x00\x04\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x0e\x00\x00\x00\x0e\x008\x00\x00\x00\x1c\x7f\x0e\x00\x00\x00\x0e\x00<\x00\x00\x00<\x7f\x0f\x00\x00\x00\x1e\x00\x1c\x00\x00\x008\x7f\x07\x80\x00\x00<\x00\x1e\x00\x00\x00x\x7f\x03\xc0\x00\x00x\x00\x0f\x80\x00\x01\xf0\x7f\x01\xf8\x00\x03\xf0\x00\x07\xe0\x00\x07\xe0\x7f\x00\xff\xff\xff\xe0\x00\x03\xff\xff\xff\xc0\x7f\x00?\xff\xff\x80\x00\x00\xff\xff\xff\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f'
|
||||
Middle_left=b'P4\n89 64\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x1f\xff\xff\x00\x00\x00?\xff\xfc\x00\x7f\x00\x7f\xff\xff\xc0\x00\x01\xff\xff\xff\x80\x7f\x01\xff\xff\xff\xf0\x00\x03\xff\xff\xff\xc0\x7f\x03\xe0\x00\x00\xf8\x00\x07\xc0\x00\x03\xe0\x7f\x07\x80\x00\x00<\x00\x0f\x00\x00\x00\xf0\x7f\x07\x00\x00\x00\x1c\x00\x1e\x00\x00\x00x\x7f\x0e\x00\x00\x00\x0e\x00\x1c\x00\x00\x008\x7f\x0e\x00\x00\x00\x0e\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x08@\x00\x07\x000 \x80\x00\x0c\x7f\x1c\x03\x80\x00\x07\x000\x07 \x00\x0c\x7f\x1c\x0f\xe0\x00\x07\x000?\x80\x00\x0c\x7f\x1c\x1f\xf0\x00\x07\x001\x7f\xe8\x00\x0c\x7f\x1c?\x98\x00\x07\x000\x7f \x00\x0c\x7f\x1c\xbf\xba\x00\x07\x002\xfe\xf0\x00\x0c\x7f\x1c\x7f\xfc\x00\x07\x000\xff\xf4\x00\x0c\x7f\x1c\x7f\xfc\x00\x07\x002\xff\xf0\x00\x0c\x7f\x1c\x7f\xfc\x00\x07\x000\xff\xf4\x00\x0c\x7f\x1c?\xf8\x00\x07\x002\xff\xf0\x00\x0c\x7f\x1c\xbf\xfa\x00\x07\x000\x7f\xe0\x00\x0c\x7f\x1c\x1f\xf0\x00\x07\x001\x7f\xe8\x00\x0c\x7f\x1c\x0f\xe0\x00\x07\x000?\xc0\x00\x0c\x7f\x1c\x03\x80\x00\x07\x000O \x00\x0c\x7f\x1c\x08@\x00\x07\x000\x10\x80\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x0e\x00\x00\x00\x0e\x008\x00\x00\x00\x1c\x7f\x0e\x00\x00\x00\x0e\x00<\x00\x00\x00<\x7f\x0f\x00\x00\x00\x1e\x00\x1c\x00\x00\x008\x7f\x07\x80\x00\x00<\x00\x1e\x00\x00\x00x\x7f\x03\xc0\x00\x00x\x00\x0f\x80\x00\x01\xf0\x7f\x01\xf8\x00\x03\xf0\x00\x07\xe0\x00\x07\xe0\x7f\x00\xff\xff\xff\xe0\x00\x03\xff\xff\xff\xc0\x7f\x00?\xff\xff\x80\x00\x00\xff\xff\xff\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f'
|
||||
Middle_right=b'P4\n89 64\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x1f\xff\xff\x00\x00\x00?\xff\xfc\x00\x7f\x00\x7f\xff\xff\xc0\x00\x01\xff\xff\xff\x80\x7f\x01\xff\xff\xff\xf0\x00\x03\xff\xff\xff\xc0\x7f\x03\xe0\x00\x00\xf8\x00\x07\xc0\x00\x03\xe0\x7f\x07\x80\x00\x00<\x00\x0f\x00\x00\x00\xf0\x7f\x07\x00\x00\x00\x1c\x00\x1e\x00\x00\x00x\x7f\x0e\x00\x00\x00\x0e\x00\x1c\x00\x00\x008\x7f\x0e\x00\x00\x00\x0e\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x84\x07\x000\x00\x02\x08\x0c\x7f\x1c\x00\x008\x07\x000\x00\x00r\x0c\x7f\x1c\x00\x00\xfe\x07\x000\x00\x03\xf8\x0c\x7f\x1c\x00\x01\xff\x07\x000\x00\x17\xfe\x8c\x7f\x1c\x00\x03\xf9\x87\x000\x00\x07\xf2\x0c\x7f\x1c\x00\x0b\xfb\xa7\x000\x00\x0f\xef\x0c\x7f\x1c\x00\x07\xff\xc7\x000\x00/\xffL\x7f\x1c\x00\x07\xff\xc7\x000\x00\x0f\xffL\x7f\x1c\x00\x07\xff\xc7\x000\x00/\xff\x0c\x7f\x1c\x00\x03\xff\x87\x000\x00\x0f\xffL\x7f\x1c\x00\x0b\xff\xa7\x000\x00\x07\xfe\x0c\x7f\x1c\x00\x01\xff\x07\x000\x00\x17\xfe\x8c\x7f\x1c\x00\x00\xfe\x07\x000\x00\x03\xfc\x0c\x7f\x1c\x00\x008\x07\x000\x00\x04\xf2\x0c\x7f\x1c\x00\x00\x84\x07\x000\x00\x01\x08\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x0e\x00\x00\x00\x0e\x008\x00\x00\x00\x1c\x7f\x0e\x00\x00\x00\x0e\x00<\x00\x00\x00<\x7f\x0f\x00\x00\x00\x1e\x00\x1c\x00\x00\x008\x7f\x07\x80\x00\x00<\x00\x1e\x00\x00\x00x\x7f\x03\xc0\x00\x00x\x00\x0f\x80\x00\x01\xf0\x7f\x01\xf8\x00\x03\xf0\x00\x07\xe0\x00\x07\xe0\x7f\x00\xff\xff\xff\xe0\x00\x03\xff\xff\xff\xc0\x7f\x00?\xff\xff\x80\x00\x00\xff\xff\xff\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f'
|
||||
Neutral=b'P4\n89 64\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x1f\xff\xff\x00\x00\x00?\xff\xfc\x00\x7f\x00\x7f\xff\xff\xc0\x00\x01\xff\xff\xff\x80\x7f\x01\xff\xff\xff\xf0\x00\x03\xff\xff\xff\xc0\x7f\x03\xe0\x00\x00\xf8\x00\x07\xc0\x00\x03\xe0\x7f\x07\x80\x00\x00<\x00\x0f\x00\x00\x00\xf0\x7f\x07\x00\x00\x00\x1c\x00\x1e\x00\x00\x00x\x7f\x0e\x00\x00\x00\x0e\x00\x1c\x00\x00\x008\x7f\x0e\x00\x00\x00\x0e\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00!\x00\x07\x000\x00\x82\x00\x0c\x7f\x1c\x00\x0e\x00\x07\x000\x00\x1c\x80\x0c\x7f\x1c\x00?\x80\x07\x000\x00\xfe\x00\x0c\x7f\x1c\x00\x7f\xc0\x07\x000\x05\xff\xa0\x0c\x7f\x1c\x00\xfe`\x07\x000\x01\xfc\x80\x0c\x7f\x1c\x02\xfe\xe8\x07\x000\x03\xfb\xc0\x0c\x7f\x1c\x01\xff\xf0\x07\x000\x0b\xff\xd0\x0c\x7f\x1c\x01\xff\xf0\x07\x000\x03\xff\xc0\x0c\x7f\x1c\x01\xff\xf0\x07\x000\x0b\xff\xd0\x0c\x7f\x1c\x00\xff\xe0\x07\x000\x03\xff\xc0\x0c\x7f\x1c\x02\xff\xe8\x07\x000\x01\xff\x80\x0c\x7f\x1c\x00\x7f\xc0\x07\x000\x05\xff\xa0\x0c\x7f\x1c\x00?\x80\x07\x000\x00\xff\x00\x0c\x7f\x1c\x00\x0e\x00\x07\x000\x01<\x80\x0c\x7f\x1c\x00!\x00\x07\x000\x00B\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x0e\x00\x00\x00\x0e\x008\x00\x00\x00\x1c\x7f\x0e\x00\x00\x00\x0e\x00<\x00\x00\x00<\x7f\x0f\x00\x00\x00\x1e\x00\x1c\x00\x00\x008\x7f\x07\x80\x00\x00<\x00\x1e\x00\x00\x00x\x7f\x03\xc0\x00\x00x\x00\x0f\x80\x00\x01\xf0\x7f\x01\xf8\x00\x03\xf0\x00\x07\xe0\x00\x07\xe0\x7f\x00\xff\xff\xff\xe0\x00\x03\xff\xff\xff\xc0\x7f\x00?\xff\xff\x80\x00\x00\xff\xff\xff\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f'
|
||||
Nuclear=b"P4\n89 64\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x1f\xff\xff\x00\x00\x00?\xff\xfc\x00\x7f\x00\x7f\xff\xff\xc0\x00\x01\xff\xff\xff\x80\x7f\x01\xff\xff\xff\xf0\x00\x03\xff\xff\xff\xc0\x7f\x03\xe0\x00\x00\xf8\x00\x07\xc0\x00\x03\xe0\x7f\x07\x80\x00\x00<\x00\x0f\x00\x00\x00\xf0\x7f\x07\x00\x00\x00\x1c\x00\x1e\x00\x00\x00x\x7f\x0e\x00\x00\x00\x0e\x00\x1c\x00\x00\x008\x7f\x0e\x00\x00\x00\x0e\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x1e\x00\x07\x000\x00<\x00\x0c\x7f\x1c\x00\xf3\xc0\x07\x000\x01\xe7\x80\x0c\x7f\x1c\x03\x800\x07\x000\x07\x00`\x0c\x7f\x1c\x06\x00\x08\x07\x000\x0c\x00\x10\x0c\x7f\x1c\r\x80$\x07\x000\x1b\x00H\x0c\x7f\x1c\x1b\x80r\x07\x0007\x00\xe4\x0c\x7f\x1c\x13\xc0\xfb\x07\x000'\x81\xf6\x0c\x7f\x1c7\xe0\xfd\x07\x000o\xc1\xfa\x0c\x7f\x1c/\xe1\xfd\x87\x000_\xc3\xfb\x0c\x7f\x1c/\xe1\xfc\x87\x000_\xc3\xf9\x0c\x7f\x1co\xe4\xfe\x87\x000\xdf\xc9\xfd\x0c\x7f\x1cO\xce\xfe\x87\x000\x9f\x9d\xfd\x0c\x7f\x1c@\x1e\x00\x87\x000\x80<\x01\x0c\x7f\x1c@\x0c\x00\x87\x000\x80\x18\x01\x0c\x7f\x1c \x00\x00\x87\x000@\x00\x01\x0c\x7f\x1c \x0e\x00\x87\x000@\x1c\x01\x0c\x7f\x1c \x1f\x01\x87\x000@>\x03\x0c\x7f\x1c\x10?\x01\x07\x000 ~\x02\x0c\x7f\x1c\x18?\x82\x07\x0000\x7f\x04\x0c\x7f\x1c\x08\x7f\x86\x07\x000\x10\xff\x0c\x0c\x7f\x1c\x04\x7f\xcc\x07\x000\x08\xff\x98\x0c\x7f\x1c\x03\x1e\x18\x07\x000\x06<0\x0c\x7f\x1c\x01\xc0`\x07\x000\x03\x80\xc0\x0c\x7f\x1c\x00\x7f\x80\x07\x000\x00\xff\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x0e\x00\x00\x00\x0e\x008\x00\x00\x00\x1c\x7f\x0e\x00\x00\x00\x0e\x00<\x00\x00\x00<\x7f\x0f\x00\x00\x00\x1e\x00\x1c\x00\x00\x008\x7f\x07\x80\x00\x00<\x00\x1e\x00\x00\x00x\x7f\x03\xc0\x00\x00x\x00\x0f\x80\x00\x01\xf0\x7f\x01\xf8\x00\x03\xf0\x00\x07\xe0\x00\x07\xe0\x7f\x00\xff\xff\xff\xe0\x00\x03\xff\xff\xff\xc0\x7f\x00?\xff\xff\x80\x00\x00\xff\xff\xff\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f"
|
||||
Pinch_left=b'P4\n89 64\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x1f\xff\xff\x00\x00\x00?\xff\xfc\x00\x7f\x00\x7f\xff\xff\xc0\x00\x01\xff\xff\xff\x80\x7f\x01\xff\xff\xff\xf0\x00\x03\xff\xff\xff\xc0\x7f\x03\xe0\x00\x00\xf8\x00\x07\xc0\x00\x03\xe0\x7f\x07\x80\x00\x00<\x00\x0f\x00\x00\x00\xf0\x7f\x07\x00\x00\x00\x1c\x00\x1e\x00\x00\x00x\x7f\x0e\x00\x00\x00\x0e\x00\x1c\x00\x00\x008\x7f\x0e\x00\x00\x00\x0e\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x0c\x7f\x1f\xff\xff\xff\xff\x00?\xff\xff\xff\xfc\x7f\x1f\xff\xff\xff\xff\x00?\xff\xff\xff\xfc\x7f\x1d\x7f\xbd\x00\x07\x00:\xfe\xfc\x00\x1c\x7f\x1c\x7f\xfc\x00\x07\x002\xff\xf0\x00\x0c\x7f\x1c\x7f\xfc\x00\x07\x000\xff\xf4\x00\x0c\x7f\x1c?\xf8\x00\x07\x002\xff\xf0\x00\x0c\x7f\x1c\xbf\xfa\x00\x07\x000\x7f\xe0\x00\x0c\x7f\x1c\x1f\xf0\x00\x07\x000\x7f\xe8\x00\x0c\x7f\x1c\x0f\xe0\x00\x07\x000\xbf\xd0\x00\x0c\x7f\x1c\x03\x80\x00\x07\x000\x0f\x00\x00\x0c\x7f\x1c\x18`\x00\x07\x0000\xc0\x00\x1c\x7f\x1f\xff\xff\xff\xff\x00?\xff\xff\xff\xfc\x7f\x1f\xff\xff\xff\xff\x00?\xff\xff\xff\xfc\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x0e\x00\x00\x00\x0e\x008\x00\x00\x00\x1c\x7f\x0e\x00\x00\x00\x0e\x00<\x00\x00\x00<\x7f\x0f\x00\x00\x00\x1e\x00\x1c\x00\x00\x008\x7f\x07\x80\x00\x00<\x00\x1e\x00\x00\x00x\x7f\x03\xc0\x00\x00x\x00\x0f\x80\x00\x01\xf0\x7f\x01\xf8\x00\x03\xf0\x00\x07\xe0\x00\x07\xe0\x7f\x00\xff\xff\xff\xe0\x00\x03\xff\xff\xff\xc0\x7f\x00?\xff\xff\x80\x00\x00\xff\xff\xff\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f'
|
||||
Pinch_middle=b'P4\n89 64\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x1f\xff\xff\x00\x00\x00?\xff\xfc\x00\x7f\x00\x7f\xff\xff\xc0\x00\x01\xff\xff\xff\x80\x7f\x01\xff\xff\xff\xf0\x00\x03\xff\xff\xff\xc0\x7f\x03\xe0\x00\x00\xf8\x00\x07\xc0\x00\x03\xe0\x7f\x07\x80\x00\x00<\x00\x0f\x00\x00\x00\xf0\x7f\x07\x00\x00\x00\x1c\x00\x1e\x00\x00\x00x\x7f\x0e\x00\x00\x00\x0e\x00\x1c\x00\x00\x008\x7f\x0e\x00\x00\x00\x0e\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x0c\x7f\x1f\xff\xff\xff\xff\x00?\xff\xff\xff\xfc\x7f\x1f\xff\xff\xff\xff\x00?\xff\xff\xff\xfc\x7f\x1c\x05\xfe\xf4\x07\x008\x0b\xfb\xf0\x1c\x7f\x1c\x01\xff\xf0\x07\x000\x03\xff\xc0\x0c\x7f\x1c\x01\xff\xf0\x07\x000\x0b\xff\xd0\x0c\x7f\x1c\x00\xff\xe0\x07\x000\x03\xff\xc0\x0c\x7f\x1c\x02\xff\xe8\x07\x000\x01\xff\x80\x0c\x7f\x1c\x00\x7f\xc0\x07\x000\x01\xff\xa0\x0c\x7f\x1c\x00?\x80\x07\x000\x02\xff@\x0c\x7f\x1c\x00\x0e\x00\x07\x000\x00<\x00\x0c\x7f\x1c\x00a\x80\x07\x000\x00\xc3\x00\x1c\x7f\x1f\xff\xff\xff\xff\x00?\xff\xff\xff\xfc\x7f\x1f\xff\xff\xff\xff\x00?\xff\xff\xff\xfc\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x0e\x00\x00\x00\x0e\x008\x00\x00\x00\x1c\x7f\x0e\x00\x00\x00\x0e\x00<\x00\x00\x00<\x7f\x0f\x00\x00\x00\x1e\x00\x1c\x00\x00\x008\x7f\x07\x80\x00\x00<\x00\x1e\x00\x00\x00x\x7f\x03\xc0\x00\x00x\x00\x0f\x80\x00\x01\xf0\x7f\x01\xf8\x00\x03\xf0\x00\x07\xe0\x00\x07\xe0\x7f\x00\xff\xff\xff\xe0\x00\x03\xff\xff\xff\xc0\x7f\x00?\xff\xff\x80\x00\x00\xff\xff\xff\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f'
|
||||
Pinch_right=b'P4\n89 64\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x1f\xff\xff\x00\x00\x00?\xff\xfc\x00\x7f\x00\x7f\xff\xff\xc0\x00\x01\xff\xff\xff\x80\x7f\x01\xff\xff\xff\xf0\x00\x03\xff\xff\xff\xc0\x7f\x03\xe0\x00\x00\xf8\x00\x07\xc0\x00\x03\xe0\x7f\x07\x80\x00\x00<\x00\x0f\x00\x00\x00\xf0\x7f\x07\x00\x00\x00\x1c\x00\x1e\x00\x00\x00x\x7f\x0e\x00\x00\x00\x0e\x00\x1c\x00\x00\x008\x7f\x0e\x00\x00\x00\x0e\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x0c\x7f\x1f\xff\xff\xff\xff\x00?\xff\xff\xff\xfc\x7f\x1f\xff\xff\xff\xff\x00?\xff\xff\xff\xfc\x7f\x1c\x00\x17\xfb\xd7\x008\x00/\xef\\\x7f\x1c\x00\x07\xff\xc7\x000\x00\x0f\xffL\x7f\x1c\x00\x07\xff\xc7\x000\x00/\xff\x0c\x7f\x1c\x00\x03\xff\x87\x000\x00\x0f\xffL\x7f\x1c\x00\x0b\xff\xa7\x000\x00\x07\xfe\x0c\x7f\x1c\x00\x01\xff\x07\x000\x00\x07\xfe\x8c\x7f\x1c\x00\x00\xfe\x07\x000\x00\x0b\xfd\x0c\x7f\x1c\x00\x008\x07\x000\x00\x00\xf0\x0c\x7f\x1c\x00\x01C\x07\x000\x00\x03\x0c\x1c\x7f\x1f\xff\xff\xff\xff\x00?\xff\xff\xff\xfc\x7f\x1f\xff\xff\xff\xff\x00?\xff\xff\xff\xfc\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x0e\x00\x00\x00\x0e\x008\x00\x00\x00\x1c\x7f\x0e\x00\x00\x00\x0e\x00<\x00\x00\x00<\x7f\x0f\x00\x00\x00\x1e\x00\x1c\x00\x00\x008\x7f\x07\x80\x00\x00<\x00\x1e\x00\x00\x00x\x7f\x03\xc0\x00\x00x\x00\x0f\x80\x00\x01\xf0\x7f\x01\xf8\x00\x03\xf0\x00\x07\xe0\x00\x07\xe0\x7f\x00\xff\xff\xff\xe0\x00\x03\xff\xff\xff\xc0\x7f\x00?\xff\xff\x80\x00\x00\xff\xff\xff\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f'
|
||||
Tear=b'P4\n89 64\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x1f\xff\xff\x00\x00\x00?\xff\xfc\x00\x7f\x00\x7f\xff\xff\xc0\x00\x01\xff\xff\xff\x80\x7f\x01\xff\xff\xff\xf0\x00\x03\xff\xff\xff\xc0\x7f\x03\xe0\x00\x00\xf8\x00\x07\xc0\x00\x03\xe0\x7f\x07\x80\x00\x00<\x00\x0f\x00\x00\x00\xf0\x7f\x07\x00\x00\x00\x1c\x00\x1e\x00\x00\x00x\x7f\x0e\x00\x00\x00\x0e\x00\x1c\x00\x00\x008\x7f\x0e\x00\x00\x00\x0e\x008\x00\x00\x00\x1c\x7f\x1e\x00\x00\x00\x0f\x008\x00\x00\x00\x1c\x7f\x1f\xff\xff\xff\xff\x00?\xff\xff\xff\xfc\x7f\x1f\xff\xff\xff\xff\x00?\xff\xff\xff\xfc\x7f\x1c\x00\xbf\xa0\x07\x008\x02\xfe@\x1c\x7f\x1c\x00\x7f\xc0\x07\x000\x00\xff\x00\x0c\x7f\x1c\x00\xfe`\x07\x000\x05\xfd\xa0\x0c\x7f\x1c\x02\xfeh\x07\x000\x03\xf9\xc0\x0c\x7f\x1c\x01\xff\xf0\x07\x000\x0b\xff\xd0\x0c\x7f\x1c\x01\xff\xf0\x07\x000\x03\xff\xc0\x0c\x7f\x1c\x01\xff\xf0\x07\x000\x0b\xff\xd0\x0c\x7f\x1c\x00\xff\xe0\x07\x000\x03\xff\xc0\x0c\x7f\x1f\xff\xff\xff\xff\x00?\xff\xff\xff\xfc\x7f\x1f\xff\xff\xff\xff\x00?\xff\xff\xff\xfc\x7f\x1f\xff\xff\xff\xff\x00?\xff\xff\xff\xfc\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00 \x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00 \x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00 \x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x000\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00p\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00p\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\xf8\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x01\xfc\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x01\xf6\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x03\xfa\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x03\xfe\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x03\xfe\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x01\xfe\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\xfc\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00p\x0c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x0e\x00\x00\x00\x0e\x008\x00\x00\x00\x1c\x7f\x0e\x00\x00\x00\x0e\x00<\x00\x00\x00<\x7f\x0f\x00\x00\x00\x1e\x00\x1c\x00\x00\x008\x7f\x07\x80\x00\x00<\x00\x1e\x00\x00\x00x\x7f\x03\xc0\x00\x00x\x00\x0f\x80\x00\x01\xf0\x7f\x01\xf8\x00\x03\xf0\x00\x07\xe0\x00\x07\xe0\x7f\x00\xff\xff\xff\xe0\x00\x03\xff\xff\xff\xc0\x7f\x00?\xff\xff\x80\x00\x00\xff\xff\xff\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f'
|
||||
Tired_left=b'P4\n89 64\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x1f\xff\xff\x00\x00\x00?\xff\xfc\x00\x7f\x00\x7f\xff\xff\xc0\x00\x01\xff\xff\xff\x80\x7f\x01\xff\xff\xff\xf0\x00\x03\xff\xff\xff\xc0\x7f\x03\xe0\x00\x00\xf8\x00\x07\xc0\x00\x03\xe0\x7f\x07\x80\x00\x00<\x00\x0f\x00\x00\x00\xf0\x7f\x07\x00\x00\x00\x1c\x00\x1e\x00\x00\x00x\x7f\x0e\x00\x00\x00\x0e\x00\x1c\x00\x00\x008\x7f\x0e\x00\x00\x00\x0e\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x1c\x7f\x1f\xff\xff\xff\xff\x00?\xff\xff\xff\xfc\x7f\x1f\xff\xff\xff\xff\x00?\xff\xff\xff\xfc\x7f\x1c\xbf\xba\x00\x07\x00:\xfet\x00\x1c\x7f\x1c\x7f\xf8\x00\x07\x000\xff\xf0\x00\x0c\x7f\x1c\x7f\xfc\x00\x07\x002\xff\xf4\x00\x0c\x7f\x1c\x7f\xfc\x00\x07\x000\xff\xf0\x00\x0c\x7f\x1c\x7f\xfc\x00\x07\x002\xff\xf4\x00\x0c\x7f\x1c\xbf\xfa\x00\x07\x000\xff\xf0\x00\x0c\x7f\x1c\x1f\xf8\x00\x07\x009\x7f\xe8\x00\x1c\x7f\x0e_\xf4\x00\x0e\x008?\xc0\x00\x1c\x7f\x0e\x07\xc0\x00\x0e\x00<\x1f\x80\x00<\x7f\x0f\x10\x10\x00\x1e\x00\x1c @\x008\x7f\x07\x85@\x00<\x00\x1e\x05\x00\x00x\x7f\x03\xc0\x00\x00x\x00\x0f\x80\x00\x01\xf0\x7f\x01\xf8\x00\x03\xf0\x00\x07\xe0\x00\x07\xe0\x7f\x00\xff\xff\xff\xe0\x00\x03\xff\xff\xff\xc0\x7f\x00?\xff\xff\x80\x00\x00\xff\xff\xff\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f'
|
||||
Tired_middle=b'P4\n89 64\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x1f\xff\xff\x00\x00\x00?\xff\xfc\x00\x7f\x00\x7f\xff\xff\xc0\x00\x01\xff\xff\xff\x80\x7f\x01\xff\xff\xff\xf0\x00\x03\xff\xff\xff\xc0\x7f\x03\xe0\x00\x00\xf8\x00\x07\xc0\x00\x03\xe0\x7f\x07\x80\x00\x00<\x00\x0f\x00\x00\x00\xf0\x7f\x07\x00\x00\x00\x1c\x00\x1e\x00\x00\x00x\x7f\x0e\x00\x00\x00\x0e\x00\x1c\x00\x00\x008\x7f\x0e\x00\x00\x00\x0e\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x1c\x7f\x1f\xff\xff\xff\xff\x00?\xff\xff\xff\xfc\x7f\x1f\xff\xff\xff\xff\x00?\xff\xff\xff\xfc\x7f\x1c\x02\xff\xe8\x07\x008\x0b\xfb\xd0\x1c\x7f\x1c\x01\xff\xf0\x07\x000\x03\xff\xd0\x0c\x7f\x1c\x01\xff\xf0\x07\x000\x0b\xff\xc0\x0c\x7f\x1c\x01\xff\xf0\x07\x000\x0b\xff\xd0\x0c\x7f\x1c\x00\xff\xe0\x07\x000\x03\xff\xc0\x0c\x7f\x1c\x02\xff\xe8\x07\x000\x01\xff\x80\x0c\x7f\x1c\x00\x7f\xc0\x07\x008\x05\xff\xa0\x1c\x7f\x0e\x00?\x80\x0e\x008\x00\xff\x00\x1c\x7f\x0e\x00\x0e\x00\x0e\x00<\x01<\x80<\x7f\x0f\x00!\x00\x1e\x00\x1c\x00B\x008\x7f\x07\x80\x00\x00<\x00\x1e\x00\x00\x00x\x7f\x03\xc0\x00\x00x\x00\x0f\x80\x00\x01\xf0\x7f\x01\xf8\x00\x03\xf0\x00\x07\xe0\x00\x07\xe0\x7f\x00\xff\xff\xff\xe0\x00\x03\xff\xff\xff\xc0\x7f\x00?\xff\xff\x80\x00\x00\xff\xff\xff\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f'
|
||||
Tired_right=b'P4\n89 64\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x1f\xff\xff\x00\x00\x00?\xff\xfc\x00\x7f\x00\x7f\xff\xff\xc0\x00\x01\xff\xff\xff\x80\x7f\x01\xff\xff\xff\xf0\x00\x03\xff\xff\xff\xc0\x7f\x03\xe0\x00\x00\xf8\x00\x07\xc0\x00\x03\xe0\x7f\x07\x80\x00\x00<\x00\x0f\x00\x00\x00\xf0\x7f\x07\x00\x00\x00\x1c\x00\x1e\x00\x00\x00x\x7f\x0e\x00\x00\x00\x0e\x00\x1c\x00\x00\x008\x7f\x0e\x00\x00\x00\x0e\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x1c\x7f\x1f\xff\xff\xff\xff\x00?\xff\xff\xff\xfc\x7f\x1f\xff\xff\xff\xff\x00?\xff\xff\xff\xfc\x7f\x1c\x00\x0b\xfb\xa7\x008\x00/\xe7\\\x7f\x1c\x00\x07\xff\x87\x000\x00\x0f\xff\x0c\x7f\x1c\x00\x07\xff\xc7\x000\x00/\xffL\x7f\x1c\x00\x07\xff\xc7\x000\x00\x0f\xff\x0c\x7f\x1c\x00\x07\xff\xc7\x000\x00/\xffL\x7f\x1c\x00\x0b\xff\xa7\x000\x00\x0f\xff\x0c\x7f\x1c\x00\x01\xff\x87\x008\x00\x17\xfe\x9c\x7f\x0e\x00\x05\xffN\x008\x00\x03\xfc\x1c\x7f\x0e\x00\x00|\x0e\x00<\x00\x01\xf8<\x7f\x0f\x00\x01\x01\x1e\x00\x1c\x00\x02\x048\x7f\x07\x80\x00(<\x00\x1e\x00\x00Px\x7f\x03\xc0\x00\x00x\x00\x0f\x80\x00\x01\xf0\x7f\x01\xf8\x00\x03\xf0\x00\x07\xe0\x00\x07\xe0\x7f\x00\xff\xff\xff\xe0\x00\x03\xff\xff\xff\xc0\x7f\x00?\xff\xff\x80\x00\x00\xff\xff\xff\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f'
|
||||
Toxic=b'P4\n89 64\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x1f\xff\xff\x00\x00\x00?\xff\xfc\x00\x7f\x00\x7f\xff\xff\xc0\x00\x01\xff\xff\xff\x80\x7f\x01\xff\xff\xff\xf0\x00\x03\xff\xff\xff\xc0\x7f\x03\xe0\x00\x00\xf8\x00\x07\xc0\x00\x03\xe0\x7f\x07\x80\x00\x00<\x00\x0f\x00\x00\x00\xf0\x7f\x07\x00\x00\x00\x1c\x00\x1e\x00\x00\x00x\x7f\x0e\x00\x00\x00\x0e\x00\x1c\x00\x00\x008\x7f\x0e\x00\x00\x00\x0e\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x0e\x00\x07\x000\x008\x00\x0c\x7f\x1c\x00\x7f@\x07\x000\x00\xff\x00\x0c\x7f\x1c\x00\x7f\xc0\x07\x000\x01\xff\x00\x0c\x7f\x1c\x00\xff\xe0\x07\x000\x03\xff\x80\x0c\x7f\x1c\x00\xff\xe0\x07\x000\x03\xff\xc0\x0c\x7f\x1c\x01\xff\xf0\x07\x000\x03\xff\xc0\x0c\x7f\x1c\x01\xc4p\x07\x000\x03\x18\xc0\x0c\x7f\x1c\x01\xc4p\x07\x000\x03\x08\xc0\x0c\x7f\x1c\x00\xce`\x07\x000\x03\x99\xc0\x0c\x7f\x1c\x00\xf9\xe0\x07\x000\x01\xe7\x80\x0c\x7f\x1c\x00y\xc0\x07\x000\x00\xe7\x00\x0c\x7f\x1c\x04\x1f\x02\x07\x000\x18>\x0c\x0c\x7f\x1c\x0f\x8a\x1e\x07\x000?\x10<\x0c\x7f\x1c\x0c\xf0\xf3\x07\x0003\xe1\xec\x0c\x7f\x1c\x00>@\x07\x000\x00|\x00\x0c\x7f\x1c\r\xe3\xe6\x07\x000\x1b\xcf\xc8\x0c\x7f\x1c\x0f\xc0\xfe\x07\x000\x1f\x81\xfc\x0c\x7f\x1c\x06\x00\x0e\x07\x000\x0c\x008\x0c\x7f\x1c\x06\x00\x0c\x07\x000\x08\x00\x18\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x0e\x00\x00\x00\x0e\x008\x00\x00\x00\x1c\x7f\x0e\x00\x00\x00\x0e\x00<\x00\x00\x00<\x7f\x0f\x00\x00\x00\x1e\x00\x1c\x00\x00\x008\x7f\x07\x80\x00\x00<\x00\x1e\x00\x00\x00x\x7f\x03\xc0\x00\x00x\x00\x0f\x80\x00\x01\xf0\x7f\x01\xf8\x00\x03\xf0\x00\x07\xe0\x00\x07\xe0\x7f\x00\xff\xff\xff\xe0\x00\x03\xff\xff\xff\xc0\x7f\x00?\xff\xff\x80\x00\x00\xff\xff\xff\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f'
|
||||
Up=b'P4\n89 64\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x1f\xff\xff\x00\x00\x00?\xff\xfc\x00\x7f\x00\x7f\xff\xff\xc0\x00\x01\xff\xff\xff\x80\x7f\x01\xff\xff\xff\xf0\x00\x03\xff\xff\xff\xc0\x7f\x03\xe0\x00\x00\xf8\x00\x07\xc0\x00\x03\xe0\x7f\x07\x80\x00\x00<\x00\x0f\x00\x00\x00\xf0\x7f\x07\x00!\x00\x1c\x00\x1e\x00\x82\x00x\x7f\x0e\x00\x0e\x00\x0e\x00\x1c\x00\x1c\x808\x7f\x0e\x00?\x80\x0e\x008\x00\xfe\x00\x1c\x7f\x1c\x00\x7f\xc0\x07\x008\x05\xff\xa0\x1c\x7f\x1c\x00\xfe`\x07\x008\x01\xfc\x80\x1c\x7f\x1c\x02\xfe\xe8\x07\x000\x03\xfb\xc0\x0c\x7f\x1c\x01\xff\xf0\x07\x000\x0b\xff\xd0\x0c\x7f\x1c\x01\xff\xf0\x07\x000\x03\xff\xc0\x0c\x7f\x1c\x01\xff\xf0\x07\x000\x0b\xff\xd0\x0c\x7f\x1c\x00\xff\xe0\x07\x000\x03\xff\xc0\x0c\x7f\x1c\x02\xff\xe8\x07\x000\x01\xff\x80\x0c\x7f\x1c\x00\x7f\xc0\x07\x000\x05\xff\xa0\x0c\x7f\x1c\x00?\x80\x07\x000\x00\xff\x00\x0c\x7f\x1c\x00\x0e\x00\x07\x000\x01<\x80\x0c\x7f\x1c\x00!\x00\x07\x000\x00B\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x0e\x00\x00\x00\x0e\x008\x00\x00\x00\x1c\x7f\x0e\x00\x00\x00\x0e\x00<\x00\x00\x00<\x7f\x0f\x00\x00\x00\x1e\x00\x1c\x00\x00\x008\x7f\x07\x80\x00\x00<\x00\x1e\x00\x00\x00x\x7f\x03\xc0\x00\x00x\x00\x0f\x80\x00\x01\xf0\x7f\x01\xf8\x00\x03\xf0\x00\x07\xe0\x00\x07\xe0\x7f\x00\xff\xff\xff\xe0\x00\x03\xff\xff\xff\xc0\x7f\x00?\xff\xff\x80\x00\x00\xff\xff\xff\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f'
|
||||
Winking=b'P4\n89 64\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x1f\xff\xff\x00\x00\x00?\xff\xfc\x00\x7f\x00\x7f\xff\xff\xc0\x00\x01\xff\xff\xff\x80\x7f\x01\xff\xff\xff\xf0\x00\x03\xff\xff\xff\xc0\x7f\x03\xe0\x00\x00\xf8\x00\x07\xc0\x00\x03\xe0\x7f\x07\x80\x00\x00<\x00\x0f\x00\x00\x00\xf0\x7f\x07\x00\x00\x00\x1c\x00\x1e\x00\x00\x00x\x7f\x0e\x00\x00\x00\x0e\x00\x1c\x00\x00\x008\x7f\x0e\x00\x00\x00\x0e\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00!\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x0e\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00?\x80\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x7f\xc0\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\xfe`\x07\x000\x00\x00\x00\x0c\x7f\x1c\x02\xfe\xe8\x07\x000\x00\x00\x00\x0c\x7f\x1c\x01\xff\xf0\x07\x00?\xff\xff\xff\xfc\x7f\x1c\x01\xff\xf0\x07\x00?\xff\xff\xff\xfc\x7f\x1c\x01\xff\xf0\x07\x00?\xff\xff\xff\xfc\x7f\x1c\x00\xff\xe0\x07\x000\x00\x00\x00\x0c\x7f\x1c\x02\xff\xe8\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x7f\xc0\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00?\x80\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x0e\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00!\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x000\x00\x00\x00\x0c\x7f\x1c\x00\x00\x00\x07\x008\x00\x00\x00\x1c\x7f\x0e\x00\x00\x00\x0e\x008\x00\x00\x00\x1c\x7f\x0e\x00\x00\x00\x0e\x00<\x00\x00\x00<\x7f\x0f\x00\x00\x00\x1e\x00\x1c\x00\x00\x008\x7f\x07\x80\x00\x00<\x00\x1e\x00\x00\x00x\x7f\x03\xc0\x00\x00x\x00\x0f\x80\x00\x01\xf0\x7f\x01\xf8\x00\x03\xf0\x00\x07\xe0\x00\x07\xe0\x7f\x00\xff\xff\xff\xe0\x00\x03\xff\xff\xff\xc0\x7f\x00?\xff\xff\x80\x00\x00\xff\xff\xff\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f'
|
||||
74
boards/default_src/micropython/origin/build/lib/gnss.py
Normal file
74
boards/default_src/micropython/origin/build/lib/gnss.py
Normal file
@@ -0,0 +1,74 @@
|
||||
"""
|
||||
GNSS
|
||||
|
||||
Micropython library for the GNSS(NMEA0183/GPS,DBS)
|
||||
=======================================================
|
||||
|
||||
#Preliminary composition 20230314
|
||||
|
||||
@dahanzimin From the Mixly Team
|
||||
"""
|
||||
from ubinascii import unhexlify
|
||||
|
||||
class NMEA0183:
|
||||
def __init__(self, uart, baudrate=9600, timeout=200):
|
||||
self._uart=uart
|
||||
self._uart.init(baudrate=baudrate, timeout=timeout, rxbuf=1024)
|
||||
self.time=[None, None, None, None, None, None, None, 0]
|
||||
self.locate=['', None, '', None, None, None, None] #0'1经度,2'3纬度,4海拔m,5速度m/s,6航向°
|
||||
self.status=[False, ' ', 0] #有效标注,定位模式,卫星量
|
||||
|
||||
def _crc8(self, buffer):
|
||||
'''对数据进行CRC校验'''
|
||||
crc = 0x00
|
||||
for byte in buffer:
|
||||
crc ^= byte
|
||||
return crc & 0xff
|
||||
|
||||
def _judge(self, buffer, dlen):
|
||||
try:
|
||||
data=buffer.strip().decode().split(',')
|
||||
if len(data) == dlen:
|
||||
if unhexlify(data[-1][-2:])[0] == self._crc8(buffer[1:-5]):
|
||||
return True,data
|
||||
return False,None
|
||||
except :
|
||||
return False,None
|
||||
|
||||
def any(self):
|
||||
flag_rmc,flag_gga=False,False
|
||||
while self._uart.any():
|
||||
_data=self._uart.readline()
|
||||
if b'$GNGGA' in _data:
|
||||
flag_gga,data=self._judge(_data, 15)
|
||||
#print("GGA----",flag_gga)
|
||||
if flag_gga:
|
||||
self.time[4]= int(data[1][0:2]) if data[1] else None
|
||||
self.time[5]= int(data[1][2:4]) if data[1] else None
|
||||
self.time[6]= int(data[1][4:6]) if data[1] else None
|
||||
self.locate[0]= data[5]
|
||||
self.locate[1]= int(data[4][:3])+int(data[4][3:].replace('.',''))/6000000 if data[4] else None
|
||||
self.locate[2]= data[3]
|
||||
self.locate[3]= int(data[2][:2])+int(data[2][2:].replace('.',''))/6000000 if data[2] else None
|
||||
self.locate[4]= float(data[9]) if data[3] else None
|
||||
self.status[0]= False if '0' in data[6] else True
|
||||
self.status[2]= int(data[7])
|
||||
if b'$GNRMC' in _data:
|
||||
flag_rmc,data=self._judge(_data, 14)
|
||||
#print("RMC----",flag_rmc)
|
||||
if flag_rmc:
|
||||
self.time[0]= int(data[9][4:6])+2000 if data[9] else None
|
||||
self.time[1]= int(data[9][2:4]) if data[9] else None
|
||||
self.time[2]= int(data[9][0:2]) if data[9] else None
|
||||
self.time[4]= int(data[1][0:2])+8 if data[1] else None
|
||||
self.time[5]= int(data[1][2:4]) if data[1] else None
|
||||
self.time[6]= int(data[1][4:6]) if data[1] else None
|
||||
self.locate[0]= data[6]
|
||||
self.locate[1]= int(data[5][:3])+int(data[5][3:].replace('.',''))/6000000 if data[5] else None
|
||||
self.locate[2]= data[4]
|
||||
self.locate[3]= int(data[3][:2])+int(data[3][2:].replace('.',''))/6000000 if data[3] else None
|
||||
self.locate[5]= round(float(data[7])*0.514, 2) if data[7] else None
|
||||
self.locate[6]= float(data[8]) if data[8] else None
|
||||
self.status[0]= False if 'V' in data[2] else True
|
||||
self.status[1]= data[12]
|
||||
return flag_rmc | flag_gga
|
||||
88
boards/default_src/micropython/origin/build/lib/hp203x.py
Normal file
88
boards/default_src/micropython/origin/build/lib/hp203x.py
Normal file
@@ -0,0 +1,88 @@
|
||||
"""
|
||||
HP203X
|
||||
|
||||
MicroPython library for the HP203X(Air pressure sensor)
|
||||
=======================================================
|
||||
|
||||
#Changed from circuitpython to micropython 20220211
|
||||
#Format unified 20220623
|
||||
|
||||
dahanzimin From the Mixly Team
|
||||
"""
|
||||
|
||||
import time
|
||||
from micropython import const
|
||||
|
||||
HP203X_ADDRESS = const(0x76)
|
||||
HP203X_REG_RST = const(0x06)
|
||||
HP203X_REG_RDY = const(0x0D)
|
||||
HP20X_READ_P = const(0x30)
|
||||
HP20X_READ_H = const(0x31)
|
||||
HP20X_READ_T = const(0x32)
|
||||
HP20X_READ_CAL = const(0x28)
|
||||
HP20X_WR_CONVERT_CMD = const(0x40)
|
||||
|
||||
#转换时间 越大时间越久
|
||||
#HP20X_CONVERT_OSR4096 =0<<2
|
||||
HP20X_CONVERT_OSR2048 =1<<2
|
||||
#HP20X_CONVERT_OSR1024 =2<<2
|
||||
#HP20X_CONVERT_OSR512 =3<<2
|
||||
#HP20X_CONVERT_OSR256 =4<<2
|
||||
#HP20X_CONVERT_OSR128 =5<<2
|
||||
|
||||
class HP203X:
|
||||
def __init__(self, i2c_bus,cal=False):
|
||||
self._device = i2c_bus
|
||||
self._address = HP203X_ADDRESS
|
||||
self.data_reg = bytearray(3)
|
||||
self._buffer = bytearray(1)
|
||||
self.osr = HP20X_CONVERT_OSR2048 #SET time
|
||||
|
||||
if self._read_rdy()&0x40 ==0:
|
||||
raise AttributeError("Cannot find a HP203X")
|
||||
|
||||
self._rst() #Reset
|
||||
time.sleep(0.1)
|
||||
if cal: #Calibration
|
||||
self._write_cmd(HP20X_WR_CONVERT_CMD|self.osr)
|
||||
time.sleep(0.1)
|
||||
self._calibration()
|
||||
print("calibration")
|
||||
|
||||
def _read_data(self, address):
|
||||
self._buffer[0] = address & 0xFF
|
||||
self._device.writeto(self._address,self._buffer)
|
||||
self._device.readfrom_into(self._address,self.data_reg)
|
||||
return self.data_reg
|
||||
|
||||
def _write_cmd(self,command):
|
||||
self._buffer[0] = command & 0xFF
|
||||
self._device.writeto(self._address,self._buffer)
|
||||
|
||||
def _read_rdy(self):
|
||||
return self._read_data(HP203X_REG_RDY)[0]
|
||||
|
||||
def _calibration(self):
|
||||
self._write_cmd(HP20X_READ_CAL)
|
||||
|
||||
def _rst(self):
|
||||
self._write_cmd(HP203X_REG_RST)
|
||||
|
||||
def u2s(self,n):
|
||||
return n if n < (1 << 23) else n - (1 << 24)
|
||||
|
||||
def get_data(self,flag):
|
||||
self._write_cmd(HP20X_WR_CONVERT_CMD|self.osr)
|
||||
time.sleep(0.1)
|
||||
self._read_data(flag)
|
||||
hp_data=(self.data_reg[0]<<16)|(self.data_reg[1]<<8)|self.data_reg[2]
|
||||
return self.u2s(hp_data)/100
|
||||
|
||||
def pressure(self):
|
||||
return self.get_data(HP20X_READ_P)
|
||||
|
||||
def altitude(self):
|
||||
return self.get_data(HP20X_READ_H)
|
||||
|
||||
def temperature(self):
|
||||
return self.get_data(HP20X_READ_T)
|
||||
59
boards/default_src/micropython/origin/build/lib/ht16k33.py
Normal file
59
boards/default_src/micropython/origin/build/lib/ht16k33.py
Normal file
@@ -0,0 +1,59 @@
|
||||
"""
|
||||
HT16K33-framebuf
|
||||
|
||||
Micropython library for the HT16K33 Matrix16x8
|
||||
=======================================================
|
||||
|
||||
#Preliminary composition 20230411
|
||||
|
||||
@dahanzimin From the Mixly Team
|
||||
"""
|
||||
import uframebuf
|
||||
from micropython import const
|
||||
|
||||
_HT16K33_BLINK_CMD = const(0x80)
|
||||
_HT16K33_BLINK_DISPLAYON = const(0x01)
|
||||
_HT16K33_CMD_BRIGHTNESS = const(0xE0)
|
||||
_HT16K33_OSCILATOR_ON = const(0x21)
|
||||
|
||||
class HT16K33(uframebuf.FrameBuffer_Ascall):
|
||||
def __init__(self, i2c, address=0x70, brightness=0.3, width=16, height=8):
|
||||
self._i2c = i2c
|
||||
self._address = address
|
||||
self._blink_rate=0
|
||||
self._brightness=brightness
|
||||
self._buffer = bytearray((width + 7) // 8 * height)
|
||||
super().__init__(self._buffer, width, height, uframebuf.MONO_HMSB)
|
||||
self._write_cmd(_HT16K33_OSCILATOR_ON)
|
||||
self.blink_rate(0)
|
||||
self.set_brightness(brightness)
|
||||
self.fill(0)
|
||||
self.show()
|
||||
|
||||
def _write_cmd(self, val):
|
||||
'''I2C write command'''
|
||||
self._i2c.writeto(self._address,val.to_bytes(1, 'little'))
|
||||
|
||||
def blink_rate(self, rate=None):
|
||||
if rate is None:
|
||||
return self._blink_rate
|
||||
if not 0 <= rate <= 3:
|
||||
raise ValueError("Blink rate must be an integer in the range: 0-3")
|
||||
rate = rate & 0x03
|
||||
self._blink_rate = rate
|
||||
self._write_cmd(_HT16K33_BLINK_CMD | _HT16K33_BLINK_DISPLAYON | rate << 1)
|
||||
|
||||
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
|
||||
xbright = round(15 * brightness)
|
||||
xbright = xbright & 0x0F
|
||||
self._write_cmd(_HT16K33_CMD_BRIGHTNESS | xbright)
|
||||
|
||||
def show(self):
|
||||
"""Refresh the display and show the changes."""
|
||||
self._i2c.writeto_mem(self._address, 0x00, self._buffer)
|
||||
305
boards/default_src/micropython/origin/build/lib/huskylens.py
Normal file
305
boards/default_src/micropython/origin/build/lib/huskylens.py
Normal file
@@ -0,0 +1,305 @@
|
||||
"""
|
||||
HuskyLens
|
||||
|
||||
MicroPython library for the HuskyLens-I2C(DF)
|
||||
=======================================================
|
||||
|
||||
#Preliminary composition 20220224
|
||||
#base on https://github.com/HuskyLens/HUSKYLENSPython 20220623
|
||||
|
||||
dahanzimin From the Mixly Team
|
||||
"""
|
||||
|
||||
import time
|
||||
from ubinascii import unhexlify,hexlify
|
||||
|
||||
commandHeaderAndAddress = "55AA11"
|
||||
algorthimsByteID = {
|
||||
"ALGORITHM_OBJECT_TRACKING": "0100", #物体追踪
|
||||
"ALGORITHM_FACE_RECOGNITION": "0000", #人脸识别
|
||||
"ALGORITHM_OBJECT_RECOGNITION": "0200", #物体识别
|
||||
"ALGORITHM_LINE_TRACKING": "0300", #巡线
|
||||
"ALGORITHM_COLOR_RECOGNITION": "0400", #颜色识别
|
||||
"ALGORITHM_TAG_RECOGNITION": "0500", #标签识别
|
||||
"ALGORITHM_OBJECT_CLASSIFICATION": "0600", #物体分类
|
||||
"ALGORITHM_QR_CODE_RECOGNTITION" : "0700", #二维码识别(教育版独有)
|
||||
"ALGORITHM_BARCODE_RECOGNTITION":"0800", #条形码识别(教育版独有)
|
||||
}
|
||||
|
||||
class Arrow:
|
||||
def __init__(self, xTail, yTail , xHead , yHead, ID):
|
||||
self.xTarget=xTail
|
||||
self.yTarget=yTail
|
||||
self.xOrigin=xHead
|
||||
self.yOrigin=yHead
|
||||
self.id=ID
|
||||
self.learned= True if ID > 0 else False
|
||||
self.type="arrows"
|
||||
|
||||
class Block:
|
||||
def __init__(self, x, y , width , height, ID):
|
||||
self.xCenter = x
|
||||
self.yCenter=y
|
||||
self.width=width
|
||||
self.height=height
|
||||
self.id=ID
|
||||
self.learned= True if ID > 0 else False
|
||||
self.type="blocks"
|
||||
|
||||
class HuskyLens:
|
||||
def __init__(self, i2c,address=0x32):
|
||||
self._address = address
|
||||
self.checkOnceAgain=True
|
||||
self._device = i2c
|
||||
self._buffer=[]
|
||||
self._learned_number=0
|
||||
if not self.knock():
|
||||
raise AttributeError("Cannot find a HuskyLens")
|
||||
|
||||
def _write_cmd(self, cmd):
|
||||
'''Write memory address'''
|
||||
self._device.writeto(self._address, unhexlify(cmd))
|
||||
|
||||
def _read_cmd(self, nbytes):
|
||||
'''Read memory address'''
|
||||
return self._device.readfrom(self._address, nbytes)
|
||||
|
||||
def _checksum(self, hexStr):
|
||||
'''data checksums'''
|
||||
total = 0
|
||||
for i in range(0, len(hexStr), 2):
|
||||
total += int(hexStr[i:i+2], 16)
|
||||
hexStr = hex(total)[-2:]
|
||||
return hexStr
|
||||
|
||||
def _read_data(self):
|
||||
'''Read data'''
|
||||
while True:
|
||||
time.sleep(0.01)
|
||||
buffer = self._read_cmd(5)
|
||||
if buffer[0] == 0x55:
|
||||
break
|
||||
buffer += self._read_cmd(int(buffer[3])+1)
|
||||
strs=hexlify(buffer).decode()
|
||||
|
||||
headers = strs[0:4]
|
||||
address = strs[4:6]
|
||||
data_length = int(strs[6:8], 16)
|
||||
command = strs[8:10]
|
||||
if(data_length > 0):
|
||||
data = strs[10:10+data_length*2]
|
||||
else:
|
||||
data = ''
|
||||
checkSum = strs[2*(6+data_length-1):2*(6+data_length-1)+2]
|
||||
return [headers, address, data_length, command, data, checkSum]
|
||||
|
||||
def getBlockOrArrowCommand(self):
|
||||
commandSplit = self._read_data()
|
||||
isBlock = True if commandSplit[3] == "2a" else False
|
||||
return (commandSplit[4],isBlock)
|
||||
|
||||
def processReturnData(self):
|
||||
inProduction = True
|
||||
byteString=""
|
||||
if inProduction :
|
||||
commandSplit = self._read_data()
|
||||
|
||||
if commandSplit[3] == "2e":
|
||||
return "Knock Recieved"
|
||||
else:
|
||||
returnData = []
|
||||
numberOfBlocksOrArrow = int(commandSplit[4][2:4]+commandSplit[4][0:2], 16)
|
||||
self._learned_number = int(commandSplit[4][6:8]+commandSplit[4][4:6], 16)
|
||||
|
||||
for i in range(numberOfBlocksOrArrow):
|
||||
tmpObj=self.getBlockOrArrowCommand()
|
||||
isBlock=tmpObj[1]
|
||||
returnData.append(tmpObj[0])
|
||||
|
||||
if returnData :
|
||||
finalData = []
|
||||
tmp = []
|
||||
for i in returnData:
|
||||
tmp = []
|
||||
for q in range(0, len(i), 4):
|
||||
low=int(i[q:q+2], 16)
|
||||
high=int(i[q+2:q+4], 16)
|
||||
if(high>0):
|
||||
val=low+255+high
|
||||
else:
|
||||
val=low
|
||||
tmp.append(val)
|
||||
finalData.append(tmp)
|
||||
tmp = []
|
||||
self.checkOnceAgain=True
|
||||
self._buffer=self.convert_to_class_object(finalData,isBlock)
|
||||
return "Data processing completed"
|
||||
else:
|
||||
self._buffer=[]
|
||||
|
||||
def convert_to_class_object(self,data,isBlock):
|
||||
tmp=[]
|
||||
for i in data:
|
||||
if(isBlock):
|
||||
obj = Block(i[0],i[1],i[2],i[3],i[4])
|
||||
else:
|
||||
obj = Arrow(i[0],i[1],i[2],i[3],i[4])
|
||||
tmp.append(obj)
|
||||
return tmp
|
||||
|
||||
def knock(self):
|
||||
'''Send a simple knock to the HuskyLens to ensure that you are connected and can communicate.'''
|
||||
self._write_cmd(commandHeaderAndAddress+"002c3c")
|
||||
return self._read_data()[3] == "2e"
|
||||
|
||||
def command_request_algorthim(self, alg):
|
||||
'''切换xx算法'''
|
||||
if alg in algorthimsByteID:
|
||||
cmd = commandHeaderAndAddress+"022d"+algorthimsByteID[alg]
|
||||
cmd += self._checksum(cmd)
|
||||
self._write_cmd(cmd)
|
||||
return self.processReturnData()
|
||||
else:
|
||||
print("INCORRECT ALGORITHIM NAME")
|
||||
|
||||
def command_request(self):
|
||||
'''请求一次数据 存入结果'''
|
||||
self._write_cmd(commandHeaderAndAddress+"002030")
|
||||
self.processReturnData()
|
||||
|
||||
def read_learned_id_count(self):
|
||||
'''从结果中获取 已学习ID总数'''
|
||||
return self._learned_number
|
||||
|
||||
def is_appear_direct(self,shape):
|
||||
'''从结果中获取 方块或箭头 是否在画面中'''
|
||||
if len(self._buffer) > 0:
|
||||
return self._buffer[0].type == shape
|
||||
|
||||
|
||||
def read_block_center_parameter_direct(self,shape):
|
||||
'''从结果中获取靠近中心 方块或箭头 的信息'''
|
||||
if len(self._buffer) > 0:
|
||||
if self._buffer[0].type == shape :
|
||||
return self._buffer[0]
|
||||
else :
|
||||
return False
|
||||
|
||||
def is_learned(self,get_id):
|
||||
'''从结果中获取获取IDx是否已学习'''
|
||||
if 0 < get_id < self._learned_number:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
def is_appear(self,get_id,shape):
|
||||
'''从结果中获取获取IDx 方块或箭头 是否在画面中'''
|
||||
if len(self._buffer) > 0:
|
||||
for i in self._buffer :
|
||||
if i.id == get_id :
|
||||
return i.type == shape
|
||||
|
||||
def read_blocks_arrows_parameter(self,get_id,number,shape):
|
||||
'''从结果中获取获取IDx 第number个方块或箭头 的信息'''
|
||||
if len(self._buffer) > 0:
|
||||
id_list=[]
|
||||
for i in self._buffer :
|
||||
if i.id == get_id and i.type == shape:
|
||||
id_list.append(i)
|
||||
if number is None:
|
||||
return id_list[0]
|
||||
else:
|
||||
return id_list[number-1]
|
||||
|
||||
def read_count(self,get_id,shape):
|
||||
'''从结果中获取获取IDx 方块或箭头 的总数'''
|
||||
num=0
|
||||
if len(self._buffer) > 0:
|
||||
for i in self._buffer :
|
||||
if get_id is None and i.type == shape:
|
||||
num+=1
|
||||
if i.id == get_id and i.type == shape:
|
||||
num+=1
|
||||
return num
|
||||
|
||||
def read_blocks_arrows_parameter_direct(self,number,shape):
|
||||
'''从结果中获取获取第x个 方块或箭头 的信息'''
|
||||
if len(self._buffer) >= number :
|
||||
print(len(self._buffer))
|
||||
if self._buffer[number-1].type == shape :
|
||||
return self._buffer[number-1]
|
||||
|
||||
def command_request_learn_once(self,get_id):
|
||||
'''自动学习一次 IDx'''
|
||||
data = "{:04x}".format(get_id)
|
||||
part1=data[2:]
|
||||
part2=data[0:2]
|
||||
#reverse to correct endiness
|
||||
data=part1+part2
|
||||
dataLen = "{:02x}".format(len(data)//2)
|
||||
cmd = commandHeaderAndAddress+dataLen+"36"+data
|
||||
print("-----",cmd)
|
||||
cmd += self._checksum(cmd)
|
||||
self._write_cmd(cmd)
|
||||
|
||||
def command_request_forget(self):
|
||||
'''遗忘当前算法的所有学习数据'''
|
||||
self._write_cmd(commandHeaderAndAddress+"003747")
|
||||
|
||||
def command_request_customnames(self,name,get_id):
|
||||
'''设置当前算法 IDx 名字为 name'''
|
||||
nameDataSize = "{:02x}".format(len(name)+1)
|
||||
name = hexlify(name).decode()+"00"
|
||||
localId = "{:02x}".format(get_id)
|
||||
data = localId+nameDataSize+name
|
||||
dataLen = "{:02x}".format(len(data)//2)
|
||||
cmd = commandHeaderAndAddress+dataLen+"2f"+data
|
||||
cmd += self._checksum(cmd)
|
||||
self._write_cmd(cmd)
|
||||
|
||||
def command_request_custom_text(self,name,x,y):
|
||||
'''屏幕叠加显示文字name 在 xy'''
|
||||
name=hexlify(name).decode()
|
||||
nameDataSize = "{:02x}".format(len(name)//2)
|
||||
if x>255:
|
||||
x="ff"+"{:02x}".format(x%255)
|
||||
else:
|
||||
x="00"+"{:02x}".format(x)
|
||||
y="{:02x}".format(y)
|
||||
data = nameDataSize+x+y+name
|
||||
dataLen = "{:02x}".format(len(data)//2)
|
||||
cmd = commandHeaderAndAddress+dataLen+"34"+data
|
||||
cmd += self._checksum(cmd)
|
||||
self._write_cmd(cmd)
|
||||
|
||||
def command_request_clear_text(self):
|
||||
'''清除屏幕显示的文字'''
|
||||
self._write_cmd(commandHeaderAndAddress+"003545")
|
||||
|
||||
def command_request_photo(self):
|
||||
'''触发拍照保存到SD卡'''
|
||||
self._write_cmd(commandHeaderAndAddress+"003040")
|
||||
time.sleep(0.5)
|
||||
|
||||
def command_request_screenshot(self):
|
||||
'''触发截屏保存到SD卡'''
|
||||
self._write_cmd(commandHeaderAndAddress+"003949")
|
||||
time.sleep(0.5)
|
||||
|
||||
def command_request_save_model_to_SD_card(self,idVal):
|
||||
'''保存当前算法数据位SD卡 (0~4) 号模型'''
|
||||
idVal = "{:04x}".format(idVal)
|
||||
idVal = idVal[2:]+idVal[0:2]
|
||||
cmd = commandHeaderAndAddress+"0232"+idVal
|
||||
cmd += self._checksum(cmd)
|
||||
self._write_cmd(cmd)
|
||||
time.sleep(0.5)
|
||||
|
||||
def command_request_load_model_from_SD_card(self,idVal):
|
||||
'''加载当前算法数据位SD卡 (0~4) 号模型'''
|
||||
idVal = "{:04x}".format(idVal)
|
||||
idVal = idVal[2:]+idVal[0:2]
|
||||
cmd = commandHeaderAndAddress+"0233"+idVal
|
||||
cmd += self._checksum(cmd)
|
||||
self._write_cmd(cmd)
|
||||
time.sleep(0.5)
|
||||
280
boards/default_src/micropython/origin/build/lib/i2cdevice.py
Normal file
280
boards/default_src/micropython/origin/build/lib/i2cdevice.py
Normal file
@@ -0,0 +1,280 @@
|
||||
"""
|
||||
I2C_Device
|
||||
|
||||
Micropython library for the I2C communication Device(TD)
|
||||
=======================================================
|
||||
|
||||
@dahanzimin From the Mixly Team
|
||||
"""
|
||||
import random
|
||||
from machine import SoftI2C
|
||||
|
||||
def _u2s(value, n=8):
|
||||
return value if value < (1 << (n-1)) else value - (1 << n)
|
||||
|
||||
'''i2c-Inheritance'''
|
||||
class I2C_device(SoftI2C):
|
||||
|
||||
CRC8_Table =b'\x00^\xbc\xe2a?\xdd\x83\xc2\x9c~ \xa3\xfd\x1fA\x9d\xc3!\x7f\xfc\xa2@\x1e_\x01\xe3\xbd>`\x82\xdc#}\x9f\xc1B\x1c\xfe\xa0\xe1\xbf]\x03\x80\xde<b\xbe\xe0\x02\\\xdf\x81c=|"\xc0\x9e\x1dC\xa1\xffF\x18\xfa\xa4\'y\x9b\xc5\x84\xda8f\xe5\xbbY\x07\xdb\x85g9\xba\xe4\x06X\x19G\xa5\xfbx&\xc4\x9ae;\xd9\x87\x04Z\xb8\xe6\xa7\xf9\x1bE\xc6\x98z$\xf8\xa6D\x1a\x99\xc7%{:d\x86\xd8[\x05\xe7\xb9\x8c\xd20n\xed\xb3Q\x0fN\x10\xf2\xac/q\x93\xcd\x11O\xad\xf3p.\xcc\x92\xd3\x8do1\xb2\xec\x0eP\xaf\xf1\x13M\xce\x90r,m3\xd1\x8f\x0cR\xb0\xee2l\x8e\xd0S\r\xef\xb1\xf0\xaeL\x12\x91\xcf-s\xca\x94v(\xab\xf5\x17I\x08V\xb4\xeai7\xd5\x8bW\t\xeb\xb56h\x8a\xd4\x95\xcb)w\xf4\xaaH\x16\xe9\xb7U\x0b\x88\xd64j+u\x97\xc9J\x14\xf6\xa8t*\xc8\x96\x15K\xa9\xf7\xb6\xe8\nT\xd7\x89k5'
|
||||
|
||||
def _crc8(self, buf):
|
||||
_sum = 0
|
||||
for i in range(0, len(buf)):
|
||||
_sum = self.CRC8_Table[_sum ^ buf[i]]
|
||||
return _sum
|
||||
|
||||
def read_device(self, addr, cmd, nbytes=1):
|
||||
buf = self.readfrom_mem(addr, cmd, nbytes+2)
|
||||
if self._crc8(buf[:-1]) == buf[-1]:
|
||||
return buf[1] if nbytes<=1 else buf[1:-1]
|
||||
|
||||
def write_device(self, addr, cmd, buf=0):
|
||||
buf = buf.to_bytes(1, 'little') if type(buf) is int else buf
|
||||
buf = bytearray([cmd, random.randint(0, 255)]) + buf
|
||||
crc8 = self._crc8(buf).to_bytes(1, 'little')
|
||||
self.writeto(addr, buf + crc8)
|
||||
if crc8 == self.readfrom(addr, 1):
|
||||
return True
|
||||
|
||||
'''Fundamentals of Sensors'''
|
||||
class Base:
|
||||
def __init__(self, i2c_bus):
|
||||
self._i2c = i2c_bus
|
||||
|
||||
def addr_set(self, old=0, new=0):
|
||||
try:
|
||||
self._i2c.write_device(self._addrs[old], 0x04, bytearray([self._addrs[old], self._addrs[new]]))
|
||||
except Exception as e:
|
||||
print("Warning: No serial number can be changed or", e)
|
||||
|
||||
def addr_get(self):
|
||||
_addred = []
|
||||
for add in self._i2c.scan():
|
||||
if add in self._addrs:
|
||||
_addred.append(self._addrs.index(add))
|
||||
return tuple(_addred)
|
||||
|
||||
'''Motor'''
|
||||
class Motor(Base):
|
||||
_addrs = [0x30, 0x31, 0x32, 0x33]
|
||||
|
||||
def run(self, naddr=0, speed=None):
|
||||
'''普票电机参数 speed: 速度-100~100%, None返回速度值'''
|
||||
try:
|
||||
if speed is None:
|
||||
return _u2s(self._i2c.read_device(self._addrs[naddr], 0x10))
|
||||
else:
|
||||
speed = max(min(speed, 100), -100)
|
||||
self._i2c.write_device(self._addrs[naddr], 0xA0, speed)
|
||||
except Exception as e:
|
||||
raise RuntimeError("Cannot find a Motor device", e)
|
||||
|
||||
'''Traffic light'''
|
||||
class Traffic_LED(Base):
|
||||
_addrs = [0x48, 0x49, 0x4A, 0x4B]
|
||||
|
||||
def led(self, naddr=0, num=0, value=0):
|
||||
'''交通灯参数 value: 0,全灭 1,长亮 -1,闪烁(1hz)'''
|
||||
try:
|
||||
if value == 0:
|
||||
self._i2c.write_device(self._addrs[naddr], 0xA0, 0x00)
|
||||
elif value == 1:
|
||||
self._i2c.write_device(self._addrs[naddr], 0xA0, 0x04 >> num)
|
||||
elif value == -1:
|
||||
self._i2c.write_device(self._addrs[naddr], 0xA0, 0x40 >> num)
|
||||
except Exception as e:
|
||||
raise RuntimeError("Cannot find a Traffic lights", e)
|
||||
|
||||
'''LED'''
|
||||
class LED(Base):
|
||||
|
||||
def brightness(self, naddr=0, value=None):
|
||||
'''LED灯参数 value: 亮度0~100%, None返回亮度值'''
|
||||
try:
|
||||
if value is None:
|
||||
return self._i2c.read_device(self._addrs[naddr], 0x10)
|
||||
else:
|
||||
value = max(min(value, 100), 0)
|
||||
self._i2c.write_device(self._addrs[naddr], 0xA0, value)
|
||||
|
||||
except Exception as e:
|
||||
raise RuntimeError("Cannot find a LED device", e)
|
||||
|
||||
class W_LED(LED):
|
||||
_addrs = [0x38, 0x39, 0x3A, 0x3B]
|
||||
|
||||
class R_LED(LED):
|
||||
_addrs = [0x3C, 0x3D, 0x3E, 0x3F]
|
||||
|
||||
class Y_LED(LED):
|
||||
_addrs = [0x40, 0x41, 0x42, 0x43]
|
||||
|
||||
class G_LED(LED):
|
||||
_addrs = [0x44, 0x45, 0x46, 0x47]
|
||||
|
||||
class B_LED(LED):
|
||||
_addrs = [0x78, 0x79, 0x7A, 0x7B]
|
||||
|
||||
'''button*5'''
|
||||
class Buttonx5(Base):
|
||||
_addrs = [0x68, 0x69, 0x6A, 0x6B]
|
||||
|
||||
def value(self, naddr=0):
|
||||
'''十字按键返回 (上,下,左,右,中)/bool'''
|
||||
try:
|
||||
flag = self._i2c.read_device(self._addrs[naddr], 0x10)
|
||||
return bool(flag >> 4 & 1), bool(flag >> 3 & 1), bool(flag >> 2 & 1), bool(flag >> 1 & 1), bool(flag & 1)
|
||||
except Exception as e:
|
||||
raise RuntimeError("Cannot find a Button sensor", e)
|
||||
|
||||
'''button*1'''
|
||||
class Button(Base):
|
||||
_addrs = [0x54, 0x55, 0x56, 0x57]
|
||||
|
||||
def value(self, naddr=0):
|
||||
'''触碰传感器返回 数值/bool'''
|
||||
try:
|
||||
return bool(self._i2c.read_device(self._addrs[naddr], 0x10))
|
||||
except Exception as e:
|
||||
raise RuntimeError("Cannot find a Touch sensor", e)
|
||||
|
||||
'''Infrared sensor'''
|
||||
class Infrared(Base):
|
||||
_addrs = [0x6C, 0x6D, 0x6E, 0x6F]
|
||||
|
||||
def value(self, naddr=0):
|
||||
'''红外接近返回 数值0~100%'''
|
||||
try:
|
||||
return self._i2c.read_device(self._addrs[naddr], 0x10)
|
||||
except Exception as e:
|
||||
raise RuntimeError("Cannot find a Infrared sensor", e)
|
||||
|
||||
'''ultrasonic sensor'''
|
||||
class Sonar(Base):
|
||||
_addrs = [0x24, 0x25, 0x26, 0x27]
|
||||
_state = 0x00
|
||||
def value(self, naddr=0):
|
||||
'''超声波测距返回 距离数值cm'''
|
||||
try:
|
||||
value = self._i2c.read_device(self._addrs[naddr], 0x10, 2)
|
||||
return value[0] << 8 | value[1]
|
||||
except Exception as e:
|
||||
raise RuntimeError("Cannot find a Ultrasonic sensor", e)
|
||||
|
||||
def led(self, naddr=0, num=0, value=0):
|
||||
'''超声波指示灯参数 num:序号0~3,value:0灭,1亮,-1反转 '''
|
||||
try:
|
||||
if value > 0:
|
||||
self._state |= 1 << num
|
||||
elif value < 0:
|
||||
self._state ^= 1 << num
|
||||
else:
|
||||
self._state &= ~ (1 << num)
|
||||
self._i2c.write_device(self._addrs[naddr], 0xA0, bytearray([self._state & 0xff, 0x00]))
|
||||
except Exception as e:
|
||||
raise RuntimeError("Cannot find a Ultrasonic sensor", e)
|
||||
|
||||
'''Potentiometer'''
|
||||
class Dimmer(Base):
|
||||
_addrs = [0x2C, 0x2D, 0x2E, 0x2F]
|
||||
|
||||
def value(self, naddr=0):
|
||||
'''旋钮传感器返回 数值0~100%'''
|
||||
try:
|
||||
return self._i2c.read_device(self._addrs[naddr], 0x10)
|
||||
except Exception as e:
|
||||
raise RuntimeError("Cannot find a Potentiometer", e)
|
||||
|
||||
'''Color sensor'''
|
||||
class Color_ID(Base):
|
||||
_id = ('Black', 'Violet', 'Unknown', 'Blue', 'Cyan', 'Green', 'Unknown', 'Yellow', 'Unknown', 'Red', 'White', 'Unknown')
|
||||
_addrs = [0x20, 0x21, 0x22, 0x23]
|
||||
|
||||
def recognition(self, naddr=0):
|
||||
'''颜色识别返回 (颜色名,(R,G,B),环境亮度0~100,反射亮度0~100)'''
|
||||
try:
|
||||
color = self._i2c.read_device(self._addrs[naddr], 0x10, 6)
|
||||
return self._id[min(color[0],11)], (color[1],color[2],color[3]), color[4], color[5]
|
||||
except Exception as e:
|
||||
raise RuntimeError("Cannot find a Color sensor", e)
|
||||
|
||||
'''Laser Sensor'''
|
||||
class TOF(Base):
|
||||
_addrs = [0x5C, 0x5D, 0x5E, 0x5F]
|
||||
|
||||
def value(self, naddr=0):
|
||||
'''激光测距传感器返回 数值cm'''
|
||||
try:
|
||||
flag = self._i2c.read_device(self._addrs[naddr], 0x10, 2)
|
||||
return (flag[0] << 8 | flag[1]) / 100
|
||||
except Exception as e:
|
||||
raise RuntimeError("Cannot find a Laser Sensor", e)
|
||||
|
||||
def enable(self, naddr=0, en=True):
|
||||
'''激光测距传感器 en:0关闭,1打开'''
|
||||
try:
|
||||
self._i2c.write_device(self._addrs[naddr], 0xA0, int(en) & 0x01)
|
||||
except Exception as e:
|
||||
raise RuntimeError("Cannot find a Laser Sensor", e)
|
||||
|
||||
'''Servo Motor'''
|
||||
class Motor_servo(Base):
|
||||
_addrs = [0x60, 0x61, 0x62, 0x63]
|
||||
_mstop = [0, 0, 0, 0]
|
||||
|
||||
def stop_mode(self, naddr=0, mode=0):
|
||||
'''电机停止模式 mode:0,保持位置 1,惯性滑行 2,阻力制动'''
|
||||
self._mstop[naddr] = mode
|
||||
|
||||
def _write(self, naddr=0, mode=0, value=0, direction=0, angle=0, origin=0, keep=0, select=0):
|
||||
'''寄存器参数设置'''
|
||||
try:
|
||||
_bytes1 = direction<<6 | mode<<5 | select<<4 | origin<<3 | keep<<2 | self._mstop[naddr]
|
||||
_bytes2 = max(min(value, 100), 0)
|
||||
_bytes3 = angle & 0xFF
|
||||
_bytes4 = angle>>8 & 0xFF
|
||||
_bytes5 = angle>>16 & 0xFF
|
||||
self._i2c.write_device(self._addrs[naddr], 0xA0, bytearray([_bytes1, _bytes2, _bytes3, _bytes4, _bytes5]))
|
||||
except Exception as e:
|
||||
raise RuntimeError("Cannot find a Servo Motor", e)
|
||||
|
||||
def absolute_run(self, naddr=0, mode=0, value=50, direction=0, angle=0):
|
||||
''' 绝对角度运行模式(类舵机)
|
||||
运行模式mode 0:速度模式,1:功率模式
|
||||
模式数值value 0~100%
|
||||
转向设置direction 0:顺时针,1:最短路径,2:逆时针
|
||||
旋转角度angle 0~360°
|
||||
'''
|
||||
self._write(naddr=naddr, mode=mode, value=value, direction=direction, angle=angle, select=0)
|
||||
|
||||
def relative_run(self, naddr=0, mode=0, value=50, angle=0):
|
||||
''' 相对角度运行模式(类编码电机)
|
||||
运行模式mode 0:速度模式,1:功率模式
|
||||
模式数值value 0~100%
|
||||
旋转角度angle -8388607~8388607°
|
||||
'''
|
||||
self._write(naddr=naddr, mode=mode, value=value, angle=angle, select=1)
|
||||
|
||||
def relative_origin(self, naddr=0):
|
||||
'''当前位置设置为原点'''
|
||||
self._write(naddr=naddr, origin=1, select=1)
|
||||
|
||||
def relative_continue(self, naddr=0, mode=0, value=50, direction=0):
|
||||
''' 相对角度运行模式(类普通电机)
|
||||
运行模式mode 0:速度模式,1:功率模式
|
||||
模式数值value 0~100%
|
||||
转向设置direction 0:顺时针,2:逆时针
|
||||
'''
|
||||
self._write(naddr=naddr, mode=mode, value=value, direction=direction, keep=1, select=1)
|
||||
|
||||
def stop(self, naddr=0):
|
||||
'''电机停止'''
|
||||
self._write(naddr=naddr, keep=1)
|
||||
|
||||
def state(self,naddr=0):
|
||||
'''运行状态返回 (功率, 速度, 绝对角度, 相对角度, 是否堵住, 是否转完) '''
|
||||
try:
|
||||
_buf = self._i2c.read_device(self._addrs[naddr], 0x10, 7)
|
||||
return _u2s(_buf[0]), _u2s(_buf[1]), (_buf[2] & 0x01)<<8 | _buf[3], _u2s((_buf[4]<<16 | _buf[5]<<8 | _buf[6]),24), bool(_buf[2] & 0x40), bool(_buf[2] & 0x80)
|
||||
except Exception as e:
|
||||
raise RuntimeError("Cannot find a Servo Motor", e)
|
||||
79
boards/default_src/micropython/origin/build/lib/i2clcd.py
Normal file
79
boards/default_src/micropython/origin/build/lib/i2clcd.py
Normal file
@@ -0,0 +1,79 @@
|
||||
"""
|
||||
LCD1602、LCD2004_I2C
|
||||
|
||||
Micropython library for the I2C(LCD1602、LCD2004)
|
||||
=======================================================
|
||||
|
||||
#Preliminary composition 20221117
|
||||
|
||||
dahanzimin From the Mixly Team
|
||||
"""
|
||||
from time import sleep_ms
|
||||
from micropython import const
|
||||
|
||||
LCD_DAT = const(0x01) # Mode - Sending data
|
||||
LCD_CMD = const(0x00) # Mode - Sending command
|
||||
LCD_LINES = (0x80, 0xC0, 0x94, 0xD4)
|
||||
|
||||
class LCD():
|
||||
def __init__(self, i2c_bus, i2c_addr=0x27, lcd_width=16):
|
||||
self._device = i2c_bus
|
||||
self._address = i2c_addr
|
||||
self._lcd_width = lcd_width
|
||||
self._backlight = True
|
||||
self._last_data = 0x00
|
||||
|
||||
for i in [0x30, 0x30, 0x30,0x20]:
|
||||
self._i2c_write(i)
|
||||
sleep_ms(1)
|
||||
for i in [0x28, 0x0C, 0x06]:
|
||||
self.write_byte(i , LCD_CMD)
|
||||
self.clear()
|
||||
|
||||
def _i2c_write(self, data , pulse_en=True):
|
||||
"""write one byte to I2C bus"""
|
||||
self._last_data = data
|
||||
self._device.writeto(self._address,data.to_bytes(1, 'little'))
|
||||
sleep_ms(0)
|
||||
if pulse_en :
|
||||
self._device.writeto(self._address,(data | 0b00000100).to_bytes(1, 'little'))
|
||||
sleep_ms(0)
|
||||
self._device.writeto(self._address,(data & ~0b00000100).to_bytes(1, 'little'))
|
||||
sleep_ms(0)
|
||||
|
||||
def write_byte(self, data, mode):
|
||||
"""write one byte to LCD"""
|
||||
data_H = (data & 0xF0) | self._backlight * 0x08 | mode
|
||||
data_L = ((data << 4) & 0xF0) | self._backlight * 0x08 | mode
|
||||
self._i2c_write(data_H)
|
||||
self._i2c_write(data_L)
|
||||
|
||||
def clear(self):
|
||||
"""Clear the display and reset the cursor position"""
|
||||
self.write_byte(0x01, LCD_CMD)
|
||||
sleep_ms(1)
|
||||
|
||||
def backlight(self, on_off):
|
||||
""" Set whether the LCD backlight is on or off"""
|
||||
self._backlight = on_off & 0x01
|
||||
i2c_data = (self._last_data & 0xF7) + self._backlight * 0x08
|
||||
self._i2c_write(i2c_data,pulse_en=False)
|
||||
|
||||
def shows(self, text, line=0, column=0, center=False):
|
||||
'''Character display'''
|
||||
text = str(text).encode('ascii')
|
||||
column=(self._lcd_width-len(text))//2 if center else column
|
||||
self.write_byte(LCD_LINES[line] + column, LCD_CMD)
|
||||
for b in text:
|
||||
self.write_byte(0x0C+0*0x02+0*0x01, LCD_CMD)
|
||||
self.write_byte(b, LCD_DAT)
|
||||
|
||||
def print(self, text, line=0, column=0, delay=500):
|
||||
'''Print Effect Character Display'''
|
||||
text = str(text).encode('ascii')
|
||||
self.write_byte(LCD_LINES[line] + column, LCD_CMD)
|
||||
for b in text:
|
||||
self.write_byte(0x0C+1*0x02+1*0x01, LCD_CMD)
|
||||
sleep_ms(delay)
|
||||
self.write_byte(b, LCD_DAT)
|
||||
sleep_ms(delay)
|
||||
94
boards/default_src/micropython/origin/build/lib/icm42670.py
Normal file
94
boards/default_src/micropython/origin/build/lib/icm42670.py
Normal file
@@ -0,0 +1,94 @@
|
||||
"""
|
||||
ICM42670P
|
||||
|
||||
Micropython library for the ICM42670P(Accelerometer+Gyroscope)
|
||||
=======================================================
|
||||
|
||||
#Preliminary composition 20220716
|
||||
|
||||
dahanzimin From the Mixly Team
|
||||
"""
|
||||
import time
|
||||
from micropython import const
|
||||
|
||||
ICM42670_REG_DEVICE_ID = const(0x00)
|
||||
ICM42670_REG_RESET = const(0x02)
|
||||
ICM42670_REG_DATA = const(0x09)
|
||||
ICM42670_REG_PWR_MGMT0 = const(0x1F)
|
||||
ICM42670_REG_GYRO_CONFIG0 = const(0x20)
|
||||
ICM42670_REG_ACCEL_CONFIG0 = const(0x21)
|
||||
ICM42670_REG_APEX_DATA0 = const(0x31)
|
||||
ICM42670_REG_WHO_AM_I = const(0x75)
|
||||
|
||||
AccRange_16g = 0
|
||||
AccRange_8g = 1
|
||||
AccRange_4g = 2
|
||||
AccRange_2g = 3
|
||||
|
||||
GyrRange_2000dps = 0
|
||||
GyrRange_1000dps = 1
|
||||
GyrRange_500dps = 2
|
||||
GyrRange_250dps = 3
|
||||
|
||||
Acc_Gyr_Odr_1600Hz = 0x05
|
||||
Acc_Gyr_Odr_800Hz = 0x06
|
||||
Acc_Gyr_Odr_400Hz = 0x07
|
||||
Acc_Gyr_Odr_200Hz = 0x08
|
||||
Acc_Gyr_Odr_100Hz = 0x09
|
||||
Acc_Gyr_Odr_50Hz = 0x0A
|
||||
Acc_Gyr_Odr_25Hz = 0x0B
|
||||
Acc_Gyr_Odr_12_5Hz = 0x0C
|
||||
|
||||
class ICM42670:
|
||||
def __init__(self, i2c_bus, addr=0x68, AccRange=AccRange_16g, GyrRange=GyrRange_2000dps, Acc_Gyr_Odr=Acc_Gyr_Odr_100Hz):
|
||||
self._device = i2c_bus
|
||||
self._address = addr
|
||||
if self._chip_id() != 0x67:
|
||||
raise AttributeError("Cannot find a ICM42670")
|
||||
|
||||
self._wreg(ICM42670_REG_RESET,0x10) #Software reset enabled
|
||||
time.sleep(0.1)
|
||||
self._wreg(ICM42670_REG_GYRO_CONFIG0,(GyrRange << 4) | Acc_Gyr_Odr) #Gyr-500HZ/2000dps
|
||||
self._wreg(ICM42670_REG_ACCEL_CONFIG0,(AccRange << 4) | Acc_Gyr_Odr) #ACC-100HZ/16G
|
||||
self._wreg(ICM42670_REG_PWR_MGMT0,0x1E)
|
||||
time.sleep(0.1)
|
||||
self.acc_lsb_div= 2 ** (11 + AccRange)
|
||||
self.gyr_lsb_div= 2 ** (14 + GyrRange)
|
||||
|
||||
def _wreg(self, reg, val):
|
||||
'''Write memory address'''
|
||||
self._device.writeto_mem(self._address,reg,val.to_bytes(1, 'little'))
|
||||
|
||||
def _rreg(self, reg,nbytes=1):
|
||||
'''Read memory address'''
|
||||
return self._device.readfrom_mem(self._address, reg, nbytes)[0] if nbytes<=1 else self._device.readfrom_mem(self._address, reg, nbytes)[0:nbytes]
|
||||
|
||||
def _chip_id(self):
|
||||
return self._rreg(ICM42670_REG_WHO_AM_I)
|
||||
|
||||
def u2s(self,n):
|
||||
return n if n < (1 << 15) else n - (1 << 16)
|
||||
|
||||
def getdata(self):
|
||||
_buffer=self._rreg(ICM42670_REG_DATA,14)
|
||||
tmp= float(self.u2s(_buffer[0]<<8|_buffer[1]))/128+25
|
||||
acc_x=float(self.u2s(_buffer[2]<<8|_buffer[3]))/self.acc_lsb_div
|
||||
acc_y=float(self.u2s(_buffer[4]<<8|_buffer[5]))/self.acc_lsb_div
|
||||
acc_z=float(self.u2s(_buffer[6]<<8|_buffer[7]))/self.acc_lsb_div
|
||||
gyr_x=float(self.u2s(_buffer[8]<<8|_buffer[9]))/self.gyr_lsb_div
|
||||
gyr_y=float(self.u2s(_buffer[10]<<8|_buffer[11]))/self.gyr_lsb_div
|
||||
gyr_z=float(self.u2s(_buffer[12]<<8|_buffer[13]))/self.gyr_lsb_div
|
||||
return (acc_x,acc_y,acc_z),(gyr_x,gyr_y,gyr_z),round(tmp,2)
|
||||
|
||||
def accelerometer(self):
|
||||
return self.getdata()[0]
|
||||
|
||||
def strength(self):
|
||||
from math import sqrt
|
||||
return sqrt(self.accelerometer()[0]**2+self.accelerometer()[1]**2+self.accelerometer()[2]**2)
|
||||
|
||||
def gyroscope(self):
|
||||
return self.getdata()[1]
|
||||
|
||||
def temperature(self):
|
||||
return self.getdata()[2]
|
||||
@@ -0,0 +1,16 @@
|
||||
#Take the picture bytes in informatio_picture.py
|
||||
#--dahanzimin From the Mixly Team
|
||||
|
||||
Accept=b'P4\n89 64\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00p\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x8c\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x01\xa7\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x03y\x80\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x02~`\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x04\xff0\x00\x7f\x00\x00\x00\x00\x00\x00\x00\t\xff\xec\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x1b\xff\xf6\x00\x7f\x00\x00\x00\x00\x00\x00\x007\xff\xfd\x80\x7f\x00\x00\x00\x00\x00\x00\x00o\xff\xff\x80\x7f\x00\x00\x00\x00\x00\x00\x00_\xff\xff\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x9f\xff\xfe\x00\x7f\x00\x00\x00\x00\x00\x00\x01\xbf\xff\xfc\x00\x7f\x00\x00\x00\x00\x00\x00\x03\x7f\xff\xf8\x00\x7f\x00\x00\x00\x00\x00\x00\x06\xff\xff\xf0\x00\x7f\x00\x00\x00\x00\x00\x00\x05\xff\xff\xe0\x00\x7f\x00\x00\x00\x00\x00\x00\x0b\xff\xff\xc0\x00\x7f\x00\x00\x00\x00\x00\x00\x17\xff\xff\x80\x00\x7f\x00\x00\x00\x00\x00\x007\xff\xfe\x00\x00\x7f\x00\x00\x00\x00\x00\x00o\xff\xfc\x00\x00\x7f\x00\x00\x00\x00\x00\x00_\xff\xf8\x00\x00\x7f\x00\x00\x00\x00\x00\x00\xbf\xff\xf0\x00\x00\x7f\x00\x00\x00\x00\x00\x01\x7f\xff\xe0\x00\x00\x7f\x00\x00\x00\x00\x00\x03\x7f\xff\xc0\x00\x00\x7f\x00\x00\x00\x00\x00\x07\xff\xff\x80\x00\x00\x7f\x00\x00\x00\x00\x00\r\xff\xff\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x0b\xff\xfe\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x1f\xff\xfc\x00\x00\x00\x7f\x00\x00\x00\x00\x00/\xff\xf8\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x7f\xff\xf0\x00\x00\x00\x7f\x00\x00\x01\xc0\x00\xff\xff\xe0\x00\x00\x00\x7f\x00\x00\x1e@\x00\xff\xff\xc0\x00\x00\x00\x7f\x00\x01\xeb \x01\xff\xff\x80\x00\x00\x00\x7f\x00\x1e\xff\xa0\x03\xff\xff\x00\x00\x00\x00\x7f\x00w\xff\xb0\x07\xff\xfe\x00\x00\x00\x00\x7f\x00?\xff\x90\x0f\xff\xfc\x00\x00\x00\x00\x7f\x00\x1f\xff\xd0\x0f\xff\xf8\x00\x00\x00\x00\x7f\x00\x1f\xff\xf8\x1f\xff\xf0\x00\x00\x00\x00\x7f\x00\x0f\xff\xe8?\xff\xe0\x00\x00\x00\x00\x7f\x00\x07\xff\xf8\x7f\xff\xc0\x00\x00\x00\x00\x7f\x00\x03\xff\xf4\xff\xff\x80\x00\x00\x00\x00\x7f\x00\x03\xff\xfd\xff\xff\x00\x00\x00\x00\x00\x7f\x00\x01\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x7f\x00\x00\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x7f\x00\x00\x7f\xff\xff\xf8\x00\x00\x00\x00\x00\x7f\x00\x00\x7f\xff\xff\xf0\x00\x00\x00\x00\x00\x7f\x00\x00?\xff\xff\xe0\x00\x00\x00\x00\x00\x7f\x00\x00\x1f\xff\xff\xc0\x00\x00\x00\x00\x00\x7f\x00\x00\x0f\xff\xff\x80\x00\x00\x00\x00\x00\x7f\x00\x00\x07\xff\xff\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x07\xff\xfe\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x03\xff\xf8\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x01\xff\xf0\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\xff\xe0\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\xff\xc0\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x7f\x80\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00?\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x1e\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x1c\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f'
|
||||
Backward=b'P4\n89 64\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xfc\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0b\xff\xf4\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xfc\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xf4\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xfc\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xf4\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xfc\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xf4\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xfc\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xf4\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xfc\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xf4\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xfc\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xf4\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xfc\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xf4\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xfc\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xf4\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xfc\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xf4\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xfc\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xf4\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xfc\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xf4\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xfc\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xf4\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xfc\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xf4\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xfc\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xf4\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xfc\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xf4\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xfc\x00\x00\x00\x00\x7f\x00\x00\x00?\xff\xff\xf7\xfe\x00\x00\x00\x7f\x00\x00\x00?\xff\xff\xfdW\x00\x00\x00\x7f\x00\x00\x00\x1f\xff\xff\xff\xf2\x00\x00\x00\x7f\x00\x00\x00\x1f\xff\xff\xff\xe4\x00\x00\x00\x7f\x00\x00\x00\x0f\xff\xff\xff\xe8\x00\x00\x00\x7f\x00\x00\x00\x07\xff\xff\xff\xd8\x00\x00\x00\x7f\x00\x00\x00\x03\xff\xff\xff\xb0\x00\x00\x00\x7f\x00\x00\x00\x03\xff\xff\xff\xa0\x00\x00\x00\x7f\x00\x00\x00\x01\xff\xff\xff@\x00\x00\x00\x7f\x00\x00\x00\x00\xff\xff\xff\xc0\x00\x00\x00\x7f\x00\x00\x00\x00\x7f\xff\xfe\x80\x00\x00\x00\x7f\x00\x00\x00\x00\x7f\xff\xfd\x00\x00\x00\x00\x7f\x00\x00\x00\x00?\xff\xfe\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x1f\xff\xfe\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xfc\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xf8\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x07\xff\xf8\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x03\xff\xf0\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x01\xff\xe0\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x01\xff\xc0\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\xff\xc0\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x7f\x80\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00?\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00>\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f'
|
||||
Decline=b'P4\n89 64\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x000\x00\x00\x00\x02\x00\x00\x00\x7f\x00\x00\x00x\x00\x00\x00\x05\x00\x00\x00\x7f\x00\x00\x00\xfc\x00\x00\x00\x0f\x80\x00\x00\x7f\x00\x00\x01\xfe\x00\x00\x00\x17\xc0\x00\x00\x7f\x00\x00\x03\xff\x00\x00\x00?\xa0\x00\x00\x7f\x00\x00\x07\xff\x80\x00\x00_\xf0\x00\x00\x7f\x00\x00\x0f\xff\xc0\x00\x00\xff\xe8\x00\x00\x7f\x00\x00\x1f\xff\xe0\x00\x01\x7f\xfc\x00\x00\x7f\x00\x00?\xff\xf0\x00\x03\xff\xfa\x00\x00\x7f\x00\x00\x7f\xff\xf8\x00\x05\xff\xff\x00\x00\x7f\x00\x00\xff\xff\xfc\x00\x0f\xff\xfe\x80\x00\x7f\x00\x01\xff\xff\xfe\x00\x17\xff\xff\xc0\x00\x7f\x00\x01\xff\xff\xff\x00?\xff\xff\xc0\x00\x7f\x00\x00\xff\xff\xff\x80_\xff\xff\x80\x00\x7f\x00\x00\x7f\xff\xff\xc0\xff\xff\xff\x00\x00\x7f\x00\x00?\xff\xff\xe1\x7f\xff\xfe\x00\x00\x7f\x00\x00\x1f\xff\xff\xf3\xff\xff\xfc\x00\x00\x7f\x00\x00\x0f\xff\xff\xfd\xff\xff\xf8\x00\x00\x7f\x00\x00\x07\xff\xff\xff\xff\xff\xf0\x00\x00\x7f\x00\x00\x03\xff\xff\xff\xff\xff\xe0\x00\x00\x7f\x00\x00\x01\xff\xff\xff\xff\xff\xc0\x00\x00\x7f\x00\x00\x00\xff\xff\xff\xff\xff\x80\x00\x00\x7f\x00\x00\x00\x7f\xff\xff\xff\xff\x00\x00\x00\x7f\x00\x00\x00?\xff\xff\xff\xfe\x00\x00\x00\x7f\x00\x00\x00\x1f\xff\xff\xff\xfc\x00\x00\x00\x7f\x00\x00\x00\x0f\xff\xff\xff\xf8\x00\x00\x00\x7f\x00\x00\x00\x07\xff\xff\xff\xf0\x00\x00\x00\x7f\x00\x00\x00\x03\xff\xff\xff\xe0\x00\x00\x00\x7f\x00\x00\x00\x01\xff\xff\xff\xc0\x00\x00\x00\x7f\x00\x00\x00\x00\xff\xff\xff\x80\x00\x00\x00\x7f\x00\x00\x00\x00\xff\xff\xff\xc0\x00\x00\x00\x7f\x00\x00\x00\x01\xff\xff\xff\xe0\x00\x00\x00\x7f\x00\x00\x00\x03\xff\xff\xff\xf0\x00\x00\x00\x7f\x00\x00\x00\x07\xff\xff\xff\xf8\x00\x00\x00\x7f\x00\x00\x00\x0b\xff\xff\xff\xfc\x00\x00\x00\x7f\x00\x00\x00\x1f\xff\xff\xff\xfe\x00\x00\x00\x7f\x00\x00\x00/\xff\xff\xff\xff\x00\x00\x00\x7f\x00\x00\x00\x7f\xff\xff\xff\xff\x80\x00\x00\x7f\x00\x00\x00\xbf\xff\xff\xff\xff\xc0\x00\x00\x7f\x00\x00\x01\xff\xff\xff\xff\xff\xe0\x00\x00\x7f\x00\x00\x02\xff\xff\xff\xff\xff\xf0\x00\x00\x7f\x00\x00\x07\xff\xff\xff\xff\xff\xf8\x00\x00\x7f\x00\x00\x0b\xff\xff\xf7\xff\xff\xfc\x00\x00\x7f\x00\x00\x1f\xff\xff\xe3\xff\xff\xfe\x00\x00\x7f\x00\x00/\xff\xff\xc1\xff\xff\xff\x00\x00\x7f\x00\x00\x7f\xff\xff\x80\xff\xff\xff\x80\x00\x7f\x00\x00\xbf\xff\xff\x00\x7f\xff\xff\xc0\x00\x7f\x00\x01\xff\xff\xfe\x00?\xff\xff\xc0\x00\x7f\x00\x00\xff\xff\xfc\x00\x1f\xff\xff\xc0\x00\x7f\x00\x00\x7f\xff\xf8\x00\x0f\xff\xff\x80\x00\x7f\x00\x00?\xff\xf0\x00\x07\xff\xff\x00\x00\x7f\x00\x00\x1f\xff\xe0\x00\x03\xff\xfe\x00\x00\x7f\x00\x00\x0f\xff\xc0\x00\x01\xff\xfc\x00\x00\x7f\x00\x00\x07\xff\x80\x00\x00\xff\xf8\x00\x00\x7f\x00\x00\x03\xff\x00\x00\x00\x7f\xf0\x00\x00\x7f\x00\x00\x01\xfe\x00\x00\x00?\xe0\x00\x00\x7f\x00\x00\x00\xfc\x00\x00\x00\x1f\xc0\x00\x00\x7f\x00\x00\x00x\x00\x00\x00\x0f\x80\x00\x00\x7f\x00\x00\x000\x00\x00\x00\x07\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f'
|
||||
Forward=b'P4\n89 64\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x006\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00+\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00]\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\xdc\x80\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x01\xbe\xc0\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x01\x7f`\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x02\xff\xa0\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x07\xff\x90\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x05\xff\xd8\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xec\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x17\xff\xf4\x00\x00\x00\x00\x7f\x00\x00\x00\x00?\xff\xf2\x00\x00\x00\x00\x7f\x00\x00\x00\x00?\xff\xfb\x00\x00\x00\x00\x7f\x00\x00\x00\x00_\xff\xfd\x80\x00\x00\x00\x7f\x00\x00\x00\x00\xff\xff\xfe\x80\x00\x00\x00\x7f\x00\x00\x00\x01\xff\xff\xfe@\x00\x00\x00\x7f\x00\x00\x00\x01\xff\xff\xff`\x00\x00\x00\x7f\x00\x00\x00\x03\xff\xff\xff\xb0\x00\x00\x00\x7f\x00\x00\x00\x07\xff\xff\xff\xd0\x00\x00\x00\x7f\x00\x00\x00\x07\xff\xff\xff\xc8\x00\x00\x00\x7f\x00\x00\x00\x0f\xff\xff\xff\xec\x00\x00\x00\x7f\x00\x00\x00\x1f\xff\xff\xff\xf4\x00\x00\x00\x7f\x00\x00\x00?\xff\xff\xff\xf2\x00\x00\x00\x7f\x00\x00\x00?\xff\xff\xff\xff\x00\x00\x00\x7f\x00\x00\x00\x00\x1f\xff\xfc\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xf8\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xf8\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xf8\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xf8\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xf8\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xf8\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xf8\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xf8\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xf8\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xf8\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xf8\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xf8\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xf8\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xf8\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xf8\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xf8\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xf8\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xf8\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xf8\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xf8\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xf8\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xf8\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xf8\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xf8\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xf8\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xf8\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xf8\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xf8\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xf8\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xf8\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xf8\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xf8\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\xff\xf8\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f'
|
||||
Left=b'P4\n89 64\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00b\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\xce\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x01>\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x06~\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\r\xfe\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x13\xfe\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00g\xfe\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\xdf\xff\xff\xff\xff\xff\xf0\x00\x7f\x00\x00\x01?\xffUUUUX\x00\x7f\x00\x00\x06\xff\xff\xff\xff\xff\xff\xf8\x00\x7f\x00\x00\r\xff\xff\xff\xff\xff\xff\xe8\x00\x7f\x00\x00\x17\xff\xff\xff\xff\xff\xff\xf8\x00\x7f\x00\x00\x7f\xff\xff\xff\xff\xff\xff\xf8\x00\x7f\x00\x00\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x7f\x00\x01\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x7f\x00\x07\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x7f\x00\x07\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x7f\x00\x01\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x7f\x00\x00\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x7f\x00\x00\x7f\xff\xff\xff\xff\xff\xff\xf8\x00\x7f\x00\x00\x1f\xff\xff\xff\xff\xff\xff\xf8\x00\x7f\x00\x00\x0f\xff\xff\xff\xff\xff\xff\xf8\x00\x7f\x00\x00\x03\xff\xff\xff\xff\xff\xff\xf8\x00\x7f\x00\x00\x01\xff\xff\xff\xff\xff\xff\xf8\x00\x7f\x00\x00\x00\xff\xff\xff\xff\xff\xff\xf0\x00\x7f\x00\x00\x00?\xfe\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x1f\xfe\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x0f\xfe\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x03\xfe\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x01\xfe\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00~\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00>\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x1e\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f'
|
||||
No_go=b'P4\n89 64\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x01\xff\xe0\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x1f\xfc>\x00\x00\x00\x00\x7f\x00\x00\x00\x00\xff\xff\xc3\x80\x00\x00\x00\x7f\x00\x00\x00\x03\xff\xff\xf8`\x00\x00\x00\x7f\x00\x00\x00\x07\xff\xff\xff\x18\x00\x00\x00\x7f\x00\x00\x00\x1f\xff\xff\xff\xcc\x00\x00\x00\x7f\x00\x00\x00?\xff\xff\xff\xf3\x00\x00\x00\x7f\x00\x00\x00\x7f\xff\xc1\xff\xfd\x80\x00\x00\x7f\x00\x00\x00\xff\xfc\x00\x1f\xfc\xc0\x00\x00\x7f\x00\x00\x01\xff\xf0\x00\x03\xff`\x00\x00\x7f\x00\x00\x03\xff\xc0\x00\x00\xf7\xb0\x00\x00\x7f\x00\x00\x07\xff\x00\x00\x00\x7f\xd0\x00\x00\x7f\x00\x00\x0f\xfe\x00\x00\x00_\xe8\x00\x00\x7f\x00\x00\x0f\xf8\x00\x00\x00\xff\xf4\x00\x00\x7f\x00\x00\x1f\xf0\x00\x00\x01\x7f\xf4\x00\x00\x7f\x00\x00?\xf0\x00\x00\x03\xff\xfa\x00\x00\x7f\x00\x00?\xe0\x00\x00\x05\xff\xfb\x00\x00\x7f\x00\x00\x7f\xc0\x00\x00\x0f\xfd\xfd\x00\x00\x7f\x00\x00\x7f\xc0\x00\x00\x17\xf8\xfd\x00\x00\x7f\x00\x00\x7f\x80\x00\x00?\xf0\xff\x80\x00\x7f\x00\x00\xff\x80\x00\x00_\xe0~\x80\x00\x7f\x00\x00\xff\x00\x00\x00\xff\xc0\x7f\x80\x00\x7f\x00\x00\xff\x00\x00\x01\x7f\x80?@\x00\x7f\x00\x00\xfe\x00\x00\x03\xff\x00?@\x00\x7f\x00\x01\xfe\x00\x00\x05\xfe\x00?@\x00\x7f\x00\x01\xfe\x00\x00\x0f\xfc\x00\x1f\xc0\x00\x7f\x00\x01\xfe\x00\x00\x17\xf8\x00\x1f\xc0\x00\x7f\x00\x01\xfc\x00\x00?\xf0\x00\x1f\xe0\x00\x7f\x00\x01\xfc\x00\x00_\xe0\x00\x1f\xa0\x00\x7f\x00\x01\xfc\x00\x00\xff\xc0\x00\x1f\xe0\x00\x7f\x00\x01\xfc\x00\x01\x7f\x80\x00\x1f\xa0\x00\x7f\x00\x01\xfc\x00\x03\xff\x00\x00\x1f\xe0\x00\x7f\x00\x01\xfe\x00\x05\xfe\x00\x00\x1f\xe0\x00\x7f\x00\x01\xfe\x00\x0f\xfc\x00\x00\x1f\xc0\x00\x7f\x00\x01\xfe\x00\x17\xf8\x00\x00?\xc0\x00\x7f\x00\x01\xfe\x00?\xf0\x00\x00?\xc0\x00\x7f\x00\x00\xff\x00_\xe0\x00\x00?\xc0\x00\x7f\x00\x00\xff\x00\xff\xc0\x00\x00\x7f\xc0\x00\x7f\x00\x00\xff\x01\xff\x80\x00\x00\x7f\x80\x00\x7f\x00\x00\xff\x83\xff\x00\x00\x00\x7f\x80\x00\x7f\x00\x00\x7f\x87\xfe\x00\x00\x00\xff\x80\x00\x7f\x00\x00\x7f\xcf\xfc\x00\x00\x01\xff\x00\x00\x7f\x00\x00?\xff\xf8\x00\x00\x01\xff\x00\x00\x7f\x00\x00?\xff\xf0\x00\x00\x03\xfe\x00\x00\x7f\x00\x00\x1f\xff\xe0\x00\x00\x07\xfe\x00\x00\x7f\x00\x00\x1f\xff\xc0\x00\x00\x07\xfc\x00\x00\x7f\x00\x00\x0f\xff\x80\x00\x00\x1f\xfc\x00\x00\x7f\x00\x00\x07\xff\x00\x00\x00?\xf8\x00\x00\x7f\x00\x00\x07\xff\x80\x00\x00\xff\xf0\x00\x00\x7f\x00\x00\x03\xff\xe0\x00\x01\xff\xe0\x00\x00\x7f\x00\x00\x01\xff\xf8\x00\x0f\xff\xc0\x00\x00\x7f\x00\x00\x00\xff\xff\x00\x7f\xff\x80\x00\x00\x7f\x00\x00\x00\x7f\xff\xff\xff\xff\x00\x00\x00\x7f\x00\x00\x00\x1f\xff\xff\xff\xfe\x00\x00\x00\x7f\x00\x00\x00\x0f\xff\xff\xff\xfc\x00\x00\x00\x7f\x00\x00\x00\x03\xff\xff\xff\xf0\x00\x00\x00\x7f\x00\x00\x00\x01\xff\xff\xff\xc0\x00\x00\x00\x7f\x00\x00\x00\x00?\xff\xff\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x07\xff\xf8\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00?\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f'
|
||||
Question_mark=b'P4\n89 64\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x03\xff\xf0\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x1f\xff\x1e\x00\x00\x00\x00\x7f\x00\x00\x00\x00?\xff\xe3\x80\x00\x00\x00\x7f\x00\x00\x00\x00\xff\xff\xfc\xc0\x00\x00\x00\x7f\x00\x00\x00\x01\xff\xff\xff \x00\x00\x00\x7f\x00\x00\x00\x03\xff\xff\xff\x90\x00\x00\x00\x7f\x00\x00\x00\x07\xff\xff\xff\xc8\x00\x00\x00\x7f\x00\x00\x00\x0f\xff\xff\xff\xe4\x00\x00\x00\x7f\x00\x00\x00\x1f\xff\xf1\xff\xf2\x00\x00\x00\x7f\x00\x00\x00\x1f\xff\x80\x7f\xf9\x00\x00\x00\x7f\x00\x00\x00?\xfe\x00\x1f\xfd\x00\x00\x00\x7f\x00\x00\x00?\xfc\x00\x07\xfd\x80\x00\x00\x7f\x00\x00\x00?\xf8\x00\x07\xfe\x80\x00\x00\x7f\x00\x00\x00\x7f\xf8\x00\x03\xfe\x80\x00\x00\x7f\x00\x00\x00\x7f\xf0\x00\x03\xfe\x80\x00\x00\x7f\x00\x00\x00\x7f\xf0\x00\x01\xfe\x80\x00\x00\x7f\x00\x00\x00\x7f\xf0\x00\x01\xff\x80\x00\x00\x7f\x00\x00\x00\x7f\xe0\x00\x01\xff\x80\x00\x00\x7f\x00\x00\x00\x7f\xe0\x00\x01\xff\x80\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x01\xff\x80\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x03\xff\x80\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x07\xff\x80\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x0f\xff\x80\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x1f\xff\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00?\xfe\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x7f\xfe\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\xff\xfc\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x01\xff\xf8\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x03\xff\xf0\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x07\xff\xe0\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x0f\xff\xc0\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x1f\xff\x80\x00\x00\x00\x7f\x00\x00\x00\x00\x00?\xff\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x7f\xfe\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x7f\xfc\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\xff\xf8\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\xff\xf0\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\xff\xe0\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\xff\xc0\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x01\xff\xc0\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x01\xff\x80\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x01\xff\x80\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\xff\x80\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\xfd\x80\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x01\xfe\xc0\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x03\xff@\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x03\xff\xa0\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x03\xff\xe0\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x03\xff\xe0\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x03\xff\xe0\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x03\xff\xc0\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x01\xff\xc0\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x01\xff\x80\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\xff\x80\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00>\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f'
|
||||
Right=b'P4\n89 64\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x000\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00<\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00&\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00;\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00,\xc0\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00?`\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00/\xb0\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00?\xcc\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00/\xf6\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00?\xfb\x00\x00\x00\x7f\x00\x07\xff\xff\xff\xff\xef\xfc\xc0\x00\x00\x7f\x00\x05UUUU_\xff`\x00\x00\x7f\x00\x07\xff\xff\xff\xff\xff\xff\xb0\x00\x00\x7f\x00\x07\xff\xff\xff\xff\xff\xff\xcc\x00\x00\x7f\x00\x07\xff\xff\xff\xff\xff\xff\xf6\x00\x00\x7f\x00\x07\xff\xff\xff\xff\xff\xff\xfb\x00\x00\x7f\x00\x07\xff\xff\xff\xff\xff\xff\xfc\xc0\x00\x7f\x00\x07\xff\xff\xff\xff\xff\xff\xff`\x00\x7f\x00\x07\xff\xff\xff\xff\xff\xff\xff\xb0\x00\x7f\x00\x07\xff\xff\xff\xff\xff\xff\xff\xb0\x00\x7f\x00\x07\xff\xff\xff\xff\xff\xff\xfe`\x00\x7f\x00\x07\xff\xff\xff\xff\xff\xff\xfc\x80\x00\x7f\x00\x07\xff\xff\xff\xff\xff\xff\xfb\x00\x00\x7f\x00\x07\xff\xff\xff\xff\xff\xff\xf6\x00\x00\x7f\x00\x07\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x7f\x00\x07\xff\xff\xff\xff\xff\xff\xb0\x00\x00\x7f\x00\x07\xff\xff\xff\xff\xff\xff`\x00\x00\x7f\x00\x07\xff\xff\xff\xff\xff\xff\x80\x00\x00\x7f\x00\x00\x00\x00\x00\x00?\xff\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00?\xfc\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00?\xf8\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00?\xf0\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00?\xc0\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00?\x80\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00?\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00<\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x008\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f'
|
||||
Stop_1=b'P4\n89 64\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\xff\xff\xff\x80\x00\x00\x00\x7f\x00\x00\x00\x01\xfc\x00\x00@\x00\x00\x00\x7f\x00\x00\x00\x03\xff\xff\xff \x00\x00\x00\x7f\x00\x00\x00\x07\x80\x00\x00\xd0\x00\x00\x00\x7f\x00\x00\x00\x0f\x00\x00\x00h\x00\x00\x00\x7f\x00\x00\x00\x1e\x7f\xff\xff4\x00\x00\x00\x7f\x00\x00\x00<\xff\xff\xff\x9a\x00\x00\x00\x7f\x00\x00\x00y\xff\xff\xff\xcd\x00\x00\x00\x7f\x00\x00\x00\xf3\xff\xff\xff\xe6\x80\x00\x00\x7f\x00\x00\x01\xe7\xff\xff\xff\xf3@\x00\x00\x7f\x00\x00\x03\xcf\xff\xff\xff\xf9\xa0\x00\x00\x7f\x00\x00\x07\x9f\xff\xff\xff\xfc\xd0\x00\x00\x7f\x00\x00\x0f?\xff\xff\xff\xfeh\x00\x00\x7f\x00\x00\x1e\x7f\xff\xff\xff\xff4\x00\x00\x7f\x00\x00<\xff\xff\xff\xff\xff\x9a\x00\x00\x7f\x00\x00y\xff\xff\xff\xff\xff\xcd\x00\x00\x7f\x00\x00\xf3\xff\xff\xff\xff\xff\xe6\x80\x00\x7f\x00\x01\xe7\xff\xff\xff\xff\xff\xf3@\x00\x7f\x00\x03\xcf\xff\xff\xff\xff\xff\xf9\xa0\x00\x7f\x00\x03\x9f\xff\xff\xff\xff\xff\xfc\xa0\x00\x7f\x00\x03\x9f\xff\xff\xff\xff\xff\xfc\xa0\x00\x7f\x00\x03\x9e\x0f\x00<\x0f\xc0<\xa0\x00\x7f\x00\x03\x9c\x02\x00\x18\x07\x80\x0c\xa0\x00\x7f\x00\x03\x98\x02\x00\x10\x03\x80\x04\xa0\x00\x7f\x00\x03\x90\xe1\xe0\xf1\xe3\x8f\xc4\xa0\x00\x7f\x00\x03\x91\xf7\xf1\xe3\xf1\x8f\xe4\xa0\x00\x7f\x00\x03\x91\xff\xf1\xe3\xf1\x8f\xe0\xa0\x00\x7f\x00\x03\x98\xff\xf1\xc7\xf9\x8f\xe4\xa0\x00\x7f\x00\x03\x98?\xf1\xc7\xf8\x8f\xc4\xa0\x00\x7f\x00\x03\x9c\x0f\xf1\xc7\xf8\x87\x84\xa0\x00\x7f\x00\x03\x9e\x03\xf1\xc7\xf8\x80\x0c\xa0\x00\x7f\x00\x03\x9f\x81\xf1\xc7\xf8\x80\x1c\xa0\x00\x7f\x00\x03\x9f\xe1\xf1\xc7\xf8\x87\xfc\xa0\x00\x7f\x00\x03\x9f\xf1\xf1\xc7\xf8\x87\xfc\xa0\x00\x7f\x00\x03\x9f\xf8\xf1\xe3\xf1\x87\xfc\xa0\x00\x7f\x00\x03\x9f\xf8\xf1\xe3\xf1\x87\xfc\xa0\x00\x7f\x00\x03\x91\xf1\xf1\xe1\xe1\x87\xfc\xa0\x00\x7f\x00\x03\x90\x01\xf1\xf0\xc3\x87\xfc\xa0\x00\x7f\x00\x03\x98\x01\xf1\xf8\x07\x87\xfc\xa0\x00\x7f\x00\x03\x9c\x07\xf1\xfc\x0f\x87\xfc\xa0\x00\x7f\x00\x03\x9f\x1f\xff\xff?\xff\xfc\xa0\x00\x7f\x00\x03\x9f\xff\xff\xff\xff\xff\xfc\xa0\x00\x7f\x00\x03\xcf\xff\xff\xff\xff\xff\xf9\xa0\x00\x7f\x00\x01\xe7\xff\xff\xff\xff\xff\xf3@\x00\x7f\x00\x00\xf3\xff\xff\xff\xff\xff\xe6\x80\x00\x7f\x00\x00y\xff\xff\xff\xff\xff\xcd\x00\x00\x7f\x00\x00<\xff\xff\xff\xff\xff\x9a\x00\x00\x7f\x00\x00\x1e\x7f\xff\xff\xff\xff4\x00\x00\x7f\x00\x00\x0f?\xff\xff\xff\xfeh\x00\x00\x7f\x00\x00\x07\x9f\xff\xff\xff\xfc\xf0\x00\x00\x7f\x00\x00\x03\xcf\xff\xff\xff\xf9\xe0\x00\x00\x7f\x00\x00\x01\xe7\xff\xff\xff\xf3\xc0\x00\x00\x7f\x00\x00\x00\xf3\xff\xff\xff\xe7\x80\x00\x00\x7f\x00\x00\x00y\xff\xff\xff\xcf\x00\x00\x00\x7f\x00\x00\x00<\xff\xff\xff\x9e\x00\x00\x00\x7f\x00\x00\x00\x1e\x7f\xff\xff<\x00\x00\x00\x7f\x00\x00\x00\x0f\x00\x00\x00x\x00\x00\x00\x7f\x00\x00\x00\x07\x80\x00\x00\xf0\x00\x00\x00\x7f\x00\x00\x00\x03\xff\xff\xff\xe0\x00\x00\x00\x7f\x00\x00\x00\x01\xff\xff\xff\xc0\x00\x00\x00\x7f\x00\x00\x00\x00\xff\xff\xff\x80\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f'
|
||||
Stop_2=b'P4\n89 64\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\xff\xff\xff\x80\x00\x00\x00\x7f\x00\x00\x00\x01\xfc\x00\x00@\x00\x00\x00\x7f\x00\x00\x00\x03\xff\xff\xff \x00\x00\x00\x7f\x00\x00\x00\x07\xc0\x00\x00\xd0\x00\x00\x00\x7f\x00\x00\x00\x0f\x00\x00\x00h\x00\x00\x00\x7f\x00\x00\x00\x1e\x00\x00\x004\x00\x00\x00\x7f\x00\x00\x00<\x00\x00\x00\x1a\x00\x00\x00\x7f\x00\x00\x00x\x00\x00\x00\r\x00\x00\x00\x7f\x00\x00\x00\xf0\x00\x00\x00\x06\x80\x00\x00\x7f\x00\x00\x01\xe0\x00\x00\x00\x03@\x00\x00\x7f\x00\x00\x03\xc0\x00\x00\x00\x01\xa0\x00\x00\x7f\x00\x00\x07\x80\x00\x00\x00\x00\xd0\x00\x00\x7f\x00\x00\x0f\x00\x00\x00\x00\x00h\x00\x00\x7f\x00\x00\x1e\x00\x00\x00\x00\x004\x00\x00\x7f\x00\x00<\x00\x00\x00\x00\x00\x1a\x00\x00\x7f\x00\x00x\x00\x00\x00\x00\x00\r\x00\x00\x7f\x00\x00\xf0\x00\x00\x00\x00\x00\x06\x80\x00\x7f\x00\x01\xe0\x00\x00\x00\x00\x00\x03@\x00\x7f\x00\x03\xc0\x00\x00\x00\x00\x00\x01\xa0\x00\x7f\x00\x03\x80\x00\x00\x00\x00\x00\x00\xa0\x00\x7f\x00\x03\x80\x00\x00\x00\x00\x00\x00\xa0\x00\x7f\x00\x03\x81\xf0\xff\xc3\xf0?\xc0\xa0\x00\x7f\x00\x03\x83\xfd\xff\xe7\xf8\x7f\xf0\xa0\x00\x7f\x00\x03\x87\xff\xff\xef\xfc\x7f\xf8\xa0\x00\x7f\x00\x03\x8f\x1e\x1f\x0e\x1cp8\xa0\x00\x7f\x00\x03\x8e\x08\x0e\x1c\x0ep\x1c\xa0\x00\x7f\x00\x03\x8e\x00\x0e\x1c\x0ep\x1c\xa0\x00\x7f\x00\x03\x87\x00\x0e8\x06p\x1c\xa0\x00\x7f\x00\x03\x87\xc0\x0e8\x07p8\xa0\x00\x7f\x00\x03\x83\xf0\x0e8\x07xx\xa0\x00\x7f\x00\x03\x81\xfc\x0e8\x07\x7f\xf0\xa0\x00\x7f\x00\x03\x80~\x0e8\x07\x7f\xe0\xa0\x00\x7f\x00\x03\x80\x1e\x0e8\x07x\x00\xa0\x00\x7f\x00\x03\x80\x0e\x0e8\x07x\x00\xa0\x00\x7f\x00\x03\x80\x07\x0e\x1c\x0ex\x00\xa0\x00\x7f\x00\x03\x80\x07\x0e\x1c\x0ex\x00\xa0\x00\x7f\x00\x03\x8e\x0e\x0e\x1e\x1ex\x00\xa0\x00\x7f\x00\x03\x8f\xfe\x0e\x0f<x\x00\xa0\x00\x7f\x00\x03\x87\xfe\x0e\x07\xf8x\x00\xa0\x00\x7f\x00\x03\x83\xf8\x0e\x03\xf0x\x00\xa0\x00\x7f\x00\x03\x80\xe0\x00\x00\xc0\x00\x00\xa0\x00\x7f\x00\x03\x80\x00\x00\x00\x00\x00\x00\xa0\x00\x7f\x00\x03\xc0\x00\x00\x00\x00\x00\x01\xa0\x00\x7f\x00\x01\xe0\x00\x00\x00\x00\x00\x03@\x00\x7f\x00\x00\xf0\x00\x00\x00\x00\x00\x06\x80\x00\x7f\x00\x00x\x00\x00\x00\x00\x00\r\x00\x00\x7f\x00\x00<\x00\x00\x00\x00\x00\x1a\x00\x00\x7f\x00\x00\x1e\x00\x00\x00\x00\x004\x00\x00\x7f\x00\x00\x0f\x00\x00\x00\x00\x00h\x00\x00\x7f\x00\x00\x07\x80\x00\x00\x00\x00\xf0\x00\x00\x7f\x00\x00\x03\xc0\x00\x00\x00\x01\xe0\x00\x00\x7f\x00\x00\x01\xe0\x00\x00\x00\x03\xc0\x00\x00\x7f\x00\x00\x00\xf0\x00\x00\x00\x07\x80\x00\x00\x7f\x00\x00\x00x\x00\x00\x00\x0f\x00\x00\x00\x7f\x00\x00\x00<\x00\x00\x00\x1e\x00\x00\x00\x7f\x00\x00\x00\x1e\x00\x00\x00<\x00\x00\x00\x7f\x00\x00\x00\x0f\x00\x00\x00x\x00\x00\x00\x7f\x00\x00\x00\x07\x80\x00\x00\xf0\x00\x00\x00\x7f\x00\x00\x00\x03\xff\xff\xff\xe0\x00\x00\x00\x7f\x00\x00\x00\x01\xff\xff\xff\xc0\x00\x00\x00\x7f\x00\x00\x00\x00\xff\xff\xff\x80\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f'
|
||||
Thumbs_down=b'P4\n89 64\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x07\xff\xc0\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x0f\xff\xc0\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x0c\x00\xc7\xff\xff\xff\x00\x00\x00\x7f\x00\x00\x0e\xaa\xff\xff\xff\xff\xc0\x00\x00\x7f\x00\x00\rT\xff\xff\xff\xff\xc0\x00\x00\x7f\x00\x00\x0c\xaa\xff\xff\xff\xff\xc0\x00\x00\x7f\x00\x00\r\xfe\xff\xff\xff\xff\xc0\x00\x00\x7f\x00\x00\x0f\xff\xff\xff\xff\xff\xe0\x00\x00\x7f\x00\x00\r\xff\xff\xff\xff\xff\xf0\x00\x00\x7f\x00\x00\x0f\xff\xff\xff\xff\xff\xf8\x00\x00\x7f\x00\x00\r\xff\xff\xff\xff\xff\xf8\x00\x00\x7f\x00\x00\x0f\xff\xff\xff\xff\xff\xf8\x00\x00\x7f\x00\x00\r\xff\xff\xff\xff\xff\xf0\x00\x00\x7f\x00\x00\x0f\xff\xff\xff\xff\xea\xa0\x00\x00\x7f\x00\x00\r\xff\xff\xff\xff\xff\xf8\x00\x00\x7f\x00\x00\x0f\xff\xff\xff\xff\xff\xf8\x00\x00\x7f\x00\x00\r\xff\xff\xff\xff\xff\xf8\x00\x00\x7f\x00\x00\x0f\xff\xff\xff\xff\xff\xf8\x00\x00\x7f\x00\x00\r\xff\xff\xff\xff\xff\xf8\x00\x00\x7f\x00\x00\x0f\xff\xff\xff\xff\xff\xf0\x00\x00\x7f\x00\x00\r\xff\xff\xff\xff\xd5@\x00\x00\x7f\x00\x00\x0f\xff\xff\xff\xff\xff\xf0\x00\x00\x7f\x00\x00\r\xff\xff\xff\xff\xff\xf0\x00\x00\x7f\x00\x00\x0f\xff\xff\xff\xff\xff\xf0\x00\x00\x7f\x00\x00\r\xff\xc1\xff\xff\xff\xf0\x00\x00\x7f\x00\x00\x0e\xaa\xc0\x7f\xff\xff\xe0\x00\x00\x7f\x00\x00\x0f\xff\xc0?\xff\xff\xe0\x00\x00\x7f\x00\x00\x07\xff\x80?\xff\xff\x80\x00\x00\x7f\x00\x00\x00\x00\x00\x1f\xff\xc0\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x0f\xfc\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x07\xfc\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x03\xfc\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x01\xfc\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x01\xfe\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\xfe\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\xff\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00?\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00?\x80\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x1f\x80\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x1f\x80\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x1f\x80\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x1f\x80\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x0f\x80\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x0f\x80\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f'
|
||||
Thumbs_up=b'P4\n89 64\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x0f\x80\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x0f\x80\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x1f\x80\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x1f\x80\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x1f\x80\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x1f\x80\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00?\x80\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00?\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\xff\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\xfe\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x01\xfe\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x01\xfc\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x03\xfc\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x07\xfc\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x0f\xfc\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x1f\xff\xc0\x00\x00\x00\x7f\x00\x00\x00\x00\x00?\xff\xff\x80\x00\x00\x7f\x00\x00\x07\xff\xc0?\xff\xff\xe0\x00\x00\x7f\x00\x00\x0f\xff\xc0\x7f\xff\xff\xe0\x00\x00\x7f\x00\x00\x0c\x00\xc1\xff\xff\xff\xf0\x00\x00\x7f\x00\x00\rT\xff\xff\xff\xff\xf0\x00\x00\x7f\x00\x00\x0c\xaa\xff\xff\xff\xff\xf0\x00\x00\x7f\x00\x00\rT\xff\xff\xff\xff\xf0\x00\x00\x7f\x00\x00\r\xfe\xff\xff\xff\xea\xa0\x00\x00\x7f\x00\x00\x0f\xff\xff\xff\xff\xff\xf0\x00\x00\x7f\x00\x00\r\xff\xff\xff\xff\xff\xf8\x00\x00\x7f\x00\x00\x0f\xff\xff\xff\xff\xff\xf8\x00\x00\x7f\x00\x00\r\xff\xff\xff\xff\xff\xf8\x00\x00\x7f\x00\x00\x0f\xff\xff\xff\xff\xff\xf8\x00\x00\x7f\x00\x00\r\xff\xff\xff\xff\xff\xf8\x00\x00\x7f\x00\x00\x0f\xff\xff\xff\xff\xea\xa0\x00\x00\x7f\x00\x00\r\xff\xff\xff\xff\xff\xf0\x00\x00\x7f\x00\x00\x0f\xff\xff\xff\xff\xff\xf8\x00\x00\x7f\x00\x00\r\xff\xff\xff\xff\xff\xf8\x00\x00\x7f\x00\x00\x0f\xff\xff\xff\xff\xff\xf8\x00\x00\x7f\x00\x00\r\xff\xff\xff\xff\xff\xf0\x00\x00\x7f\x00\x00\x0f\xff\xff\xff\xff\xff\xe0\x00\x00\x7f\x00\x00\r\xff\xff\xff\xff\xff\xc0\x00\x00\x7f\x00\x00\x0f\xff\xff\xff\xff\xff\xc0\x00\x00\x7f\x00\x00\r\xff\xff\xff\xff\xff\xc0\x00\x00\x7f\x00\x00\x0f\xff\xff\xff\xff\xff\xc0\x00\x00\x7f\x00\x00\r\xff\xc7\xff\xff\xff\x00\x00\x00\x7f\x00\x00\rT\xc0\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x0f\xff\xc0\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x07\xff\x80\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f'
|
||||
Warning=b'P4\n89 64\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00=\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00?\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x7f\x80\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\xff@\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\xf3\xc0\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x01\xf3\xa0\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x01\xe1\xf0\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x03\xe1\xd0\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x03\xc0\xf0\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x07\xc0\xe8\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\x80|\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x0f\x80|\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x1f\x00:\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x1f\x00>\x00\x00\x00\x00\x7f\x00\x00\x00\x00>>\x1d\x00\x00\x00\x00\x7f\x00\x00\x00\x00<{\x0f\x00\x00\x00\x00\x7f\x00\x00\x00\x00|y\x0e\x80\x00\x00\x00\x7f\x00\x00\x00\x00\xf8\xfe\x87\xc0\x00\x00\x00\x7f\x00\x00\x00\x00\xf8\xfe\x87\xc0\x00\x00\x00\x7f\x00\x00\x00\x01\xf0\xff\x83\xa0\x00\x00\x00\x7f\x00\x00\x00\x01\xf0\xfe\x83\xe0\x00\x00\x00\x7f\x00\x00\x00\x03\xe0\xff\x81\xd0\x00\x00\x00\x7f\x00\x00\x00\x03\xc0\xff\x80\xf0\x00\x00\x00\x7f\x00\x00\x00\x07\xc0\x7f\x00\xe8\x00\x00\x00\x7f\x00\x00\x00\x0f\x80\x7f\x00|\x00\x00\x00\x7f\x00\x00\x00\x0f\x80\x7f\x00t\x00\x00\x00\x7f\x00\x00\x00\x1f\x00\x7f\x00>\x00\x00\x00\x7f\x00\x00\x00\x1f\x00\x7f\x00>\x00\x00\x00\x7f\x00\x00\x00>\x00\x7f\x00\x1d\x00\x00\x00\x7f\x00\x00\x00>\x00\x7f\x00\x1f\x00\x00\x00\x7f\x00\x00\x00|\x00\x7f\x00\x0e\x80\x00\x00\x7f\x00\x00\x00\xf8\x00\x7f\x00\x07\xc0\x00\x00\x7f\x00\x00\x00\xf8\x00\x7f\x00\x07@\x00\x00\x7f\x00\x00\x01\xf0\x00\x7f\x00\x03\xe0\x00\x00\x7f\x00\x00\x01\xf0\x00\x7f\x00\x03\xe0\x00\x00\x7f\x00\x00\x03\xe0\x00>\x00\x01\xd0\x00\x00\x7f\x00\x00\x03\xe0\x00>\x00\x01\xf0\x00\x00\x7f\x00\x00\x07\xc0\x00>\x00\x00\xe8\x00\x00\x7f\x00\x00\x0f\xc0\x00>\x00\x00\xfc\x00\x00\x7f\x00\x00\x0f\x80\x00\x1c\x00\x00t\x00\x00\x7f\x00\x00\x1f\x00\x00\x00\x00\x00>\x00\x00\x7f\x00\x00\x1f\x00\x00\x00\x00\x00:\x00\x00\x7f\x00\x00>\x00\x00\x00\x00\x00\x1f\x00\x00\x7f\x00\x00>\x00\x00>\x00\x00\x1f\x00\x00\x7f\x00\x00|\x00\x00}\x00\x00\x0e\x80\x00\x7f\x00\x00\xfc\x00\x00~\x80\x00\x0f\xc0\x00\x7f\x00\x00\xf8\x00\x00\x7f\x80\x00\x07@\x00\x7f\x00\x01\xf8\x00\x00\x7f\x80\x00\x07\xe0\x00\x7f\x00\x01\xf0\x00\x00\x7f\x00\x00\x03\xa0\x00\x7f\x00\x03\xe0\x00\x00?\x00\x00\x01\xf0\x00\x7f\x00\x03\xe0\x00\x00\x1e\x00\x00\x01\xf0\x00\x7f\x00\x07\xc0\x00\x00\x00\x00\x00\x00\xe8\x00\x7f\x00\x0f\xc0\x00\x00\x00\x00\x00\x00\xfc\x00\x7f\x00\x0f\x80\x00\x00\x00\x00\x00\x00\xf4\x00\x7f\x00\x1f\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x7f\x00\x1f\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x7f\x00\x1f\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x7f\x00\x07\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f'
|
||||
229
boards/default_src/micropython/origin/build/lib/irremote.py
Normal file
229
boards/default_src/micropython/origin/build/lib/irremote.py
Normal file
@@ -0,0 +1,229 @@
|
||||
"""
|
||||
IR-Remote
|
||||
|
||||
Micropython library for the IR-Remote/Timer(IR_RX&TX)
|
||||
===============================================
|
||||
#Preliminary composition 20240302
|
||||
|
||||
@dahanzimin From the Mixly Team
|
||||
"""
|
||||
import array, time, gc
|
||||
from esp32 import RMT
|
||||
from machine import Pin, Timer
|
||||
|
||||
'''接收部分'''
|
||||
class IR_RX:
|
||||
BADSTART = 'Invalid start pulse'
|
||||
BADDATA = 'Invalid data'
|
||||
def __init__(self, pin, callback=None, timeout=15000, timer_id=1):
|
||||
self._start = 0
|
||||
self._ready = False
|
||||
self._enable = False
|
||||
self._timeout = timeout
|
||||
self._callback = callback
|
||||
self._pulses = array.array('H')
|
||||
self.code = [None, None, None, memoryview(self._pulses)] #存放[cmd, addr, data, pulses]
|
||||
Pin(pin, Pin.IN).irq(handler=self._irq_cb, trigger=(Pin.IRQ_FALLING | Pin.IRQ_RISING))
|
||||
Timer(timer_id).init(period=5, mode=Timer.PERIODIC, callback=self._timer_cb)
|
||||
|
||||
def _irq_cb(self, pin):
|
||||
if not self._enable:
|
||||
_intime = time.ticks_us()
|
||||
if self._start == 0:
|
||||
self._start = _intime
|
||||
return
|
||||
self._pulses.append(time.ticks_diff(_intime, self._start))
|
||||
self._start = _intime
|
||||
else:
|
||||
self._start = 0
|
||||
self._pulses = array.array('H')
|
||||
|
||||
def _timer_cb(self, tim):
|
||||
if len(self._pulses) >= 3 and time.ticks_diff(time.ticks_us(), self._start) > self._timeout:
|
||||
#接收完成,开始解码
|
||||
self.code[3] = memoryview(self._pulses)
|
||||
if self.decode() is None and self._callback:
|
||||
self._callback(self.code[0], self.code[1], self.code[2], self.code[3])
|
||||
self._ready = True
|
||||
self._start = 0
|
||||
self._pulses = array.array('H')
|
||||
gc.collect()
|
||||
|
||||
def recv_cb(self, callback):
|
||||
self._callback = callback
|
||||
|
||||
def timeout(self, timeout=15000):
|
||||
self._timeout = timeout
|
||||
|
||||
def any(self):
|
||||
ready = self._ready
|
||||
self._ready = False
|
||||
return ready
|
||||
|
||||
def enable(self, onoff):
|
||||
self._enable = onoff
|
||||
|
||||
class NEC_RX(IR_RX):
|
||||
def __init__(self, pin, bits=None, callback=None):
|
||||
super().__init__(pin, callback, timeout=15000)
|
||||
self._bits = bits
|
||||
|
||||
def decode(self):
|
||||
pulse_len = len(self._pulses)
|
||||
if pulse_len < 3:
|
||||
print("Warning:", self.BADSTART)
|
||||
return False
|
||||
else:
|
||||
start_i = 0
|
||||
value = 0
|
||||
#跳过帧头(各厂家定义不一)
|
||||
for i in range(pulse_len):
|
||||
if self._pulses[i] <= 2250:
|
||||
start_i = i
|
||||
break
|
||||
val = 1 << ((pulse_len - start_i - 1) // 2) - 1 if (pulse_len - start_i) >= 3 else 0
|
||||
#根据高低脉冲定义转码
|
||||
for edge in range(start_i, pulse_len - 1, 2):
|
||||
value >>= 1
|
||||
if self._pulses[edge + 1] > 1120:
|
||||
value |= val
|
||||
#判读是8、16位解码
|
||||
if self._bits == 8 or self._bits == 16:
|
||||
cmd = value >> 16 & 0xff
|
||||
if cmd != (value >> 24 ^ 0xff) and value != 0x0:
|
||||
print("Warning:", self.BADDATA)
|
||||
return False
|
||||
addr = value & 0xff if self._bits == 8 else value & 0xffff
|
||||
self.code[0:3] = cmd, addr, value
|
||||
#其他未定义直接输出转码
|
||||
else:
|
||||
self.code[0:3] = None, None, value
|
||||
|
||||
class RC5_RX(IR_RX):
|
||||
def __init__(self, pin, callback=None):
|
||||
super().__init__(pin, callback, timeout=15000)
|
||||
|
||||
def decode(self):
|
||||
pulse_len = len(self._pulses)
|
||||
if pulse_len < 3:
|
||||
print("Warning:", self.BADSTART)
|
||||
return False
|
||||
else:
|
||||
bit = 1
|
||||
value = 0
|
||||
num = 0
|
||||
while True:
|
||||
short = self._pulses[num] < 1334
|
||||
if not short:
|
||||
bit ^= 1
|
||||
value <<= 1
|
||||
value |= bit
|
||||
num += 1 + int(short)
|
||||
if num >= pulse_len:
|
||||
value >>= 1
|
||||
break
|
||||
#判读解码
|
||||
cmd = (value & 0x3f) | (0 if ((value >> 12) & 1) else 0x40)
|
||||
addr = (value >> 6) & 0x1f
|
||||
self.code[0:3] = cmd, addr, value
|
||||
|
||||
'''发射部分'''
|
||||
class IR_TX:
|
||||
def __init__(self, pin, cfreq=38000, power=60):
|
||||
self._rmt = RMT(0, pin=Pin(pin), clock_div=80, tx_carrier = (cfreq, round(power * 0.75), 1))
|
||||
self._pulses = array.array('H')
|
||||
self.carrier = False
|
||||
|
||||
def transmit(self, cmd=None, addr=None, toggle=None, pulses=None, raw=None):
|
||||
if pulses is None:
|
||||
self.carrier = False
|
||||
if raw is None:
|
||||
self.tx(cmd, addr, toggle)
|
||||
else:
|
||||
self.tx_raw(raw)
|
||||
self._rmt.write_pulses(tuple(self._pulses))
|
||||
self._pulses = array.array('H')
|
||||
else:
|
||||
self._rmt.write_pulses(tuple(pulses))
|
||||
|
||||
def busy(self):
|
||||
return not self._rmt.wait_done()
|
||||
|
||||
def _append(self, *times):
|
||||
for t in times:
|
||||
self._pulses.append(t)
|
||||
self.carrier = not self.carrier
|
||||
|
||||
def _add(self, t):
|
||||
assert t > 0
|
||||
self._pulses[len(self._pulses)-1] +=t
|
||||
|
||||
class NEC_TX(IR_TX):
|
||||
_TBURST = const(563)
|
||||
_T_ONE = const(1687)
|
||||
def __init__(self, pin, samsung=False, power=60):
|
||||
super().__init__(pin, 38000, power)
|
||||
self._samsung = samsung
|
||||
|
||||
def _bit(self, b):
|
||||
self._append(_TBURST, _T_ONE if b else _TBURST)
|
||||
|
||||
def tx(self, cmd, addr, toggle=0): #cmd:0~0xff, addr:0~0xffff, toggle:0,1
|
||||
if self._samsung:
|
||||
self._append(4500, 4500)
|
||||
else:
|
||||
self._append(9000, 4500)
|
||||
if addr < 256: # Short address: append complement
|
||||
if self._samsung:
|
||||
addr |= addr << 8
|
||||
else:
|
||||
addr |= ((addr ^ 0xff) << 8)
|
||||
for _ in range(16):
|
||||
self._bit(addr & 1)
|
||||
addr >>= 1
|
||||
cmd |= ((cmd ^ 0xff) << 8)
|
||||
for _ in range(16):
|
||||
self._bit(cmd & 1)
|
||||
cmd >>= 1
|
||||
self._append(_TBURST)
|
||||
if toggle == 1:
|
||||
self._append(30000, 9000, 2250, _TBURST)
|
||||
|
||||
def tx_raw(self, raw):
|
||||
self._append(9000, 4500)
|
||||
while raw:
|
||||
self._bit(raw & 1)
|
||||
raw >>= 1
|
||||
self._append(_TBURST)
|
||||
|
||||
class RC5_TX(IR_TX):
|
||||
_T_RC5 = const(889)
|
||||
def __init__(self, pin, power=60):
|
||||
super().__init__(pin, 36000, power)
|
||||
|
||||
def tx(self, cmd, addr, toggle): #cmd:0~0x3f, addr:0~0x1f, toggle:0,1
|
||||
d = (cmd & 0x3f) | ((addr & 0x1f) << 6) | (((cmd & 0x40) ^ 0x40) << 6) | ((toggle & 1) << 11)
|
||||
mask = 0x2000
|
||||
while mask:
|
||||
if mask == 0x2000:
|
||||
self._append(_T_RC5)
|
||||
else:
|
||||
bit = bool(d & mask)
|
||||
if bit ^ self.carrier:
|
||||
self._add(_T_RC5)
|
||||
self._append(_T_RC5)
|
||||
else:
|
||||
self._append(_T_RC5, _T_RC5)
|
||||
mask >>= 1
|
||||
|
||||
def tx_raw(self, raw):
|
||||
self._append(_T_RC5)
|
||||
mask = 1 << len(bin(raw)) - 3
|
||||
while mask:
|
||||
if bool(raw & mask) ^ self.carrier:
|
||||
self._add(_T_RC5)
|
||||
self._append(_T_RC5)
|
||||
else:
|
||||
self._append(_T_RC5, _T_RC5)
|
||||
mask >>= 1
|
||||
self._append(_T_RC5)
|
||||
76
boards/default_src/micropython/origin/build/lib/ltr308al.py
Normal file
76
boards/default_src/micropython/origin/build/lib/ltr308al.py
Normal file
@@ -0,0 +1,76 @@
|
||||
"""
|
||||
LTR-308ALS
|
||||
|
||||
Micropython library for the LTR-308ALS
|
||||
=======================================================
|
||||
|
||||
#Changed from circuitpython to micropython 20220211
|
||||
|
||||
dahanzimin From the Mixly Team
|
||||
"""
|
||||
import time
|
||||
from micropython import const
|
||||
|
||||
LTR_308ALS_ADDRESS = const(0x53)
|
||||
|
||||
LTR_308ALS_REG_CTRL = const(0x00)
|
||||
LTR_308ALS_REG_GAIN = const(0x05) #设置增益
|
||||
LTR_308ALS_REG_DEVICE_ID = const(0x06)
|
||||
LTR_308ALS_REG_DATA = const(0x0D)
|
||||
|
||||
#设置增益范围
|
||||
LTR_308ALS_CMD_ALS_Enable = const(0x02)
|
||||
LTR_308ALS_CMD_X1GAIN =const(0x00)
|
||||
LTR_308ALS_CMD_X3GAIN =const(0x01)
|
||||
LTR_308ALS_CMD_X6GAIN =const(0x02)
|
||||
LTR_308ALS_CMD_X9GAIN =const(0x03)
|
||||
LTR_308ALS_CMD_X18GAIN =const(0x04)
|
||||
|
||||
_GAINS = (
|
||||
LTR_308ALS_CMD_X1GAIN, # 1x
|
||||
LTR_308ALS_CMD_X3GAIN, # 3x
|
||||
LTR_308ALS_CMD_X6GAIN, # 6x
|
||||
LTR_308ALS_CMD_X9GAIN, # 9x
|
||||
LTR_308ALS_CMD_X18GAIN # 18x
|
||||
)
|
||||
|
||||
_GAINS_X = (
|
||||
1, # 1x
|
||||
3, # 3x
|
||||
6, # 6x
|
||||
9, # 9x
|
||||
18 # 18x
|
||||
)
|
||||
|
||||
class LTR_308ALS:
|
||||
def __init__(self, i2c_bus,gain=1):
|
||||
self._device = i2c_bus
|
||||
self._address = LTR_308ALS_ADDRESS
|
||||
self._gain = gain
|
||||
|
||||
if self._chip_id() != 0xB1:
|
||||
raise AttributeError("Cannot find a LTR_308ALS")
|
||||
self._Enable() #star
|
||||
time.sleep(0.2)
|
||||
self._wreg(LTR_308ALS_REG_GAIN,_GAINS[self._gain])
|
||||
|
||||
#Write memory address
|
||||
def _wreg(self, reg, val):
|
||||
self._device.writeto_mem(self._address,reg,val.to_bytes(1, 'little'))
|
||||
|
||||
#Read memory address
|
||||
def _rreg(self, reg,nbytes=1):
|
||||
return self._device.readfrom_mem(self._address, reg, nbytes)[0] if nbytes<=1 else self._device.readfrom_mem(self._address, reg, nbytes)[0:nbytes]
|
||||
|
||||
def _chip_id(self):
|
||||
return self._rreg(LTR_308ALS_REG_DEVICE_ID)
|
||||
|
||||
def _Enable(self):
|
||||
self._wreg(LTR_308ALS_REG_CTRL,LTR_308ALS_CMD_ALS_Enable)
|
||||
|
||||
def getdata(self):
|
||||
buffer=self._rreg(LTR_308ALS_REG_DATA,3)
|
||||
als_data= buffer[2]<<16 | buffer[1]<<8| buffer[0]
|
||||
als_lux=float(0.6*als_data/_GAINS_X[self._gain])
|
||||
return als_lux
|
||||
|
||||
78
boards/default_src/micropython/origin/build/lib/ltr381rgb.py
Normal file
78
boards/default_src/micropython/origin/build/lib/ltr381rgb.py
Normal file
@@ -0,0 +1,78 @@
|
||||
"""
|
||||
LTR-381RGB-XX
|
||||
|
||||
MicroPython library for the LTR-381RGB-XX (Color sensor)
|
||||
=======================================================
|
||||
|
||||
#Preliminary composition 20230417
|
||||
|
||||
@dahanzimin From the Mixly Team
|
||||
"""
|
||||
import time
|
||||
from micropython import const
|
||||
|
||||
LTR_MAIN_CTRL = const(0x00)
|
||||
LTR_ALS_CS_MEAS_RATE = const(0x04)
|
||||
LTR_ALS_CS_GAIN = const(0x05)
|
||||
LTR_PART_ID = const(0x06)
|
||||
LTR_MAIN_STATUS = const(0x07)
|
||||
LTR_CS_DATA = const(0x0A)
|
||||
#1x 3x 6x 9x 18x
|
||||
_GAINS_X = (1, 3, 6, 9, 18)
|
||||
|
||||
class LTR_381RGB:
|
||||
def __init__(self, i2c_bus, addr=0x53, gain=1):
|
||||
self._device = i2c_bus
|
||||
self._address = addr
|
||||
self._gain = gain
|
||||
self._color = [0, 0, 0]
|
||||
self._ir = 0
|
||||
self._als = 0
|
||||
|
||||
if (self._chip_id() & 0xF0) != 0xC0:
|
||||
raise AttributeError("Cannot find a LTR-381RGB")
|
||||
|
||||
self._configure()
|
||||
time.sleep(0.1)
|
||||
|
||||
def _wreg(self, reg, val):
|
||||
'''Write memory address'''
|
||||
self._device.writeto_mem(self._address,reg,val.to_bytes(1, 'little'))
|
||||
|
||||
def _rreg(self, reg, nbytes=1):
|
||||
'''Read memory address'''
|
||||
return self._device.readfrom_mem(self._address, reg, nbytes)[0] if nbytes<=1 else self._device.readfrom_mem(self._address, reg, nbytes)[0:nbytes]
|
||||
|
||||
def _chip_id(self):
|
||||
'''Proofreading device ID'''
|
||||
return self._rreg(LTR_PART_ID)
|
||||
|
||||
def _configure(self):
|
||||
'''Configuration Register'''
|
||||
self._wreg(LTR_MAIN_CTRL, 0x06) #CS mode & ALS/CS Enable
|
||||
self._wreg(LTR_ALS_CS_MEAS_RATE, 0x22) #Resolution = 18 bit, Meas Rate =100ms
|
||||
self._wreg(LTR_ALS_CS_GAIN, self._gain & 0x07) #CS measurement Gain Range
|
||||
|
||||
def status(self):
|
||||
'''Data conversion status'''
|
||||
return self._rreg(LTR_MAIN_STATUS) & 0x08
|
||||
|
||||
def getdata(self):
|
||||
'''Processing data acquisition'''
|
||||
if self.status():
|
||||
_buf=self._rreg(LTR_CS_DATA, 12)
|
||||
self._ir = _buf[2] << 16 | _buf[1] << 8 | _buf[0]
|
||||
self._color [1] = _buf[5] << 16 | _buf[4] << 8 | _buf[3]
|
||||
self._color [0] = _buf[8] << 16 | _buf[7] << 8 | _buf[6]
|
||||
self._color [2] = _buf[11] << 16 | _buf[10] << 8 | _buf[9]
|
||||
self._als = 0.8 * self._color [1] * (1 - 0.033 * self._ir / self._color [1]) / _GAINS_X[self._gain]
|
||||
return round(self._als, 2), self._ir, self._color
|
||||
|
||||
def color(self):
|
||||
return self.getdata[2]
|
||||
|
||||
def ir(self):
|
||||
return self.getdata[1]
|
||||
|
||||
def als(self):
|
||||
return self.getdata[0]
|
||||
75
boards/default_src/micropython/origin/build/lib/ltr390uv.py
Normal file
75
boards/default_src/micropython/origin/build/lib/ltr390uv.py
Normal file
@@ -0,0 +1,75 @@
|
||||
"""
|
||||
LTR-390UV
|
||||
|
||||
Micropython library for the LTR-390UV(ALS+UV)
|
||||
=======================================================
|
||||
|
||||
#Preliminary composition 20240120
|
||||
|
||||
@dahanzimin From the Mixly Team
|
||||
"""
|
||||
import time
|
||||
from micropython import const
|
||||
|
||||
_LTR390_ADDRESS = const(0x53)
|
||||
_LTR390_REG_CTRL = const(0x00)
|
||||
_LTR390_REG_MEAS = const(0x04)
|
||||
_LTR390_REG_GAIN = const(0x05)
|
||||
_LTR390_REG_ID = const(0x06)
|
||||
_LTR390_REG_ALS = const(0x0D)
|
||||
_LTR390_REG_UVS = const(0x10)
|
||||
|
||||
_RATE_DEFAULT = const(0x02) #100ms
|
||||
_RESOLUTION_20BIT = (0<<4, 4)
|
||||
_RESOLUTION_19BIT = (1<<4, 2)
|
||||
_RESOLUTION_18BIT = (2<<4, 1)
|
||||
_RESOLUTION_17BIT = (3<<4, 0.5)
|
||||
_RESOLUTION_16BIT = (4<<4, 0.25)
|
||||
_RESOLUTION_13BIT = (5<<4, 0.125)
|
||||
|
||||
_GAIN_X1 = (0, 1)
|
||||
_GAIN_X3 = (1, 3)
|
||||
_GAIN_X6 = (2, 6)
|
||||
_GAIN_X9 = (3, 9)
|
||||
_GAIN_X18 = (4, 18)
|
||||
|
||||
class ALS_UVS:
|
||||
def __init__(self, i2c_bus, addr=_LTR390_ADDRESS, gain=_GAIN_X1, resolution=_RESOLUTION_17BIT):
|
||||
self._device = i2c_bus
|
||||
self._address = addr
|
||||
self._gain = gain
|
||||
self._reso = resolution
|
||||
self._flaga = False
|
||||
self._flagu = False
|
||||
|
||||
if self._rreg(_LTR390_REG_ID) != 0xB2:
|
||||
raise AttributeError("Cannot find a LTR-390UV")
|
||||
|
||||
self._wreg(_LTR390_REG_MEAS, self._reso[0] | _RATE_DEFAULT)
|
||||
self._wreg(_LTR390_REG_GAIN, self._gain[0])
|
||||
|
||||
def _wreg(self, reg, val):
|
||||
'''Write memory address'''
|
||||
self._device.writeto_mem(self._address,reg,val.to_bytes(1, 'little'))
|
||||
|
||||
def _rreg(self, reg, nbytes=1):
|
||||
'''Read memory address'''
|
||||
return self._device.readfrom_mem(self._address, reg, nbytes)[0] if nbytes<=1 else self._device.readfrom_mem(self._address, reg, nbytes)[0:nbytes]
|
||||
|
||||
def ultraviolet(self):
|
||||
if not self._flagu:
|
||||
self._wreg(_LTR390_REG_CTRL, 0x0A) #UVS in Active Mode
|
||||
time.sleep_ms(int(self._reso[1] * 100))
|
||||
self._flagu = True
|
||||
self._flaga = False
|
||||
buf = self._rreg(_LTR390_REG_UVS, 3)
|
||||
return buf[2] << 16 | buf[1] << 8 | buf[0]
|
||||
|
||||
def ambient_light(self):
|
||||
if not self._flaga:
|
||||
self._wreg(_LTR390_REG_CTRL, 0x02) #ALS in Active Mode
|
||||
time.sleep_ms(int(self._reso[1] * 100))
|
||||
self._flaga = True
|
||||
self._flagu = False
|
||||
buf = self._rreg(_LTR390_REG_ALS, 3)
|
||||
return 0.6 * (buf[2] << 16 | buf[1] << 8 | buf[0]) / (self._gain[1] * self._reso[1])
|
||||
106
boards/default_src/micropython/origin/build/lib/ltr553als.py
Normal file
106
boards/default_src/micropython/origin/build/lib/ltr553als.py
Normal file
@@ -0,0 +1,106 @@
|
||||
"""
|
||||
LTR-553ALS-XX
|
||||
|
||||
MicroPython library for the LTR-553ALS-XX(ALS,PS)
|
||||
=======================================================
|
||||
|
||||
#Preliminary composition 20220224
|
||||
#Format unified 20220623
|
||||
|
||||
dahanzimin From the Mixly Team
|
||||
"""
|
||||
|
||||
import time
|
||||
from micropython import const
|
||||
|
||||
LTR_553ALS_ADDRESS = const(0x23)
|
||||
LTR_ALS_REG_CONTR = const(0x80)
|
||||
LTR_PS_REG_CONTR = const(0x81)
|
||||
LTR_PS_REG_LED = const(0x82)
|
||||
LTR_PS_REG_PULSES = const(0x83)
|
||||
LTR_PS_REG_RATE = const(0x84)
|
||||
LTR_ALS_REG_RATE = const(0x85)
|
||||
LTR_553ALS_REG_ID = const(0x87)
|
||||
LTR_ALS_REG_DATA1 = const(0x88)
|
||||
LTR_553ALS_REG_ATATUS = const(0x8C)
|
||||
LTR_PS_REG_DATA1 = const(0x8D)
|
||||
|
||||
_ALS_GAIN={
|
||||
"X1":(1,0x01), # For Gain X1
|
||||
"X2":(2,0x05), # For Gain X2
|
||||
"X4":(4,0x09), # For Gain X4
|
||||
"X8":(8,0x0D), # For Gain X8
|
||||
"X48":(48,0x19), # For Gain X48
|
||||
"X96":(96,0x1D), # For Gain X96
|
||||
}
|
||||
|
||||
class LTR_553ALS:
|
||||
|
||||
def __init__(self, i2c_bus,addr=LTR_553ALS_ADDRESS,ALS_Gain="X1"):
|
||||
self._device = i2c_bus
|
||||
self._address = addr
|
||||
self.ALS_IR = 0
|
||||
self.ALS_VIS = 0
|
||||
self.PS = 0
|
||||
self.ALS_gain = ALS_Gain
|
||||
|
||||
if self._chip_id() != 0x05:
|
||||
raise AttributeError("Cannot find a LTR_553ALS")
|
||||
|
||||
self._configure()
|
||||
#time.sleep(0.1)
|
||||
|
||||
def _wreg(self, reg, val):
|
||||
'''Write memory address'''
|
||||
self._device.writeto_mem(self._address,reg,val.to_bytes(1, 'little'))
|
||||
|
||||
def _rreg(self, reg,nbytes=1):
|
||||
'''Read memory address'''
|
||||
return self._device.readfrom_mem(self._address, reg, nbytes)[0] if nbytes<=1 else self._device.readfrom_mem(self._address, reg, nbytes)[0:nbytes]
|
||||
|
||||
def _chip_id(self):
|
||||
'''校对设备ID'''
|
||||
return self._rreg(LTR_553ALS_REG_ID)
|
||||
|
||||
def _configure(self):
|
||||
'''配置寄存器'''
|
||||
self._wreg(LTR_ALS_REG_CONTR,_ALS_GAIN[self.ALS_gain][1]) # ALS_CONTR: Active mode
|
||||
self._wreg(LTR_PS_REG_CONTR,0x03) # PS_CONTR: Active mode
|
||||
self._wreg(LTR_PS_REG_LED,0x5B) #PS_LED: LED_pulse_period=50khz,DUTY = 100%,LED_pulsed_current_level = 50mA
|
||||
self._wreg(LTR_PS_REG_PULSES,0x0A) #PS_N_Pulses: Number_of_pulses = 10
|
||||
self._wreg(LTR_PS_REG_RATE,0x08) #PS_Measurement_Rate=10ms
|
||||
self._wreg(LTR_ALS_REG_RATE,0x12) #ALS_Measurement_Rate=200ms,ALS_integration_time=200ms
|
||||
|
||||
def _status(self):
|
||||
'''数据转换状态'''
|
||||
status=self._rreg(LTR_553ALS_REG_ATATUS)
|
||||
return status&0x84, status&0x01 #ALS,PS status
|
||||
|
||||
@property
|
||||
def getdata(self):
|
||||
'''处理获取数据'''
|
||||
if self._status()[0]:
|
||||
data_als=self._rreg(LTR_ALS_REG_DATA1,4)
|
||||
als_ch1=data_als[0] | data_als[1]<<8
|
||||
als_ch0=data_als[2] | data_als[3]<<8
|
||||
ratio=als_ch1/(als_ch1+als_ch0) if (als_ch1+als_ch0)>0 else 0
|
||||
self.ALS_IR =als_ch1*ratio/_ALS_GAIN[self.ALS_gain][0]
|
||||
self.ALS_VIS=als_ch0*ratio/_ALS_GAIN[self.ALS_gain][0]
|
||||
|
||||
if self._status()[1]:
|
||||
data_ps=self._rreg(LTR_PS_REG_DATA1,2)
|
||||
self.PS =data_ps[0] | data_ps[1]<<8
|
||||
|
||||
return round(self.ALS_VIS,2),round(self.ALS_IR,2),self.PS
|
||||
|
||||
def als_vis(self):
|
||||
'''可见光Lux'''
|
||||
return self.getdata[0]
|
||||
|
||||
def als_ir(self):
|
||||
'''红外Lux'''
|
||||
return self.getdata[1]
|
||||
|
||||
def ps_nl(self):
|
||||
'''接近距离'''
|
||||
return self.getdata[2]
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user