258 lines
8.4 KiB
JavaScript
258 lines
8.4 KiB
JavaScript
/**
|
|
* @license Licensed under the Apache License, Version 2.0 (the "License"):
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*/
|
|
|
|
/**
|
|
* @fileoverview Blocks for Arduino Digital and Analogue input and output
|
|
* functions. The Arduino function syntax can be found at
|
|
* http://arduino.cc/en/Reference/HomePage
|
|
*
|
|
* TODO: maybe change this to a "PIN" BlocklyType
|
|
*/
|
|
import Blockly from 'blockly/core';
|
|
import { selectedBoard } from '../helpers/board'
|
|
import * as Types from '../helpers/types'
|
|
|
|
|
|
Blockly.Blocks['io_digitalwrite'] = {
|
|
/**
|
|
* Block for creating a 'set pin' to a state.
|
|
* @this Blockly.Block
|
|
*/
|
|
init: function () {
|
|
this.setHelpUrl('http://arduino.cc/en/Reference/DigitalWrite');
|
|
this.setColour(250);
|
|
this.appendValueInput('STATE')
|
|
.appendField(Blockly.Msg.ARD_DIGITALWRITE)
|
|
.appendField(new Blockly.FieldDropdown(
|
|
selectedBoard().digitalPins), 'PIN')
|
|
.appendField(Blockly.Msg.ARD_WRITE_TO)
|
|
.setCheck(Types.BOOLEAN.checkList);
|
|
this.setInputsInline(false);
|
|
this.setPreviousStatement(true, null);
|
|
this.setNextStatement(true, null);
|
|
this.setTooltip(Blockly.Msg.ARD_DIGITALWRITE_TIP);
|
|
},
|
|
/**
|
|
* Updates the content of the the pin related fields.
|
|
* @this Blockly.Block
|
|
*/
|
|
updateFields: function () {
|
|
Blockly.Arduino.Boards.refreshBlockFieldDropdown(
|
|
this, 'PIN', 'digitalPins');
|
|
}
|
|
};
|
|
|
|
Blockly.Blocks['io_digitalread'] = {
|
|
/**
|
|
* Block for creating a 'read pin'.
|
|
* @this Blockly.Block
|
|
*/
|
|
init: function () {
|
|
this.setHelpUrl('http://arduino.cc/en/Reference/DigitalRead');
|
|
this.setColour(250);
|
|
this.appendDummyInput()
|
|
.appendField(Blockly.Msg.ARD_DIGITALREAD)
|
|
.appendField(new Blockly.FieldDropdown(
|
|
selectedBoard().digitalPins), 'PIN');
|
|
this.setOutput(true, 'boolean');
|
|
this.setTooltip(Blockly.Msg.ARD_DIGITALREAD_TIP);
|
|
},
|
|
/** @return {!string} The type of return value for the block, an integer. */
|
|
getBlockType: function () {
|
|
return Types.BOOLEAN;
|
|
},
|
|
/**
|
|
* Updates the content of the the pin related fields.
|
|
* @this Blockly.Block
|
|
*/
|
|
updateFields: function () {
|
|
Blockly.Arduino.Boards.refreshBlockFieldDropdown(
|
|
this, 'PIN', 'digitalPins');
|
|
}
|
|
};
|
|
|
|
Blockly.Blocks['io_builtin_led'] = {
|
|
/**
|
|
* Block for setting built-in LED to a state.
|
|
* @this Blockly.Block
|
|
*/
|
|
init: function () {
|
|
this.setHelpUrl('http://arduino.cc/en/Reference/DigitalWrite');
|
|
this.setColour(250);
|
|
this.appendValueInput('STATE')
|
|
.appendField(Blockly.Msg.ARD_BUILTIN_LED)
|
|
.appendField(new Blockly.FieldDropdown(
|
|
selectedBoard().builtinLed), 'BUILT_IN_LED')
|
|
.appendField(Blockly.Msg.ARD_WRITE_TO)
|
|
.setCheck(Types.BOOLEAN.compatibleTypes);
|
|
this.setInputsInline(false);
|
|
this.setPreviousStatement(true, null);
|
|
this.setNextStatement(true, null);
|
|
this.setTooltip(Blockly.Msg.ARD_BUILTIN_LED_TIP);
|
|
},
|
|
/**
|
|
* Updates the content of the the pin related fields.
|
|
* @this Blockly.Block
|
|
*/
|
|
updateFields: function () {
|
|
Blockly.Arduino.Boards.refreshBlockFieldDropdown(
|
|
this, 'BUILT_IN_LED', 'builtinLed');
|
|
},
|
|
/** @return {!string} The type of input value for the block, an integer. */
|
|
getBlockType: function () {
|
|
return Types.BOOLEAN;
|
|
},
|
|
};
|
|
|
|
Blockly.Blocks['io_analogwrite'] = {
|
|
/**
|
|
* Block for creating a 'set pin' to an analogue value.
|
|
* @this Blockly.Block
|
|
*/
|
|
init: function () {
|
|
this.setHelpUrl('http://arduino.cc/en/Reference/AnalogWrite');
|
|
this.setColour(250);
|
|
this.appendValueInput('NUM')
|
|
.appendField(Blockly.Msg.ARD_ANALOGWRITE)
|
|
.appendField(new Blockly.FieldDropdown(
|
|
selectedBoard().pwmPins), 'PIN')
|
|
.appendField(Blockly.Msg.ARD_WRITE_TO)
|
|
.setCheck(Types.NUMBER.compatibleTypes);
|
|
this.setInputsInline(false);
|
|
this.setPreviousStatement(true, null);
|
|
this.setNextStatement(true, null);
|
|
this.setTooltip(Blockly.Msg.ARD_ANALOGWRITE_TIP);
|
|
},
|
|
/**
|
|
* Updates the content of the the pin related fields.
|
|
* @this Blockly.Block
|
|
*/
|
|
updateFields: function () {
|
|
Blockly.Arduino.Boards.refreshBlockFieldDropdown(this, 'PIN', 'pwmPins');
|
|
},
|
|
/** @return {!string} The type of input value for the block, an integer. */
|
|
getBlockType: function () {
|
|
return Types.NUMBER;
|
|
},
|
|
};
|
|
|
|
Blockly.Blocks['io_analogread'] = {
|
|
/**
|
|
* Block for reading an analogue input.
|
|
* @this Blockly.Block
|
|
*/
|
|
init: function () {
|
|
this.setHelpUrl('http://arduino.cc/en/Reference/AnalogRead');
|
|
this.setColour(250);
|
|
this.appendDummyInput()
|
|
.appendField(Blockly.Msg.ARD_ANALOGREAD)
|
|
.appendField(new Blockly.FieldDropdown(
|
|
selectedBoard().analogPins), 'PIN');
|
|
this.setOutput(true, Types.NUMBER.typeId);
|
|
this.setTooltip(Blockly.Msg.ARD_ANALOGREAD_TIP);
|
|
},
|
|
/** @return {!string} The type of return value for the block, an integer. */
|
|
getBlockType: function () {
|
|
return Types.NUMBER.typeId;
|
|
},
|
|
/**
|
|
* Updates the content of the the pin related fields.
|
|
* @this Blockly.Block
|
|
*/
|
|
updateFields: function () {
|
|
Blockly.Arduino.Boards.refreshBlockFieldDropdown(this, 'PIN', 'analogPins');
|
|
}
|
|
};
|
|
|
|
Blockly.Blocks['io_highlow'] = {
|
|
/**
|
|
* Block for creating a pin state.
|
|
* @this Blockly.Block
|
|
*/
|
|
init: function () {
|
|
this.setHelpUrl('http://arduino.cc/en/Reference/Constants');
|
|
this.setColour(250);
|
|
this.appendDummyInput()
|
|
.appendField(
|
|
new Blockly.FieldDropdown([[Blockly.Msg.ARD_HIGH, 'HIGH'], [Blockly.Msg.ARD_LOW, 'LOW']]),
|
|
'STATE');
|
|
this.setOutput(true, Types.BOOLEAN.typeId);
|
|
this.setTooltip(Blockly.Msg.ARD_HIGHLOW_TIP);
|
|
},
|
|
/** @return {!string} The type of return value for the block, an integer. */
|
|
getBlockType: function () {
|
|
return Types.BOOLEAN;
|
|
}
|
|
};
|
|
|
|
Blockly.Blocks['io_pulsein'] = {
|
|
/**
|
|
* Block for measuring the duration of a pulse in an input pin.
|
|
* @this Blockly.Block
|
|
*/
|
|
init: function () {
|
|
this.jsonInit({
|
|
"type": "math_foo",
|
|
"message0": Blockly.Msg.ARD_PULSE_READ,
|
|
"args0": [{
|
|
"type": "input_value",
|
|
"name": "PULSETYPE",
|
|
"check": Types.BOOLEAN.compatibleTypes
|
|
}, {
|
|
"type": "field_dropdown",
|
|
"name": "PULSEPIN",
|
|
"options": selectedBoard().digitalPins,
|
|
}
|
|
],
|
|
"output": Types.NUMBER.typeId,
|
|
"inputsInline": true,
|
|
"colour": 250,
|
|
"tooltip": Blockly.Msg.ARD_PULSE_TIP,
|
|
"helpUrl": 'https://www.arduino.cc/en/Reference/PulseIn'
|
|
});
|
|
},
|
|
/** @return {!string} The type of input value for the block, an integer. */
|
|
getBlockType: function () {
|
|
return Types.NUMBER.typeId;
|
|
}
|
|
};
|
|
|
|
Blockly.Blocks['io_pulsetimeout'] = {
|
|
/**
|
|
* Block for measuring (with a time-out) the duration of a pulse in an input
|
|
* pin.
|
|
* @this Blockly.Block
|
|
*/
|
|
init: function () {
|
|
this.jsonInit({
|
|
"type": "math_foo",
|
|
"message0": Blockly.Msg.ARD_PULSE_READ_TIMEOUT,
|
|
"args0": [{
|
|
"type": "input_value",
|
|
"name": "PULSETYPE",
|
|
"check": Types.BOOLEAN.compatibleTypes
|
|
}, {
|
|
"type": "field_dropdown",
|
|
"name": "PULSEPIN",
|
|
"options": selectedBoard().digitalPins,
|
|
}, {
|
|
"type": "input_value",
|
|
"name": "TIMEOUT",
|
|
"check": Types.NUMBER.compatibleTypes
|
|
}
|
|
],
|
|
"output": Types.NUMBER.typeId,
|
|
"inputsInline": true,
|
|
"colour": 250,
|
|
"tooltip": Blockly.Msg.ARD_PULSETIMEOUT_TIP,
|
|
"helpUrl": 'https://www.arduino.cc/en/Reference/PulseIn'
|
|
});
|
|
},
|
|
/** @return {!string} The type of input value for the block, an integer. */
|
|
getBlockType: function () {
|
|
return Types.NUMBER.typeId;
|
|
}
|
|
};
|