Files
mixly3/boards/default_src/micropython/converters/sensor.js
2024-07-19 10:16:00 +08:00

735 lines
24 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
'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"
});
}