Merge pull request #9 from sensebox/add-button-block

add block for the button
This commit is contained in:
Mario Pesch 2020-10-02 12:33:37 +00:00 committed by GitHub
commit 182b5ada77
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 156 additions and 110 deletions

View File

@ -55,11 +55,11 @@ class BlocklyWindow extends Component {
style={this.props.svg ? { height: 0 } : this.props.blocklyCSS} style={this.props.svg ? { height: 0 } : this.props.blocklyCSS}
readOnly={this.props.readOnly !== undefined ? this.props.readOnly : false} readOnly={this.props.readOnly !== undefined ? this.props.readOnly : false}
trashcan={this.props.trashcan !== undefined ? this.props.trashcan : true} trashcan={this.props.trashcan !== undefined ? this.props.trashcan : true}
renderer='zelos' renderer='geras'
zoom={{ // https://developers.google.com/blockly/guides/configure/web/zoom zoom={{ // https://developers.google.com/blockly/guides/configure/web/zoom
controls: this.props.zoomControls !== undefined ? this.props.zoomControls : true, controls: this.props.zoomControls !== undefined ? this.props.zoomControls : true,
wheel: false, wheel: false,
startScale: 0.8, startScale: 1,
maxScale: 3, maxScale: 3,
minScale: 0.3, minScale: 0.3,
scaleSpeed: 1.2 scaleSpeed: 1.2

View File

@ -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');
}
};

View File

@ -6,12 +6,12 @@ import Blockly from 'blockly';
*/ */
Blockly.Arduino.sensebox_sensor_temp_hum = function () { Blockly.Arduino.sensebox_sensor_temp_hum = function () {
var dropdown_name = this.getFieldValue('NAME'); var dropdown_name = this.getFieldValue('NAME');
Blockly.Arduino.libraries_['library_senseBoxMCU'] = '#include "SenseBoxMCU.h"'; Blockly.Arduino.libraries_['library_senseBoxMCU'] = '#include "SenseBoxMCU.h"';
Blockly.Arduino.definitions_['define_hdc'] = 'HDC1080 hdc;'; Blockly.Arduino.definitions_['define_hdc'] = 'HDC1080 hdc;';
Blockly.Arduino.setupCode_['sensebox_sensor_temp_hum'] = 'hdc.begin();'; Blockly.Arduino.setupCode_['sensebox_sensor_temp_hum'] = 'hdc.begin();';
var code = 'hdc.get' + dropdown_name + '()'; var code = 'hdc.get' + dropdown_name + '()';
return [code, Blockly.Arduino.ORDER_ATOMIC]; return [code, Blockly.Arduino.ORDER_ATOMIC];
}; };
/** /**
@ -20,20 +20,20 @@ Blockly.Arduino.sensebox_sensor_temp_hum = function () {
*/ */
Blockly.Arduino.sensebox_sensor_uv_light = function () { Blockly.Arduino.sensebox_sensor_uv_light = function () {
var dropdown_name = this.getFieldValue('NAME'); var dropdown_name = this.getFieldValue('NAME');
let code = ''; let code = '';
Blockly.Arduino.libraries_['library_senseBoxMCU'] = '#include "SenseBoxMCU.h"'; Blockly.Arduino.libraries_['library_senseBoxMCU'] = '#include "SenseBoxMCU.h"';
if (dropdown_name === 'UvIntensity') { if (dropdown_name === 'UvIntensity') {
Blockly.Arduino.definitions_['define_veml'] = 'VEML6070 veml;' Blockly.Arduino.definitions_['define_veml'] = 'VEML6070 veml;'
Blockly.Arduino.setupCode_['sensebox_sensor_uv_light'] = 'veml.begin();' Blockly.Arduino.setupCode_['sensebox_sensor_uv_light'] = 'veml.begin();'
code = 'veml.get' + dropdown_name + '()'; code = 'veml.get' + dropdown_name + '()';
} }
if (dropdown_name === 'Illuminance') { if (dropdown_name === 'Illuminance') {
Blockly.Arduino.definitions_['define_tsl'] = 'TSL45315 tsl;' Blockly.Arduino.definitions_['define_tsl'] = 'TSL45315 tsl;'
Blockly.Arduino.setupCode_['sensebox_sensor_illuminance'] = 'tsl.begin();' Blockly.Arduino.setupCode_['sensebox_sensor_illuminance'] = 'tsl.begin();'
code = 'tsl.get' + dropdown_name + '()'; code = 'tsl.get' + dropdown_name + '()';
} }
return [code, Blockly.Arduino.ORDER_ATOMIC]; return [code, Blockly.Arduino.ORDER_ATOMIC];
}; };
@ -43,13 +43,13 @@ Blockly.Arduino.sensebox_sensor_uv_light = function () {
*/ */
Blockly.Arduino.sensebox_sensor_bmx055_accelerometer = function () { Blockly.Arduino.sensebox_sensor_bmx055_accelerometer = function () {
var dropdown_value = this.getFieldValue('VALUE'); var dropdown_value = this.getFieldValue('VALUE');
var range = this.getFieldValue('RANGE'); var range = this.getFieldValue('RANGE');
Blockly.Arduino.libraries_['library_senseBoxMCU'] = '#include "SenseBoxMCU.h"'; Blockly.Arduino.libraries_['library_senseBoxMCU'] = '#include "SenseBoxMCU.h"';
Blockly.Arduino.definitions_['define_bmx'] = 'BMX055 bmx;'; Blockly.Arduino.definitions_['define_bmx'] = 'BMX055 bmx;';
Blockly.Arduino.setupCode_['sensebox_sensor_bmx055'] = 'bmx.beginAcc(' + range + ');'; Blockly.Arduino.setupCode_['sensebox_sensor_bmx055'] = 'bmx.beginAcc(' + range + ');';
var code = 'bmx.getAcceleration' + dropdown_value + '()'; var code = 'bmx.getAcceleration' + dropdown_value + '()';
return [code, Blockly.Arduino.ORDER_ATOMIC]; return [code, Blockly.Arduino.ORDER_ATOMIC];
}; };
/** /**
@ -58,14 +58,14 @@ Blockly.Arduino.sensebox_sensor_bmx055_accelerometer = function () {
*/ */
Blockly.Arduino.sensebox_sensor_sds011 = function () { Blockly.Arduino.sensebox_sensor_sds011 = function () {
var dropdown_name = this.getFieldValue('NAME'); var dropdown_name = this.getFieldValue('NAME');
var serial_name = this.getFieldValue('SERIAL'); var serial_name = this.getFieldValue('SERIAL');
Blockly.Arduino.libraries_['library_senseBoxMCU'] = '#include "SenseBoxMCU.h"'; Blockly.Arduino.libraries_['library_senseBoxMCU'] = '#include "SenseBoxMCU.h"';
Blockly.Arduino.codeFunctions_['define_sds011'] = 'SDS011 my_sds(' + serial_name + ');'; Blockly.Arduino.codeFunctions_['define_sds011'] = 'SDS011 my_sds(' + serial_name + ');';
Blockly.Arduino.variables_['variables_sds011'] = 'float p10,p25;\n'; Blockly.Arduino.variables_['variables_sds011'] = 'float p10,p25;\n';
Blockly.Arduino.setupCode_['sensebox_sensor_sds011'] = serial_name + '.begin(9600);'; Blockly.Arduino.setupCode_['sensebox_sensor_sds011'] = serial_name + '.begin(9600);';
var code = 'my_sds.get' + dropdown_name + '()'; var code = 'my_sds.get' + dropdown_name + '()';
return [code, Blockly.Arduino.ORDER_ATOMIC]; return [code, Blockly.Arduino.ORDER_ATOMIC];
}; };
/** /**
@ -74,19 +74,19 @@ Blockly.Arduino.sensebox_sensor_sds011 = function () {
*/ */
Blockly.Arduino.sensebox_sensor_pressure = function () { Blockly.Arduino.sensebox_sensor_pressure = function () {
var dropdown_name = this.getFieldValue('NAME'); var dropdown_name = this.getFieldValue('NAME');
var code = ''; var code = '';
var referencePressure = this.getFieldValue('referencePressure'); var referencePressure = this.getFieldValue('referencePressure');
Blockly.Arduino.libraries_['library_senseBoxMCU'] = '#include "SenseBoxMCU.h"'; Blockly.Arduino.libraries_['library_senseBoxMCU'] = '#include "SenseBoxMCU.h"';
Blockly.Arduino.definitions_['define_pressure'] = 'BMP280 bmp_sensor;'; Blockly.Arduino.definitions_['define_pressure'] = 'BMP280 bmp_sensor;';
Blockly.Arduino.setupCode_['sensebox_bmp_sensor'] = 'bmp_sensor.begin();'; Blockly.Arduino.setupCode_['sensebox_bmp_sensor'] = 'bmp_sensor.begin();';
if (dropdown_name === 'Pressure' || dropdown_name === 'Temperature') { if (dropdown_name === 'Pressure' || dropdown_name === 'Temperature') {
code = 'bmp_sensor.get' + dropdown_name + '()'; code = 'bmp_sensor.get' + dropdown_name + '()';
} }
else if (dropdown_name === 'Altitude') { else if (dropdown_name === 'Altitude') {
code = 'bmp_sensor.getAltitude(' + referencePressure + ')'; code = 'bmp_sensor.getAltitude(' + referencePressure + ')';
} }
return [code, Blockly.Arduino.ORDER_ATOMIC]; return [code, Blockly.Arduino.ORDER_ATOMIC];
}; };
@ -97,19 +97,19 @@ Blockly.Arduino.sensebox_sensor_pressure = function () {
Blockly.Arduino.sensebox_sensor_bme680_bsec = function () { Blockly.Arduino.sensebox_sensor_bme680_bsec = function () {
var dropdown_name = this.getFieldValue('dropdown'); var dropdown_name = this.getFieldValue('dropdown');
let code = ''; let code = '';
Blockly.Arduino.libraries_['library_bsec'] = '#include "bsec.h"'; Blockly.Arduino.libraries_['library_bsec'] = '#include "bsec.h"';
Blockly.Arduino.definitions_['bsec_iaqSensor'] = 'Bsec iaqSensor;' Blockly.Arduino.definitions_['bsec_iaqSensor'] = 'Bsec iaqSensor;'
Blockly.Arduino.variables_['bmeTemperatur'] = 'float bmeTemperatur;'; Blockly.Arduino.variables_['bmeTemperatur'] = 'float bmeTemperatur;';
Blockly.Arduino.variables_['bmeHumidity'] = 'float bmeHumidity;'; Blockly.Arduino.variables_['bmeHumidity'] = 'float bmeHumidity;';
Blockly.Arduino.variables_['bmePressure'] = 'double bmePressure;'; Blockly.Arduino.variables_['bmePressure'] = 'double bmePressure;';
Blockly.Arduino.variables_['bmeIAQ'] = 'float bmeIAQ;'; Blockly.Arduino.variables_['bmeIAQ'] = 'float bmeIAQ;';
Blockly.Arduino.variables_['bmeIAQAccuracy'] = 'float bmeIAQAccuracy;'; Blockly.Arduino.variables_['bmeIAQAccuracy'] = 'float bmeIAQAccuracy;';
Blockly.Arduino.variables_['bmeCO2'] = 'int bmeCO2;'; Blockly.Arduino.variables_['bmeCO2'] = 'int bmeCO2;';
Blockly.Arduino.variables_['bmeBreathVocEquivalent'] = 'float bmeBreathVocEquivalent;' Blockly.Arduino.variables_['bmeBreathVocEquivalent'] = 'float bmeBreathVocEquivalent;'
Blockly.Arduino.functionNames_['checkIaqSensorStatus'] = ` Blockly.Arduino.functionNames_['checkIaqSensorStatus'] = `
void checkIaqSensorStatus(void) void checkIaqSensorStatus(void)
{ {
if (iaqSensor.status != BSEC_OK) { 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) void errLeds(void)
{ {
pinMode(LED_BUILTIN, OUTPUT); pinMode(LED_BUILTIN, OUTPUT);
@ -136,11 +136,11 @@ Blockly.Arduino.sensebox_sensor_bme680_bsec = function () {
digitalWrite(LED_BUILTIN, LOW); digitalWrite(LED_BUILTIN, LOW);
delay(100); delay(100);
}`; }`;
//Setup Code //Setup Code
Blockly.Arduino.setupCode_['Wire.begin'] = 'Wire.begin();'; Blockly.Arduino.setupCode_['Wire.begin'] = 'Wire.begin();';
Blockly.Arduino.setupCode_['iaqSensor.begin'] = 'iaqSensor.begin(BME680_I2C_ADDR_PRIMARY, Wire);'; Blockly.Arduino.setupCode_['iaqSensor.begin'] = 'iaqSensor.begin(BME680_I2C_ADDR_PRIMARY, Wire);';
Blockly.Arduino.setupCode_['checkIaqSensorStatus'] = 'checkIaqSensorStatus();'; Blockly.Arduino.setupCode_['checkIaqSensorStatus'] = 'checkIaqSensorStatus();';
Blockly.Arduino.setupCode_['bsec_sensorlist'] = ` Blockly.Arduino.setupCode_['bsec_sensorlist'] = `
bsec_virtual_sensor_t sensorList[10] = { bsec_virtual_sensor_t sensorList[10] = {
BSEC_OUTPUT_RAW_TEMPERATURE, BSEC_OUTPUT_RAW_TEMPERATURE,
BSEC_OUTPUT_RAW_PRESSURE, BSEC_OUTPUT_RAW_PRESSURE,
@ -154,9 +154,9 @@ Blockly.Arduino.sensebox_sensor_bme680_bsec = function () {
BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY, BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY,
}; };
`; `;
Blockly.Arduino.setupCode_['iaqSensorUpdateSubscription'] = 'iaqSensor.updateSubscription(sensorList, 10, BSEC_SAMPLE_RATE_LP);\ncheckIaqSensorStatus();'; Blockly.Arduino.setupCode_['iaqSensorUpdateSubscription'] = 'iaqSensor.updateSubscription(sensorList, 10, BSEC_SAMPLE_RATE_LP);\ncheckIaqSensorStatus();';
//Loop Code //Loop Code
Blockly.Arduino.loopCodeOnce_['iaqloop'] = ` Blockly.Arduino.loopCodeOnce_['iaqloop'] = `
if (iaqSensor.run()) { if (iaqSensor.run()) {
bmeTemperatur = iaqSensor.temperature; bmeTemperatur = iaqSensor.temperature;
bmeHumidity = iaqSensor.humidity; bmeHumidity = iaqSensor.humidity;
@ -169,32 +169,32 @@ Blockly.Arduino.sensebox_sensor_bme680_bsec = function () {
checkIaqSensorStatus(); checkIaqSensorStatus();
} }
`; `;
switch (dropdown_name) { switch (dropdown_name) {
case 'temperature': case 'temperature':
code = 'bmeTemperatur'; code = 'bmeTemperatur';
break; break;
case 'humidity': case 'humidity':
code = 'bmeHumidity'; code = 'bmeHumidity';
break; break;
case 'pressure': case 'pressure':
code = 'bmePressure' code = 'bmePressure'
break; break;
case 'IAQ': case 'IAQ':
code = 'bmeIAQ'; code = 'bmeIAQ';
break; break;
case 'IAQAccuracy': case 'IAQAccuracy':
code = 'bmeIAQAccuracy'; code = 'bmeIAQAccuracy';
break; break;
case 'CO2': case 'CO2':
code = 'bmeCO2'; code = 'bmeCO2';
break; break;
case 'breathVocEquivalent': case 'breathVocEquivalent':
code = 'bmeBreathVocEquivalent'; code = 'bmeBreathVocEquivalent';
break; break;
default: default:
break; break;
} }
return [code, Blockly.Arduino.ORDER_ATOMIC]; return [code, Blockly.Arduino.ORDER_ATOMIC];
}; };
@ -204,14 +204,14 @@ Blockly.Arduino.sensebox_sensor_bme680_bsec = function () {
*/ */
Blockly.Arduino.sensebox_sensor_ultrasonic_ranger = function () { Blockly.Arduino.sensebox_sensor_ultrasonic_ranger = function () {
var dropdown_pin_RX = this.getFieldValue('ultrasonic_trigger'); var dropdown_pin_RX = this.getFieldValue('ultrasonic_trigger');
var dropdown_pin_TX = this.getFieldValue('ultrasonic_echo'); var dropdown_pin_TX = this.getFieldValue('ultrasonic_echo');
var port = this.getFieldValue('port'); var port = this.getFieldValue('port');
Blockly.Arduino.libraries_['library_senseBoxMCU'] = '#include "SenseBoxMCU.h"'; Blockly.Arduino.libraries_['library_senseBoxMCU'] = '#include "SenseBoxMCU.h"';
Blockly.Arduino.definitions_['var_ultrasonic' + port] = 'Ultrasonic Ultrasonic' + port + '(' + dropdown_pin_RX + ',' + dropdown_pin_TX + ');'; Blockly.Arduino.definitions_['var_ultrasonic' + port] = 'Ultrasonic Ultrasonic' + port + '(' + dropdown_pin_RX + ',' + dropdown_pin_TX + ');';
var code; var code;
code = 'Ultrasonic' + port + '.getDistance()'; code = 'Ultrasonic' + port + '.getDistance()';
return [code, Blockly.Arduino.ORDER_ATOMIC]; return [code, Blockly.Arduino.ORDER_ATOMIC];
}; };
/** /**
@ -220,9 +220,35 @@ Blockly.Arduino.sensebox_sensor_ultrasonic_ranger = function () {
*/ */
Blockly.Arduino.sensebox_sensor_sound = function () { Blockly.Arduino.sensebox_sensor_sound = function () {
var dropdown_pin = this.getFieldValue('PIN'); var dropdown_pin = this.getFieldValue('PIN');
Blockly.Arduino.libraries_['library_senseBoxMCU'] = '#include "SenseBoxMCU.h"'; Blockly.Arduino.libraries_['library_senseBoxMCU'] = '#include "SenseBoxMCU.h"';
Blockly.Arduino.definitions_['define_microphone'] = 'Microphone microphone(' + dropdown_pin + ');' Blockly.Arduino.definitions_['define_microphone'] = 'Microphone microphone(' + dropdown_pin + ');'
var code = 'microphone.getValue()'; var code = 'microphone.getValue()';
return [code, Blockly.Arduino.ORDER_ATOMIC]; 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];
}; };

View File

@ -47,6 +47,7 @@ class Toolbox extends React.Component {
<Block type="sensebox_sensor_bme680_bsec" /> <Block type="sensebox_sensor_bme680_bsec" />
<Block type="sensebox_sensor_ultrasonic_ranger" /> <Block type="sensebox_sensor_ultrasonic_ranger" />
<Block type="sensebox_sensor_sound" /> <Block type="sensebox_sensor_sound" />
<Block type="sensebox_button" />
</Category > </Category >
<Category name="WIFI" colour={getColour().sensebox}> <Category name="WIFI" colour={getColour().sensebox}>
<Block type="sensebox_wifi" /> <Block type="sensebox_wifi" />