Files
mixly3/boards/default_src/micropython_nrf51822_mithoncc/generators/mithon.js
2024-07-19 10:16:00 +08:00

223 lines
11 KiB
JavaScript

export const microbit_image_create = function (block, generator) {
generator.definitions_['import_microbit_*'] = 'from microbit import *';
var colours = {
"#000000": "0",
"#004400": "1",
"#006600": "2",
"#008800": "3",
"#00aa00": "4",
"#00bb00": "5",
"#00cc00": "6",
"#00dd00": "7",
"#00ee00": "8",
"#00ff00": "9"
}
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_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_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_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_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 code = 'Image("' + colour_00 + colour_01 + colour_02 + colour_03 + colour_04 + ':' + colour_10 + colour_11 + colour_12 + colour_13 + colour_14 + ':' + colour_20 + colour_21 + colour_22 + colour_23 + colour_24 + ':' + colour_30 + colour_31 + colour_32 + colour_33 + colour_34 + ':' + colour_40 + colour_41 + colour_42 + colour_43 + colour_44 + '")';
return [code, generator.ORDER_ATOMIC];
}
export const base_loop = function (block, generator) {
//var b = "UNTIL" == a.getFieldValue("MODE"),
//var c = generator.valueToCode(a, "BOOL", b ? generator.ORDER_LOGICAL_NOT : generator.ORDER_NONE) || "False",
var d = generator.statementToCode(block, "DO"),
d = generator.addLoopTrap(d, block.id) || generator.PASS;
generator.loops_['base_loop'] = d;
return "";
}
export const actuator_rgb_color = function (_, generator) {
var value_led = this.getFieldValue('LED');
var values = this.getFieldValue('COLOR').split(",");
var value_rvalue = values[0];
var value_gvalue = values[1];
var value_bvalue = values[2];
generator.definitions_['import_microbit_*'] = 'from microbit import *';
generator.definitions_['import_neopixel'] = 'import neopixel';
generator.definitions_['import_rgb_show'] = 'import rgb_show';
//generator.setups_['mixly_rgb_init'] = 'np = neopixel.NeoPixel(pin12, 4)\n';
if (value_led > 0) {
//generator.setups_['mixly_rgb_show'] = generator.FUNCTION_MIXLY_RGB_SHOW;
var code = 'rgb_show.mixly_rgb_show(' + (value_led - 1) + ', ' + value_rvalue + ', ' + value_gvalue + ', ' + value_bvalue + ')\n';
}
else {
//generator.setups_['mixly_rgb_show_all'] = generator.FUNCTION_MIXLY_RGB_SHOW_ALL;
var code = 'rgb_show.mixly_rgb_show_all(' + value_rvalue + ', ' + value_gvalue + ', ' + value_bvalue + ')\n';
}
return code;
}
export const actuator_rgb_off = function (_, generator) {
var value_led = this.getFieldValue('LED');
var value_rvalue = 0;
var value_gvalue = 0;
var value_bvalue = 0;
generator.definitions_['import_microbit_*'] = 'from microbit import *';
generator.definitions_['import_neopixel'] = 'import neopixel';
generator.definitions_['import_rgb_show'] = 'import rgb_show';
//generator.setups_['mixly_rgb_init'] = 'np = neopixel.NeoPixel(pin12, 4)\n';
if (value_led > 0) {
//generator.setups_['mixly_rgb_show'] = generator.FUNCTION_MIXLY_RGB_SHOW;
var code = 'rgb_show.mixly_rgb_show(' + (value_led - 1) + ', ' + value_rvalue + ', ' + value_gvalue + ', ' + value_bvalue + ')\n';
} else {
//generator.setups_['mixly_rgb_show_all'] = generator.FUNCTION_MIXLY_RGB_SHOW_ALL;
var code = 'rgb_show.mixly_rgb_show_all(' + value_rvalue + ', ' + value_gvalue + ', ' + value_bvalue + ')\n';
}
return code;
}
export const actuator_rgb = function (_, generator) {
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);
generator.definitions_['import_microbit_*'] = 'from microbit import *';
generator.definitions_['import_neopixel'] = 'import neopixel';
generator.definitions_['import_rgb_show'] = 'import rgb_show';
//generator.setups_['mixly_rgb_init'] = 'np = neopixel.NeoPixel(pin12, 4)\n';
//generator.setups_['mixly_rgb_show'] = generator.FUNCTION_MIXLY_RGB_SHOW;
var code = 'rgb_show.mixly_rgb_show(' + value_led + ', ' + value_rvalue + ', ' + value_gvalue + ', ' + value_bvalue + ')\n';
return code;
}
export const actuator_motor_on = function (_, generator) {
var n = this.getFieldValue('NUMBER');
var v = generator.valueToCode(this, 'SPEED', generator.ORDER_ATOMIC);
var d = this.getFieldValue('DIRECTION');
generator.definitions_['import_microbit_*'] = 'from microbit import *';
generator.definitions_['import_motor_control'] = 'import motor_control';
if (n == 0) {
//generator.setups_['mixly_motor1'] = generator.FUNCTION_MIXLY_MOTOR1;
//generator.setups_['mixly_motor2'] = generator.FUNCTION_MIXLY_MOTOR2;
//generator.setups_['mixly_motor3'] = generator.FUNCTION_MIXLY_MOTOR3;
var code = 'motor_control.motor1(' + v + ', ' + d + ')\nmotor_control.motor2(' + v + ', ' + d + ')\nmotor_control.motor3(' + v + ', ' + d + ')\n';
}
else if (n == 1) {
//generator.setups_['mixly_motor1'] = generator.FUNCTION_MIXLY_MOTOR1;
var code = 'motor_control.motor1(' + v + ', ' + d + ')\n';
}
else if (n == 2) {
//generator.setups_['mixly_motor2'] = generator.FUNCTION_MIXLY_MOTOR2;
var code = 'motor_control.motor2(' + v + ', ' + d + ')\n';
}
else if (n == 3) {
//generator.setups_['mixly_motor3'] = generator.FUNCTION_MIXLY_MOTOR3;
var code = 'motor_control.motor3(' + v + ', ' + d + ')\n';
}
return code;
}
export const actuator_motor_off = function (_, generator) {
var n = this.getFieldValue('NUMBER');
generator.definitions_['import_microbit_*'] = 'from microbit import *';
generator.definitions_['import_motor_control'] = 'import motor_control';
if (n == 0) {
//generator.setups_['mixly_motor1'] = generator.FUNCTION_MIXLY_MOTOR1;
//generator.setups_['mixly_motor2'] = generator.FUNCTION_MIXLY_MOTOR2;
//generator.setups_['mixly_motor3'] = generator.FUNCTION_MIXLY_MOTOR3;
var code = 'motor_control.motor1(0)\nmotor_control.motor2(0)\nmotor_control.motor3(0)\n';
}
else if (n == 1) {
//generator.setups_['mixly_motor1'] = generator.FUNCTION_MIXLY_MOTOR1;
var code = 'motor_control.motor1(0)\n';
}
else if (n == 2) {
//generator.setups_['mixly_motor2'] = generator.FUNCTION_MIXLY_MOTOR2;
var code = 'motor_control.motor2(0)\n';
}
else if (n == 3) {
//generator.setups_['mixly_motor3'] = generator.FUNCTION_MIXLY_MOTOR3;
var code = 'motor_control.motor3(0)\n';
}
return code;
}
export const sensor_pin_near = function (_, generator) {
var number = this.getFieldValue('NUMBER');
var code = 'pin' + number + '.read_analog()';
return [code, generator.ORDER_ATOMIC];
}
export const sensor_while_btn_pressed = function (block, generator) {
generator.definitions_['import_microbit_*'] = 'from microbit import *';
var btn = generator.valueToCode(this, 'btn', generator.ORDER_ATOMIC);
generator.setups_['on_' + btn] = 'def on_' + btn + '():\n' +
' while True:\n' +
' if ' + btn + '.was_pressed():\n' +
' yield callback_' + btn + '()\n' +
' else:\n' +
' yield\n' +
'\n' +
'func_' + btn + ' = on_' + btn + '()\n'
var d = generator.statementToCode(block, "DO"),
d = generator.addLoopTrap(d, block.id) || generator.PASS;
generator.loops_[btn + '_loop'] = ' next(func_' + btn + ')\n';
return "def callback_" + btn + "():\n" + d;
}
export const sensor_while_is_gesture = function (block, generator) {
generator.definitions_['import_microbit_*'] = 'from microbit import *';
var gesture = this.getFieldValue('gesture');
generator.setups_['on_' + gesture] = 'def on_gesture_' + gesture + '():\n' +
' while True:\n' +
' if accelerometer.is_gesture("' + gesture + '"):\n' +
' yield callback_gesture_' + gesture + '()\n' +
' else:\n' +
' yield\n' +
'\n' +
'func_gesture_' + gesture + ' = on_gesture_' + gesture + '()\n'
var d = generator.statementToCode(block, "DO"),
d = generator.addLoopTrap(d, block.id) || generator.PASS;
generator.loops_[gesture + '_loop'] = ' next(func_gesture_' + gesture + ')\n';
return "def callback_gesture_" + gesture + '():\n' + d;
}
export const sensor_while_is_near = function (block, generator) {
generator.definitions_['import_microbit_*'] = 'from microbit import *';
var near = this.getFieldValue('near');
generator.setups_['on_' + near] = 'def on_near_' + near + '():\n' +
' while True:\n' +
' if not pin' + near + '.read_digital():\n' +
' yield callback_near_' + near + '()\n' +
' else:\n' +
' yield\n' +
'\n' +
'func_near_' + near + ' = on_near_' + near + '()\n'
var d = generator.statementToCode(block, "DO"),
d = generator.addLoopTrap(d, block.id) || generator.PASS;
generator.loops_[near + '_loop'] = ' next(func_near_' + near + ')\n';
return "def callback_near_" + near + '():\n' + d;
}
export const controls_repeat_ext = function (block, generator) {
generator.definitions_['import_microbit_*'] = 'from microbit import *';
var times = generator.valueToCode(this, 'TIMES', generator.ORDER_ATOMIC);
var d = generator.statementToCode(block, "DO"),
d = generator.addLoopTrap(d, block.id) || generator.PASS;
return 'for _my_variable in range(' + times + '):\n' + d;
}