From 4fc0f14aedf91023b11ffd76f41d9783b5e687be Mon Sep 17 00:00:00 2001 From: Mario Date: Fri, 2 Oct 2020 14:30:24 +0200 Subject: [PATCH] add block for the button --- src/components/Blockly/BlocklyWindow.js | 4 +- .../Blockly/blocks/sensebox-sensors.js | 19 ++ .../Blockly/generator/sensebox-sensors.js | 242 ++++++++++-------- src/components/Blockly/toolbox/Toolbox.js | 1 + 4 files changed, 156 insertions(+), 110 deletions(-) diff --git a/src/components/Blockly/BlocklyWindow.js b/src/components/Blockly/BlocklyWindow.js index 3a4b97d..15ec6d1 100644 --- a/src/components/Blockly/BlocklyWindow.js +++ b/src/components/Blockly/BlocklyWindow.js @@ -55,11 +55,11 @@ class BlocklyWindow extends Component { style={this.props.svg ? { height: 0 } : this.props.blocklyCSS} readOnly={this.props.readOnly !== undefined ? this.props.readOnly : false} trashcan={this.props.trashcan !== undefined ? this.props.trashcan : true} - renderer='zelos' + renderer='geras' zoom={{ // https://developers.google.com/blockly/guides/configure/web/zoom controls: this.props.zoomControls !== undefined ? this.props.zoomControls : true, wheel: false, - startScale: 0.8, + startScale: 1, maxScale: 3, minScale: 0.3, scaleSpeed: 1.2 diff --git a/src/components/Blockly/blocks/sensebox-sensors.js b/src/components/Blockly/blocks/sensebox-sensors.js index 905421c..2798249 100644 --- a/src/components/Blockly/blocks/sensebox-sensors.js +++ b/src/components/Blockly/blocks/sensebox-sensors.js @@ -280,5 +280,24 @@ Blockly.Blocks['sensebox_sensor_sound'] = { }; +/** + * Button + * + * + */ + +Blockly.Blocks['sensebox_button'] = { + init: function () { + this.appendDummyInput() + .appendField(Blockly.Msg.senseBox_button) + .appendField(new Blockly.FieldDropdown([[Blockly.Msg.senseBox_button_isPressed, "isPressed"], [Blockly.Msg.senseBox_button_wasPressed, "wasPressed"], [Blockly.Msg.senseBox_button_switch, "Switch"]]), "FUNCTION") + .appendField("Pin:") + .appendField(new Blockly.FieldDropdown(selectedBoard().digitalPinsButton), "PIN"); + this.setOutput(true, Types.BOOLEAN.typeName); + this.setColour(getColour().sensebox); + this.setTooltip(Blockly.Msg.senseBox_button_tip); + this.setHelpUrl('https://sensebox.de/books'); + } +}; diff --git a/src/components/Blockly/generator/sensebox-sensors.js b/src/components/Blockly/generator/sensebox-sensors.js index 655ecc6..ed8bfe3 100644 --- a/src/components/Blockly/generator/sensebox-sensors.js +++ b/src/components/Blockly/generator/sensebox-sensors.js @@ -6,12 +6,12 @@ import Blockly from 'blockly'; */ Blockly.Arduino.sensebox_sensor_temp_hum = function () { - var dropdown_name = this.getFieldValue('NAME'); - Blockly.Arduino.libraries_['library_senseBoxMCU'] = '#include "SenseBoxMCU.h"'; - Blockly.Arduino.definitions_['define_hdc'] = 'HDC1080 hdc;'; - Blockly.Arduino.setupCode_['sensebox_sensor_temp_hum'] = 'hdc.begin();'; - var code = 'hdc.get' + dropdown_name + '()'; - return [code, Blockly.Arduino.ORDER_ATOMIC]; + var dropdown_name = this.getFieldValue('NAME'); + Blockly.Arduino.libraries_['library_senseBoxMCU'] = '#include "SenseBoxMCU.h"'; + Blockly.Arduino.definitions_['define_hdc'] = 'HDC1080 hdc;'; + Blockly.Arduino.setupCode_['sensebox_sensor_temp_hum'] = 'hdc.begin();'; + var code = 'hdc.get' + dropdown_name + '()'; + return [code, Blockly.Arduino.ORDER_ATOMIC]; }; /** @@ -20,20 +20,20 @@ Blockly.Arduino.sensebox_sensor_temp_hum = function () { */ Blockly.Arduino.sensebox_sensor_uv_light = function () { - var dropdown_name = this.getFieldValue('NAME'); - let code = ''; - Blockly.Arduino.libraries_['library_senseBoxMCU'] = '#include "SenseBoxMCU.h"'; - if (dropdown_name === 'UvIntensity') { - Blockly.Arduino.definitions_['define_veml'] = 'VEML6070 veml;' - Blockly.Arduino.setupCode_['sensebox_sensor_uv_light'] = 'veml.begin();' - code = 'veml.get' + dropdown_name + '()'; - } - if (dropdown_name === 'Illuminance') { - Blockly.Arduino.definitions_['define_tsl'] = 'TSL45315 tsl;' - Blockly.Arduino.setupCode_['sensebox_sensor_illuminance'] = 'tsl.begin();' - code = 'tsl.get' + dropdown_name + '()'; - } - return [code, Blockly.Arduino.ORDER_ATOMIC]; + var dropdown_name = this.getFieldValue('NAME'); + let code = ''; + Blockly.Arduino.libraries_['library_senseBoxMCU'] = '#include "SenseBoxMCU.h"'; + if (dropdown_name === 'UvIntensity') { + Blockly.Arduino.definitions_['define_veml'] = 'VEML6070 veml;' + Blockly.Arduino.setupCode_['sensebox_sensor_uv_light'] = 'veml.begin();' + code = 'veml.get' + dropdown_name + '()'; + } + if (dropdown_name === 'Illuminance') { + Blockly.Arduino.definitions_['define_tsl'] = 'TSL45315 tsl;' + Blockly.Arduino.setupCode_['sensebox_sensor_illuminance'] = 'tsl.begin();' + code = 'tsl.get' + dropdown_name + '()'; + } + return [code, Blockly.Arduino.ORDER_ATOMIC]; }; @@ -43,13 +43,13 @@ Blockly.Arduino.sensebox_sensor_uv_light = function () { */ Blockly.Arduino.sensebox_sensor_bmx055_accelerometer = function () { - var dropdown_value = this.getFieldValue('VALUE'); - var range = this.getFieldValue('RANGE'); - Blockly.Arduino.libraries_['library_senseBoxMCU'] = '#include "SenseBoxMCU.h"'; - Blockly.Arduino.definitions_['define_bmx'] = 'BMX055 bmx;'; - Blockly.Arduino.setupCode_['sensebox_sensor_bmx055'] = 'bmx.beginAcc(' + range + ');'; - var code = 'bmx.getAcceleration' + dropdown_value + '()'; - return [code, Blockly.Arduino.ORDER_ATOMIC]; + var dropdown_value = this.getFieldValue('VALUE'); + var range = this.getFieldValue('RANGE'); + Blockly.Arduino.libraries_['library_senseBoxMCU'] = '#include "SenseBoxMCU.h"'; + Blockly.Arduino.definitions_['define_bmx'] = 'BMX055 bmx;'; + Blockly.Arduino.setupCode_['sensebox_sensor_bmx055'] = 'bmx.beginAcc(' + range + ');'; + var code = 'bmx.getAcceleration' + dropdown_value + '()'; + return [code, Blockly.Arduino.ORDER_ATOMIC]; }; /** @@ -58,14 +58,14 @@ Blockly.Arduino.sensebox_sensor_bmx055_accelerometer = function () { */ Blockly.Arduino.sensebox_sensor_sds011 = function () { - var dropdown_name = this.getFieldValue('NAME'); - var serial_name = this.getFieldValue('SERIAL'); - Blockly.Arduino.libraries_['library_senseBoxMCU'] = '#include "SenseBoxMCU.h"'; - Blockly.Arduino.codeFunctions_['define_sds011'] = 'SDS011 my_sds(' + serial_name + ');'; - Blockly.Arduino.variables_['variables_sds011'] = 'float p10,p25;\n'; - Blockly.Arduino.setupCode_['sensebox_sensor_sds011'] = serial_name + '.begin(9600);'; - var code = 'my_sds.get' + dropdown_name + '()'; - return [code, Blockly.Arduino.ORDER_ATOMIC]; + var dropdown_name = this.getFieldValue('NAME'); + var serial_name = this.getFieldValue('SERIAL'); + Blockly.Arduino.libraries_['library_senseBoxMCU'] = '#include "SenseBoxMCU.h"'; + Blockly.Arduino.codeFunctions_['define_sds011'] = 'SDS011 my_sds(' + serial_name + ');'; + Blockly.Arduino.variables_['variables_sds011'] = 'float p10,p25;\n'; + Blockly.Arduino.setupCode_['sensebox_sensor_sds011'] = serial_name + '.begin(9600);'; + var code = 'my_sds.get' + dropdown_name + '()'; + return [code, Blockly.Arduino.ORDER_ATOMIC]; }; /** @@ -74,19 +74,19 @@ Blockly.Arduino.sensebox_sensor_sds011 = function () { */ Blockly.Arduino.sensebox_sensor_pressure = function () { - var dropdown_name = this.getFieldValue('NAME'); - var code = ''; - var referencePressure = this.getFieldValue('referencePressure'); - Blockly.Arduino.libraries_['library_senseBoxMCU'] = '#include "SenseBoxMCU.h"'; - Blockly.Arduino.definitions_['define_pressure'] = 'BMP280 bmp_sensor;'; - Blockly.Arduino.setupCode_['sensebox_bmp_sensor'] = 'bmp_sensor.begin();'; - if (dropdown_name === 'Pressure' || dropdown_name === 'Temperature') { - code = 'bmp_sensor.get' + dropdown_name + '()'; - } - else if (dropdown_name === 'Altitude') { - code = 'bmp_sensor.getAltitude(' + referencePressure + ')'; - } - return [code, Blockly.Arduino.ORDER_ATOMIC]; + var dropdown_name = this.getFieldValue('NAME'); + var code = ''; + var referencePressure = this.getFieldValue('referencePressure'); + Blockly.Arduino.libraries_['library_senseBoxMCU'] = '#include "SenseBoxMCU.h"'; + Blockly.Arduino.definitions_['define_pressure'] = 'BMP280 bmp_sensor;'; + Blockly.Arduino.setupCode_['sensebox_bmp_sensor'] = 'bmp_sensor.begin();'; + if (dropdown_name === 'Pressure' || dropdown_name === 'Temperature') { + code = 'bmp_sensor.get' + dropdown_name + '()'; + } + else if (dropdown_name === 'Altitude') { + code = 'bmp_sensor.getAltitude(' + referencePressure + ')'; + } + return [code, Blockly.Arduino.ORDER_ATOMIC]; }; @@ -97,19 +97,19 @@ Blockly.Arduino.sensebox_sensor_pressure = function () { Blockly.Arduino.sensebox_sensor_bme680_bsec = function () { - var dropdown_name = this.getFieldValue('dropdown'); - let code = ''; - Blockly.Arduino.libraries_['library_bsec'] = '#include "bsec.h"'; - Blockly.Arduino.definitions_['bsec_iaqSensor'] = 'Bsec iaqSensor;' - Blockly.Arduino.variables_['bmeTemperatur'] = 'float bmeTemperatur;'; - Blockly.Arduino.variables_['bmeHumidity'] = 'float bmeHumidity;'; - Blockly.Arduino.variables_['bmePressure'] = 'double bmePressure;'; - Blockly.Arduino.variables_['bmeIAQ'] = 'float bmeIAQ;'; - Blockly.Arduino.variables_['bmeIAQAccuracy'] = 'float bmeIAQAccuracy;'; - Blockly.Arduino.variables_['bmeCO2'] = 'int bmeCO2;'; - Blockly.Arduino.variables_['bmeBreathVocEquivalent'] = 'float bmeBreathVocEquivalent;' + var dropdown_name = this.getFieldValue('dropdown'); + let code = ''; + Blockly.Arduino.libraries_['library_bsec'] = '#include "bsec.h"'; + Blockly.Arduino.definitions_['bsec_iaqSensor'] = 'Bsec iaqSensor;' + Blockly.Arduino.variables_['bmeTemperatur'] = 'float bmeTemperatur;'; + Blockly.Arduino.variables_['bmeHumidity'] = 'float bmeHumidity;'; + Blockly.Arduino.variables_['bmePressure'] = 'double bmePressure;'; + Blockly.Arduino.variables_['bmeIAQ'] = 'float bmeIAQ;'; + Blockly.Arduino.variables_['bmeIAQAccuracy'] = 'float bmeIAQAccuracy;'; + Blockly.Arduino.variables_['bmeCO2'] = 'int bmeCO2;'; + Blockly.Arduino.variables_['bmeBreathVocEquivalent'] = 'float bmeBreathVocEquivalent;' - Blockly.Arduino.functionNames_['checkIaqSensorStatus'] = ` + Blockly.Arduino.functionNames_['checkIaqSensorStatus'] = ` void checkIaqSensorStatus(void) { if (iaqSensor.status != BSEC_OK) { @@ -127,7 +127,7 @@ Blockly.Arduino.sensebox_sensor_bme680_bsec = function () { } } `; - Blockly.Arduino.functionNames_['errLeds'] = ` + Blockly.Arduino.functionNames_['errLeds'] = ` void errLeds(void) { pinMode(LED_BUILTIN, OUTPUT); @@ -136,11 +136,11 @@ Blockly.Arduino.sensebox_sensor_bme680_bsec = function () { digitalWrite(LED_BUILTIN, LOW); delay(100); }`; - //Setup Code - Blockly.Arduino.setupCode_['Wire.begin'] = 'Wire.begin();'; - Blockly.Arduino.setupCode_['iaqSensor.begin'] = 'iaqSensor.begin(BME680_I2C_ADDR_PRIMARY, Wire);'; - Blockly.Arduino.setupCode_['checkIaqSensorStatus'] = 'checkIaqSensorStatus();'; - Blockly.Arduino.setupCode_['bsec_sensorlist'] = ` + //Setup Code + Blockly.Arduino.setupCode_['Wire.begin'] = 'Wire.begin();'; + Blockly.Arduino.setupCode_['iaqSensor.begin'] = 'iaqSensor.begin(BME680_I2C_ADDR_PRIMARY, Wire);'; + Blockly.Arduino.setupCode_['checkIaqSensorStatus'] = 'checkIaqSensorStatus();'; + Blockly.Arduino.setupCode_['bsec_sensorlist'] = ` bsec_virtual_sensor_t sensorList[10] = { BSEC_OUTPUT_RAW_TEMPERATURE, BSEC_OUTPUT_RAW_PRESSURE, @@ -154,9 +154,9 @@ Blockly.Arduino.sensebox_sensor_bme680_bsec = function () { BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY, }; `; - Blockly.Arduino.setupCode_['iaqSensorUpdateSubscription'] = 'iaqSensor.updateSubscription(sensorList, 10, BSEC_SAMPLE_RATE_LP);\ncheckIaqSensorStatus();'; - //Loop Code - Blockly.Arduino.loopCodeOnce_['iaqloop'] = ` + Blockly.Arduino.setupCode_['iaqSensorUpdateSubscription'] = 'iaqSensor.updateSubscription(sensorList, 10, BSEC_SAMPLE_RATE_LP);\ncheckIaqSensorStatus();'; + //Loop Code + Blockly.Arduino.loopCodeOnce_['iaqloop'] = ` if (iaqSensor.run()) { bmeTemperatur = iaqSensor.temperature; bmeHumidity = iaqSensor.humidity; @@ -169,32 +169,32 @@ Blockly.Arduino.sensebox_sensor_bme680_bsec = function () { checkIaqSensorStatus(); } `; - switch (dropdown_name) { - case 'temperature': - code = 'bmeTemperatur'; - break; - case 'humidity': - code = 'bmeHumidity'; - break; - case 'pressure': - code = 'bmePressure' - break; - case 'IAQ': - code = 'bmeIAQ'; - break; - case 'IAQAccuracy': - code = 'bmeIAQAccuracy'; - break; - case 'CO2': - code = 'bmeCO2'; - break; - case 'breathVocEquivalent': - code = 'bmeBreathVocEquivalent'; - break; - default: - break; - } - return [code, Blockly.Arduino.ORDER_ATOMIC]; + switch (dropdown_name) { + case 'temperature': + code = 'bmeTemperatur'; + break; + case 'humidity': + code = 'bmeHumidity'; + break; + case 'pressure': + code = 'bmePressure' + break; + case 'IAQ': + code = 'bmeIAQ'; + break; + case 'IAQAccuracy': + code = 'bmeIAQAccuracy'; + break; + case 'CO2': + code = 'bmeCO2'; + break; + case 'breathVocEquivalent': + code = 'bmeBreathVocEquivalent'; + break; + default: + break; + } + return [code, Blockly.Arduino.ORDER_ATOMIC]; }; @@ -204,14 +204,14 @@ Blockly.Arduino.sensebox_sensor_bme680_bsec = function () { */ Blockly.Arduino.sensebox_sensor_ultrasonic_ranger = function () { - var dropdown_pin_RX = this.getFieldValue('ultrasonic_trigger'); - var dropdown_pin_TX = this.getFieldValue('ultrasonic_echo'); - var port = this.getFieldValue('port'); - Blockly.Arduino.libraries_['library_senseBoxMCU'] = '#include "SenseBoxMCU.h"'; - Blockly.Arduino.definitions_['var_ultrasonic' + port] = 'Ultrasonic Ultrasonic' + port + '(' + dropdown_pin_RX + ',' + dropdown_pin_TX + ');'; - var code; - code = 'Ultrasonic' + port + '.getDistance()'; - return [code, Blockly.Arduino.ORDER_ATOMIC]; + var dropdown_pin_RX = this.getFieldValue('ultrasonic_trigger'); + var dropdown_pin_TX = this.getFieldValue('ultrasonic_echo'); + var port = this.getFieldValue('port'); + Blockly.Arduino.libraries_['library_senseBoxMCU'] = '#include "SenseBoxMCU.h"'; + Blockly.Arduino.definitions_['var_ultrasonic' + port] = 'Ultrasonic Ultrasonic' + port + '(' + dropdown_pin_RX + ',' + dropdown_pin_TX + ');'; + var code; + code = 'Ultrasonic' + port + '.getDistance()'; + return [code, Blockly.Arduino.ORDER_ATOMIC]; }; /** @@ -220,9 +220,35 @@ Blockly.Arduino.sensebox_sensor_ultrasonic_ranger = function () { */ Blockly.Arduino.sensebox_sensor_sound = function () { - var dropdown_pin = this.getFieldValue('PIN'); - Blockly.Arduino.libraries_['library_senseBoxMCU'] = '#include "SenseBoxMCU.h"'; - Blockly.Arduino.definitions_['define_microphone'] = 'Microphone microphone(' + dropdown_pin + ');' - var code = 'microphone.getValue()'; - return [code, Blockly.Arduino.ORDER_ATOMIC]; + var dropdown_pin = this.getFieldValue('PIN'); + Blockly.Arduino.libraries_['library_senseBoxMCU'] = '#include "SenseBoxMCU.h"'; + Blockly.Arduino.definitions_['define_microphone'] = 'Microphone microphone(' + dropdown_pin + ');' + var code = 'microphone.getValue()'; + return [code, Blockly.Arduino.ORDER_ATOMIC]; }; + + +/** + * Button + * + */ + + +Blockly.Arduino.sensebox_button = function () { + var dropdown_pin = this.getFieldValue('PIN'); + var dropown_function = this.getFieldValue('FUNCTION'); + Blockly.Arduino.libraries_['library_senseBoxMCU'] = '#include "SenseBoxMCU.h"'; + Blockly.Arduino.definitions_['define_button' + dropdown_pin + ''] = 'Button button_' + dropdown_pin + '(' + dropdown_pin + ');'; + Blockly.Arduino.setupCode_['setup_button' + dropdown_pin + ''] = 'button_' + dropdown_pin + '.begin();'; + var code = ''; + if (dropown_function === 'isPressed') { + code = 'button_' + dropdown_pin + '.isPressed()'; + } + else if (dropown_function === 'Switch') { + code = 'button_' + dropdown_pin + '.getSwitch()'; + } + else if (dropown_function === 'wasPressed') { + code = 'button_' + dropdown_pin + '.wasPressed()'; + } + return [code, Blockly.Arduino.ORDER_ATOMIC]; +}; \ No newline at end of file diff --git a/src/components/Blockly/toolbox/Toolbox.js b/src/components/Blockly/toolbox/Toolbox.js index 50396b1..627f961 100644 --- a/src/components/Blockly/toolbox/Toolbox.js +++ b/src/components/Blockly/toolbox/Toolbox.js @@ -47,6 +47,7 @@ class Toolbox extends React.Component { +