diff --git a/package-lock.json b/package-lock.json index 83aa447..fa707a2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5077,6 +5077,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/ansi-html": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", @@ -22556,9 +22567,11 @@ } }, "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "optional": true, + "peer": true, "engines": { "node": ">=10" }, @@ -28548,6 +28561,13 @@ "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "requires": { "type-fest": "^0.21.3" + }, + "dependencies": { + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" + } } }, "ansi-html": { @@ -42256,9 +42276,11 @@ "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" }, "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "optional": true, + "peer": true }, "type-is": { "version": "1.6.18", diff --git a/src/components/Blockly/blocks/index.js b/src/components/Blockly/blocks/index.js index 5f7fb2d..87710ae 100644 --- a/src/components/Blockly/blocks/index.js +++ b/src/components/Blockly/blocks/index.js @@ -6,6 +6,7 @@ import "./sensebox-telegram"; import "./sensebox-osem"; import "./sensebox-web"; import "./sensebox-display"; +import "./sensebox-motors"; import "./sensebox-lora"; import "./sensebox-led"; import "./sensebox-rtc"; diff --git a/src/components/Blockly/blocks/sensebox-motors.js b/src/components/Blockly/blocks/sensebox-motors.js new file mode 100644 index 0000000..5fdad13 --- /dev/null +++ b/src/components/Blockly/blocks/sensebox-motors.js @@ -0,0 +1,144 @@ +import * as Blockly from "blockly/core"; +import { getColour } from "../helpers/colour"; +import { selectedBoard } from "../helpers/board"; +import { FieldSlider } from "@blockly/field-slider"; + +/** + * Servo Motor + * + */ +Blockly.Blocks["sensebox_motors_beginServoMotor"] = { + init: function () { + this.appendDummyInput() + .appendField(Blockly.Msg.sensebox_motors_beginServoMotor); + this.appendDummyInput() + .appendField(Blockly.Msg.sensebox_motors_beginServoMotor_pin) + .appendField(new Blockly.FieldDropdown(selectedBoard().digitalPins), "pin") + .setAlign(Blockly.ALIGN_RIGHT); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setColour(getColour().motors); + this.setTooltip(Blockly.Msg.sensebox_motors_beginServoMotor_tooltip); + this.setHelpUrl(Blockly.Msg.sensebox_motors_beginServoMotor_helpurl); + }, +}; + +Blockly.Blocks["sensebox_motors_moveServoMotor"] = { + init: function () { + this.appendDummyInput() + .appendField(Blockly.Msg.sensebox_motors_moveServoMotor); + this.appendDummyInput() + .appendField(Blockly.Msg.sensebox_motors_moveServoMotor_pin) + .appendField(new Blockly.FieldDropdown(selectedBoard().digitalPins), "pin") + .setAlign(Blockly.ALIGN_RIGHT); + this.appendValueInput("degrees", "Number") + .appendField(Blockly.Msg.sensebox_motors_moveServoMotor_degrees) + .setAlign(Blockly.ALIGN_RIGHT); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setColour(getColour().motors); + this.setTooltip(Blockly.Msg.sensebox_motors_moveServoMotor_tooltip); + this.setHelpUrl(Blockly.Msg.sensebox_motors_moveServoMotor_helpurl); + }, +}; + + +/** + * I2C Motor Board + * + */ +Blockly.Blocks["sensebox_motors_I2CMotorBoard_begin"] = { + init: function () { + this.appendDummyInput() + .appendField(Blockly.Msg.sensebox_motors_I2CMotorBoard_begin); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setColour(getColour().motors); + this.setTooltip(Blockly.Msg.sensebox_motors_I2CMotorBoard_begin_tooltip); + this.setHelpUrl(Blockly.Msg.sensebox_motors_I2CMotorBoard_begin_helpurl); + }, +}; + +Blockly.Blocks["sensebox_motors_I2CMotorBoard_moveDCMotor"] = { + init: function () { + var dropdownOptions = [[Blockly.Msg.sensebox_motors_I2CMotorBoard_moveDCMotor_left, '1'], + [Blockly.Msg.sensebox_motors_I2CMotorBoard_moveDCMotor_right, '2']]; + + this.appendDummyInput() + .appendField(Blockly.Msg.sensebox_motors_I2CMotorBoard_moveDCMotor) + .appendField(new Blockly.FieldDropdown(dropdownOptions), "motor") + .appendField(Blockly.Msg.sensebox_motors_I2CMotorBoard_moveDCMotor_motor); + this.appendValueInput("speed", "Number") + .appendField(Blockly.Msg.sensebox_motors_I2CMotorBoard_moveDCMotor_speed) + .setAlign(Blockly.ALIGN_RIGHT); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setColour(getColour().motors); + this.setTooltip(Blockly.Msg.sensebox_motors_I2CMotorBoard_moveDCMotor_tooltip); + this.setHelpUrl(Blockly.Msg.sensebox_motors_I2CMotorBoard_moveDCMotor_helpurl); + }, +}; + +Blockly.Blocks["sensebox_motors_I2CMotorBoard_stopDCMotor"] = { + init: function () { + var dropdownOptions = [[Blockly.Msg.sensebox_motors_I2CMotorBoard_stopDCMotor_left, '1'], + [Blockly.Msg.sensebox_motors_I2CMotorBoard_stopDCMotor_right, '2']]; + + this.appendDummyInput() + .appendField(Blockly.Msg.sensebox_motors_I2CMotorBoard_stopDCMotor) + .appendField(new Blockly.FieldDropdown(dropdownOptions), "motor") + .appendField(Blockly.Msg.sensebox_motors_I2CMotorBoard_stopDCMotor_motor) + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setColour(getColour().motors); + this.setTooltip(Blockly.Msg.sensebox_motors_I2CMotorBoard_stopDCMotor_tooltip); + this.setHelpUrl(Blockly.Msg.sensebox_motors_I2CMotorBoard_stopDCMotor_helpurl); + }, +}; + + +/** + * Stepper Motor + * + */ +Blockly.Blocks["sensebox_motors_beginStepperMotor"] = { + init: function () { + this.appendDummyInput() + .appendField(Blockly.Msg.sensebox_motors_beginStepperMotor); + this.appendDummyInput() + .appendField(Blockly.Msg.sensebox_motors_beginStepperMotor_pins); + this.appendDummyInput() + .setAlign(Blockly.ALIGN_RIGHT) + .appendField(new Blockly.FieldDropdown(selectedBoard().digitalPins), "in1") + .appendField(new Blockly.FieldDropdown(selectedBoard().digitalPins), "in2") + .appendField(new Blockly.FieldDropdown(selectedBoard().digitalPins), "in3") + .appendField(new Blockly.FieldDropdown(selectedBoard().digitalPins), "in4"); + this.setFieldValue("1", "in1"); + this.setFieldValue("2", "in2"); + this.setFieldValue("3", "in3"); + this.setFieldValue("4", "in4"); + this.appendDummyInput() + .appendField(Blockly.Msg.sensebox_motors_beginStepperMotor_rpm) + .appendField(new FieldSlider(3, 1, 3), "rpm"); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setColour(getColour().motors); + this.setTooltip(Blockly.Msg.sensebox_motors_beginStepperMotor_tooltip); + this.setHelpUrl(Blockly.Msg.sensebox_motors_beginStepperMotor_helpurl); + }, +}; + +Blockly.Blocks["sensebox_motors_moveStepperMotor"] = { + init: function () { + this.appendDummyInput() + .appendField(Blockly.Msg.sensebox_motors_moveStepperMotor); + this.appendValueInput("steps", "Number") + .setAlign(Blockly.ALIGN_RIGHT) + .appendField(Blockly.Msg.sensebox_motors_moveStepperMotor_step); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setColour(getColour().motors); + this.setTooltip(Blockly.Msg.sensebox_motors_moveStepperMotor_tooltip); + this.setHelpUrl(Blockly.Msg.sensebox_motors_moveStepperMotor_helpurl); + }, +}; \ No newline at end of file diff --git a/src/components/Blockly/generator/index.js b/src/components/Blockly/generator/index.js index 9121e25..cc10ff7 100644 --- a/src/components/Blockly/generator/index.js +++ b/src/components/Blockly/generator/index.js @@ -5,6 +5,7 @@ import "./sensebox-telegram"; import "./sensebox-osem"; import "./sensebox-web"; import "./sensebox-display"; +import "./sensebox-motors"; import "./sensebox-lora"; import "./sensebox-led"; import "./sensebox"; diff --git a/src/components/Blockly/generator/sensebox-motors.js b/src/components/Blockly/generator/sensebox-motors.js new file mode 100644 index 0000000..b265039 --- /dev/null +++ b/src/components/Blockly/generator/sensebox-motors.js @@ -0,0 +1,77 @@ +import * as Blockly from "blockly/core"; + + +/** + * Servo Motor + * + */ +Blockly.Arduino.sensebox_motors_beginServoMotor = function () { + var pin = this.getFieldValue("pin"); + Blockly.Arduino.libraries_["library_senseBoxIO"] = "#include "; + Blockly.Arduino.libraries_["include_servo_motor"] = "#include "; + Blockly.Arduino.definitions_[`define_servo_motor_${pin}`] = `Servo servo_motor_${pin}; // servo Motor`; + Blockly.Arduino.setupCode_[`setup_servo_motor_${pin}`] = `servo_motor_${pin}.attach(${pin}); // attach servo motor to pin ${pin}`; + var code = ""; + return code; +}; + +Blockly.Arduino.sensebox_motors_moveServoMotor = function () { + var pin = this.getFieldValue("pin"); + var degrees = Blockly.Arduino.valueToCode(this, 'degrees', Blockly.Arduino.ORDER_ATOMIC) || "90"; + var code = `servo_motor_${pin}.write(${degrees}); // move servo motor to ${degrees} degrees\n`; + return code; +}; + +/** + * I2C Motor Board + * + */ +Blockly.Arduino.sensebox_motors_I2CMotorBoard_begin = function () { + Blockly.Arduino.libraries_["library_senseBoxIO"] = "#include "; + Blockly.Arduino.libraries_["include_i2c_motor_board"] = "#include "; + Blockly.Arduino.definitions_["define_i2c_motor_board"] = ` +#define I2C_MOTOR_BOARD_ADDRESS 0x0f // default I2C address of I2C Motor Board`; + Blockly.Arduino.setupCode_["setup_i2c_motor_board"] = ` + Motor.begin(I2C_MOTOR_BOARD_ADDRESS); // Initialize I2C Motor Board`; + var code = ""; + return code; +}; + +Blockly.Arduino.sensebox_motors_I2CMotorBoard_moveDCMotor = function () { + var motor = this.getFieldValue("motor"); + var speed = Blockly.Arduino.valueToCode(this, 'speed', Blockly.Arduino.ORDER_ATOMIC) || "50"; + var code = `Motor.speed(MOTOR${motor}, ${speed}); // set speed of motor\n`; + return code; +}; + +Blockly.Arduino.sensebox_motors_I2CMotorBoard_stopDCMotor = function () { + var motor = this.getFieldValue("motor"); + var code = `Motor.stop(MOTOR${motor}); // stop motor\n`; + return code; +}; + + +/** + * Stepper Motor + */ +Blockly.Arduino.sensebox_motors_beginStepperMotor = function () { + var in1 = this.getFieldValue("in1"); + var in2 = this.getFieldValue("in2"); + var in3 = this.getFieldValue("in3"); + var in4 = this.getFieldValue("in4"); + var rpm = this.getFieldValue("rpm"); + Blockly.Arduino.libraries_["library_senseBoxIO"] = "#include "; + Blockly.Arduino.libraries_["include_stepper_motor"] = "#include "; + Blockly.Arduino.definitions_["define_stepper_motor"] = ` +Stepper stepper_motor(2048, ${in1}, ${in2}, ${in3}, ${in4}); // stepper Motor with 2048 steps per rotation`; + Blockly.Arduino.setupCode_["setup_stepper_motor"] = + `stepper_motor.setSpeed(${rpm}); // speed in rotations per minute`; + var code = ""; + return code; +}; + +Blockly.Arduino.sensebox_motors_moveStepperMotor = function () { + var steps = Blockly.Arduino.valueToCode(this, 'steps', Blockly.Arduino.ORDER_ATOMIC) || '2048'; + var code = `stepper_motor.step(${steps}); // 2048 steps correspond to one rotation\n`; + return code; +}; \ No newline at end of file diff --git a/src/components/Blockly/helpers/colour.js b/src/components/Blockly/helpers/colour.js index 2cf7f78..e4f4cca 100644 --- a/src/components/Blockly/helpers/colour.js +++ b/src/components/Blockly/helpers/colour.js @@ -14,6 +14,7 @@ const colours = { serial: 230, webserver: 40, phyphox: 25, + motors: 190, }; export const getColour = () => { diff --git a/src/components/Blockly/msg/de.js b/src/components/Blockly/msg/de.js index c4211f7..020b5dd 100644 --- a/src/components/Blockly/msg/de.js +++ b/src/components/Blockly/msg/de.js @@ -7,6 +7,7 @@ import { LOOPS } from "./de/loops"; import { MATH } from "./de/math"; import { MQTT } from "./de/mqtt"; import { DISPLAY } from "./de/sensebox-display"; +import { MOTORS } from "./de/sensebox-motors"; import { LED } from "./de/sensebox-led"; import { LORA } from "./de/sensebox-lora"; import { OSEM } from "./de/sensebox-osem"; @@ -34,6 +35,7 @@ export const De = { ...MATH, ...MQTT, ...DISPLAY, + ...MOTORS, ...LED, ...LORA, ...OSEM, diff --git a/src/components/Blockly/msg/de/sensebox-motors.js b/src/components/Blockly/msg/de/sensebox-motors.js new file mode 100644 index 0000000..686d338 --- /dev/null +++ b/src/components/Blockly/msg/de/sensebox-motors.js @@ -0,0 +1,48 @@ +export const MOTORS = { + + /** + * Motors + */ + + sensebox_motors_beginServoMotor: "Initialisiere Servomotor", + sensebox_motors_beginServoMotor_pin: "Pin:", + sensebox_motors_beginServoMotor_tooltip: "Verbinde einen digitalen Pin mit dem orangen Kabel des Servomotrors. Verbinde zusätzlich GND mit GND (schwarzes und braunes Kabel) und 5V mit 5V (rotes Kabel).", + sensebox_motors_beginServoMotor_helpurl: "https://de.wikipedia.org/wiki/Servomotor", + + sensebox_motors_moveServoMotor: "Bewege Servomotor", + sensebox_motors_moveServoMotor_pin: "Pin:", + sensebox_motors_moveServoMotor_degrees: "Winkel in Grad:", + sensebox_motors_moveServoMotor_tooltip: "Der Servomotor kann zwischen 0 und 180 Grad bewegt werden.", + sensebox_motors_moveServoMotor_helpurl: "https://de.wikipedia.org/wiki/Servomotor", + + sensebox_motors_I2CMotorBoard_begin: "Initialize I2C Motor Board", + sensebox_motors_I2CMotorBoard_begin_tooltip: "Connect the I2C Moztor Board with the two DC Motors to one of the five I2C-Ports. Use this Block inside the setup()-function.", + sensebox_motors_I2CMotorBoard_begin_helpurl: "TODO", + + sensebox_motors_I2CMotorBoard_moveDCMotor: "Move", + sensebox_motors_I2CMotorBoard_moveDCMotor_left: "left", + sensebox_motors_I2CMotorBoard_moveDCMotor_right: "right", + sensebox_motors_I2CMotorBoard_moveDCMotor_motor: "DC Motor at I2C Motor Board", + sensebox_motors_I2CMotorBoard_moveDCMotor_speed: "Speed:", + sensebox_motors_I2CMotorBoard_moveDCMotor_tooltip: "You can set the Speed between -100 and 100.", + sensebox_motors_I2CMotorBoard_moveDCMotor_helpurl: "TODO", + + sensebox_motors_I2CMotorBoard_stopDCMotor: "Stop ", + sensebox_motors_I2CMotorBoard_stopDCMotor_left: "left", + sensebox_motors_I2CMotorBoard_stopDCMotor_right: "right", + sensebox_motors_I2CMotorBoard_stopDCMotor_motor: "DC Motor at I2C Motor Board", + sensebox_motors_I2CMotorBoard_stopDCMotor_tooltip: "TODO", + sensebox_motors_I2CMotorBoard_stopDCMotor_helpurl: "TODO", + + sensebox_motors_beginStepperMotor: "Initialize Stepper Motor (28BYJ-48)", + sensebox_motors_beginStepperMotor_rpm: "Rotations per Minute:", + sensebox_motors_beginStepperMotor_pins: "Input Pins (IN1-IN4):", + sensebox_motors_beginStepperMotor_tooltip: "Connect four of the the digital pins in the right order to the inputs IN1-IN4 on the stepper motor board. Connect a GND pin (black wire) to the minus pin and a 5V pin (red wire) to the plus pin on the board. Also connect the stepper motor to this Board. Use this Block inside the setup()-function.", + sensebox_motors_beginStepperMotor_helpurl: "TODO", + + sensebox_motors_moveStepperMotor: "Move Stepper Motor (28BYJ-48)", + sensebox_motors_moveStepperMotor_step: "Steps:", + sensebox_motors_moveStepperMotor_tooltip: "Move stepper motor. 2048 steps equal a full rotation.", + sensebox_motors_moveStepperMotor_helpurl: "TODO", +}; + diff --git a/src/components/Blockly/msg/de/ui.js b/src/components/Blockly/msg/de/ui.js index c705d57..f73db9f 100644 --- a/src/components/Blockly/msg/de/ui.js +++ b/src/components/Blockly/msg/de/ui.js @@ -12,6 +12,7 @@ export const UI = { toolbox_variables: "Variablen", toolbox_serial: "Seriell", toolbox_advanced: "Erweitert", + toolbox_motors: "Motoren", variable_NUMBER: "Zahl (int)", variable_SHORT_NUMBER: "char", variable_LONG: "große Zahl (long)", diff --git a/src/components/Blockly/msg/en.js b/src/components/Blockly/msg/en.js index cf01e68..7ba9773 100644 --- a/src/components/Blockly/msg/en.js +++ b/src/components/Blockly/msg/en.js @@ -8,6 +8,7 @@ import { MATH } from "./en/math"; import { MQTT } from "./en/mqtt"; import { SENSEBOX } from "./en/sensebox"; import { DISPLAY } from "./en/sensebox-display"; +import { MOTORS } from "./en/sensebox-motors"; import { LED } from "./en/sensebox-led"; import { LORA } from "./en/sensebox-lora"; import { OSEM } from "./en/sensebox-osem"; @@ -34,6 +35,7 @@ export const En = { ...MATH, ...MQTT, ...DISPLAY, + ...MOTORS, ...LED, ...LORA, ...OSEM, diff --git a/src/components/Blockly/msg/en/sensebox-motors.js b/src/components/Blockly/msg/en/sensebox-motors.js new file mode 100644 index 0000000..00f7462 --- /dev/null +++ b/src/components/Blockly/msg/en/sensebox-motors.js @@ -0,0 +1,48 @@ +export const MOTORS = { + + /** + * Motors + */ + + sensebox_motors_beginServoMotor: "Initialize Servo Motor", + sensebox_motors_beginServoMotor_pin: "Pin:", + sensebox_motors_beginServoMotor_tooltip: "Connect one of the the digital pins to the orange wire of the Servo Motor. Also Connect GND to GND (black and brown wire) and 5V to 5V (red wire).", + sensebox_motors_beginServoMotor_helpurl: "https://en.wikipedia.org/wiki/Servomotor", + + sensebox_motors_moveServoMotor: "Move Servo Motor", + sensebox_motors_moveServoMotor_pin: "Pin:", + sensebox_motors_moveServoMotor_degrees: "Degrees:", + sensebox_motors_moveServoMotor_tooltip: "The Servo Motor can be moved to a spezific angle between 0 and 180 degrees.", + sensebox_motors_moveServoMotor_helpurl: "https://en.wikipedia.org/wiki/Servomotor", + + sensebox_motors_I2CMotorBoard_begin: "Initialize I2C Motor Board", + sensebox_motors_I2CMotorBoard_begin_tooltip: "Connect the I2C Moztor Board with the two DC Motors to one of the five I2C-Ports. Use this Block inside the setup()-function.", + sensebox_motors_I2CMotorBoard_begin_helpurl: "TODO", + + sensebox_motors_I2CMotorBoard_moveDCMotor: "Move", + sensebox_motors_I2CMotorBoard_moveDCMotor_left: "left", + sensebox_motors_I2CMotorBoard_moveDCMotor_right: "right", + sensebox_motors_I2CMotorBoard_moveDCMotor_motor: "DC Motor at I2C Motor Board", + sensebox_motors_I2CMotorBoard_moveDCMotor_speed: "Speed:", + sensebox_motors_I2CMotorBoard_moveDCMotor_tooltip: "You can set the Speed between -100 and 100.", + sensebox_motors_I2CMotorBoard_moveDCMotor_helpurl: "TODO", + + sensebox_motors_I2CMotorBoard_stopDCMotor: "Stop ", + sensebox_motors_I2CMotorBoard_stopDCMotor_left: "left", + sensebox_motors_I2CMotorBoard_stopDCMotor_right: "right", + sensebox_motors_I2CMotorBoard_stopDCMotor_motor: "DC Motor at I2C Motor Board", + sensebox_motors_I2CMotorBoard_stopDCMotor_tooltip: "TODO", + sensebox_motors_I2CMotorBoard_stopDCMotor_helpurl: "TODO", + + sensebox_motors_beginStepperMotor: "Initialize Stepper Motor (28BYJ-48)", + sensebox_motors_beginStepperMotor_rpm: "Rotations per Minute:", + sensebox_motors_beginStepperMotor_pins: "Input Pins (IN1-IN4):", + sensebox_motors_beginStepperMotor_tooltip: "Connect four of the the digital pins in the right order to the inputs IN1-IN4 on the stepper motor board. Connect a GND pin (black wire) to the minus pin and a 5V pin (red wire) to the plus pin on the board. Also connect the stepper motor to this Board. Use this Block inside the setup()-function.", + sensebox_motors_beginStepperMotor_helpurl: "TODO", + + sensebox_motors_moveStepperMotor: "Move Stepper Motor (28BYJ-48)", + sensebox_motors_moveStepperMotor_step: "Steps:", + sensebox_motors_moveStepperMotor_tooltip: "Move stepper motor. 2048 steps equal a full rotation.", + sensebox_motors_moveStepperMotor_helpurl: "TODO", +}; + diff --git a/src/components/Blockly/msg/en/ui.js b/src/components/Blockly/msg/en/ui.js index 1b5323a..530fd90 100644 --- a/src/components/Blockly/msg/en/ui.js +++ b/src/components/Blockly/msg/en/ui.js @@ -12,6 +12,7 @@ export const UI = { toolbox_variables: "Variables", toolbox_serial: "Serial", toolbox_advanced: "Erweitert", + toolbox_motors: "Motors", variable_NUMBER: "Number (int)", variable_SHORT_NUMBER: "char", variable_LONG: " Zahl (long)", diff --git a/src/components/Blockly/toolbox/Toolbox.js b/src/components/Blockly/toolbox/Toolbox.js index 275af4d..00cc54d 100644 --- a/src/components/Blockly/toolbox/Toolbox.js +++ b/src/components/Blockly/toolbox/Toolbox.js @@ -298,6 +298,7 @@ class Toolbox extends React.Component { + {/* @@ -645,6 +646,33 @@ class Toolbox extends React.Component { + + + + + + 90 + + + + {/* + + + + 100 + + + + + + + + + 2048 + + + */} +