diff --git a/package-lock.json b/package-lock.json index 6fd2bef..c24c9e1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1096,6 +1096,16 @@ "to-fast-properties": "^2.0.0" } }, + "@blockly/block-plus-minus": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@blockly/block-plus-minus/-/block-plus-minus-2.0.8.tgz", + "integrity": "sha512-LRn+Js2rZ14XyrSoEf7wTz6/ESNW2MI5TkXJ2wWFJVA+/E4lTfBwXeZpRFYRP9DZwNEv9alZETyEcBbK+FCZKw==" + }, + "@blockly/field-slider": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@blockly/field-slider/-/field-slider-2.0.7.tgz", + "integrity": "sha512-kSFeeyfJboj2zOz55hgunFzRHQZUTWmKgw695GOwOGvt4wTG5SQ2/pNnd+C41vdjaOdjaI8tlwiyWg4oJ/MPeA==" + }, "@cnakazawa/watch": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", @@ -3694,6 +3704,17 @@ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" }, + "clipboard": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.6.tgz", + "integrity": "sha512-g5zbiixBRk/wyKakSwCKd7vQXDjFnAMGHoEyBogG/bw9kTD9GvdAvaoRR1ALcEzt3pVKxZR0pViekPMIS0QyGg==", + "optional": true, + "requires": { + "good-listener": "^1.2.2", + "select": "^1.1.2", + "tiny-emitter": "^2.0.0" + } + }, "cliui": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", @@ -4588,6 +4609,12 @@ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" }, + "delegate": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", + "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==", + "optional": true + }, "depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", @@ -6350,6 +6377,15 @@ } } }, + "good-listener": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", + "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=", + "optional": true, + "requires": { + "delegate": "^3.1.2" + } + }, "graceful-fs": { "version": "4.2.4", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", @@ -10490,6 +10526,14 @@ } } }, + "prismjs": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.21.0.tgz", + "integrity": "sha512-uGdSIu1nk3kej2iZsLyDoJ7e9bnPzIgY0naW/HdknGj61zScaprVEVGHrPoXqI+M9sP0NDnTK2jpkvmldpuqDw==", + "requires": { + "clipboard": "^2.0.0" + } + }, "process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", @@ -11659,6 +11703,12 @@ "ajv-keywords": "^3.4.1" } }, + "select": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", + "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=", + "optional": true + }, "select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", @@ -12827,6 +12877,12 @@ "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=" }, + "tiny-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==", + "optional": true + }, "tiny-invariant": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.1.0.tgz", diff --git a/package.json b/package.json index 6a3180b..ff3634c 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,8 @@ "version": "0.1.0", "private": true, "dependencies": { + "@blockly/block-plus-minus": "^2.0.8", + "@blockly/field-slider": "^2.0.7", "@fortawesome/fontawesome-svg-core": "^1.2.30", "@fortawesome/free-solid-svg-icons": "^5.14.0", "@fortawesome/react-fontawesome": "^0.1.11", diff --git a/src/components/Blockly/blocks/index.js b/src/components/Blockly/blocks/index.js index b35391f..40770dd 100644 --- a/src/components/Blockly/blocks/index.js +++ b/src/components/Blockly/blocks/index.js @@ -7,6 +7,7 @@ import './sensebox-osem'; import './sensebox-web'; import './sensebox-display'; import './sensebox-lora'; +import './sensebox-led'; import './io'; import './math'; import './map'; diff --git a/src/components/Blockly/blocks/sensebox-display.js b/src/components/Blockly/blocks/sensebox-display.js index 2f163b5..795f295 100644 --- a/src/components/Blockly/blocks/sensebox-display.js +++ b/src/components/Blockly/blocks/sensebox-display.js @@ -1,6 +1,8 @@ import * as Blockly from 'blockly/core'; import { getColour } from '../helpers/colour'; import * as Types from '../helpers/types' +import { FieldSlider } from '@blockly/field-slider'; +import { Field } from '..'; Blockly.Blocks['sensebox_display_beginDisplay'] = { @@ -35,12 +37,15 @@ Blockly.Blocks['sensebox_display_printDisplay'] = { this.appendDummyInput() .appendField(Blockly.Msg.senseBox_display_color) .appendField(new Blockly.FieldDropdown([[Blockly.Msg.senseBox_display_white, "WHITE,BLACK"], [Blockly.Msg.senseBox_display_black, "BLACK,WHITE"]]), "COLOR"); - this.appendValueInput("SIZE", 'Number') - .appendField(Blockly.Msg.senseBox_display_setSize); - this.appendValueInput("X", 'Number') - .appendField(Blockly.Msg.senseBox_display_printDisplay_x); - this.appendValueInput("Y", 'Number') - .appendField(Blockly.Msg.senseBox_display_printDisplay_y); + this.appendDummyInput() + .appendField(Blockly.Msg.senseBox_display_setSize) + .appendField(new FieldSlider(1, 1, 4), "SIZE"); + this.appendDummyInput() + .appendField(Blockly.Msg.senseBox_display_printDisplay_x) + .appendField(new FieldSlider(0, 0, 64), "X"); + this.appendDummyInput() + .appendField(Blockly.Msg.senseBox_display_printDisplay_y) + .appendField(new FieldSlider(0, 0, 128), "Y"); this.appendValueInput('printDisplay') .appendField(Blockly.Msg.senseBox_display_printDisplay_value) .setCheck(null); diff --git a/src/components/Blockly/blocks/sensebox-led.js b/src/components/Blockly/blocks/sensebox-led.js new file mode 100644 index 0000000..ef9089a --- /dev/null +++ b/src/components/Blockly/blocks/sensebox-led.js @@ -0,0 +1,28 @@ +import * as Blockly from 'blockly'; +import { FieldSlider } from '@blockly/field-slider'; +import { getColour } from '../helpers/colour' +import { selectedBoard } from '../helpers/board' + + +Blockly.Blocks['sensebox_rgb_led'] = { + init: function () { + this.setColour(getColour().sensebox); + this.appendDummyInput() + .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.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setTooltip(Blockly.Msg.senseBox_rgb_led_tip); + this.setHelpUrl('https://sensebox.de/books'); + } +}; \ No newline at end of file diff --git a/src/components/Blockly/generator/index.js b/src/components/Blockly/generator/index.js index b86e0df..f4370fc 100644 --- a/src/components/Blockly/generator/index.js +++ b/src/components/Blockly/generator/index.js @@ -6,6 +6,7 @@ import './sensebox-osem'; import './sensebox-web'; import './sensebox-display'; import './sensebox-lora'; +import './sensebox-led'; import './logic'; import './math'; import './map'; diff --git a/src/components/Blockly/generator/sensebox-led.js b/src/components/Blockly/generator/sensebox-led.js new file mode 100644 index 0000000..7b76c56 --- /dev/null +++ b/src/components/Blockly/generator/sensebox-led.js @@ -0,0 +1,15 @@ +import * as Blockly from 'blockly/core'; +import { Block } from 'blockly'; + +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' + 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();'; + + var code = 'rgb_led_' + dropdown_pin + '.setPixelColor(0,rgb_led_' + dropdown_pin + '.Color(' + red + ',' + green + ',' + blue + '));\n'; + code += 'rgb_led_' + dropdown_pin + '.show();'; + return code; +}; \ No newline at end of file diff --git a/src/components/Blockly/toolbox/Toolbox.js b/src/components/Blockly/toolbox/Toolbox.js index cfa858b..0a1f3af 100644 --- a/src/components/Blockly/toolbox/Toolbox.js +++ b/src/components/Blockly/toolbox/Toolbox.js @@ -1,6 +1,7 @@ import React from 'react'; import { Block, Value, Field, Shadow, Category } from '../'; import { getColour } from '../helpers/colour' +import '@blockly/block-plus-minus'; class Toolbox extends React.Component { @@ -23,6 +24,9 @@ class Toolbox extends React.Component { + + +