added servo and dc motor blocks
This commit is contained in:
		
							parent
							
								
									dd82781939
								
							
						
					
					
						commit
						de15bcf993
					
				| @ -1,6 +1,5 @@ | |||||||
| import * as Blockly from "blockly/core"; | import * as Blockly from "blockly/core"; | ||||||
| import { getColour } from "../helpers/colour"; | import { getColour } from "../helpers/colour"; | ||||||
| import * as Types from "../helpers/types"; |  | ||||||
| import { selectedBoard } from "../helpers/board"; | import { selectedBoard } from "../helpers/board"; | ||||||
| import { FieldSlider } from "@blockly/field-slider"; | import { FieldSlider } from "@blockly/field-slider"; | ||||||
| 
 | 
 | ||||||
| @ -39,10 +38,9 @@ Blockly.Blocks["sensebox_motors_moveStepperMotor"] = { | |||||||
|     init: function () { |     init: function () { | ||||||
|         this.appendDummyInput() |         this.appendDummyInput() | ||||||
|             .appendField(Blockly.Msg.sensebox_motors_moveStepperMotor); |             .appendField(Blockly.Msg.sensebox_motors_moveStepperMotor); | ||||||
|         this.appendDummyInput() |         this.appendValueInput("steps", "Number") | ||||||
|             .appendField(Blockly.Msg.sensebox_motors_moveStepperMotor_step) |  | ||||||
|             .setAlign(Blockly.ALIGN_RIGHT) |             .setAlign(Blockly.ALIGN_RIGHT) | ||||||
|             .appendField(new Blockly.FieldNumber(2048), "steps"); |             .appendField(Blockly.Msg.sensebox_motors_moveStepperMotor_step); | ||||||
|         this.setPreviousStatement(true, null); |         this.setPreviousStatement(true, null); | ||||||
|         this.setNextStatement(true, null); |         this.setNextStatement(true, null); | ||||||
|         this.setColour(getColour().sensebox); |         this.setColour(getColour().sensebox); | ||||||
| @ -55,10 +53,91 @@ Blockly.Blocks["sensebox_motors_moveStepperMotor"] = { | |||||||
|  * Servo Motor |  * 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().sensebox); | ||||||
|  |         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().sensebox); | ||||||
|  |         this.setTooltip(Blockly.Msg.sensebox_motors_moveStepperMotor_tooltip); | ||||||
|  |         this.setHelpUrl(Blockly.Msg.sensebox_motors_moveStepperMotor_helpurl); | ||||||
|  |     }, | ||||||
|  | }; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
|  * DC Motor |  * 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().sensebox); | ||||||
|  |         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().sensebox); | ||||||
|  |         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().sensebox); | ||||||
|  |         this.setTooltip(Blockly.Msg.sensebox_motors_I2CMotorBoard_stopDCMotor_tooltip); | ||||||
|  |         this.setHelpUrl(Blockly.Msg.sensebox_motors_I2CMotorBoard_stopDCMotor_helpurl); | ||||||
|  |     }, | ||||||
|  | }; | ||||||
| @ -1,24 +1,73 @@ | |||||||
| import * as Blockly from "blockly/core"; | import * as Blockly from "blockly/core"; | ||||||
| 
 | 
 | ||||||
