enum LINE { //% block="M1" 1, //% block="M2" 2, //% block="M3" 3, //% block="M4" 4 } enum DIR { //% block="前进" FORWARD, //% block="后退" BACKWARD } enum COM { //% block="M1M2" 1, //% block="M3M4" 2 } enum MODEL { //% block="全步进(单线圈)" SINGLE, //% block="全步进(双线圈)" DOUBLE, //% block="半步进" INTERLEAVE, //% block="微步进" MICROSTEP } //% color="#3264C8" iconWidth=50 iconHeight=40 namespace AFMOTOR { //% block="设置电机 [motor] 方向 [dir]速度 [speed]" blockType="command" //% motor.shadow="dropdown" motor.options="LINE" BUTTON.defl="LINE.M1" //% dir.shadow="dropdown" dir.options="DIR" dir.defl="DIR.前进" //% speed.shadow="range" speed.params.min=0 speed.params.max=255 speed.defl=200 export function AFMotorInit(parameter: any, block: any) { let Motor = parameter.motor.code; let Dir = parameter.dir.code; let Speed = parameter.speed.code; Generator.addInclude('AFMOTOR_INIT', '#include <AFMotor.h>'); Generator.addObject(`AFMOTORobj${Motor}`, `AF_DCMotor`, `motor${Motor}(${Motor});`,true); Generator.addCode(`motor${Motor}.setSpeed(${Speed});\n\tmotor${Motor}.run(${Dir});`); } //% block="停止电机 [motor]" blockType="command" //% motor.shadow="dropdown" motor.options="LINE" BUTTON.defl="LINE.M1" export function AFMotorStop(parameter: any, block: any) { let Motor = parameter.motor.code; Generator.addCode(`motor${Motor}.setSpeed(0);\n\t motor${Motor}.run(RELEASE);`); } //% block="设置步进电机步数 [s1] 端口[c1] 运转模式[m1]" blockType="command" //% s1.shadow="number" s1.defl="2048" //% c1.shadow="dropdown" c1.options="COM" c1.defl="COM.M1M2" //% m1.shadow="dropdown" m1.options="MODEL" export function AFMotorStepperinit(parameter: any, block: any) { let S1 = parameter.s1.code; let C1 = parameter.c1.code; let M1 = parameter.m1.code; Generator.addInclude('AFMOTOR_INIT', '#include <AFMotor.h>'); Generator.addInclude('STEPPER_INIT', '#include <AccelStepper.h>'); Generator.addObject(`Af_Stepper${C1}`, `AF_Stepper`, `motor${C1}(${S1}, ${C1});`); Generator.addObject(`forwardstep${C1}`, `void`, `forwardstep${C1}() {\n\tmotor${C1}.onestep(FORWARD, ${M1});\n\t}`); Generator.addObject(`backwardstep${C1}`, `void`, `backwardstep${C1}() {\n\tmotor${C1}.onestep(BACKWARD, ${M1});\n\t}`); Generator.addObject(`Accel_Stepper${C1}`, `AccelStepper`, `stepper${C1}(forwardstep${C1}, backwardstep${C1});`); } //% block="设置步进电机[c1]最大速度 [speed]" blockType="command" //% c1.shadow="dropdown" c1.options="COM" c1.defl="COM.M1M2" //% speed.shadow="number" speed.defl="500" export function MaxSpeedset(parameter: any, block: any) { let C1 = parameter.c1.code; let S1 = parameter.speed.code; Generator.addCode(`stepper${C1}.setMaxSpeed(${S1}); `); } //% block="设置电机[c1]运行速度 [speed]" blockType="command" //% c1.shadow="dropdown" c1.options="COM" c1.defl="COM.M1M2" //% speed.shadow="number" speed.defl="300" export function SpeedInit(parameter: any, block: any) { let C1 = parameter.c1.code; let S1 = parameter.speed.code; Generator.addCode(`stepper${C1}.setSpeed(${S1});`); } //% block="步进电机[c1]加速度[a1]" blockType="command" //% c1.shadow="dropdown" c1.options="COM" c1.defl="COM.M1M2" //% a1.shadow="number" a1.defl="50" export function stepperAcceleration(parameter: any, block: any) { let C1 = parameter.c1.code; let A1 = parameter.a1.code; Generator.addCode(`stepper${C1}.setAcceleration(${A1});`); } //% block="步进电机[c1]移动目标相对位置[p1]" blockType="command" //% c1.shadow="dropdown" c1.options="COM" c1.defl="COM.M1M2" //% p1.shadow="number" p1.defl="100" export function stepperMove(parameter: any, block: any) { let C1 = parameter.c1.code; let P1 = parameter.p1.code; Generator.addCode(`stepper${C1}.move(${P1});`); } //% block="步进电机[c1]移动目标绝对位置[p1]" blockType="command" //% c1.shadow="dropdown" c1.options="COM" c1.defl="COM.M1M2" //% p1.shadow="number" p1.defl="100" export function stepperMoveTo(parameter: any, block: any) { let C1 = parameter.c1.code; let P1 = parameter.p1.code; Generator.addCode(`stepper${C1}.moveTo(${P1});`); } //% block="获取步进电机[c1]运行当前位置" blockType="reporter" //% c1.shadow="dropdown" c1.options="COM" c1.defl="COM.M1M2" export function stepperCurrentPosition(parameter: any, block: any) { let C1 = parameter.c1.code; Generator.addCode(`stepper${C1}.currentPosition()`); } //% block="获取步进电机[c1]运行目标位置" blockType="reporter" //% c1.shadow="dropdown" c1.options="COM" c1.defl="COM.M1M2" export function steppertargetPosition(parameter: any, block: any) { let C1 = parameter.c1.code; Generator.addCode(`stepper${C1}.targetPosition()`); } //% block="步进电机[c1]运行(匀速模式)" blockType="command" //% c1.shadow="dropdown" c1.options="COM" c1.defl="COM.M1M2" export function stepperStart(parameter: any, block: any) { let C1 = parameter.c1.code; Generator.addCode(`stepper${C1}.runSpeed();`); } //% block="步进电机[c1]运行(先加速后减速模式)" blockType="command" //% c1.shadow="dropdown" c1.options="COM" c1.defl="COM.M1M2" export function stepperRunStart(parameter: any, block: any) { let C1 = parameter.c1.code; Generator.addCode(`stepper${C1}.run();`); } //% block="停止步进电机[c1]" blockType="command" //% c1.shadow="dropdown" c1.options="COM" c1.defl="COM.M1M2" export function stepperStop(parameter: any, block: any) { let C1 = parameter.c1.code; Generator.addCode(`stepper${C1}.stop();`); } }