Pulidora de Discos

Muy buenas a todos los miembros del foro que lean esto, mi nombre es Ángel.

Aquí os presento mi nuevo proyecto llamado “Pulidora de Discos” (V1 CDs DVD Blu-Ray).

Mi propósito en este TOPIC de mi proyecto es tanto presentároslo como ir comentando ideas como cambios en la programación, mejoras y ademas resolver dudas del mismo.

*Aquí muestro los componentes electrónicos del mismo:

-Arduino Duemilanove
-Controlador Motor PAP ELN2003
-Controlador Motor Brushless
-2 Motores Pap
-Motor Brushless
-Modulo botón
-Circuitos, extensiones y cableados.

La programación es bastante simple ya que solo necesito controlar el “Motor PAP” puesto que el “Motor Brushless” lo controlo con su debido controlador a parte.

Me faltan añadir bastantes cosas al TOPIC que las iré añadiendo poco a poco.

*IDEAS:

-1ª Añadir al circuito “Controlador del Motor PAP” un potenciometro para regular la velocidad del mismo a través de el y el Arduino (lógicamente).
-2ª Añadir el control del “Controlador del Motor Brushless” a través de Arduino

*PREGUNTAS

-1ª ¿Como puedo conseguir accionar el código del programa V1 pulsando un boton y pararlo al volver a pulsarlo?

**Bueno aquí dejo el código V1:

// Pulidora de Discos (CD DVD BLU-RAY) Arduino #Programa 1 
//* Editado: 1/10/16
//* Ultimo editado: 4/10/16

//Pines de conexiones entre Arduino y controlador Brushless
int motorPin1 = 2;
int motorPin2 = 3;
int motorPin3 = 4;
int motorPin4 = 5;

int motorSpeed = 1200;  //Variable  de velocidad del motor (el retraso entre cada secuencia)
int contador = 0;       //Contador de los pasos ya dados
int totalPasos = 512;   //Numero de pasos por vuelta completa
int pasos[8] = {B01000, B01100, B00100, B00110, B00010, B00011, B00001, B01001};

void setup() {
  //Declaracion de pines como salidas
  pinMode(motorPin1, OUTPUT);
  pinMode(motorPin2, OUTPUT);
  pinMode(motorPin3, OUTPUT);
  pinMode(motorPin4, OUTPUT);
  Serial.begin(9600);
}

void loop(){
  if(contador < totalPasos )
    clockwise(); //Sentido como las agujas del relog
  else if (contador == totalPasos * 2)
    contador = 0;
  else
    anticlockwise(); //Sentido contrario agujas del relog
  contador++;
}

//Funciones de giro horario y antihorario
void anticlockwise() 
{
  for(int i = 0; i < 8; i++)
  {
    setOutput(i);
    delayMicroseconds(motorSpeed);
  }
}

void clockwise()
{
  for(int i = 7; i >= 0; i--)
  {
    setOutput(i);
    delayMicroseconds(motorSpeed);
  }
}

void setOutput(int out) //Función secuencia giro
{
  digitalWrite(motorPin1, bitRead(pasos[out], 0));
  digitalWrite(motorPin2, bitRead(pasos[out], 1));
  digitalWrite(motorPin3, bitRead(pasos[out], 2));
  digitalWrite(motorPin4, bitRead(pasos[out], 3));
}

Bueno como no se que es V1 te lo respondo genérico

// Pulidora de Discos (CD DVD BLU-RAY) Arduino #Programa 1 
//* Editado: 1/10/16
//* Ultimo editado: 4/10/16

//Pines de conexiones entre Arduino y controlador Brushless
const byte motorPin1 	= 2;
const byte motorPin2 	= 3;
const byte motorPin3 	= 4;
const byte motorPin4 	= 5;
const byte botonPin 	= 6;

int motorSpeed 			= 1200;  //Variable  de velocidad del motor (el retraso entre cada secuencia)
int contador 			= 0;       //Contador de los pasos ya dados
int totalPasos 			= 512;   //Numero de pasos por vuelta completa
int pasos[8] 			= {B01000, B01100, B00100, B00110, B00010, B00011, B00001, B01001};
bool estadoboton 		= false;
bool estadobotonAnt		= false;
boot estado 			= false;

void setup() {
  //Declaracion de pines como salidas
  pinMode(motorPin1, OUTPUT);
  pinMode(motorPin2, OUTPUT);
  pinMode(motorPin3, OUTPUT);
  pinMode(motorPin4, OUTPUT);
  pinMode(botonPin, INPUT_PULLUP); // pulsador con un extremo a gnd y el otro al pin
  Serial.begin(9600);
}

void loop(){
  estadoboton = digitalRead(botonPin);
  if (estadoboton && !estadobotonAnt) {
  	  estado = !estado;
  }
  estadobotonAnt = estadoboton;
  
  if (estado) {
  	    if (contador == totalPasos * 2)
		    contador = 0;
		else if (contador < totalPasos )
			    clockwise(); //Sentido como las agujas del relog
			 else 
			    anticlockwise(); //Sentido contrario agujas del relog
		contador++;
  }
  else {
  	 // accion 2
  }
}

//Funciones de giro horario y antihorario
void anticlockwise() 
{
  for (int i = 0; i < 8; i++)  {
       setOutput(i);
       delayMicroseconds(motorSpeed);
  }
}

void clockwise() {
  for (int i = 7; i >= 0; i--)  {
       setOutput(i);
       delayMicroseconds(motorSpeed);
  }
}

void setOutput(int out) {//Función secuencia giro
  digitalWrite(motorPin1, bitRead(pasos[out], 0));
  digitalWrite(motorPin2, bitRead(pasos[out], 1));
  digitalWrite(motorPin3, bitRead(pasos[out], 2));
  digitalWrite(motorPin4, bitRead(pasos[out], 3));
}