Hello All,
I am trying to control a stepper motor through arduino using C#. The program works perfectly fine at the first instance. But when i launch the program at the second instance it fails.
I have tried to integrate the autodetect function (http://playground.arduino.cc/Csharp/SerialCommsCSharp) and stepper control code together. But there is some issue in the code which lets it run perfectly only once. Kindly help me to solve the issue.
#include <Stepper.h>
int out1 = 8;
int out2 = 9;
int enA = 6;
int enB = 11;
int dirA = 5;
int dirB = 3;
int steps=0;
int inbyte;
int dela_time;
int frm_cnt=0;
int serialdata;
int rotmode;
int rotdir;
int motspeed;
const int stepsperrev = 8000;
Stepper myStepper(stepsperrev, out1, dirA, out2, dirB);
byte inputByte_0;
byte inputByte_1;
byte inputByte_2;
byte inputByte_3;
byte inputByte_4;
int ledPin_3 =13;
void setup() {
pinMode(ledPin_3, OUTPUT);
Serial.begin(9600);
digitalWrite(ledPin_3, HIGH);
delay(2500);
digitalWrite(ledPin_3, LOW);
delay(2500);
pinMode(enA, OUTPUT);
digitalWrite (enA, HIGH);
pinMode(enB, OUTPUT);
digitalWrite (enB, HIGH);
Serial.begin(9600);
}
void newsetup()
{
pinMode(enA, OUTPUT);
digitalWrite (enA, HIGH);
pinMode(enB, OUTPUT);
digitalWrite (enB, HIGH);
}
void reset()
{
digitalWrite (out1, LOW);
digitalWrite (dirA, LOW);
digitalWrite (out2, LOW);
digitalWrite (dirB, LOW);
digitalWrite (enA, LOW);
digitalWrite (enB, LOW);
steps=0;
frm_cnt=0;
}
void getinput()
{
getSerial();
dela_time = serialdata;
getSerial();
rotmode = serialdata;
getSerial();
rotdir = serialdata;
getSerial();
motspeed = serialdata;
getSerial();
steps = serialdata;
}
void loop() {
while (Serial.available()==5)
{
inputByte_0 = Serial.read();
delay(100);
inputByte_1 = Serial.read();
delay(100);
inputByte_2 = Serial.read();
delay(100);
inputByte_3 = Serial.read();
delay(100);
inputByte_4 = Serial.read();
}
if(inputByte_0 == 16)
{
switch (inputByte_1)
{
case 127:
switch (inputByte_2)
{
case 4:
if(inputByte_3 == 255)
{
digitalWrite(ledPin_3, HIGH);
break;
}
else
{
digitalWrite(ledPin_3, LOW);
break;
}
break;
}
break;
case 128:
Serial.println("HELLO");
break;
}
inputByte_0 = 0;
inputByte_1 = 0;
inputByte_2 = 0;
inputByte_3 = 0;
inputByte_4 = 0;
delay(1000);
frm_cnt=0;
getinput();
switch(rotmode)
{
case 1:
{
switch (rotdir)
{
case 3:
{
myStepper.setSpeed(motspeed);
newsetup();
while (frm_cnt<steps){
if (frm_cnt<steps)
{
if (steps!=0)
myStepper.step(-(stepsperrev*4/steps));
delay(dela_time*1000);
}
else
{
reset();
}
frm_cnt = frm_cnt+1;
}
break;
}
case 4:
{
myStepper.setSpeed(motspeed);
newsetup();
while (frm_cnt<steps){
if (frm_cnt<steps)
{
if (steps!=0)
myStepper.step((stepsperrev*4/steps));
delay(dela_time*1000);
}
else
{
reset();
}
frm_cnt = frm_cnt+1;
}
break;
}
}
break;
}
case 2:
{
break;
}
}
}
}
long getSerial()
{
serialdata = 0;
while (inbyte != '/')
{
inbyte = Serial.read();
if (inbyte > 0 && inbyte != '/')
{
serialdata = serialdata * 10 + inbyte - '0';
}
}
inbyte = 0;
return serialdata;
}