Merge pull request #52 from sensebox/new-blocks

add new blocks
This commit is contained in:
Mario Pesch 2020-12-21 12:12:31 +01:00 committed by GitHub
commit 5eb6a94a0b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 247 additions and 16 deletions

View File

@ -1,5 +1,4 @@
import * as Blockly from 'blockly';
import { FieldSlider } from '@blockly/field-slider';
import { getColour } from '../helpers/colour'
import { selectedBoard } from '../helpers/board'
@ -27,15 +26,12 @@ Blockly.Blocks['sensebox_rgb_led'] = {
.appendField(Blockly.Msg.senseBox_rgb_led)
.appendField("Pin:")
.appendField(new Blockly.FieldDropdown(selectedBoard().digitalPins), "PIN");
this.appendDummyInput()
.appendField(Blockly.Msg.COLOUR_RGB_RED)//Blockly.Msg.senseBox_basic_red
.appendField(new FieldSlider(255, 0, 255), "RED");
this.appendDummyInput()
.appendField(Blockly.Msg.COLOUR_RGB_GREEN)//Blockly.Msg.senseBox_basic_green
.appendField(new FieldSlider(255, 0, 255), "GREEN");
this.appendDummyInput()
.appendField(Blockly.Msg.COLOUR_RGB_BLUE)//Blockly.Msg.senseBox_basic_green
.appendField(new FieldSlider(255, 0, 255), "BLUE");
this.appendValueInput("RED", 'Number')
.appendField(Blockly.Msg.COLOUR_RGB_RED);//Blockly.Msg.senseBox_basic_red
this.appendValueInput("GREEN", 'Number')
.appendField(Blockly.Msg.COLOUR_RGB_GREEN);//Blockly.Msg.senseBox_basic_green
this.appendValueInput("BLUE", 'Number')
.appendField(Blockly.Msg.COLOUR_RGB_BLUE);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setTooltip(Blockly.Msg.senseBox_rgb_led_tip);
@ -53,7 +49,7 @@ Blockly.Blocks['sensebox_ws2818_led'] = {
this.setColour(getColour().sensebox);
this.appendDummyInput()
.appendField(Blockly.Msg.senseBox_ws2818_rgb_led)
.appendField("Pin:")
.appendField("Port:")
.appendField(new Blockly.FieldDropdown(dropdownOptions), "Port")
this.appendValueInput("BRIGHTNESS", "brightness")
.appendField((Blockly.Msg.senseBox_ws2818_rgb_led_brightness));

View File

@ -351,3 +351,79 @@ Blockly.Blocks['sensebox_gps'] = {
this.setTooltip(Blockly.Msg.senseBox_bme_tip);
}
};
/**
* Block for Truebner STM50
*/
Blockly.Blocks['sensebox_sensor_truebner_smt50'] = {
init: function () {
var dropdownOptions = [[Blockly.Msg.senseBox_ultrasonic_port_A, 'A'],
[Blockly.Msg.senseBox_ultrasonic_port_B, 'B'], [Blockly.Msg.senseBox_ultrasonic_port_C, 'C']];
this.setColour(getColour().sensebox);
this.appendDummyInput()
.appendField(Blockly.Msg.sensebox_soil_smt50);
this.appendDummyInput()
.appendField("Port:")
.appendField(new Blockly.FieldDropdown(dropdownOptions), "Port")
this.appendDummyInput()
.appendField(Blockly.Msg.senseBox_value)
.appendField(new Blockly.FieldDropdown([[Blockly.Msg.senseBox_temp, "temp"], [Blockly.Msg.senseBox_soil, "soil"]]), 'value')
this.setOutput(true, Types.NUMBER.typeName);
}
};
/**
* DS18B20 Watertemperature
*
*/
Blockly.Blocks['sensebox_sensor_watertemperature'] = {
init: function () {
var dropdownOptions = [[Blockly.Msg.senseBox_ultrasonic_port_A, 'A'],
[Blockly.Msg.senseBox_ultrasonic_port_B, 'B'], [Blockly.Msg.senseBox_ultrasonic_port_C, 'C']];
this.setColour(getColour().sensebox);
this.appendDummyInput()
.appendField(Blockly.Msg.senseBox_watertemperature)
.appendField("Port:")
.appendField(new Blockly.FieldDropdown(dropdownOptions), "Port")
this.setOutput(true, Types.NUMBER.typeName);
this.setTooltip(Blockly.Msg.senseBox_watertemperature_tip);
}
};
/**
* Windspeed
* removed for now
Blockly.Blocks['sensebox_windspeed'] = {
init: function () {
this.setColour(getColour().sensebox);
this.appendDummyInput()
.appendField(Blockly.Msg.senseBox_windspeed)
.appendField("Pin:")
.appendField(new Blockly.FieldDropdown(selectedBoard().analogPins), "PIN")
this.setOutput(true, Types.DECIMAL.typeName);
}
};
*/
/**
* DF Robot Soundsensor
*/
Blockly.Blocks['sensebox_soundsensor_dfrobot'] = {
init: function () {
var dropdownOptions = [[Blockly.Msg.senseBox_ultrasonic_port_A, 'A'],
[Blockly.Msg.senseBox_ultrasonic_port_B, 'B'], [Blockly.Msg.senseBox_ultrasonic_port_C, 'C']];
this.setColour(getColour().sensebox);
this.appendDummyInput()
.appendField(Blockly.Msg.senseBox_soundsensor_dfrobot)
.appendField("Port:")
.appendField(new Blockly.FieldDropdown(dropdownOptions), "Port")
this.setOutput(true, Types.DECIMAL.typeName);
}
};

View File

@ -10,9 +10,9 @@ Blockly.Arduino.sensebox_led = function () {
Blockly.Arduino.sensebox_rgb_led = function () {
var dropdown_pin = this.getFieldValue('PIN');
var red = this.getFieldValue('RED') || '0'
var green = this.getFieldValue('GREEN') || '0'
var blue = this.getFieldValue('BLUE') || '0'
var red = Blockly.Arduino.valueToCode(this, 'RED', Blockly.Arduino.ORDER_ATOMIC) || '0'
var green = Blockly.Arduino.valueToCode(this, 'GREEN', Blockly.Arduino.ORDER_ATOMIC) || '0'
var blue = Blockly.Arduino.valueToCode(this, 'BLUE', Blockly.Arduino.ORDER_ATOMIC) || '0'
Blockly.Arduino.libraries_['define_rgb_led' + dropdown_pin] = '#include <Adafruit_NeoPixel.h>\n Adafruit_NeoPixel rgb_led_' + dropdown_pin + ' = Adafruit_NeoPixel(1,' + dropdown_pin + ',NEO_RGB + NEO_KHZ800);\n';
Blockly.Arduino.setupCode_['setup_rgb_led' + dropdown_pin] = 'rgb_led_' + dropdown_pin + '.begin();';

View File

@ -332,3 +332,130 @@ Blockly.Arduino.sensebox_gps = function () {
return [code, Blockly.Arduino.ORDER_ATOMIC];
}
/**
* Block for Truebner STM50
*/
Blockly.Arduino.sensebox_sensor_truebner_smt50 = function () {
var dropdown_port = this.getFieldValue('Port')
var dropdown_value = this.getFieldValue('value');
var dropdown_pin = 1;
if (dropdown_value === 'temp') {
if (dropdown_port === 'A') {
dropdown_pin = 1;
}
if (dropdown_port === 'B') {
dropdown_pin = 3;
}
if (dropdown_port === 'C') {
dropdown_pin = 5;
}
Blockly.Arduino.codeFunctions_['sensebox_smt50_temp'] = 'float getSMT50Temperature(int analogPin){\n int sensorValue = analogRead(analogPin);\n float voltage = sensorValue * (3.3 / 1024.0);\n return (voltage - 0.5) * 100;\n}';
var code = 'getSMT50Temperature(' + dropdown_pin + ')';
return [code, Blockly.Arduino.ORDER_ATOMIC];
}
else if (dropdown_value === 'soil') {
if (dropdown_port === 'A') {
dropdown_pin = 2;
}
if (dropdown_port === 'B') {
dropdown_pin = 4;
}
if (dropdown_port === 'C') {
dropdown_pin = 6;
}
Blockly.Arduino.codeFunctions_['sensebox_smt50_soil'] = 'float getSMT50Moisture(int analogPin){\n int sensorValue = analogRead(analogPin);\n float voltage = sensorValue * (3.3 / 1024.0);\n return (voltage * 50) / 3;\n}';
var code = 'getSMT50Moisture(' + dropdown_pin + ')';
return [code, Blockly.Arduino.ORDER_ATOMIC];
}
};
/**
* DS18B20 Watertemperature
*
*/
Blockly.Arduino.sensebox_sensor_watertemperature = function () {
var dropdown_port = this.getFieldValue('Port');
var dropdown_pin = 1;
if (dropdown_port === 'A') {
dropdown_pin = 1;
}
if (dropdown_port === 'B') {
dropdown_pin = 3;
}
if (dropdown_port === 'C') {
dropdown_pin = 5;
}
Blockly.Arduino.libraries_['library_oneWire'] = '#include "OneWire.h"';
Blockly.Arduino.libraries_['library_oneDallasTemperature'] = '#include "DallasTemperature.h"';
Blockly.Arduino.definitions_['define_OneWire'] = '#define ONE_WIRE_BUS ' + dropdown_pin + '\nOneWire oneWire(ONE_WIRE_BUS);\nDallasTemperature sensors(&oneWire);';
Blockly.Arduino.setupCode_['sensebox_oneWireSetup'] = 'sensors.begin();';
Blockly.Arduino.codeFunctions_['sensebox_requestTemp'] = 'float getWaterTemp(){\nsensors.requestTemperatures();\nsensors.getTempCByIndex(0);\n}';
var code = 'getWaterTemp()';
return [code, Blockly.Arduino.ORDER_ATOMIC];
};
/**
* Windspeed
* remove for now
Blockly.Arduino.sensebox_windspeed = function () {
var dropdown_pin = this.getFieldValue('PIN');
Blockly.Arduino.codeFunctions_['windspeed'] = `
float getWindspeed(){
float voltageWind = analogRead(`+ dropdown_pin + `) * (3.3 / 1024.0);
float windspeed = 0.0;
if (voltageWind >= 0.018){
float poly1 = pow(voltageWind, 3);
poly1 = 17.0359801998299 * poly1;
float poly2 = pow(voltageWind, 2);
poly2 = 47.9908168343362 * poly2;
float poly3 = 122.899677524413 * voltageWind;
float poly4 = 0.657504127272728;
windspeed = poly1 - poly2 + poly3 - poly4;
windspeed = windspeed * 0.2777777777777778; //conversion in m/s
}
return windspeed;
}`
var code = 'getWindspeed()';
return [code, Blockly.Arduino.ORDER_ATOMIC];
};
*/
/**
* DF Robot Soundsensor
*/
/**
*
*
*/
Blockly.Arduino.sensebox_soundsensor_dfrobot = function () {
var dropdown_port = this.getFieldValue('Port');
var dropdown_pin = 1;
if (dropdown_port === 'A') {
dropdown_pin = 1;
}
if (dropdown_port === 'B') {
dropdown_pin = 3;
}
if (dropdown_port === 'C') {
dropdown_pin = 5;
}
Blockly.Arduino.codeFunctions_['soundsensor'] = `
float getSoundValue(){
float v = analogRead(`+ dropdown_pin + `) * (3.3 / 1024.0);
float decibel = v * 50;
return decibel;
}`
var code = 'getSoundValue()';
return [code, Blockly.Arduino.ORDER_ATOMIC];
};

View File

@ -760,6 +760,12 @@ Blockly.Msg.senseBox_LoRa_sensor_tip = "Sende eine Sensorwert mit einer bestimmt
Blockly.Msg.senseBox_LoRa_init_abp_tip = "Initialisiere die LoRa übertragung. Kopiere die ID's im lsb Format";
Blockly.Msg.senseBox_LoRa_init_otaa_tip = "Initialisiere die LoRa übertragung. Kopiere die ID's im lsb Format";
//Windspeed
Blockly.Msg.senseBox_windspeed = "Windgeschwindigkeitssensor";
//Soundsensor
Blockly.Msg.senseBox_soundsensor_dfrobot = "Soundsensor (DF Robot)";
//BME680
Blockly.Msg.senseBox_bme680 = "Umweltsensor (BME680)";
Blockly.Msg.senseBox_bme_iaq = "Innenraumluftqualität (IAQ)";

View File

@ -782,6 +782,12 @@ Blockly.Msg.senseBox_mqtt_password = "Password";
Blockly.Msg.sensebox_mqtt_subscribe = "Subscribe to Feed"
Blockly.Msg.senseBox_mqtt_publish = "Publish to Feed/Topic";
//Windspeed
Blockly.Msg.senseBox_windspeed = "Windspeedsensor"
//Soundsensor
Blockly.Msg.senseBox_soundsensor_dfrobot = "Soundsensor (DF Robot)";
/**
* Add Translation for Blocks above
* ---------------------------------------------------------------

View File

@ -50,6 +50,10 @@ class Toolbox extends React.Component {
<Block type="sensebox_sensor_ultrasonic_ranger" />
<Block type="sensebox_sensor_sound" />
<Block type="sensebox_button" />
<Block type="sensebox_sensor_truebner_smt50" />
<Block type="sensebox_sensor_watertemperature" />
{/* <Block type="sensebox_windspeed" /> */}
<Block type="sensebox_soundsensor_dfrobot" />
</Category >
<Category name="WIFI" colour={getColour().sensebox}>
<Block type="sensebox_wifi" />
@ -61,7 +65,23 @@ class Toolbox extends React.Component {
<Block type="sensebox_sd_write_file" />
</Category>
<Category name="LED" colour={getColour().sensebox}>
<Block type="sensebox_rgb_led" />
<Block type="sensebox_rgb_led">
<Value name="RED">
<Block type="math_number">
<Field name="NUM">0</Field>
</Block>
</Value>
<Value name="GREEN">
<Block type="math_number">
<Field name="NUM">0</Field>
</Block>
</Value>
<Value name="BLUE">
<Block type="math_number">
<Field name="NUM">0</Field>
</Block>
</Value>
</Block>
<Block type="sensebox_led" />
<Block type="sensebox_ws2818_led">
<Value name="POSITION">