From dd8278193934289d5726ccf88b8a0e7c81609b61 Mon Sep 17 00:00:00 2001 From: Bjoern Date: Tue, 5 Jul 2022 23:05:54 +0200 Subject: [PATCH] added blocks for simple stepper motor --- src/components/Blockly/blocks/index.js | 1 + .../Blockly/blocks/sensebox-motor.js | 64 +++++++++++++++++++ src/components/Blockly/generator/index.js | 1 + .../Blockly/generator/sensebox-motor.js | 24 +++++++ src/components/Blockly/msg/en.js | 2 + .../Blockly/msg/en/sensebox-motors.js | 18 ++++++ src/components/Blockly/toolbox/Toolbox.js | 6 ++ 7 files changed, 116 insertions(+) create mode 100644 src/components/Blockly/blocks/sensebox-motor.js create mode 100644 src/components/Blockly/generator/sensebox-motor.js create mode 100644 src/components/Blockly/msg/en/sensebox-motors.js diff --git a/src/components/Blockly/blocks/index.js b/src/components/Blockly/blocks/index.js index 5f7fb2d..164fb14 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-motor"; import "./sensebox-lora"; import "./sensebox-led"; import "./sensebox-rtc"; diff --git a/src/components/Blockly/blocks/sensebox-motor.js b/src/components/Blockly/blocks/sensebox-motor.js new file mode 100644 index 0000000..15f115a --- /dev/null +++ b/src/components/Blockly/blocks/sensebox-motor.js @@ -0,0 +1,64 @@ +import * as Blockly from "blockly/core"; +import { getColour } from "../helpers/colour"; +import * as Types from "../helpers/types"; +import { selectedBoard } from "../helpers/board"; +import { FieldSlider } from "@blockly/field-slider"; + +/** + * 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(10, 1, 15), "rpm"); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setColour(getColour().sensebox); + 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.appendDummyInput() + .appendField(Blockly.Msg.sensebox_motors_moveStepperMotor_step) + .setAlign(Blockly.ALIGN_RIGHT) + .appendField(new Blockly.FieldNumber(2048), "steps"); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setColour(getColour().sensebox); + this.setTooltip(Blockly.Msg.sensebox_motors_moveStepperMotor_tooltip); + this.setHelpUrl(Blockly.Msg.sensebox_motors_moveStepperMotor_helpurl); + }, +}; + +/** + * Servo Motor + * + */ + + +/** + * DC Motor + * + */ + diff --git a/src/components/Blockly/generator/index.js b/src/components/Blockly/generator/index.js index 9121e25..f25834a 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-motor"; import "./sensebox-lora"; import "./sensebox-led"; import "./sensebox"; diff --git a/src/components/Blockly/generator/sensebox-motor.js b/src/components/Blockly/generator/sensebox-motor.js new file mode 100644 index 0000000..9bc91d5 --- /dev/null +++ b/src/components/Blockly/generator/sensebox-motor.js @@ -0,0 +1,24 @@ +import * as Blockly from "blockly/core"; + +/*Stepper Motor Blocks*/ +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_["stepper_motor"] = "#include "; + Blockly.Arduino.definitions_["define_stepper_motor"] = ` +#define SPU 2048 // steps per minute +Stepper stepper_motor(SPU, ${in1}, ${in2}, ${in3}, ${in4}); // stepper Motor`; + Blockly.Arduino.setupCode_["sensebox_stepper_motor_begin"] = + `Motor.setSpeed(${rpm}); // speed in rotations per minute`; + var code = ""; + return code; +}; + +Blockly.Arduino.sensebox_motors_moveStepperMotor = function () { + var steps = this.getFieldValue("steps"); + var code = "stepper_motor.step(2048); // 2048 steps correspond to one rotation"; + return code; +}; \ No newline at end of file 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..7498cc8 --- /dev/null +++ b/src/components/Blockly/msg/en/sensebox-motors.js @@ -0,0 +1,18 @@ +export const MOTORS = { + + /** + * Motors + */ + + sensebox_motors_beginStepperMotor: "Initialize Stepper Motor (28BYJ-48)", + sensebox_motors_beginStepperMotor_rpm: "Rotations per Minute", + sensebox_motors_beginStepperMotor_pins: "Input Pins", + sensebox_motors_beginStepperMotor_tooltip: "TODO", + sensebox_motors_beginStepperMotor_helpurl: "TODO", + sensebox_motors_beginStepperMotor_step: "TODO", + + sensebox_motors_moveStepperMotor: "Move Stepper Motor (28BYJ-48)", + sensebox_motors_moveStepperMotor_step: "Steps:", + sensebox_motors_moveStepperMotor_tooltip: "TODO", + sensebox_motors_moveStepperMotor_helpurl: "TODO", +} \ No newline at end of file diff --git a/src/components/Blockly/toolbox/Toolbox.js b/src/components/Blockly/toolbox/Toolbox.js index 275af4d..d0efb24 100644 --- a/src/components/Blockly/toolbox/Toolbox.js +++ b/src/components/Blockly/toolbox/Toolbox.js @@ -298,6 +298,12 @@ class Toolbox extends React.Component { + + + + + + {/*