//---------------------------------------------------------------------
// motor_matlab.ino
//---------------------------------------------------------------------
//Sketch de arduino 1 para mover el motor 1 o el 2 los pasos que se le
// indiquen o bien resetear el motor indicado
//---------------------------------------------------------------------
// Inicialización de pines
int dirpin1 = 3; // Motor 1: dirección y pasos
int steppin1 = 2;
int dirpin2 = 5; // Motor 2: dirección y pasos
int steppin2 = 4;
//limit switch
int PW01 = 11;
int PW02 = 12;
int PW1 = 8;
int PW2 = 9;
int SW1 = 10;
int SW2 = 13;
// Variables:
int motor = 0;
int motor_s = 0;
int pasos_hi = 0;
int pasos_lo = 0;
int pasos;
int reset = 0;
int reset_s = 0;
int buttonState1=0;
int buttonState2=0;
int contador=0;
int i=0;
String myStr_hi;
String myStr_lo;
String myStr;
String motor_str;
String reset_str;
void setup()
{
Serial.begin(9600);
//PaP
pinMode(dirpin1, OUTPUT);
pinMode(steppin1, OUTPUT);
pinMode(dirpin2, OUTPUT);
pinMode(steppin2, OUTPUT);
//limit switch
pinMode(PW1, OUTPUT);
pinMode(PW2, OUTPUT);
pinMode(PW01, OUTPUT);
pinMode(PW02, OUTPUT);
pinMode(SW1, INPUT);
pinMode(SW2, INPUT);
digitalWrite(PW1, HIGH); // Tienen que estar a 5V
digitalWrite(PW2, HIGH);
digitalWrite(PW01, LOW); // Tienen que estar a 0V
digitalWrite(PW02, LOW);
digitalWrite(dirpin1, HIGH); // Dirección del PaP
delay(100);
digitalWrite(dirpin2, HIGH); // Dirección del PaP
delay(100);
}
void loop()
{
if (Serial.available() > 0)
{
// lee los 4 bytes entrantes: [motor pasos_hi pasos_lo reset]
motor = Serial.read();
delay(100);
pasos_hi = Serial.read();
delay(100);
pasos_lo = Serial.read();
delay(100);
reset = Serial.read();
delay(100);
Serial.flush();
delay(1);
// Paso los bytes de decimal a binario
myStr_hi = dec2bin8(pasos_hi);
myStr_lo = dec2bin8(pasos_lo);
// Concateno el byte superior con el inferior
myStr = myStr_hi + myStr_lo;
// paso la cadena de binario a decimal
pasos=bin2dec(myStr,16);
Serial.println(pasos, DEC);
if (motor==1)
{
if (reset==1){
do {
digitalWrite(steppin1, LOW); // Inicia el PaP
digitalWrite(steppin1, HIGH);
delayMicroseconds(200);
buttonState1 = digitalRead(SW1); // Mira el limit switch 1
delay(1);
buttonState2 = digitalRead(SW2); // Mira el limit switch 2
delay(1);
i++;
Serial.println(buttonState1);
delay(1);
Serial.println(buttonState2);
delay(1);
Serial.println(i);
}
while (buttonState1 == 0);
}
else{
do{
digitalWrite(steppin1, LOW);
digitalWrite(steppin1, HIGH);
delayMicroseconds(200);
buttonState1 = digitalRead(SW1);
delay(1);
buttonState2 = digitalRead(SW2);
delay(1);
i++;
Serial.println(buttonState1);
delay(1);
Serial.println(buttonState2);
delay(1);
Serial.println(i);
}while (i<pasos);
}
}
else
{
if (reset==1){
do {
digitalWrite(steppin2, LOW);
digitalWrite(steppin2, HIGH);
delayMicroseconds(200);
buttonState1 = digitalRead(SW1);
delay(1);
buttonState2 = digitalRead(SW2);
delay(1);
i++;
Serial.println(buttonState1);
delay(1);
Serial.println(buttonState2);
delay(1);
Serial.println(i);
}while (buttonState2 == 0);
}
else{
do{
digitalWrite(steppin2, LOW);
digitalWrite(steppin2, HIGH);
delayMicroseconds(200);
buttonState1 = digitalRead(SW1);
delay(1);
buttonState2 = digitalRead(SW2);
delay(1);
i++;
Serial.println(buttonState1);
delay(1);
Serial.println(buttonState2);
delay(1);
Serial.println(i);
}while (i<pasos);
}
}
}
}
// Para pasar de decimal a binario de 8 bits en arduino uno
String dec2bin8(int myNum)
{
int zeros = 8 - String(myNum,BIN).length();
String myStr;
for (int i=0; i<zeros; i++) {
myStr = myStr + "0";
}
myStr = myStr + String(myNum,BIN);
delay(1000);
return myStr;
}
// Para pasar de binario a decimal
int bin2dec(String orig, int tam){
int result = 0;
for (int i=0;i<tam;i++){
result = result*2;
result += (orig[i]-48);
//Serial.println(i);
//Serial.println(result);
}
return result;
}