mirror of
https://github.com/espruino/Espruino.git
synced 2025-12-08 19:06:15 +00:00
59 lines
1.6 KiB
JavaScript
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));
|
|
}
|
|
};
|