Permalink
Cannot retrieve contributors at this time
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
852 lines (767 sloc)
21.4 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* File: photopizza_espruino.js | |
* Created on: August 30, 2017 | |
* Description: | |
* PhotoPizza DIY is an open source project of 360° product photography turntable. | |
* | |
* Author: Vladimir Matiyasevith <vladimir.m@makerdrive.ru> | |
* Project Site: PhotoPizza.org | |
* | |
* Copyright: 2018 Vladimir Matiyasevith | |
* Copying permission statement: | |
* This file is part of PhotoPizza DIY. | |
* | |
* PhotoPizza DIY is free software: you can redistribute it and/or modify | |
* it under the terms of the GNU General Public License as published by | |
* the Free Software Foundation, either version 3 of the License, or | |
* (at your option) any later version. | |
* | |
* This program is distributed in the hope that it will be useful, | |
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
* GNU General Public License for more details. | |
* | |
* You should have received a copy of the GNU General Public License | |
* along with this program. If not, see <http://www.gnu.org/licenses/> | |
* | |
*/ | |
var config = {}; | |
var run = function () { | |
function saveConfig() { | |
if (JSON.stringify(config) != fs.readFileSync("config.txt") && !setupMode) { | |
fs.writeFileSync('config.txt', JSON.stringify(config)); | |
console.log('Save config'); | |
} | |
} | |
var photoPizzaIp = 'disconnected'; | |
var wifi = require('Wifi'); | |
var wsocket; | |
var server; | |
function wifiConnect() { | |
wifi.connect(config.wifiSsid, {password: config.wifiPassword}, function() { | |
console.log(`Web server running at http://${wifi.getIP().ip}:${config.wsPort}`); | |
photoPizzaIp = wifi.getIP().ip; | |
StartDisplay(); | |
}); | |
server = require('ws').createServer(); | |
server.listen(config.wsPort); | |
server.on("websocket", function(ws) { | |
wsocket = ws; | |
ws.send(JSON.stringify(config)); | |
ws.on('message',function(msg) { | |
var configIn = JSON.parse(msg); | |
config = configIn; | |
//console.log(config); | |
NumControl(); | |
if (configIn.state === 'start' && config.state != 'started') { | |
BtnStart(); | |
config.state = 'started'; | |
ws.send(JSON.stringify(config)); | |
} | |
if (configIn.state === 'infinity' && config.state != 'started') { | |
infiniteRotation(); | |
ws.send(JSON.stringify(config)); | |
} | |
if (configIn.state === 'stop') { | |
BtnStop(); | |
} | |
}); | |
ws.on('close', function() { | |
wsocket = false; | |
}); | |
}); | |
wifi.on('disconnected', function() { | |
console.log('Lost WIFI! Disconnected.'); | |
photoPizzaIp = 'disconnected'; | |
StartDisplay(); | |
}); | |
} | |
/////////////////////////// | |
require("Font8x16").add(Graphics); | |
var irCode = 0; | |
var irDigital = '1'; | |
var simNum = 0; | |
//DISPLAY | |
var display = true; | |
var marker = 0; | |
var indent = 13; | |
var dispay_2 = false; | |
var setupMode = false; | |
var dirDisplay = ''; | |
var nameIndent = 48; | |
//STEPPER | |
var pinStep = D12; | |
var pinEn = D27; | |
var pinDir = D14; | |
var stOn = 0; | |
var stOff = 1; | |
var _speed = 1; | |
var calibration = false; | |
var deg90flag = false; | |
digitalWrite(pinStep, 0); | |
digitalWrite(pinEn, 1); | |
digitalWrite(pinDir, config.direction); | |
//RELAY | |
var pinRelay = D26; | |
var pinLaser = D25; | |
var relayOn = false; | |
var rOn = 0; | |
var rOff = 1; | |
digitalWrite(pinRelay, rOff); | |
digitalWrite(pinLaser, rOn); | |
//P8.mode('analog'); | |
//FLAGS | |
var startFlag = false; | |
var poweroff = false; | |
var infiniteFlag = false; | |
require("IRReceiver").connect(D13, function(code) { | |
var _code = parseInt(code, 2); | |
var btn; | |
if (_code === 6450803341 || _code === 25803213367) { | |
btn = 1; | |
console.log(btn); | |
} | |
if (_code === 6450819151 || _code === 25803276607) { | |
btn = 2; | |
console.log(btn); | |
} | |
if (_code === 6450786511 || _code === 25803146047) { | |
btn = 3; | |
console.log(btn); | |
} | |
if (_code === 6450795181 || _code === 25803180727) { | |
btn = 4; | |
console.log(btn); | |
} | |
if (_code === 6450810991 || _code === 25803243967) { | |
btn = 5; | |
console.log(btn); | |
} | |
if (_code === 6450778351 || _code === 25803113407) { | |
btn = 6; | |
console.log(btn); | |
} | |
if (_code === 6450799261 || _code === 25803197047) { | |
btn = 7; | |
console.log(btn); | |
} | |
if (_code === 6450815071 || _code === 25803260287) { | |
btn = 8; | |
console.log(btn); | |
} | |
if (_code === 6450782431 || _code === 25803129727) { | |
btn = 9; | |
console.log(btn); | |
} | |
if (_code === 6450806911 || _code === 25803227647) { | |
btn = 0; | |
console.log(btn); | |
} | |
if (_code === 25803148087 || _code === 6450787021) { | |
btn = 'CALIBR'; | |
console.log(btn); | |
} | |
// if (_code === 6450774781 || _code === 25803099127) { | |
// btn = 'R POWER'; | |
// console.log(btn); | |
// } | |
if (_code === 6450823741 || _code === 25803294967) { | |
btn = 'SETUP'; | |
console.log(btn); | |
} | |
if (_code === 6450800791 || _code === 25803203167) { | |
btn = 'UP'; | |
console.log(btn); | |
} | |
if (_code === 6450796711 || _code === 25803186847) { | |
btn = 'DOWN'; | |
console.log(btn); | |
} | |
if (_code === 6450809461 || _code === 25803237847) { | |
btn = 'LEFT'; | |
console.log(btn); | |
} | |
if (_code === 6450776821 || _code === 25803107287) { | |
btn = 'RIGHT'; | |
console.log(btn); | |
} | |
if (_code === 6450825271 || _code === 25803301087) { | |
btn = 'OK'; | |
console.log(btn); | |
} | |
if (_code === 6450813031 || _code === 25803252127) { | |
btn = '90DEG'; | |
console.log(btn); | |
} | |
console.log(_code); | |
if (setupMode && btn === 1 || setupMode && btn === 2 || setupMode && btn === 3 || setupMode && btn === 4 || setupMode && btn === 5 || setupMode && btn === 6 || setupMode && btn === 7 || setupMode && btn === 8 || setupMode && btn === 9 || setupMode && btn === 0) { | |
console.log('input'); | |
IrInput(btn); | |
return; | |
} | |
if (btn === 'SETUP' && !setupMode && !poweroff && !infiniteFlag && !startFlag && !deg90flag) { | |
SettingsDisplay_1(); | |
console.log('Setup'); | |
simNum = 0; | |
return; | |
} else if (btn === 'SETUP' && setupMode) { | |
setupMode = false; | |
NumControl(); | |
StartDisplay(); | |
console.log('Setup Exit'); | |
return; | |
} | |
if (btn === 'OK' && startFlag && !poweroff || btn === 'OK' && infiniteFlag && !poweroff) { | |
startFlag = false; | |
infiniteFlag = false; | |
BtnStop(); | |
console.log('OK STOP'); | |
simNum = 0; | |
return; | |
} | |
if (btn === 'OK' && !infiniteFlag && !startFlag && !poweroff) { | |
BtnStart(); | |
console.log('OK START'); | |
simNum = 0; | |
return; | |
} | |
if (btn === 'DOWN' && !dispay_2 && setupMode) { | |
marker = marker + indent; | |
SettingsDisplay_1(); | |
simNum = 0; | |
console.log('Down D1'); | |
return; | |
} else if (btn === 'DOWN' && dispay_2 && setupMode) { | |
marker = marker + indent; | |
SettingsDisplay_2(); | |
console.log('Down D2'); | |
simNum = 0; | |
return; | |
} | |
if (btn === 'UP' && !dispay_2 && setupMode) { | |
marker = marker - indent; | |
SettingsDisplay_1(); | |
simNum = 0; | |
console.log('UP D1'); | |
return; | |
} else if (btn === 'UP' && dispay_2 && setupMode) { | |
marker = marker - indent; | |
SettingsDisplay_2(); | |
console.log('UP D2'); | |
simNum = 0; | |
return; | |
} | |
if (btn === 'RIGHT' && !dispay_2 && setupMode) { | |
SettingsDisplay_2(); | |
console.log('Right'); | |
simNum = 0; | |
return; | |
} | |
if (btn === 'LEFT' && dispay_2 && setupMode) { | |
SettingsDisplay_1(); | |
console.log('Left'); | |
simNum = 0; | |
return; | |
} | |
if (btn === 'RIGHT' && !setupMode && !startFlag) { | |
digitalWrite(pinDir, 1); | |
digitalWrite(pinStep, 0); | |
digitalWrite(pinEn, stOn); | |
_speed = 1; | |
infiniteRotation(); | |
console.log('Right rotation'); | |
return; | |
} | |
if (btn === 'LEFT' && !setupMode && !startFlag) { | |
digitalWrite(pinDir, 0); | |
digitalWrite(pinStep, 0); | |
digitalWrite(pinEn, stOn); | |
_speed = 1; | |
infiniteRotation(); | |
console.log('Left rotation'); | |
return; | |
} | |
if (btn === 'CALIBR' && !calibration && !poweroff) { | |
Calibration(); | |
return; | |
} else if (btn === 'CALIBR' && calibration && !poweroff) { | |
calibration = false; | |
Stop(); | |
} | |
deg90flag = false; | |
if (btn === '90DEG' && !calibration && !poweroff && !deg90flag) { | |
deg90flag = true; | |
deg90(); | |
return; | |
} else if (btn === '90DEG' && calibration && !poweroff) { | |
deg90flag = false; | |
Stop(); | |
} | |
if (btn === 'R POWER' && !poweroff) { | |
g.off(); | |
poweroff = true; | |
Stop(); | |
digitalWrite(pinLaser, rOff); | |
return; | |
} else if (btn === 'R POWER' && poweroff) { | |
g.on(); | |
poweroff = false; | |
LogoDisplay(); | |
digitalWrite(pinLaser, rOn); | |
return; | |
} | |
}); | |
function LogoDisplay(){ | |
if (!display) { | |
NumControl(); | |
return; | |
} | |
var x1x2 = 1; | |
g.clear(); | |
g.setFontBitmap(); | |
g.setFont8x16(); | |
g.drawString(config.firmwareVersion, 10, 45); | |
g.flip(); | |
var preloader = setInterval(function () { | |
g.setContrast(x1x2); | |
g.drawLine(x1x2, 20, x1x2, 30); | |
x1x2 += 2; | |
g.drawLine(x1x2, 20, x1x2, 30); | |
x1x2 += 2; | |
g.drawLine(x1x2, 20, x1x2, 30); | |
x1x2 += 2; | |
g.drawLine(x1x2, 20, x1x2, 30); | |
x1x2 += 2; | |
g.drawLine(x1x2, 20, x1x2, 30); | |
x1x2 += 2; | |
g.drawLine(x1x2, 20, x1x2, 30); | |
x1x2 += 2; | |
g.flip(); | |
if (x1x2 > 126) { | |
clearInterval(preloader); | |
NumControl(); | |
StartDisplay(); | |
wifiConnect(); | |
} | |
}, 10); | |
} | |
function StartDisplay(){ | |
if (!display) { | |
return; | |
} | |
g.clear(); | |
g.setFontVector(35); | |
g.drawString(config.framesLeft + ' f', 0, 0); | |
g.flip(); | |
g.setFontBitmap(); | |
g.setFont8x16(); | |
g.drawString('IP:' + photoPizzaIp, 0, 45); | |
g.flip(); | |
} | |
function SettingsDisplay_1(){ | |
if (!display) { | |
return; | |
} | |
setupMode = true; | |
dispay_2 = false; | |
if (marker > indent * 4) { | |
marker = 0; | |
} else if (marker < 0) { | |
marker = indent * 4; | |
} | |
g.clear(); | |
g.setFontBitmap(); | |
g.setFont8x16(); | |
g.drawString('>', 1, marker); | |
g.drawString('>', 117, 28); | |
g.drawString('1', 117, 0); | |
g.drawLine(112, 0, 112, 127); | |
g.drawString('frame', 8, 0); | |
g.drawString('=', nameIndent, 0); | |
g.drawString(config.frame, 57, 0); | |
g.drawString('delay', 8, indent); | |
g.drawString('=', nameIndent, indent); | |
g.drawString(config.delay, 57, indent); | |
g.drawString('pause', 8, indent * 2); | |
g.drawString('=', nameIndent, indent * 2); | |
g.drawString(config.pause, 57, indent * 2); | |
g.drawString('speed', 8, indent * 3); | |
g.drawString('=', nameIndent, indent * 3); | |
g.drawString(config.speed, 57, indent * 3); | |
g.drawString('accel', 8, indent * 4); | |
g.drawString('=', nameIndent, indent * 4); | |
g.drawString(config.acceleration, 57, indent * 4); | |
g.flip(); | |
} | |
function SettingsDisplay_2(){ | |
if (!display) { | |
return; | |
} | |
if (config.direction === 1) { | |
dirDisplay = 'right'; | |
} else { | |
dirDisplay = 'left'; | |
} | |
setupMode = true; | |
dispay_2 = true; | |
if (marker > indent * 2) { | |
marker = 0; | |
} else if (marker < 0) { | |
marker = indent * 2; | |
} | |
g.clear(); | |
g.setFontBitmap(); | |
g.setFont8x16(); | |
g.drawString('>', 1, marker); | |
g.drawString('<', 117, 28); | |
g.drawString('2', 117, 0); | |
g.drawLine(112, 0, 112, 127); | |
nameIndent = 48; | |
g.drawString('mode', 8, 0); | |
g.drawString('=', nameIndent, 0); | |
g.drawString(config.shootingMode, 57, 0); | |
g.drawString('direc', 8, indent); | |
g.drawString('=', nameIndent, indent); | |
g.drawString(dirDisplay, 57, indent); | |
g.drawString('steps', 8, indent * 2); | |
g.drawString('=', nameIndent, indent * 2); | |
g.drawString(config.allSteps, 57, indent * 2); | |
g.drawString('IP:' + photoPizzaIp, 8, indent * 4); | |
g.flip(); | |
} | |
function IrInput(btn) { | |
irDigital = btn + ''; | |
if (!dispay_2 && marker === 0 && simNum <= 7 && simNum > 0) { | |
config.frame = (config.frame + irDigital) * 1; | |
NumControl(); | |
SettingsDisplay_1(); | |
simNum++; | |
} | |
if (!dispay_2 && marker === 0 && simNum === 0 && irDigital != '0') { | |
config.frame = ''; | |
config.frame = (config.frame + irDigital) * 1; | |
NumControl(); | |
SettingsDisplay_1(); | |
simNum++; | |
} | |
if (!dispay_2 && marker === indent && simNum <= 7 && simNum > 0) { | |
config.delay = (config.delay + irDigital) * 1; | |
SettingsDisplay_1(); | |
simNum++; | |
} | |
if (!dispay_2 && marker === indent && simNum === 0 && irDigital != '0') { | |
config.delay = ''; | |
config.delay = (config.delay + irDigital) * 1; | |
SettingsDisplay_1(); | |
simNum++; | |
} | |
if (!dispay_2 && marker === indent * 2 && simNum <= 7 && simNum > 0) { | |
config.pause = (config.pause + irDigital) * 1; | |
SettingsDisplay_1(); | |
simNum++; | |
} | |
if (!dispay_2 && marker === indent * 2 && simNum === 0 && irDigital != '0') { | |
config.pause = ''; | |
config.pause = (config.pause + irDigital) * 1; | |
SettingsDisplay_1(); | |
simNum++; | |
} | |
if (!dispay_2 && marker === indent * 3 && simNum <= 7 && simNum > 0) { | |
config.speed = (config.speed + irDigital) * 1; | |
NumControl(); | |
SettingsDisplay_1(); | |
simNum++; | |
} | |
if (!dispay_2 && marker === indent * 3 && simNum === 0 && irDigital != '0') { | |
config.speed = ''; | |
config.speed = (config.speed + irDigital) * 1; | |
SettingsDisplay_1(); | |
simNum++; | |
} | |
if (!dispay_2 && marker === indent * 4 && simNum <= 7 && simNum > 0) { | |
config.acceleration = (config.acceleration + irDigital) * 1; | |
SettingsDisplay_1(); | |
simNum++; | |
} | |
if (!dispay_2 && marker === indent * 4 && simNum === 0 && irDigital != '0') { | |
config.acceleration = ''; | |
config.acceleration = (config.acceleration + irDigital) * 1; | |
SettingsDisplay_1(); | |
simNum++; | |
} | |
//DISPLAY 2 | |
if (dispay_2 && marker === 0 && irDigital === '1') { | |
config.shootingMode = 'inter'; | |
SettingsDisplay_2(); | |
} | |
if (dispay_2 && marker === 0 && irDigital === '2') { | |
config.shootingMode = 'seria'; | |
SettingsDisplay_2(); | |
} | |
if (dispay_2 && marker === 0 && irDigital === '3') { | |
config.shootingMode = 'nonST'; | |
SettingsDisplay_2(); | |
} | |
if (dispay_2 && marker === 0 && irDigital === '4') { | |
config.shootingMode = 'PingP'; | |
SettingsDisplay_2(); | |
} | |
if (dispay_2 && marker === indent && irDigital === '1') { | |
config.direction = 1; | |
SettingsDisplay_2(); | |
} | |
if (dispay_2 && marker === indent && irDigital === '2') { | |
config.direction = 0; | |
SettingsDisplay_2(); | |
} | |
if (dispay_2 && marker === indent * 2 && simNum <= 7 && simNum > 0) { | |
config.allSteps = (config.allSteps + irDigital) * 1; | |
NumControl(); | |
SettingsDisplay_2(); | |
simNum++; | |
} | |
if (dispay_2 && marker === indent * 2 && simNum === 0 && irDigital != '0') { | |
config.allSteps = ''; | |
config.allSteps = (config.allSteps + irDigital) * 1; | |
NumControl(); | |
SettingsDisplay_2(); | |
simNum++; | |
} | |
} | |
var stepperTime; | |
var accelerationTime; | |
var accIntervalSteps; | |
var accSpeed; | |
var shootingTime1F; | |
var shootingTime; | |
var _shootingTime; | |
var nonStopTimerSpeed; | |
var accSteps; | |
var accStep; | |
function NumControl() { | |
console.log('NumControl'); | |
accSteps = (config.allSteps / config.frame) / 4; | |
accStep = (config.speed / accSteps) * 10; | |
config.framesLeft = config.frame; | |
_speed = 1; | |
var frameSteps = config.allSteps / config.frame; | |
stepperTime = frameSteps / config.speed * 500; | |
var accelerationSteps = frameSteps / 4; | |
accelerationTime = stepperTime / 4; | |
accIntervalSteps = Math.floor(0.04 * accelerationSteps); | |
if (accIntervalSteps <= 0) { | |
accIntervalSteps = 1; | |
} | |
//accStep = config.speed / accIntervalSteps; | |
accSpeed = accelerationTime / accIntervalSteps; | |
shootingTime1F = config.pause + config.delay + stepperTime; | |
shootingTime = shootingTime1F * config.frame; | |
_shootingTime = shootingTime; | |
nonStopTimerSpeed = stepperTime; | |
digitalWrite(pinDir, config.direction); | |
saveConfig(); | |
} | |
function Start() { | |
digitalWrite(pinEn, 0); | |
digitalWrite(pinLaser, rOff); | |
if (config.shootingMode === 'nonST') { | |
startFlag = true; | |
nonStop(); | |
return; | |
} | |
if (config.framesLeft > 0) { | |
startFlag = true; | |
ShotingPause(); | |
} else { | |
Stop(); | |
} | |
} | |
function Stop() { | |
console.log('stop'); | |
clearInterval(); | |
startFlag = false; | |
digitalWrite(pinStep, 0); | |
digitalWrite(pinEn, 1); | |
digitalWrite(pinRelay, rOff); | |
digitalWrite(pinLaser, rOn); | |
//P8.mode('analog'); | |
NumControl(); | |
StartDisplay(); | |
if (wsocket) { | |
config.state = 'waiting'; | |
wsocket.send(JSON.stringify(config)); | |
//wsocket.send(JSON.stringify(config)); | |
} | |
} | |
function nonStop() { | |
if (!startFlag) { | |
return; | |
} | |
digitalWrite(pinLaser, rOff); | |
shot(); | |
config.framesLeft--; | |
StartDisplay(); | |
analogWrite(pinStep, 0.5, { freq : config.speed } ); | |
var nonStopInterval = setInterval(function () { | |
if (config.framesLeft <= 0) { | |
clearInterval(nonStopInterval); | |
Stop(); | |
return; | |
} | |
shot(); | |
config.framesLeft--; | |
StartDisplay(); | |
}, nonStopTimerSpeed); | |
} | |
function shot() { | |
if (!startFlag) { | |
return; | |
} | |
console.log('shot'); | |
digitalWrite(pinRelay, rOn); | |
relayOn = true; | |
var shotTimer = setTimeout(function () { | |
digitalWrite(pinRelay, rOff); | |
relayOn = false; | |
clearTimeout(shotTimer); | |
}, 100); | |
} | |
function Stepper() { | |
if (!startFlag) { | |
return; | |
} | |
var startSpeed = 1; | |
//analogWrite(pinStep, 0.5, { freq : config.speed } ); | |
var stepsLeft = config.allSteps / config.frame; | |
console.log('accStep ' + accStep); | |
var stepTimer = setInterval(function () { | |
if (accSteps * 3 < stepsLeft && startSpeed < config.speed) { | |
startSpeed += accStep; | |
analogWrite(pinStep, 0.5, { freq : startSpeed } ); | |
} | |
if (accSteps >= stepsLeft && startSpeed > 100) { | |
startSpeed -= accStep; | |
if (startSpeed < accStep + 100) { | |
startSpeed = 100; | |
} | |
analogWrite(pinStep, 0.5, { freq : startSpeed } ); | |
} | |
if (startSpeed > config.speed) { | |
startSpeed = config.speed; | |
analogWrite(pinStep, 0.5, { freq : startSpeed } ); | |
} | |
stepsLeft -= startSpeed / 100; | |
console.log('stepsLeft ' + stepsLeft); | |
console.log('startSpeed ' + startSpeed); | |
if (stepsLeft <= 0) { | |
clearInterval(stepTimer); | |
_shootingTime = _shootingTime - shootingTime1F; | |
digitalWrite(pinStep, 0); | |
Start(); | |
return; | |
} | |
}, 10); | |
} | |
function ShotingPause() { | |
if (!startFlag) { | |
return; | |
} | |
var pauseTimer = setTimeout(function () { | |
Relay(); | |
clearTimeout(pauseTimer); | |
}, config.pause); | |
} | |
function Relay() { | |
if (!startFlag) { | |
return; | |
} | |
console.log('Relay'); | |
if (config.framesLeft > 0 && startFlag) { | |
relayOn = true; | |
digitalWrite(pinRelay, rOn); | |
//P8.mode('output'); | |
config.framesLeft--; | |
var frameTimer = setTimeout(function () { | |
digitalWrite(pinRelay, rOff); | |
//P8.mode('analog'); | |
if (wsocket) { | |
wsocket.send(JSON.stringify(config)); | |
} | |
relayOn = false; | |
StartDisplay(); | |
Stepper(); | |
clearTimeout(frameTimer); | |
}, config.delay); | |
} else { | |
Stop(); | |
} | |
} | |
function BtnStop() { | |
console.log('BtnStop'); | |
Stop(); | |
} | |
function BtnStart() { | |
startFlag = true; | |
StartDisplay(); | |
Start(); | |
} | |
function infiniteRotation() { | |
digitalWrite(pinLaser, rOff); | |
infiniteFlag = true; | |
g.clear(); | |
g.setFontVector(20); | |
g.drawString('infinite', 0, 0); | |
g.flip(); | |
digitalWrite(pinEn, 0); | |
var accTimerMax = setInterval(function () { | |
analogWrite(pinStep, 0.5, { freq : _speed } ); | |
_speed = _speed + accStep; | |
if (_speed >= config.speed) { | |
clearInterval(accTimerMax); | |
analogWrite(pinStep, 0.5, { freq : config.speed } ); | |
} | |
}, accSpeed); | |
} | |
function deg90() { | |
g.clear(); | |
g.setFontVector(20); | |
g.drawString('turn to 90', 0, 0); | |
g.flip(); | |
digitalWrite(pinEn, 0); | |
analogWrite(pinStep, 0.5, { freq : config.speed } ); | |
var turn = 0; | |
setInterval(function () { | |
if (turn >= config.allSteps / 4) { | |
Stop(); | |
deg90flag = false; | |
} | |
turn = turn + (config.speed / 100); | |
}, 10); | |
} | |
function Calibration() { | |
calibration = true; | |
g.clear(); | |
g.setFontVector(20); | |
g.drawString('calibration', 0, 0); | |
g.flip(); | |
digitalWrite(pinEn, 0); | |
var step1 = true; | |
config.allSteps = 0; | |
analogWrite(pinStep, 0.5, { freq : config.speed } ); | |
setInterval(function () { | |
config.allSteps += config.speed / 100; | |
}, 10); | |
} | |
if (display) { | |
g = require("SH1106").connect(I2C1, LogoDisplay); | |
} | |
}; | |
function onInit () { | |
I2C1.setup({scl:D22, sda:D21}); | |
fs = require("fs"); | |
var riadTimer = setTimeout(function () { | |
config = JSON.parse(fs.readFileSync("config.txt")); | |
config.state = 'waiting'; | |
run(); | |
}, 100); | |
} |