From e685724a1fd4e55de6fe4bd9f10e43ace2c7d376 Mon Sep 17 00:00:00 2001 From: Mario Pesch Date: Thu, 4 May 2023 15:12:12 +0200 Subject: [PATCH] add bn880 gps --- .env | 3 +- .../Blockly/blocks/sensebox-sensors.js | 48 +++++++++++++++- .../Blockly/generator/sensebox-sensors.js | 55 +++++++++++++++++++ src/components/Blockly/helpers/types.js | 2 +- src/components/Blockly/toolbox/Toolbox.js | 2 + 5 files changed, 107 insertions(+), 3 deletions(-) diff --git a/.env b/.env index 044e061..132392a 100644 --- a/.env +++ b/.env @@ -1,4 +1,5 @@ -REACT_APP_COMPILER_URL=https://compiler.sensebox.de +#REACT_APP_COMPILER_URL=https://compiler.sensebox.de +REACT_APP_COMPILER_URL=http://localhost:3000 REACT_APP_BOARD=sensebox-mcu REACT_APP_BLOCKLY_API=https://api.blockly.sensebox.de diff --git a/src/components/Blockly/blocks/sensebox-sensors.js b/src/components/Blockly/blocks/sensebox-sensors.js index 3aa8042..0bb64b8 100644 --- a/src/components/Blockly/blocks/sensebox-sensors.js +++ b/src/components/Blockly/blocks/sensebox-sensors.js @@ -582,4 +582,50 @@ Blockly.Blocks["sensebox_sensor_dps310"] = { this.setTooltip(Blockly.Msg.senseBox_sps30_tooltip); this.setHelpUrl(Blockly.Msg.senseBox_sps30_helpurl); }, -}; \ No newline at end of file +}; + + +/** + * GPS Module BN880 + * + */ + +Blockly.Blocks["sensebox_gps_bn880"] = { + init: function () { + var dropdownOptions = [ + [Blockly.Msg.senseBox_gps_lat, "latitude"], + [Blockly.Msg.senseBox_gps_lng, "longitude"], + [Blockly.Msg.senseBox_gps_alt, "altitude"], + [Blockly.Msg.senseBox_gps_timeStamp, "timestamp"], + ]; + this.appendDummyInput().appendField("GPS Modul BN-880"); + this.appendDummyInput() + .setAlign(Blockly.ALIGN_RIGHT) + .appendField(Blockly.Msg.senseBox_value) + .appendField(new Blockly.FieldDropdown(dropdownOptions), "dropdown"); + this.appendDummyInput() + .setAlign(Blockly.ALIGN_RIGHT) + .appendField("Serial Port:") + .appendField( + new Blockly.FieldDropdown( + selectedBoard().serialSensors), + "serial" + ); + if (this.getFieldValue("dropdown") == "timestamp") { + this.setOutput(true, Types.CHARACTER.typeName); + } else { + this.setOutput(true, Types.NUMBER.typeName); + } + this.setColour(getColour().sensebox); + this.setTooltip(Blockly.Msg.senseBox_gps_tooltip); + }, +}; + +Blockly.Blocks["sensebox_gps_isValid"] = { + init: function () { + this.appendDummyInput().appendField("GPS Modul is valid"); + this.setOutput(true, Types.BOOLEAN.typeName); + this.setColour(getColour().sensebox); + this.setTooltip(Blockly.Msg.senseBox_gps_tooltip); + }, +}; diff --git a/src/components/Blockly/generator/sensebox-sensors.js b/src/components/Blockly/generator/sensebox-sensors.js index 3929957..0b11e95 100644 --- a/src/components/Blockly/generator/sensebox-sensors.js +++ b/src/components/Blockly/generator/sensebox-sensors.js @@ -753,3 +753,58 @@ if (time_startsps > time_actualsps + intervalsps) { var code = `m.mc_${dropdown_name}`; return [code, Blockly.Arduino.ORDER_ATOMIC]; }; + + +/** + * GPS Module + * + */ + +Blockly.Arduino.sensebox_gps_bn880 = function () { + var dropdown = this.getFieldValue("dropdown"); + var serial = this.getFieldValue("serial"); + Blockly.Arduino.libraries_["library_senseBoxIO"] = "#include "; + Blockly.Arduino.libraries_["tinygps_library"] = + "#include // http://librarymanager/All#SparkFun_u-blox_GNSS_Arduino_Library"; + Blockly.Arduino.definitions_["TinyGPS"] = "TinyGPSPlus gps;"; + Blockly.Arduino.setupCode_["init_tinygps"] = ` +${serial}.begin(9600); // BN880 +while (gps.location.lat() == 0.0 && gps.location.lng() == 0.0); + ` + var code = ""; + switch (dropdown) { + case "latitude": + code = "gps.location.lat()"; + break; + case "longitude": + code = "gps.location.lng()"; + break; + case "altitude": + code = "gps.altitude.meters()"; + break; + case "timestamp": + Blockly.Arduino.variables_["define_tsBuffer"] = `char tsBuffer[21];` + Blockly.Arduino.codeFunctions_["getTimeStamp()"] = ` + char *getTimeStamp() + { + memset(tsBuffer, 0, sizeof(tsBuffer)); + if ((gps.date.isValid() == true) && (gps.time.isValid() == true)) + { + sprintf(tsBuffer, "%04d-%02d-%02dT%02d:%02d:%02dZ", + gps.date.year(), gps.date.month(), gps.date.day(), gps.time.hour(), gps.time.minute(), gps.time.second()); + } + return tsBuffer; + } + `; + code = "getTimeStamp()"; + break; + default: + code = ""; + } + return [code, Blockly.Arduino.ORDER_ATOMIC]; +}; + +Blockly.Arduino.sensebox_gps_isValid = function () { + var code ="gps.location.isValid()"; + return [code, Blockly.Arduino.ORDER_ATOMIC]; +}; diff --git a/src/components/Blockly/helpers/types.js b/src/components/Blockly/helpers/types.js index c3f9f24..610f417 100644 --- a/src/components/Blockly/helpers/types.js +++ b/src/components/Blockly/helpers/types.js @@ -104,4 +104,4 @@ export const getCompatibleTypes = (type) => { return compatibleTypes[type]; }; -export const VARIABLE_TYPES = [['SHORT_NUMBER', 'char'], ['NUMBER', 'int'], ['DECIMAL', 'long'], ['TEXT', 'String'], ['CHARACTER', 'char'], ['BOOLEAN', 'boolean'], ['NULL', 'void'], ['UNDEF', 'undefined']]; +export const VARIABLE_TYPES = [['NUMBER', 'int'], ['DECIMAL', 'long'], ['TEXT', 'String'], ['CHARACTER', 'char'], ['BOOLEAN', 'boolean'], ['NULL', 'void'], ['UNDEF', 'undefined']]; diff --git a/src/components/Blockly/toolbox/Toolbox.js b/src/components/Blockly/toolbox/Toolbox.js index bf6e6eb..426c225 100644 --- a/src/components/Blockly/toolbox/Toolbox.js +++ b/src/components/Blockly/toolbox/Toolbox.js @@ -640,6 +640,8 @@ class Toolbox extends React.Component { > + +