| /*Stepper Motor Blocks*/ | /** | ||||||
|  |  * Stepper Motor | ||||||
|  |  */ | ||||||
| Blockly.Arduino.sensebox_motors_beginStepperMotor = function () { | Blockly.Arduino.sensebox_motors_beginStepperMotor = function () { | ||||||
|     var in1 = this.getFieldValue("in1"); |     var in1 = this.getFieldValue("in1"); | ||||||
|     var in2 = this.getFieldValue("in2"); |     var in2 = this.getFieldValue("in2"); | ||||||
|     var in3 = this.getFieldValue("in3"); |     var in3 = this.getFieldValue("in3"); | ||||||
|     var in4 = this.getFieldValue("in4"); |     var in4 = this.getFieldValue("in4"); | ||||||
|     var rpm = this.getFieldValue("rpm"); |     var rpm = this.getFieldValue("rpm"); | ||||||
|     Blockly.Arduino.libraries_["stepper_motor"] = "#include <Stepper.h>"; |     Blockly.Arduino.libraries_["include_stepper_motor"] = "#include <Stepper.h>"; | ||||||
|     Blockly.Arduino.definitions_["define_stepper_motor"] = ` |     Blockly.Arduino.definitions_["define_stepper_motor"] = ` | ||||||
| #define SPU 2048 // steps per minute
 | Stepper stepper_motor(2048, ${in1}, ${in2}, ${in3}, ${in4}); // stepper Motor with 2048 steps per rotation`;
 | ||||||
| Stepper stepper_motor(SPU, ${in1}, ${in2}, ${in3}, ${in4}); // stepper Motor`;
 |     Blockly.Arduino.setupCode_["setup_stepper_motor"] = | ||||||
|     Blockly.Arduino.setupCode_["sensebox_stepper_motor_begin"] = |         `stepper_motor.setSpeed(${rpm}); // speed in rotations per minute`; | ||||||
|         `Motor.setSpeed(${rpm}); // speed in rotations per minute`; |  | ||||||
|     var code = ""; |     var code = ""; | ||||||
|     return code; |     return code; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| Blockly.Arduino.sensebox_motors_moveStepperMotor = function () { | Blockly.Arduino.sensebox_motors_moveStepperMotor = function () { | ||||||
|     var steps = this.getFieldValue("steps"); |     var steps = Blockly.Arduino.valueToCode(this, 'steps', Blockly.Arduino.ORDER_ATOMIC) || '2048'; | ||||||
|     var code = "stepper_motor.step(2048);  // 2048 steps correspond to one rotation"; |     var code = `stepper_motor.step(${steps});  // 2048 steps correspond to one rotation\n`; | ||||||
|  |     return code; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Servo Motor | ||||||
|  |  *  | ||||||
|  |  */ | ||||||
|  | Blockly.Arduino.sensebox_motors_beginServoMotor = function () { | ||||||
|  |     var pin = this.getFieldValue("pin"); | ||||||
|  |     Blockly.Arduino.libraries_["include_servo_motor"] = "#include <Servo.h>"; | ||||||
|  |     Blockly.Arduino.definitions_["define_servo_motor"] = `Servo servo_motor_${pin}; // servo Motor`; | ||||||
|  |     Blockly.Arduino.setupCode_["setup_servo_moto"] = `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_["include_i2c_motor_board"] = "#include <Grove_I2C_Motor_Driver.h>"; | ||||||
|  |     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; |     return code; | ||||||
| }; | }; | ||||||
| @ -5,14 +5,45 @@ export const MOTORS = { | |||||||
|      */ |      */ | ||||||
| 
 | 
 | ||||||
|     sensebox_motors_beginStepperMotor: "Initialize Stepper Motor (28BYJ-48)", |     sensebox_motors_beginStepperMotor: "Initialize Stepper Motor (28BYJ-48)", | ||||||
|     sensebox_motors_beginStepperMotor_rpm: "Rotations per Minute", |     sensebox_motors_beginStepperMotor_rpm: "Rotations per Minute:", | ||||||
|     sensebox_motors_beginStepperMotor_pins: "Input Pins", |     sensebox_motors_beginStepperMotor_pins: "Input Pins (IN1-IN4):", | ||||||
|     sensebox_motors_beginStepperMotor_tooltip: "TODO", |     sensebox_motors_beginStepperMotor_tooltip: "TODO", | ||||||
|     sensebox_motors_beginStepperMotor_helpurl: "TODO", |     sensebox_motors_beginStepperMotor_helpurl: "TODO", | ||||||
|     sensebox_motors_beginStepperMotor_step: "TODO", |     sensebox_motors_beginStepperMotor_step: "TODO", | ||||||
| 
 | 
 | ||||||
|     sensebox_motors_moveStepperMotor: "Move Stepper Motor (28BYJ-48)", |     sensebox_motors_moveStepperMotor: "Move Stepper Motor (28BYJ-48)", | ||||||
|     sensebox_motors_moveStepperMotor_step: "Steps:", |     sensebox_motors_moveStepperMotor_step: "Steps (2048 steps equal a full rotation):", | ||||||
|     sensebox_motors_moveStepperMotor_tooltip: "TODO", |     sensebox_motors_moveStepperMotor_tooltip: "TODO", | ||||||
|     sensebox_motors_moveStepperMotor_helpurl: "TODO", |     sensebox_motors_moveStepperMotor_helpurl: "TODO", | ||||||
| } | 
 | ||||||
|  |     sensebox_motors_beginServoMotor: "Initialize Servo Motor", | ||||||
|  |     sensebox_motors_beginServoMotor_pin: "Pin:", | ||||||
|  |     sensebox_motors_beginServoMotor_tooltip: "TODO", | ||||||
|  |     sensebox_motors_beginServoMotor_helpurl: "TODO", | ||||||
|  | 
 | ||||||
|  |     sensebox_motors_moveServoMotor: "Move Servo Motor", | ||||||
|  |     sensebox_motors_moveServoMotor_pin: "Pin:", | ||||||
|  |     sensebox_motors_moveServoMotor_degrees: "Degrees:", | ||||||
|  |     sensebox_motors_moveStepperMotor_tooltip: "TODO", | ||||||
|  |     sensebox_motors_moveStepperMotor_helpurl: "TODO", | ||||||
|  | 
 | ||||||
|  |     sensebox_motors_I2CMotorBoard_begin: "Initialize I2C Motor Board", | ||||||
|  |     sensebox_motors_I2CMotorBoard_begin_tooltip: "TODO", | ||||||
|  |     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 (between -100 and 100):", | ||||||
|  |     sensebox_motors_I2CMotorBoard_moveDCMotor_tooltip: "TODO", | ||||||
|  |     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", | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | |||||||
| @ -301,8 +301,11 @@ class Toolbox extends React.Component { | |||||||
|         <Category name="Motors" colour={getColour().sensebox}> |         <Category name="Motors" colour={getColour().sensebox}> | ||||||
|           <Block type="sensebox_motors_beginStepperMotor" /> |           <Block type="sensebox_motors_beginStepperMotor" /> | ||||||
|           <Block type="sensebox_motors_moveStepperMotor" /> |           <Block type="sensebox_motors_moveStepperMotor" /> | ||||||
|           <Block type="sensebox_motors_beginStepperMotor" /> |           <Block type="sensebox_motors_beginServoMotor" /> | ||||||
|           <Block type="sensebox_motors_beginStepperMotor" /> |           <Block type="sensebox_motors_moveServoMotor" /> | ||||||
|  |           <Block type="sensebox_motors_I2CMotorBoard_begin" /> | ||||||
|  |           <Block type="sensebox_motors_I2CMotorBoard_moveDCMotor" /> | ||||||
|  |           <Block type="sensebox_motors_I2CMotorBoard_stopDCMotor" /> | ||||||
|         </Category> |         </Category> | ||||||
|         {/* <Category name="Telegram" colour={getColour().sensebox}> |         {/* <Category name="Telegram" colour={getColour().sensebox}> | ||||||
|           <Block type="sensebox_telegram" /> |           <Block type="sensebox_telegram" /> | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user