#define st_b 12
int m1s=2;
int m2s=3;
int m3s=4;
int m4s=10;
int m1d=5;
int m2d=6;
int m3d=7;
int m4d=9;
int ms1=0;
int md1=0;
int m_en=8;
int d_motor = 11;
int lv = 0;
int v_lv;
int v_lvm;
int f1=0;
int f2=0;
String cms = ""; // a String to hold incoming data
String cmm = "";
bool stringComplete = false; // whether the string is complete
int mv = 0;
int p1=0;
int p2=0;
int p3=0;
int p4=0;
void setup() {
pinMode(m1s, OUTPUT);
pinMode(m2s, OUTPUT);
pinMode(m3s, OUTPUT);
pinMode(m4s, OUTPUT);
pinMode(m1d, OUTPUT);
pinMode(m2d, OUTPUT);
pinMode(m3d, OUTPUT);
pinMode(m4d, OUTPUT);
pinMode(m_en, OUTPUT);
pinMode(st_b, INPUT_PULLUP);
Serial.begin(9600);
cms.reserve(200);
digitalWrite(m_en, HIGH);
delay(1000);
Serial.println("initialized");
analogReference(EXTERNAL);
analogWrite(d_motor, 0);
}
void loop() {
v_lv = analogRead(lv);
v_lvm = map(v_lv, 0, 1023, 0, 255);
if(digitalRead(st_b) == HIGH && f2==1){
delay(200);
f2=0;
}
if(digitalRead(st_b) == LOW && f2==0 && f1==0){
delay(200);
f2=1;
f1=1;
}
if(digitalRead(st_b) == LOW && f2==0 && f1==1){
delay(200);
f2=1;
f1=0;
}
if(f1==1) analogWrite(d_motor, v_lvm);
if(f1==0) analogWrite(d_motor, 0);
/*
mm_mv(2,5,0,100,10);
delay(1000);
mm_mv(2,5,1,100,10);
delay(1000);
mm_mv(3,6,0,100,10);
delay(1000);
mm_mv(3,6,1,100,10);
delay(1000);
mm_mv(4,7,0,100,10);
delay(1000);
mm_mv(4,7,1,100,10);
delay(1000);
mm_mv(10,9,0,100,10);
delay(1000);
mm_mv(10,9,1,100,10);
delay(1000); */
if (stringComplete) {
cms.trim();
int ix = cms.indexOf('-');
if (ix == -1)
{
//Serial.println("error");
Serial.println("error1");
}
else
{
cmm=cms.substring(ix+1,cms.length());
mv=cmm.toInt();
if (cms.indexOf("sp-") > -1) {
if (mv == 1){
f1=1;
Serial.println("spindle on");
}
if (mv == 0){
f1=0;
Serial.println("spindle off");
delay(200);
}
}
if (cms.indexOf("p1-") > -1) {
p1=mv;
}
if (cms.indexOf("p2-") > -1) {
p2=mv;
}
if (cms.indexOf("p3-") > -1) {
p3=mv;
}
if (cms.indexOf("p4-") > -1) {
p4=mv;
// p1 dir/mode 1 or 2,p2 motor 1 to 4, p3 step, p4 speed
Serial.println(" ");
Serial.print("p1-");
Serial.print(p1);
Serial.print("p2-");
Serial.print(p2);
Serial.print("p3-");
Serial.print(p3);
Serial.print("p4-");
Serial.print(p4);
//example p1-1#p2-1#p3-2000#p4-2#
//example p1-2#p2-1#p3-2000#p4-2#
switch (p2) {
case 1:
mm_mv(2,5,p1,p3,p4);
break;
case 2:
mm_mv(3,6,p1,p3,p4);
break;
case 3:
mm_mv(4,7,p1,p3,p4);
break;
case 4:
mm_mv(10,9,p1,p3,p4);
break;
}
/* switch (p1) {
case 1:
mm_f(ms, p3, p4);
break;
case 2:
mm_r(ms, p3, p4);
break;
}*/
p1=0;
p2=0;
p3=0;
p4=0;
}
}
cms = "";
stringComplete = false;
}
}
void mm_mv(int ms,int md, int dr, int stp, int spd){
digitalWrite(m_en, LOW);
digitalWrite(ms, LOW);
digitalWrite(md, LOW);
if(dr ==2) digitalWrite(md, HIGH);
if(dr ==1) digitalWrite(md, LOW);
for (int i = 0; i < (stp) ; i++) {
digitalWrite(ms, HIGH);
delay(spd);
digitalWrite(ms, LOW);
delay(spd);
}
digitalWrite(ms, LOW);
digitalWrite(md, LOW);
digitalWrite(m_en, HIGH);
}
void serialEvent() {
while (Serial.available()) {
// get the new byte:
char inChar = (char)Serial.read();
// add it to the cms:
cms += inChar;
// if the incoming character is a newline, set a flag so the main loop can
// do something about it:
if (inChar == '#') {
stringComplete = true;
}
}
}
/*
#define st_b 12
#define lm1 14
int d_motor = 44;
int lv = 0;
const int stepsPerRevolution = 200;
int v_lv;
int v_lvm;
int f1=0;
int f2=0;
int f3=0;
int fm=0;
int p1=0;
int p2=0;
int p3=0;
int p4=0;
int m1[4]={4,5,3,2};//{A+,A+,B+,B-}
int m2[4]={10,11,9,8};
int m3[4]={16,15,17,18};
int m4[4]={20,19,21,22};
int ms[4];
String cms = ""; // a String to hold incoming data
String cmm = "";
bool stringComplete = false; // whether the string is complete
int mv = 0;
void setup() {
analogReference(EXTERNAL);
pinMode(st_b, INPUT_PULLUP);
pinMode(lm1, INPUT_PULLUP);
pinMode(d_motor, OUTPUT);
output_set_m(m1);
output_set_m(m2);
output_set_m(m3);
output_set_m(m4);
analogWrite(d_motor, 0);
Serial.begin(9600);
cms.reserve(200);
delay(1000);
Serial.println("initialized");
mm_f(m1, 10, 13000);
delay(1000);
mm_r(m1, 1, 13000);
}
void loop() {
v_lv = analogRead(lv);
v_lvm = map(v_lv, 0, 1023, 0, 255);
if(digitalRead(st_b) == HIGH && f2==1){
delay(200);
f2=0;
}
if(digitalRead(st_b) == LOW && f2==0 && f1==0){
delay(200);
f2=1;
f1=1;
}
if(digitalRead(st_b) == LOW && f2==0 && f1==1){
delay(200);
f2=1;
f1=0;
}
if(f1==1) analogWrite(d_motor, v_lvm);
if(f1==0) analogWrite(d_motor, 0);
if(digitalRead(lm1) == LOW && f3==0){
f3 = 1;
mm_f(m1, 100, 5000);
}
if(digitalRead(lm1) == HIGH && f3==1){
delay(200);
mm_r(m2, 150, 5000);
f3 = 0;
delay(200);
}
if (stringComplete) {
cms.trim();
int ix = cms.indexOf('-');
if (ix == -1)
{
//Serial.println("error");
Serial.println("error1");
}
else
{
cmm=cms.substring(ix+1,cms.length());
mv=cmm.toInt();
if (cms.indexOf("p1-") > -1) {
p1=mv;
}
if (cms.indexOf("p2-") > -1) {
p2=mv;
}
if (cms.indexOf("p3-") > -1) {
p3=mv;
}
if (cms.indexOf("p4-") > -1) {
p4=mv;
// p1 dir/mode 1 or 2,p2 motor 1 to 4, p3 step, p4 speed
Serial.println(" ");
Serial.print("p1-");
Serial.print(p1);
Serial.print("p2-");
Serial.print(p2);
Serial.print("p3-");
Serial.print(p3);
Serial.print("p4-");
Serial.print(p4);
//example p1-1#p2-2#p3-200#p4-5000#
switch (p2) {
case 1:
mt_st(m1);
break;
case 2:
mt_st(m2);
break;
case 3:
mt_st(m3);
break;
case 4:
mt_st(m4);
break;
}
switch (p1) {
case 1:
mm_f(ms, p3, p4);
break;
case 2:
mm_r(ms, p3, p4);
break;
}
p1=0;
p2=0;
p3=0;
p4=0;
}
}
cms = "";
stringComplete = false;
}
}
void mt_st(int mts[]){
for(int i = 0; i < 4; i++){
ms[i]=mts[i];
}
}
void output_set_m(int mt[]){
for(int i = 0; i < 4; i++){
pinMode(mt[i], OUTPUT);
}
}
void mm_f(int m[], int stp, int spd){
for (int i = 0; i < (stp) ; i++) {
digitalWrite(m[0], HIGH);
digitalWrite(m[1], LOW);
digitalWrite(m[2], HIGH);
digitalWrite(m[3], LOW);
delayMicroseconds (spd);
digitalWrite(m[0], LOW);
digitalWrite(m[1], HIGH);
digitalWrite(m[2], HIGH);
digitalWrite(m[3], LOW);
delayMicroseconds (spd);
digitalWrite(m[0], LOW);
digitalWrite(m[1], HIGH);
digitalWrite(m[2], LOW);
digitalWrite(m[3], HIGH);
delayMicroseconds (spd);
digitalWrite(m[0], HIGH);
digitalWrite(m[1], LOW);
digitalWrite(m[2], LOW);
digitalWrite(m[3], HIGH);
delayMicroseconds (spd);
}
digitalWrite(m[0], LOW);
digitalWrite(m[1], LOW);
digitalWrite(m[2], LOW);
digitalWrite(m[3], LOW);
delay(100); // the motor will complete a full revolution then waits for a second
}
void mm_r(int mr[], int stp_r, int spd_r){
for (int i = 0; i < (stp_r) ; i++) {
digitalWrite(mr[0], HIGH);
digitalWrite(mr[1], LOW);
digitalWrite(mr[2], LOW);
digitalWrite(mr[3], HIGH);
delayMicroseconds (spd_r);
digitalWrite(mr[0], LOW);
digitalWrite(mr[1], HIGH);
digitalWrite(mr[2], LOW);
digitalWrite(mr[3], HIGH);
delayMicroseconds (spd_r);
digitalWrite(mr[0], LOW);
digitalWrite(mr[1], HIGH);
digitalWrite(mr[2], HIGH);
digitalWrite(mr[3], LOW);
delayMicroseconds (spd_r);
digitalWrite(mr[0], HIGH);
digitalWrite(mr[1], LOW);
digitalWrite(mr[2], HIGH);
digitalWrite(mr[3], LOW);
delayMicroseconds (spd_r);
}
digitalWrite(mr[0], LOW);
digitalWrite(mr[1], LOW);
digitalWrite(mr[2], LOW);
digitalWrite(mr[3], LOW);
delay(100); // the motor will complete a full revolution then waits for a second
}
void serialEvent() {
while (Serial.available()) {
// get the new byte:
char inChar = (char)Serial.read();
// add it to the cms:
cms += inChar;
// if the incoming character is a newline, set a flag so the main loop can
// do something about it:
if (inChar == '#') {
stringComplete = true;
}
}
}
*/