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 {
+