Espruino/code/stepper.js
Gordon Williams f3d6e0bc83 First commit
2013-09-26 14:39:04 +01:00

59 lines
1.6 KiB
JavaScript

// Simple stepper
var step = 0;
var steps = [0b0001,0b0010,0b0100,0b1000];
var stepperPins = [D9,D11,D14,D12];
function doStep() {
step = (step+1) % steps.length;
digitalWrite(stepperPins, steps[step]);
}
setInterval(doStep, 200);
// Stepper with dynamic speed
var step = 0;
var targetStep = 0;
var steps = [0b0001,0b0011,0b0010,0b0110,0b0100,0b1100,0b1000,0b1001];
var stepperPins = [D9,D11,D14,D12];
var stepInterval = setInterval(doStep, 100);
var doStep = function () {
var d = step - targetStep;
if (d < 0)
step++;
else if (d > 0)
step--;
if (d==0) { // we're there - sleep
changeInterval(stepInterval, 500);
digitalWrite(stepperPins, 0);
} else {
var time = 100 - Math.abs(d)*4;
if (time<10) time=10;
changeInterval(stepInterval, time);
digitalWrite(stepperPins, steps[step%steps.length]);
}
};
var targetStep = 0;
var stepInterval = setInterval(doStep, 100);
// Then run this to enable microstepping
var doStep = function () {
var d = step - targetStep;
if (d < 0)
step++;
else if (d > 0)
step--;
if (d==0) { // we're there - sleep
changeInterval(stepInterval, 500);
digitalWrite(stepperPins, 0);
} else {
var time = 100 - Math.abs(d)*4;
if (time<50) time=50;
changeInterval(stepInterval, time);
analogWrite(stepperPins[0], Math.sin(0.5*step));
analogWrite(stepperPins[1], Math.sin((0.5*step) + Math.PI*0.5));
analogWrite(stepperPins[2], Math.sin((0.5*step) + Math.PI));
analogWrite(stepperPins[3], Math.sin((0.5*step) + Math.PI*1.5));
}
};