add map block
This commit is contained in:
parent
ef80f15782
commit
6678afbdff
@ -8,6 +8,7 @@ import './sensebox-web';
|
|||||||
import './sensebox-display';
|
import './sensebox-display';
|
||||||
import './io';
|
import './io';
|
||||||
import './math';
|
import './math';
|
||||||
|
import './map';
|
||||||
import './procedures';
|
import './procedures';
|
||||||
import './time';
|
import './time';
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
|
|
||||||
import Blockly from 'blockly';
|
import Blockly from 'blockly';
|
||||||
|
import { getColour } from '../helpers/colour';
|
||||||
|
|
||||||
Blockly.defineBlocksWithJsonArray([
|
Blockly.defineBlocksWithJsonArray([
|
||||||
{
|
{
|
||||||
@ -44,6 +45,7 @@ Blockly.defineBlocksWithJsonArray([
|
|||||||
inputsInline: false,
|
inputsInline: false,
|
||||||
previousStatement: null,
|
previousStatement: null,
|
||||||
nextStatement: null,
|
nextStatement: null,
|
||||||
|
colour: getColour().loops,
|
||||||
helpUrl: '%{BKY_CONTROLS_FOR_HELPURL}',
|
helpUrl: '%{BKY_CONTROLS_FOR_HELPURL}',
|
||||||
extensions: ['contextMenu_newGetVariableBlock', 'controls_for_tooltip'],
|
extensions: ['contextMenu_newGetVariableBlock', 'controls_for_tooltip'],
|
||||||
},
|
},
|
||||||
|
50
src/components/Blockly/blocks/map.js
Normal file
50
src/components/Blockly/blocks/map.js
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
/**
|
||||||
|
* @license Licensed under the Apache License, Version 2.0 (the "License"):
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @fileoverview Block for the Arduino map functionality.
|
||||||
|
* The Arduino built in functions syntax can be found at:
|
||||||
|
* http://arduino.cc/en/Reference/HomePage
|
||||||
|
*
|
||||||
|
* TODO: This block can be improved to set the new range properly.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
import * as Blockly from 'blockly/core';
|
||||||
|
import { getColour } from '../helpers/colour';
|
||||||
|
import * as Types from '../helpers/types'
|
||||||
|
|
||||||
|
Blockly.Blocks['base_map'] = {
|
||||||
|
/**
|
||||||
|
* Block for creating a the map function.
|
||||||
|
* @this Blockly.Block
|
||||||
|
*/
|
||||||
|
init: function () {
|
||||||
|
this.setHelpUrl('http://arduino.cc/en/Reference/map');
|
||||||
|
this.setColour(getColour().math);
|
||||||
|
this.appendValueInput('NUM')
|
||||||
|
.appendField(Blockly.Msg.ARD_MAP)
|
||||||
|
.setCheck(Types.NUMBER.compatibleTypes);
|
||||||
|
this.appendValueInput('FMIN')
|
||||||
|
.appendField(Blockly.Msg.ARD_MAP_FROMMIN)
|
||||||
|
.setCheck(Types.NUMBER.compatibleTypes);
|
||||||
|
this.appendValueInput('FMAX')
|
||||||
|
.appendField(Blockly.Msg.ARD_MAP_FROMMAX)
|
||||||
|
.setCheck(Types.NUMBER.compatibleTypes);
|
||||||
|
this.appendValueInput('DMIN')
|
||||||
|
.appendField(Blockly.Msg.ARD_MAP_TOMIN)
|
||||||
|
.setCheck(Types.NUMBER.compatibleTypes);
|
||||||
|
this.appendValueInput('DMAX')
|
||||||
|
.appendField(Blockly.Msg.ARD_MAP_TOMAX)
|
||||||
|
.setCheck(Types.NUMBER.compatibleTypes);
|
||||||
|
this.setOutput(true);
|
||||||
|
this.setInputsInline(false);
|
||||||
|
this.setTooltip(Blockly.Msg.ARD_MAP_TIP);
|
||||||
|
},
|
||||||
|
/** @return {string} The type of return value for the block, an integer. */
|
||||||
|
getBlockType: function () {
|
||||||
|
return Types.NUMBER.typeId;
|
||||||
|
}
|
||||||
|
};
|
@ -4,8 +4,10 @@ import './sensebox-sensors';
|
|||||||
import './sensebox-telegram';
|
import './sensebox-telegram';
|
||||||
import './sensebox-osem';
|
import './sensebox-osem';
|
||||||
import './sensebox-web';
|
import './sensebox-web';
|
||||||
|
import './sensebox-display';
|
||||||
import './logic';
|
import './logic';
|
||||||
import './math';
|
import './math';
|
||||||
|
import './map';
|
||||||
import './io';
|
import './io';
|
||||||
import './procedures';
|
import './procedures';
|
||||||
import './time';
|
import './time';
|
||||||
|
24
src/components/Blockly/generator/map.js
Normal file
24
src/components/Blockly/generator/map.js
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
import * as Blockly from 'blockly/core';
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Code generator for the map block.
|
||||||
|
* Arduino code: loop { map(x, 0, 1024, 0, y) }
|
||||||
|
* @param {!Blockly.Block} block Block to generate the code from.
|
||||||
|
* @return {array} Completed code with order of operation.
|
||||||
|
*/
|
||||||
|
Blockly.Arduino['base_map'] = function (block) {
|
||||||
|
var valueNum = Blockly.Arduino.valueToCode(
|
||||||
|
block, 'NUM', Blockly.Arduino.ORDER_NONE) || '0';
|
||||||
|
var fromMin = Blockly.Arduino.valueToCode(
|
||||||
|
block, 'FMIN', Blockly.Arduino.ORDER_ATOMIC) || '0';
|
||||||
|
var fromMax = Blockly.Arduino.valueToCode(
|
||||||
|
block, 'FMAX', Blockly.Arduino.ORDER_ATOMIC) || '0';
|
||||||
|
var valueDmin = Blockly.Arduino.valueToCode(
|
||||||
|
block, 'DMIN', Blockly.Arduino.ORDER_ATOMIC) || '0';
|
||||||
|
var valueDmax = Blockly.Arduino.valueToCode(
|
||||||
|
block, 'DMAX', Blockly.Arduino.ORDER_ATOMIC) || '0';
|
||||||
|
|
||||||
|
var code = 'map(' + valueNum + ',' + fromMin + ',' + fromMax + ',' + valueDmin + ',' + valueDmax + ')';
|
||||||
|
return [code, Blockly.Arduino.ORDER_NONE];
|
||||||
|
};
|
@ -61,30 +61,32 @@ Blockly.Arduino.sensebox_display_plotDisplay = function () {
|
|||||||
};
|
};
|
||||||
|
|
||||||
Blockly.Arduino.sensebox_display_fillCircle = function () {
|
Blockly.Arduino.sensebox_display_fillCircle = function () {
|
||||||
|
let code = '';
|
||||||
var x = Blockly.Arduino.valueToCode(this, 'X', Blockly.Arduino.ORDER_ATOMIC) || '0'
|
var x = Blockly.Arduino.valueToCode(this, 'X', Blockly.Arduino.ORDER_ATOMIC) || '0'
|
||||||
var y = Blockly.Arduino.valueToCode(this, 'Y', Blockly.Arduino.ORDER_ATOMIC) || '0'
|
var y = Blockly.Arduino.valueToCode(this, 'Y', Blockly.Arduino.ORDER_ATOMIC) || '0'
|
||||||
var radius = Blockly.Arduino.valueToCode(this, 'Radius', Blockly.Arduino.ORDER_ATOMIC) || '0'
|
var radius = Blockly.Arduino.valueToCode(this, 'Radius', Blockly.Arduino.ORDER_ATOMIC) || '0'
|
||||||
var fill = this.getFieldValue('FILL');
|
var fill = this.getFieldValue('FILL');
|
||||||
if (fill == 'TRUE') {
|
if (fill === 'TRUE') {
|
||||||
var code = 'display.fillCircle(' + x + ',' + y + ',' + radius + ',1);\n';
|
code = 'display.fillCircle(' + x + ',' + y + ',' + radius + ',1);\n';
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
var code = 'display.drawCircle(' + x + ',' + y + ',' + radius + ',1);\n';
|
code = 'display.drawCircle(' + x + ',' + y + ',' + radius + ',1);\n';
|
||||||
}
|
}
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
Blockly.Arduino.sensebox_display_drawRectangle = function () {
|
Blockly.Arduino.sensebox_display_drawRectangle = function () {
|
||||||
|
let code = '';
|
||||||
var x = Blockly.Arduino.valueToCode(this, 'X', Blockly.Arduino.ORDER_ATOMIC) || '0'
|
var x = Blockly.Arduino.valueToCode(this, 'X', Blockly.Arduino.ORDER_ATOMIC) || '0'
|
||||||
var y = Blockly.Arduino.valueToCode(this, 'Y', Blockly.Arduino.ORDER_ATOMIC) || '0'
|
var y = Blockly.Arduino.valueToCode(this, 'Y', Blockly.Arduino.ORDER_ATOMIC) || '0'
|
||||||
var width = Blockly.Arduino.valueToCode(this, 'width', Blockly.Arduino.ORDER_ATOMIC) || '0'
|
var width = Blockly.Arduino.valueToCode(this, 'width', Blockly.Arduino.ORDER_ATOMIC) || '0'
|
||||||
var height = Blockly.Arduino.valueToCode(this, 'height', Blockly.Arduino.ORDER_ATOMIC) || '0'
|
var height = Blockly.Arduino.valueToCode(this, 'height', Blockly.Arduino.ORDER_ATOMIC) || '0'
|
||||||
var fill = this.getFieldValue('FILL');
|
var fill = this.getFieldValue('FILL');
|
||||||
if (fill == 'TRUE') {
|
if (fill === 'TRUE') {
|
||||||
var code = 'display.fillRect(' + x + ',' + y + ',' + width + ',' + height + ',1);\n';
|
code = 'display.fillRect(' + x + ',' + y + ',' + width + ',' + height + ',1);\n';
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
var code = 'display.drawRect(' + x + ',' + y + ',' + width + ',' + height + ',1);\n';
|
code = 'display.drawRect(' + x + ',' + y + ',' + width + ',' + height + ',1);\n';
|
||||||
}
|
}
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
@ -240,7 +240,7 @@ class Toolbox extends React.Component {
|
|||||||
</Value>
|
</Value>
|
||||||
</Block>
|
</Block>
|
||||||
<Block type="math_random_float"></Block>
|
<Block type="math_random_float"></Block>
|
||||||
{/* <Block type="base_map"></Block> */}
|
<Block type="base_map"></Block>
|
||||||
</Category>
|
</Category>
|
||||||
<sep></sep>
|
<sep></sep>
|
||||||
<Category name="Input/Output" colour={getColour().io}>
|
<Category name="Input/Output" colour={getColour().io}>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user