From 5658aa603c3d2d6f8f4161bf732066b10f06365b Mon Sep 17 00:00:00 2001 From: Mario Date: Mon, 21 Dec 2020 10:43:08 +0100 Subject: [PATCH 1/4] add soil moisture sensor --- .../Blockly/blocks/sensebox-sensors.js | 21 ++++++++++ .../Blockly/generator/sensebox-sensors.js | 42 ++++++++++++++++++- src/components/Blockly/toolbox/Toolbox.js | 1 + 3 files changed, 63 insertions(+), 1 deletion(-) diff --git a/src/components/Blockly/blocks/sensebox-sensors.js b/src/components/Blockly/blocks/sensebox-sensors.js index a445910..f15fbe1 100644 --- a/src/components/Blockly/blocks/sensebox-sensors.js +++ b/src/components/Blockly/blocks/sensebox-sensors.js @@ -351,3 +351,24 @@ 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); + } +}; diff --git a/src/components/Blockly/generator/sensebox-sensors.js b/src/components/Blockly/generator/sensebox-sensors.js index 598e6ae..3d28d33 100644 --- a/src/components/Blockly/generator/sensebox-sensors.js +++ b/src/components/Blockly/generator/sensebox-sensors.js @@ -331,4 +331,44 @@ Blockly.Arduino.sensebox_gps = function () { } return [code, Blockly.Arduino.ORDER_ATOMIC]; -} \ No newline at end of file +} + +/** + * 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]; + } + +}; \ No newline at end of file diff --git a/src/components/Blockly/toolbox/Toolbox.js b/src/components/Blockly/toolbox/Toolbox.js index cce1097..7fce380 100644 --- a/src/components/Blockly/toolbox/Toolbox.js +++ b/src/components/Blockly/toolbox/Toolbox.js @@ -50,6 +50,7 @@ class Toolbox extends React.Component { + From c52e9db4c8c960db0786b211ea8d491a3af886b6 Mon Sep 17 00:00:00 2001 From: Mario Date: Mon, 21 Dec 2020 10:59:05 +0100 Subject: [PATCH 2/4] add watertemperature sensor --- .../Blockly/blocks/sensebox-sensors.js | 20 +++++++++ .../Blockly/generator/sensebox-sensors.js | 43 +++++++++++++++---- src/components/Blockly/toolbox/Toolbox.js | 1 + 3 files changed, 56 insertions(+), 8 deletions(-) diff --git a/src/components/Blockly/blocks/sensebox-sensors.js b/src/components/Blockly/blocks/sensebox-sensors.js index f15fbe1..1d47bda 100644 --- a/src/components/Blockly/blocks/sensebox-sensors.js +++ b/src/components/Blockly/blocks/sensebox-sensors.js @@ -372,3 +372,23 @@ Blockly.Blocks['sensebox_sensor_truebner_smt50'] = { 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); + } +}; \ No newline at end of file diff --git a/src/components/Blockly/generator/sensebox-sensors.js b/src/components/Blockly/generator/sensebox-sensors.js index 3d28d33..7ac7730 100644 --- a/src/components/Blockly/generator/sensebox-sensors.js +++ b/src/components/Blockly/generator/sensebox-sensors.js @@ -342,28 +342,28 @@ 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') { + if (dropdown_value === 'temp') { + if (dropdown_port === 'A') { dropdown_pin = 1; } - if (dropdown_port == 'B') { + if (dropdown_port === 'B') { dropdown_pin = 3; } - if (dropdown_port == 'C') { + 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') { + else if (dropdown_value === 'soil') { + if (dropdown_port === 'A') { dropdown_pin = 2; } - if (dropdown_port == 'B') { + if (dropdown_port === 'B') { dropdown_pin = 4; } - if (dropdown_port == 'C') { + 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}'; @@ -371,4 +371,31 @@ Blockly.Arduino.sensebox_sensor_truebner_smt50 = function () { 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]; }; \ No newline at end of file diff --git a/src/components/Blockly/toolbox/Toolbox.js b/src/components/Blockly/toolbox/Toolbox.js index 7fce380..62e8257 100644 --- a/src/components/Blockly/toolbox/Toolbox.js +++ b/src/components/Blockly/toolbox/Toolbox.js @@ -51,6 +51,7 @@ class Toolbox extends React.Component { + From 842b4522f06bcc0bebbbe9775e3fb76eb75b5377 Mon Sep 17 00:00:00 2001 From: Mario Date: Mon, 21 Dec 2020 11:22:54 +0100 Subject: [PATCH 3/4] add soundsensor --- .../Blockly/blocks/sensebox-sensors.js | 35 +++++++++++ .../Blockly/generator/sensebox-sensors.js | 60 +++++++++++++++++++ src/components/Blockly/msg/de.js | 6 ++ src/components/Blockly/msg/en.js | 6 ++ src/components/Blockly/toolbox/Toolbox.js | 2 + 5 files changed, 109 insertions(+) diff --git a/src/components/Blockly/blocks/sensebox-sensors.js b/src/components/Blockly/blocks/sensebox-sensors.js index 1d47bda..11a5719 100644 --- a/src/components/Blockly/blocks/sensebox-sensors.js +++ b/src/components/Blockly/blocks/sensebox-sensors.js @@ -391,4 +391,39 @@ Blockly.Blocks['sensebox_sensor_watertemperature'] = { 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); + } }; \ No newline at end of file diff --git a/src/components/Blockly/generator/sensebox-sensors.js b/src/components/Blockly/generator/sensebox-sensors.js index 7ac7730..8a94e19 100644 --- a/src/components/Blockly/generator/sensebox-sensors.js +++ b/src/components/Blockly/generator/sensebox-sensors.js @@ -398,4 +398,64 @@ Blockly.Arduino.sensebox_sensor_watertemperature = function () { 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]; }; \ No newline at end of file diff --git a/src/components/Blockly/msg/de.js b/src/components/Blockly/msg/de.js index 11dc028..ea143ea 100644 --- a/src/components/Blockly/msg/de.js +++ b/src/components/Blockly/msg/de.js @@ -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)"; diff --git a/src/components/Blockly/msg/en.js b/src/components/Blockly/msg/en.js index 3c08232..0073ac5 100644 --- a/src/components/Blockly/msg/en.js +++ b/src/components/Blockly/msg/en.js @@ -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 * --------------------------------------------------------------- diff --git a/src/components/Blockly/toolbox/Toolbox.js b/src/components/Blockly/toolbox/Toolbox.js index 62e8257..8fdf82c 100644 --- a/src/components/Blockly/toolbox/Toolbox.js +++ b/src/components/Blockly/toolbox/Toolbox.js @@ -52,6 +52,8 @@ class Toolbox extends React.Component { + {/* */} + From 40f8c626967f0b70c89fe66aa62f00c6e5c11776 Mon Sep 17 00:00:00 2001 From: Mario Date: Mon, 21 Dec 2020 11:57:32 +0100 Subject: [PATCH 4/4] remove field slider from rgb block --- src/components/Blockly/blocks/sensebox-led.js | 18 +++++++----------- .../Blockly/generator/sensebox-led.js | 6 +++--- src/components/Blockly/toolbox/Toolbox.js | 18 +++++++++++++++++- 3 files changed, 27 insertions(+), 15 deletions(-) diff --git a/src/components/Blockly/blocks/sensebox-led.js b/src/components/Blockly/blocks/sensebox-led.js index 0041dbc..59270eb 100644 --- a/src/components/Blockly/blocks/sensebox-led.js +++ b/src/components/Blockly/blocks/sensebox-led.js @@ -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)); diff --git a/src/components/Blockly/generator/sensebox-led.js b/src/components/Blockly/generator/sensebox-led.js index f3e36d5..a30ee02 100644 --- a/src/components/Blockly/generator/sensebox-led.js +++ b/src/components/Blockly/generator/sensebox-led.js @@ -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 \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();'; diff --git a/src/components/Blockly/toolbox/Toolbox.js b/src/components/Blockly/toolbox/Toolbox.js index 8fdf82c..9f95a85 100644 --- a/src/components/Blockly/toolbox/Toolbox.js +++ b/src/components/Blockly/toolbox/Toolbox.js @@ -65,7 +65,23 @@ class Toolbox extends React.Component { - + + + + 0 + + + + + 0 + + + + + 0 + + +