Paso 4: Cargar el código de fuente del cortador de cigarro
Ahora que estamos seguros que tenemos nuestra protoboard conectado correctamente y que todos los servos están funcionando y están subiendo los proyectos de código fuente. A continuación tengo el código fuente mostrado y comentado explicando sus funciones.
/*******************************************************
PROPÓSITO: Luz-A-Bull hacer curso proyecto
Creado por Karl Lewis
FECHA: 11/2014
*******************************************************/
/****************************************************************************************************************************
Aquí voy a utilizar la función de #define para asignar una variable reconocible a los pines de Arduino. Esta característica define hará un reconocimiento más fácil de lo que hace cada función. Sin este todas las funciones sería leer de por números de pin que es menos reconocibles y requieren refiriéndose a lo que está conectado a ese pin.
****************************************************************************************************************************/
#include //Includes la biblioteca de servo incluida con el IDE de Arduino
Estas son mis Servos
Servo, izquierda, derecha, transporte; izquierda en el lado izquierdo de la herramienta de corte, a la derecha y el transporte se mueve el cigarro
#define switchPin 13 //this definir función me permitirá colocar 'switchPin' en el código en lugar de 13
#define debounceTime 200
mucho tiempo;
lpos int = 0; definición de números enteros para ser utilizado con los servos
rpos de int = 55;
int cpos = 0;
void setup() {}
left.Attach(5); el servo izquierdo será controlada por el pin 5
Right.Attach(6); el servo derecho será controlado por el perno 6
Transport.Attach(3); el servo que mueve el cigarro será controlado por el pin 3
pinMode (switchPin, entrada); Esto configurará la switchPin como insumo
}
void loop() {}
left.Write(lpos); Esto hará que el ángulo de la izquierda el servo igual la lpos entero
Right.Write(RPOs); Además esto será igual a RPO entero
Transport.Write(CPOs); y este será el número entero cpos
Si (readSwitch(debounceTime) == true) {bucle //If inicia las funciones de los dispositivos cuando la entrada baja
Delay(1000);
Primero abriremos el Cortapuros usando una función
No he podido venir para arriba con un método inteligente para mover ambos servos al mismo tiempo así que me mudo a mitad de camino
con cada una y luego la otra mitad.
para (lpos = 0; lpos < = 30; lpos += 1) {//half de movimiento de la izquierda
left.Write(lpos);
Delay(15);
}
para (RPO = 55; RPO > = 25; rpos-= 1) {//half de movimiento de la izquierda
Right.Write(RPOs);
Delay(15);
}
La segunda mitad del movimiento
para (lpos = 30; lpos < = 65; lpos += 1) {//secong la mitad del movimiento de la izquierda
left.Write(lpos);
Delay(15);
}
para (RPO = 25; RPO > = 0; rpos-= 1) {//second la mitad del movimiento de la derecha
Right.Write(RPOs);
Delay(15);
}
Delay(2000);
Ahora transporte el cigarro en la posición para cortar
para (cpos = 0; cpos < = 90; cpos += 1) {}
Transport.Write(CPOs);
Delay(15);
}
Esto ahora corta el cigarro con los servos de izquierda y derecho
para (lpos = 65; lpos > = 30; lpos-= 1) {//First la mitad de la izquierda
left.Write(lpos);
Delay(15);
}
para (RPO = 0; rpos < = 25; rpos += 1) {//First la mitad de la derecha
Right.Write(RPOs);
Delay(15);
}
La segunda mitad del movimiento
para (lpos = 30; lpos > = 0; lpos-= 1) {//Second la mitad de la izquierda
left.Write(lpos);
Delay(15);
}
para (RPO = 25; rpos < = 55; rpos += 1) {//Second la mitad de la derecha
Right.Write(RPOs);
Delay(15);
}
Delay(2000);
Ahora el cigarro vuelve a la posición
para (cpos = 90; cpos > = 0; cpos-=1) {}
Transport.Write(CPOs);
Delay(15);
}
}
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Nueva pestaña con la etiqueta de funciones
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/****************************************************************************************************************************
Esta porción se utiliza para leer mi entrada interruptor (táctil capacitiva) para activar el circuito. Encontré que el teclado funciona idénticamente a un interruptor mecánico de entrada por lo que he dejado este proceso debounce en esta entrada.
****************************************************************************************************************************/
byte readSwitch (debounce largo) {//The debounce variable se define en la Página principal
lastTime larga estática; Nueva variable llamada lastTime, representa la última vez que el interruptor estaba activo
previousState byte estática; Nueva variable llamada previousState representa el estado anterior de la entrada
byte currentState = digitalRead(switchPin); Lee nuevo currentState variable que utiliza un digital de entrada
Si (currentState == baja & & previousState == alto & & millis ()-lastTime > debounce) {//If mi pin entrada sólo pasó de alto a bajo y su estado más tiempo que el rebote entonces
lastTime=millis(); Esto lastTime se establece en la última vez y se restablece la previousState del contador de tiempo de debounce = bajo; PreviousState set a bajo
Return(true); De hecho ha ocurrido devolver true o 1 significa una entrada. Esto devuelve el valor 'true' se utiliza para activar el if declaración en la página anterior
}
otro {//If la instrucción 'if' no fue satisfecho lo llevará a cabo las tareas en la declaración 'persona'
Nota: ' {elseif()} crea un if secundaria declaración de preforma, con 'otro' se realizará / / si el 'if' no.
previousState = alto; Establezca el previousState en alto
Return(false); Volver 'falso' que indicará que no se presiona el interruptor
}
}