diff --git a/src/components/Blockly/blocks/sensebox-ble.js b/src/components/Blockly/blocks/sensebox-ble.js index b4082b1..6cff14b 100644 --- a/src/components/Blockly/blocks/sensebox-ble.js +++ b/src/components/Blockly/blocks/sensebox-ble.js @@ -1,7 +1,5 @@ import * as Blockly from "blockly"; import { getColour } from "../helpers/colour"; -import { selectedBoard } from "../helpers/board"; -import * as Types from "../helpers/types"; Blockly.Blocks["sensebox_phyphox_init"] = { init: function () { @@ -40,6 +38,113 @@ Blockly.Blocks["sensebox_phyphox_experiment"] = { new Blockly.FieldTextInput("Experiment Beschreibung"), "description" ); + this.appendStatementInput("view").appendField( + Blockly.Msg.sensebox_phyphox_createView + ); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setTooltip(Blockly.Msg.senseBox_led_tooltip); + }, +}; + +Blockly.Blocks["sensebox_phyphox_view"] = { + init: function () { + this.setColour(getColour().phyphox); + this.appendStatementInput("view").appendField( + Blockly.Msg.sensebox_phyphox_createView + ); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setTooltip(Blockly.Msg.senseBox_led_tooltip); + }, +}; + +Blockly.Blocks["sensebox_phyphox_graph"] = { + init: function () { + this.setColour(getColour().phyphox); + this.appendDummyInput() + .appendField(Blockly.Msg.sensebox_phyphox_createGraph) + .appendField(Blockly.Msg.sensebox_phyphox_graphLabel) + .appendField(new Blockly.FieldTextInput("Label"), "label"); + this.appendDummyInput() + .appendField(Blockly.Msg.sensebox_phyphox_unitx) + .appendField(new Blockly.FieldTextInput("Unit X"), "unitx"); + this.appendDummyInput() + .appendField(Blockly.Msg.sensebox_phyphox_unity) + .appendField(new Blockly.FieldTextInput("Unit Y"), "unity"); + this.appendDummyInput() + .appendField(Blockly.Msg.sensebox_phyphox_labelx) + .appendField(new Blockly.FieldTextInput("Label X"), "labelx"); + this.appendDummyInput() + .appendField(Blockly.Msg.sensebox_phyphox_labely) + .appendField(new Blockly.FieldTextInput("Label Y"), "labely"); + this.appendDummyInput() + .appendField(Blockly.Msg.sensebox_phyphox_graphStyle) + .appendField( + new Blockly.FieldDropdown([ + ["dots", "dots"], + ["line", "line"], + ]), + "style" + ); + this.appendValueInput("channel0").appendField( + Blockly.Msg.sensebox_phyphox_channel0 + ); + this.appendValueInput("channel1").appendField( + Blockly.Msg.sensebox_phyphox_channel1 + ); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setTooltip(Blockly.Msg.senseBox_led_tooltip); + }, +}; + +Blockly.Blocks["sensebox_phyphox_timestamp"] = { + init: function () { + this.setColour(getColour().phyphox); + this.appendDummyInput().appendField(Blockly.Msg.sensebox_phyphox_timestamp); + this.setOutput(true); + this.setTooltip(Blockly.Msg.senseBox_led_tooltip); + }, +}; + +Blockly.Blocks["sensebox_phyphox_channel"] = { + init: function () { + this.setColour(getColour().phyphox); + this.appendDummyInput() + .appendField(Blockly.Msg.sensebox_phyphox_channel) + .appendField( + new Blockly.FieldDropdown([ + ["1", "1"], + ["2", "2"], + ["3", "3"], + ["4", "4"], + ["5", "5"], + ]), + "channel" + ); + + this.setOutput(true); + this.setTooltip(Blockly.Msg.senseBox_led_tooltip); + }, +}; + +Blockly.Blocks["sensebox_phyphox_sendchannel"] = { + init: function () { + this.setColour(getColour().phyphox); + this.appendValueInput("value") + .appendField(Blockly.Msg.sensebox_phyphox_sendchannel) + .appendField( + new Blockly.FieldDropdown([ + ["1", "1"], + ["2", "2"], + ["3", "3"], + ["4", "4"], + ["5", "5"], + ]), + "channel" + ); + this.setPreviousStatement(true, null); this.setNextStatement(true, null); this.setTooltip(Blockly.Msg.senseBox_led_tooltip); @@ -49,10 +154,9 @@ Blockly.Blocks["sensebox_phyphox_experiment"] = { Blockly.Blocks["sensebox_phyphox_experiment_send"] = { init: function () { this.setColour(getColour().phyphox); - this.appendDummyInput().appendField( + this.appendStatementInput("sendValues").appendField( Blockly.Msg.sensebox_phyphox_writeValues ); - this.setPreviousStatement(true, null); this.setNextStatement(true, null); this.setTooltip(Blockly.Msg.senseBox_led_tooltip); diff --git a/src/components/Blockly/generator/generator.js b/src/components/Blockly/generator/generator.js index a6b02ce..841f7dc 100644 --- a/src/components/Blockly/generator/generator.js +++ b/src/components/Blockly/generator/generator.js @@ -100,6 +100,9 @@ Blockly["Arduino"].init = function (workspace) { // creates a list of code to be setup before the setup block Blockly["Arduino"].setupCode_ = Object.create(null); + // creates a list of code to be setup before the setup block + Blockly["Arduino"].phyphoxSetupCode_ = Object.create(null); + // creates a list of code to be setup before the setup block Blockly["Arduino"].loraSetupCode_ = Object.create(null); @@ -196,6 +199,7 @@ Blockly["Arduino"].finish = function (code) { let codeFunctions = ""; let functionsCode = ""; let definitionsCode = ""; + let phyphoxSetupCode = ""; let loopCodeOnce = ""; let setupCode = ""; let preSetupCode = ""; @@ -234,8 +238,18 @@ Blockly["Arduino"].finish = function (code) { loraSetupCode += Blockly["Arduino"].loraSetupCode_[key] + "\n" || ""; } + for (const key in Blockly["Arduino"].phyphoxSetupCode_) { + phyphoxSetupCode += Blockly["Arduino"].phyphoxSetupCode_[key] + "\n" || ""; + } + setupCode = - "\nvoid setup() { \n" + preSetupCode + "\n" + loraSetupCode + "\n}\n"; + "\nvoid setup() { \n" + + preSetupCode + + "\n" + + phyphoxSetupCode + + "\n" + + loraSetupCode + + "\n}\n"; let loopCode = "\nvoid loop() { \n" + loopCodeOnce + code + "\n}\n"; diff --git a/src/components/Blockly/generator/sensebox-ble.js b/src/components/Blockly/generator/sensebox-ble.js index cec99e3..1532ff7 100644 --- a/src/components/Blockly/generator/sensebox-ble.js +++ b/src/components/Blockly/generator/sensebox-ble.js @@ -5,35 +5,132 @@ Blockly.Arduino.sensebox_phyphox_init = function () { Blockly.Arduino.libraries_["phyphox_library"] = `#include `; Blockly.Arduino.libraries_["library_senseBoxMCU"] = '#include "SenseBoxMCU.h"'; - Blockly.Arduino.setupCode_["phyphox_start"] = `PhyphoxBLE::start("${name}");`; + Blockly.Arduino.phyphoxSetupCode_[ + "phyphox_start" + ] = `PhyphoxBLE::start("${name}");`; var code = ``; return code; }; Blockly.Arduino.sensebox_phyphox_experiment = function () { - var experimentname = this.getFieldValue("exeperimentname"); - var title = this.getFieldValue("title"); + var experimentname = this.getFieldValue("exeperimentname").replace( + /\s+/g, + "" + ); + var title = this.getFieldValue("title").replace(/[^a-zA-Z0-9]/g, ""); var category = this.getFieldValue("category"); var description = this.getFieldValue("description"); - Blockly.Arduino.setupCode_[ + var branch = Blockly.Arduino.statementToCode(this, "view"); + Blockly.Arduino.phyphoxSetupCode_[ `PhyphoxBleExperiment_${experimentname}` ] = `PhyphoxBleExperiment ${experimentname};`; - Blockly.Arduino.setupCode_[ + Blockly.Arduino.phyphoxSetupCode_[ `setTitle_${title}` - ] = `${experimentname}.setTitle("${title}")`; - Blockly.Arduino.setupCode_[ + ] = `${experimentname}.setTitle("${title}");`; + Blockly.Arduino.phyphoxSetupCode_[ `setCategory_${category}` - ] = `${experimentname}.setCategory("${category}")`; - Blockly.Arduino.setupCode_[ + ] = `${experimentname}.setCategory("${category}");`; + Blockly.Arduino.phyphoxSetupCode_[ `setDescription_${description}` - ] = `${experimentname}.setDescription("${description}")`; + ] = `${experimentname}.setDescription("${description}");`; + Blockly.Arduino.phyphoxSetupCode_[ + `addView_${experimentname}` + ] = `PhyphoxBleExperiment::View firstView;\nfirstView.setLabel("Messwerte"); //Create a "view"`; + Blockly.Arduino.phyphoxSetupCode_[`addGraph`] = `${branch}`; + Blockly.Arduino.phyphoxSetupCode_[ + `addView_firstview` + ] = `${experimentname}.addView(firstView);`; //Attach view to experiment + Blockly.Arduino.phyphoxSetupCode_[ + `addExperiment_${experimentname}` + ] = `PhyphoxBLE::addExperiment(${experimentname});`; //Attach experiment to server + var code = ``; return code; }; -Blockly.Arduino.sensebox_phyphox_experiment_send = function () { - var data = ""; - Blockly.Arduino.loopCodeOnce_["phyphox_poll"] = `PhyphoxBLE::poll()`; - var code = `PhyphoxBLE::write()`; +Blockly.Arduino["sensebox_phyphox_timestamp"] = function () { + var code = 0; + return [code, Blockly.Arduino.ORDER_ATOMIC]; +}; + +Blockly.Arduino["sensebox_phyphox_channel"] = function () { + var channel = parseFloat(this.getFieldValue("channel")); + var code = channel; + return [code, Blockly.Arduino.ORDER_ATOMIC]; +}; + +Blockly.Arduino.sensebox_phyphox_view = function () { + //var code = `${branch}`; + //return code; +}; + +Blockly.Arduino.sensebox_phyphox_sendchannel = function (block) { + var channel = this.getFieldValue("channel"); + var value = + Blockly.Arduino.valueToCode(this, "value", Blockly.Arduino.ORDER_ATOMIC) || + "1"; + + var code = `float channel${channel} = ${value};\n`; + return code; +}; + +Blockly.Arduino.sensebox_phyphox_graph = function () { + var label = this.getFieldValue("label").replace(/[^a-zA-Z0-9]/g, ""); + var unitx = this.getFieldValue("unitx"); + var unity = this.getFieldValue("unity"); + var labelx = this.getFieldValue("labelx"); + var labely = this.getFieldValue("labely"); + var style = this.getFieldValue("style"); + var channelX = + Blockly.Arduino.valueToCode( + this, + "channel0", + Blockly.Arduino.ORDER_ATOMIC + ) || 0; + var channelY = + Blockly.Arduino.valueToCode( + this, + "channel1", + Blockly.Arduino.ORDER_ATOMIC + ) || 1; + + var code = `PhyphoxBleExperiment::Graph ${label};\n`; //Create graph which will plot random numbers over time + code += `${label}.setLabel("${label}");\n`; + code += `${label}.setUnitX("${unitx}");\n`; + code += `${label}.setUnitY("${unity}");\n`; + code += `${label}.setLabelX("${labelx}");\n`; + code += `${label}.setLabelY("${labely}");\n`; + code += `${label}.setStyle("${style}");\n`; + code += `${label}.setChannel(${channelX}, ${channelY});\n`; + code += `firstView.addElement(${label});\n`; + return code; +}; + +Blockly.Arduino.sensebox_phyphox_experiment_send = function () { + var branch = Blockly.Arduino.statementToCode(this, "sendValues"); + var blocks = this.getDescendants(); + console.log(blocks); + var count = 0; + if (blocks !== undefined) { + for (var i = 0; i < blocks.length; i++) { + if (blocks[i].type === "sensebox_phyphox_sendchannel") { + count++; + } + } + } + if (count === 5) { + } + var string = ""; + + for (var j = 1; j <= count; j++) { + console.log("append"); + if (string === "") { + string += `channel${j}`; + } else if (string !== "") { + string += `, channel${j}`; + } + } + Blockly.Arduino.loopCodeOnce_["phyphox_poll"] = `PhyphoxBLE::poll();`; + var code = `${branch}\nPhyphoxBLE::write(${string});`; return code; }; diff --git a/src/components/Blockly/msg/de/sensebox-ble.js b/src/components/Blockly/msg/de/sensebox-ble.js index 6ebdeb2..32447a7 100644 --- a/src/components/Blockly/msg/de/sensebox-ble.js +++ b/src/components/Blockly/msg/de/sensebox-ble.js @@ -9,4 +9,17 @@ export const BLE = { sensebox_phyphox_experimentCategory: "Kategorie", sensebox_phyphox_experimentDescription: "Beschreibung", sensebox_phyphox_writeValues: "Sende Werte", + sensebox_phyphox_createView: "Mit Graphen:", + sensebox_phyphox_createGraph: "Erstelle Graph", + sensebox_phyphox_graphLabel: "", + sensebox_phyphox_unitx: "Einheit x-Achse", + sensebox_phyphox_unity: "Einheit y-Achse", + sensebox_phyphox_labelx: "Beschriftung x-Achse", + sensebox_phyphox_labely: "Beschriftung y-Achse", + sensebox_phyphox_channel0: "Wert x-Achse", + sensebox_phyphox_channel1: "Wert y-Achse", + sensebox_phyphox_timestamp: "Zeitstempel", + sensebox_phyphox_channel: "Kanal", + sensebox_phyphox_sendchannel: "sende an Kanal:", + sensebox_phyphox_graphStyle: "Stil", }; diff --git a/src/components/Blockly/msg/en.js b/src/components/Blockly/msg/en.js index 74d7b9c..41eddea 100644 --- a/src/components/Blockly/msg/en.js +++ b/src/components/Blockly/msg/en.js @@ -1,47 +1,49 @@ -import { AUDIO } from './en/audio'; -import { FAQ } from './en/faq'; -import { IO } from './en/io'; -import { LOGIC } from './en/logic'; -import { LOOPS } from './en/loops'; -import { MATH } from './en/math'; -import { MQTT } from './en/mqtt'; -import { DISPLAY } from './en/sensebox-display'; -import { LED } from './en/sensebox-led'; -import { LORA } from './en/sensebox-lora'; -import { OSEM } from './en/sensebox-osem'; -import { SD } from './en/sensebox-sd'; -import { SENSORS } from './en/sensebox-sensors'; -import { TELEGRAM } from './en/sensebox-telegram'; -import { WEB } from './en/sensebox-web'; -import { TEXT } from './en/text'; -import { TIME } from './en/time'; -import { TOURS } from './en/tours'; -import { TRANSLATIONS } from './en/translations'; -import { UI } from './en/ui'; -import { VARIABLES } from './en/variables'; -import { WEBSERVER } from './en/webserver'; +import { AUDIO } from "./en/audio"; +import { BLE } from "./en/sensebox-ble"; +import { FAQ } from "./en/faq"; +import { IO } from "./en/io"; +import { LOGIC } from "./en/logic"; +import { LOOPS } from "./en/loops"; +import { MATH } from "./en/math"; +import { MQTT } from "./en/mqtt"; +import { DISPLAY } from "./en/sensebox-display"; +import { LED } from "./en/sensebox-led"; +import { LORA } from "./en/sensebox-lora"; +import { OSEM } from "./en/sensebox-osem"; +import { SD } from "./en/sensebox-sd"; +import { SENSORS } from "./en/sensebox-sensors"; +import { TELEGRAM } from "./en/sensebox-telegram"; +import { WEB } from "./en/sensebox-web"; +import { TEXT } from "./en/text"; +import { TIME } from "./en/time"; +import { TOURS } from "./en/tours"; +import { TRANSLATIONS } from "./en/translations"; +import { UI } from "./en/ui"; +import { VARIABLES } from "./en/variables"; +import { WEBSERVER } from "./en/webserver"; export const En = { - ...AUDIO, - ...FAQ, - ...IO, - ...LOGIC, - ...LOOPS, - ...MATH, - ...MQTT, - ...DISPLAY, - ...LED, - ...LORA, - ...OSEM, - ...SD, - ...SENSORS, - ...TELEGRAM, - ...WEB, - ...TEXT, - ...TIME, - ...TOURS, - ...TRANSLATIONS, - ...UI, - ...VARIABLES, - ...WEBSERVER -} + ...AUDIO, + ...BLE, + ...FAQ, + ...IO, + ...LOGIC, + ...LOOPS, + ...MATH, + ...MQTT, + ...DISPLAY, + ...LED, + ...LORA, + ...OSEM, + ...SD, + ...SENSORS, + ...TELEGRAM, + ...WEB, + ...TEXT, + ...TIME, + ...TOURS, + ...TRANSLATIONS, + ...UI, + ...VARIABLES, + ...WEBSERVER, +}; diff --git a/src/components/Blockly/msg/en/sensebox-ble.js b/src/components/Blockly/msg/en/sensebox-ble.js new file mode 100644 index 0000000..32447a7 --- /dev/null +++ b/src/components/Blockly/msg/en/sensebox-ble.js @@ -0,0 +1,25 @@ +export const BLE = { + /** + * Phyphox Init + */ + sensebox_phyphox_init: "Phyphox Experiment", + sensebox_phyphox_createExperiment: "Erstelle Experiment", + sensebox_phyphox_experimentName: "Name des Experiments", + sensebox_phyphox_experimentTitle: "Titel", + sensebox_phyphox_experimentCategory: "Kategorie", + sensebox_phyphox_experimentDescription: "Beschreibung", + sensebox_phyphox_writeValues: "Sende Werte", + sensebox_phyphox_createView: "Mit Graphen:", + sensebox_phyphox_createGraph: "Erstelle Graph", + sensebox_phyphox_graphLabel: "", + sensebox_phyphox_unitx: "Einheit x-Achse", + sensebox_phyphox_unity: "Einheit y-Achse", + sensebox_phyphox_labelx: "Beschriftung x-Achse", + sensebox_phyphox_labely: "Beschriftung y-Achse", + sensebox_phyphox_channel0: "Wert x-Achse", + sensebox_phyphox_channel1: "Wert y-Achse", + sensebox_phyphox_timestamp: "Zeitstempel", + sensebox_phyphox_channel: "Kanal", + sensebox_phyphox_sendchannel: "sende an Kanal:", + sensebox_phyphox_graphStyle: "Stil", +}; diff --git a/src/components/Blockly/toolbox/Toolbox.js b/src/components/Blockly/toolbox/Toolbox.js index 4976ed2..3fa673a 100644 --- a/src/components/Blockly/toolbox/Toolbox.js +++ b/src/components/Blockly/toolbox/Toolbox.js @@ -349,8 +349,27 @@ class Toolbox extends React.Component { - - + + + + + + + + + + + + + + + + + + + + +