From 65184855e2c544e6b0e4480a2643594af32293d6 Mon Sep 17 00:00:00 2001 From: Your Name Date: Mon, 3 Jul 2023 20:19:09 +0000 Subject: [PATCH] Ver01072023 --- src/components/Blockly/blocks/CleVerLab.js | 88 +++++++++++++++++++ src/components/Blockly/blocks/index.js | 1 + src/components/Blockly/generator/CleVerLab.js | 61 +++++++++++++ src/components/Blockly/generator/index.js | 1 + .../Blockly/generator/procedures.js | 1 - .../Blockly/generator/sensebox-sensors.js | 40 ++++----- src/components/Blockly/helpers/colour.js | 1 + src/components/Blockly/msg/en/CleVerLab.js | 3 + src/components/Blockly/toolbox/Toolbox.js | 5 ++ 9 files changed, 178 insertions(+), 23 deletions(-) create mode 100644 src/components/Blockly/blocks/CleVerLab.js create mode 100644 src/components/Blockly/generator/CleVerLab.js create mode 100644 src/components/Blockly/msg/en/CleVerLab.js diff --git a/src/components/Blockly/blocks/CleVerLab.js b/src/components/Blockly/blocks/CleVerLab.js new file mode 100644 index 0000000..7f96bec --- /dev/null +++ b/src/components/Blockly/blocks/CleVerLab.js @@ -0,0 +1,88 @@ +import Blockly from "blockly"; +import { getColour } from "../helpers/colour"; +import * as Types from "../helpers/types"; +import { selectedBoard } from "../helpers/board"; +import { FieldGridDropdown } from "@blockly/field-grid-dropdown"; + +/** + * DS18B20 Temperatursonde + * + */ +Blockly.Blocks["CleVerLab_dummy1"] = { + init: function () { + this.setColour(getColour().cleverlab); + this.appendDummyInput() + .appendField("tut nichts") + this.setOutput(true, Types.NUMBER.typeName); + this.data = {name: "empty"}; +}, +}; + + +Blockly.Blocks["CleVerLab_temperature"] = { + init: function () { + this.setColour(getColour().cleverlab); + this.appendDummyInput() + .appendField("Temperatur") + .appendField("Digital Port:") + .appendField(new Blockly.FieldDropdown(selectedBoard().digitalPorts), "DigitalPin"); + this.setOutput(true, Types.NUMBER.typeName); + this.data = {name: "ds18b20"}; + }, +}; +/** + * PH Wert + * + */ +Blockly.Blocks["CleVerLab_pH"] = { + init: function () { + + this.setColour(getColour().cleverlab); + this.appendDummyInput() + .appendField("pH Wert") + .appendField("Digital Port:") + .appendField(new Blockly.FieldDropdown(selectedBoard().digitalPins), "DigitalPin"); + this.setOutput(true, Types.NUMBER.typeName); + this.data = {name: "phoderso"}; + }, +}; +Blockly.Blocks["CleVerLab_cali1"] = { + init: function () { + this.appendDummyInput() + .appendField("Kalibriere pH Sensor"); + this.appendValueInput("VAR1", "Number") + .appendField("Referenzlösung pH 4.00 =") + .setAlign(Blockly.ALIGN_RIGHT); + this.appendValueInput("VAR2", "Number2") + .appendField("Referenzlösung pH 7.00 =") + .setAlign(Blockly.ALIGN_RIGHT); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setColour(getColour().cleverlab); + this.setOutput(true, Types.NUMBER.typeName); + this.data = {name: "dsasda"}; + }, +}; + +/** + * Pump + * + */ +Blockly.Blocks['CleVerLab_pump'] = { + init: function() { + this.setColour(getColour().cleverlab); + var dropdown = new Blockly.FieldDropdown([ + [ 'START','HIGH'], + [ 'STOPP','LOW'] + ]); + this.appendDummyInput() + .appendField(dropdown, "Mode") + .appendField(" Pumpe ") + .appendField(new Blockly.FieldDropdown(selectedBoard().digitalPins), "DigitalPin"); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + //this.setOutput(true, "Number"); + this.setTooltip(''); + this.setHelpUrl(''); + } +}; diff --git a/src/components/Blockly/blocks/index.js b/src/components/Blockly/blocks/index.js index 560a3f0..2278418 100644 --- a/src/components/Blockly/blocks/index.js +++ b/src/components/Blockly/blocks/index.js @@ -26,5 +26,6 @@ import "./variables"; import "./lists"; import "./watchdog"; import "./webserver"; +import "./CleVerLab" import "../helpers/types"; diff --git a/src/components/Blockly/generator/CleVerLab.js b/src/components/Blockly/generator/CleVerLab.js new file mode 100644 index 0000000..dbddcc9 --- /dev/null +++ b/src/components/Blockly/generator/CleVerLab.js @@ -0,0 +1,61 @@ +import Blockly from "blockly"; + + /** + * starte/stoppe Pumpe + * + */ +Blockly.Arduino.CleVerLab_pump = function (block) { + var pin = block.getFieldValue('DigitalPin'); + var state = block.getFieldValue("Mode"); + Blockly['Arduino'].setupCode_['pinMode'] = 'pinMode(' + pin + ', OUTPUT);'; + var code = 'digitalWrite(' + pin + ', ' + state + ');\n'; + return code; +}; +/** + * PH wert + * + */ +Blockly.Arduino.CleVerLab_temperature = function () { + var dropdown_pin = this.getFieldValue("DigitalPort"); + Blockly.Arduino.libraries_["library_senseBoxIO"] = "#include "; + Blockly.Arduino.libraries_["library_oneWire"] = + "#include // http://librarymanager/All#OneWire"; + Blockly.Arduino.libraries_["library_oneDallasTemperature"] = + "#include // http://librarymanager/All#DallasTemperature"; + 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]; +}; +Blockly.Arduino.CleVerLab_pH = function () { + var dropdown_pin = this.getFieldValue("DigitalPin"); + Blockly.Arduino.definitions_["define_pHgetter"] = + "#define SensorPin " + dropdown_pin +"\n#define samplingInterval 20\n#define printInterval 800\n#define ArrayLenth 40 //times of collection\nint pHArray[ArrayLenth]; //Store the average value of the sensor feedback\nint pHArrayIndex=0;\nfloat slope = 1.00;\nfloat b =0.00;"; + Blockly.Arduino.codeFunctions_["sensebox_requestpH"] = + "float getpH(){\nstatic unsigned long samplingTime = millis();\nstatic unsigned long printTime = millis();\nstatic float pHValue,voltage;\n//nif(millis()-samplingTime > samplingInterval){\n//pHArray[pHArrayIndex++]=analogRead(SensorPin);\nfor (int i = 1; i <= 10; i += 1) {\nvoltage = voltage + analogRead(SensorPin);\n}\n voltage = (voltage / 10)*5.0/1024; \nsamplingTime=millis();\n\nreturn pHValue = 3.5*voltage*slope+b;\n}\n"; + Blockly.Arduino.codeFunctions_["avergearraypH"] = + "double avergearray(int* arr, int number) {\n int i;\n int max, min;\n double avg;\n long amount = 0;\n if (number <= 0) {\n return 0;\n }\n if (number < 5) {\n for (i = 0; i < number; i++) {\n amount += arr[i];\n }\n avg = amount / number;\n return avg;\n }\n else {\n if (arr[0] < arr[1]) {\n min = arr[0];\n max = arr[1];\n }\n else {\n min = arr[1];\n max = arr[0];\n }\n for (i = 2; i < number; i++) {\n if (arr[i] < min) {\n amount += min;\n min = arr[i];\n }\n else {\n if (arr[i] > max) {\n amount += max;\n max = arr[i];\n }\n else {\n amount += arr[i];\n }\n }\n }\n avg = (double)amount / (number - 2);\n }\n return avg;\n}"; + var code = "getpH()"; + return [code, Blockly.Arduino.ORDER_ATOMIC]; +}; + +Blockly.Arduino.CleVerLab_cali1 = function () { + var var1 = Blockly.Arduino.valueToCode(this, 'VAR1', Blockly.Arduino.ORDER_ATOMIC) || "4.00"; + var var2 = Blockly.Arduino.valueToCode(this, 'VAR2', Blockly.Arduino.ORDER_ATOMIC) || "7.00"; + //var var1 = this.getFieldValue("VAR1"); + //var var2 = this.getFieldValue("VAR2"); + Blockly.Arduino.definitions_["define_pHKali"] = "#define pH4 4.00\n#define pH7 7.00\nfloat pH4is = "+ var1+";\nfloat pH7is = "+ var2 +";"; + Blockly.Arduino.setupCode_["asdsadsa"] ="slope = (2.00-(4.00/3.50))/(pH7is/3.50 - pH4is/3.50);\n b = 7 - (pH7is * slope);"; + var code = "0"; + return [code, Blockly.Arduino.ORDER_ATOMIC]; +}; + + + + + diff --git a/src/components/Blockly/generator/index.js b/src/components/Blockly/generator/index.js index fcefa2f..19e650f 100644 --- a/src/components/Blockly/generator/index.js +++ b/src/components/Blockly/generator/index.js @@ -27,3 +27,4 @@ import "./variables"; import "./lists"; import "./watchdog"; import "./webserver"; +import "./CleVerLab" \ No newline at end of file diff --git a/src/components/Blockly/generator/procedures.js b/src/components/Blockly/generator/procedures.js index 861db5a..34a471b 100644 --- a/src/components/Blockly/generator/procedures.js +++ b/src/components/Blockly/generator/procedures.js @@ -7,7 +7,6 @@ import * as Blockly from "blockly/core"; * @return {string} Completed code. */ Blockly.Arduino["arduino_functions"] = function (block) { - Blockly.Arduino.libraries_["library_senseBoxIO"] = "#include "; // Edited version of Blockly.Generator.prototype.statementToCode function statementToCodeNoTab(block, name) { var targetBlock = block.getInputTargetBlock(name); diff --git a/src/components/Blockly/generator/sensebox-sensors.js b/src/components/Blockly/generator/sensebox-sensors.js index 92d076a..3929957 100644 --- a/src/components/Blockly/generator/sensebox-sensors.js +++ b/src/components/Blockly/generator/sensebox-sensors.js @@ -231,15 +231,15 @@ Blockly.Arduino.sensebox_sensor_bme680_bsec = function () { Blockly.Arduino.functionNames_["checkIaqSensorStatus"] = ` void checkIaqSensorStatus(void) { - if (iaqSensor.bsecStatus != BSEC_OK) { - if (iaqSensor.bsecStatus < BSEC_OK) { + if (iaqSensor.status != BSEC_OK) { + if (iaqSensor.status < BSEC_OK) { for (;;) errLeds(); /* Halt in case of failure */ } } - if (iaqSensor.bme68xStatus != BME68X_OK) { - if (iaqSensor.bme68xStatus < BME68X_OK) { + if (iaqSensor.bme680Status != BME680_OK) { + if (iaqSensor.bme680Status < BME680_OK) { for (;;) errLeds(); /* Halt in case of failure */ } @@ -258,29 +258,25 @@ Blockly.Arduino.sensebox_sensor_bme680_bsec = function () { //Setup Code Blockly.Arduino.setupCode_["Wire.begin"] = "Wire.begin();"; Blockly.Arduino.setupCode_["iaqSensor.begin"] = - "iaqSensor.begin(BME68X_I2C_ADDR_LOW, Wire);"; + "iaqSensor.begin(BME680_I2C_ADDR_PRIMARY, Wire);"; Blockly.Arduino.setupCode_["checkIaqSensorStatus"] = "checkIaqSensorStatus();"; Blockly.Arduino.setupCode_["bsec_sensorlist"] = ` -bsec_virtual_sensor_t sensorList[13] = { - BSEC_OUTPUT_IAQ, - BSEC_OUTPUT_STATIC_IAQ, - BSEC_OUTPUT_CO2_EQUIVALENT, - BSEC_OUTPUT_BREATH_VOC_EQUIVALENT, - BSEC_OUTPUT_RAW_TEMPERATURE, - BSEC_OUTPUT_RAW_PRESSURE, - BSEC_OUTPUT_RAW_HUMIDITY, - BSEC_OUTPUT_RAW_GAS, - BSEC_OUTPUT_STABILIZATION_STATUS, - BSEC_OUTPUT_RUN_IN_STATUS, - BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE, - BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY, - BSEC_OUTPUT_GAS_PERCENTAGE -}; - + bsec_virtual_sensor_t sensorList[10] = { + BSEC_OUTPUT_RAW_TEMPERATURE, + BSEC_OUTPUT_RAW_PRESSURE, + BSEC_OUTPUT_RAW_HUMIDITY, + BSEC_OUTPUT_RAW_GAS, + BSEC_OUTPUT_IAQ, + BSEC_OUTPUT_STATIC_IAQ, + BSEC_OUTPUT_CO2_EQUIVALENT, + BSEC_OUTPUT_BREATH_VOC_EQUIVALENT, + BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE, + BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY, + }; `; Blockly.Arduino.setupCode_["iaqSensorUpdateSubscription"] = - "iaqSensor.updateSubscription(sensorList, 13, BSEC_SAMPLE_RATE_LP);\ncheckIaqSensorStatus();"; + "iaqSensor.updateSubscription(sensorList, 10, BSEC_SAMPLE_RATE_LP);\ncheckIaqSensorStatus();"; //Loop Code Blockly.Arduino.loopCodeOnce_["iaqloop"] = ` if (iaqSensor.run()) { diff --git a/src/components/Blockly/helpers/colour.js b/src/components/Blockly/helpers/colour.js index e4f4cca..4de5043 100644 --- a/src/components/Blockly/helpers/colour.js +++ b/src/components/Blockly/helpers/colour.js @@ -15,6 +15,7 @@ const colours = { webserver: 40, phyphox: 25, motors: 190, + cleverlab: 185 , }; export const getColour = () => { diff --git a/src/components/Blockly/msg/en/CleVerLab.js b/src/components/Blockly/msg/en/CleVerLab.js new file mode 100644 index 0000000..60da8bb --- /dev/null +++ b/src/components/Blockly/msg/en/CleVerLab.js @@ -0,0 +1,3 @@ +export const CLEVERLAB = { + +} \ No newline at end of file diff --git a/src/components/Blockly/toolbox/Toolbox.js b/src/components/Blockly/toolbox/Toolbox.js index bf6e6eb..7bb387a 100644 --- a/src/components/Blockly/toolbox/Toolbox.js +++ b/src/components/Blockly/toolbox/Toolbox.js @@ -633,6 +633,11 @@ class Toolbox extends React.Component { colour={getColour().procedures} custom="PROCEDURE" > + + + + +