node.js - Change the speed of a stepper motor with an Arduino and Nodejs -
my stepper motor controlled using l293d driver connected ardiuno. using serial connection control motor nodejs. want speed of motor change when move slider unable write function performs right outcome.
the code based tutorial,http://www.barryvandam.com/node-js-communicating-with-arduino/
#include <spi.h> //#include <arest.h> #include <stepper.h> #include <wire.h> // forward/reverse read vars string inputstring = ""; // string hold incoming data boolean togglecomplete = false; // whether string complete boolean pwmcomplete = false; int lastcommand = 0; int velocity = 0; int ina1 = 12; // input 1 of stepper int ina2 = 11; // input 2 of stepper int inb1 = 10; // input 3 of stepper int inb2 = 9; // input 4 of stepper int steps = 0; int rpm = 0; #define steps 200 stepper motor(steps, ina1, ina2, inb1, inb2); //int speed; void setup() { pinmode(ina1, output); pinmode(ina2, output); pinmode(inb1, output); pinmode(inb2, output); serial.begin(9600); } void loop() { //motor.setspeed(10); //motor.step(1); // recieve data node , write string while (serial.available()) { char inchar = (char)serial.read(); if(inchar == 'e'){ // end character forward rotation togglecomplete = true; //lastcommand = 1; } if(inchar == 'p'){ pwmcomplete = true; //lastcommand = 2; } else{ inputstring += inchar; } } if (togglecomplete == true){ lastcommand = command(); } if (pwmcomplete == true){ velocity = speed(); lastcommand =2; } switch(lastcommand) { case 0: //start motor.setspeed(10); motor.step(1); break; case 1: // forward // dim led 3 motor.setspeed(20); motor.step(-1); break; case 2: // backward motor.setspeed(10); motor.step(-1); break; case 3: //stop motor.setspeed(0); break; } delay(50); // give arduino breathing room. } int command(){ if(!serial.available() && togglecomplete == true) { int _command = 1; togglecomplete = false; return _command; } } int speed(){ if(!serial.available() && pwmcomplete == true) { pwmcomplete = false; // convert string int. int recievedval = stringtoint(); return recievedval; } } int stringtoint() { char charholder[inputstring.length()+1]; inputstring.tochararray(charholder,inputstring.length()+1); inputstring = ""; int _recievedval = atoi(charholder); return _recievedval; }
with few tweaks, code working way want.
#include <spi.h> #include <stepper.h> #include <wire.h> // forward/reverse read vars string inputstring = ""; // string hold incoming data boolean togglecomplete = false; boolean togglecomplete1 = false; // whether string complete boolean pwmcomplete = false; int lastcommand = 1; int ina1 = 12; // input 1 of stepper int ina2 = 11; // input 2 of stepper int inb1 = 10; // input 3 of stepper int inb2 = 9; // input 4 of stepper int steps = 0; int rpm = 0; int stringtoint(); int velocity = 1; #define steps 250 stepper motor(steps, ina1, ina2, inb1, inb2); //int speed; void setup() { pinmode(ina1, output); pinmode(ina2, output); pinmode(inb1, output); pinmode(inb2, output); serial.begin(9600); } void loop() { //motor.setspeed(10); //motor.step(1); // recieve data node , write string while (serial.available() && togglecomplete == false && pwmcomplete == false) { char inchar = (char)serial.read(); if(inchar == 'e'){ // end character forward rotation togglecomplete = true; //lastcommand = 1; } if(inchar == 'p'){ pwmcomplete = true; //lastcommand = 2; } if(inchar == 'f'){ togglecomplete1 = true; } else{ inputstring += inchar; } } if(!serial.available()&& togglecomplete == true){ lastcommand = 1; togglecomplete = false; } if(!serial.available()&& togglecomplete1 == true){ lastcommand = 2; togglecomplete1 = false; } switch(lastcommand) { case 1: // forward if(!serial.available() && pwmcomplete == true) { stringtoint(); pwmcomplete = false; } motor.setspeed(velocity); motor.step(1); break; case 2: if(!serial.available() && pwmcomplete == true) { stringtoint(); pwmcomplete = false; } motor.setspeed(velocity); motor.step(-1); break; } } int stringtoint() { char charholder[inputstring.length()+1]; inputstring.tochararray(charholder,inputstring.length()+1); inputstring = ""; velocity = atoi(charholder); return velocity; }
Comments
Post a Comment