#include < Servo.h >
/ * por Gabe Magnuson
para: Lego Nerf Arduino torrecilla
24/07/2013
*/
/*
arrancar este en marcha y probar la gama de números en el stick analógico,
mis valores de memoria de ps1 oscilan entre 0 - 1000 y como sensorMin y sensorMax
También verifique que todas servo pernos y pernos de olla son correctos
*/
const int numReadings = 10; const no se pueden cambiar
const int sensorMin = 0; valor mínimo de stick analógico, prueba hacerlo mediante terminal de serie
const int sensorMax = 1000; valor máximo de stick analógico, la prueba misma manera
byteRead de bytes;
Servo1 servo; iniciar una instancia del servo y darle un nombre
Servo servo2;
Servo servoFire;
int pos = 0;
int servo1Readings [numReadings]; las lecturas de la entrada analógica
int servo2Readings [numReadings];
Índice de int = 0; el índice de la lectura actual
int servo1total = 0; la corriente total
int servo1Average = 0; el medio de
int servo2total = 0; la corriente total
int servo2Average = 0; el medio de
int pos1 = 90;
int pos2 = 90;
int pos1Old = 90;
int pos2Old = 90;
int inputVertical = A0; pines de entrada para el cable de señal de la olla
int inputHorizontal = A1;
int sensorRange = 0; variables utilizadas para decidir el rango de movimiento
int topRange = 0;
int bottomRange = 0;
void setup()
{
pinMode(OUTPUT,A5); inicializar estos pines como salidas a sticks analógicos de potencia
pinMode(OUTPUT,A4);
pinMode(INPUT,inputVertical); Set ollas a la entrada de los pines
pinMode(INPUT,inputHorizontal);
Serial.Begin(9600); inicializar la comunicación serial con la computadora:
para (int thisReading = 0; thisReading < numReadings; thisReading ++) / / inicializar todas las lecturas a 0 en ambas matrices (para suavizar los valores, si confunde checkout "atenuación" en la Página Web de arduino)
{servo1Readings [thisReading] = 0;
servo2Readings [thisReading] = 0;}
servo1.Attach(10); se trata de A2, la numnering de los pines digitales continúan el analógico a partir de A0
servo2.Attach(11); Esto es A3
servoFire.attach(16);
sensorRange = sensorMax - sensorMin; Esto corta la gama de las ollas en seis trozos y luego toma la parte superior e inferior 2 para ser utilizado en el movimiento de los servos
sensorRange = sensorRange / 6;
bottomRange = sensorRange * 2;
topRange = sensorMax - bottomRange;
servoFire.write(0);
servo1.Write(90);
servo2.Write(90);
}
void loop() {}
pos1Old = pos1; mantiene posición de cambiar si no se detecta ningún movimiento
pos2Old = pos2;
analogWrite(A5,168); Estos dos pines se utilizan para sticks analógicos
analogWrite(A4,168);
digitalWrite(12,HIGH);
Reste la lectura:
servo1total = servo1total - servo1Readings [índice]; Suaviza los datos provenientes de los potes
lectura del sensor:
servo1Readings [index] = analogRead(inputHorizontal);
Añadir la lectura al total:
servo1total = servo1total + servo1Readings [índice];
calcular la media:
servo1Average = servo1total / numReadings;
Reste la lectura:
servo2total = servo2total - servo2Readings [índice];
lectura del sensor:
servo2Readings [index] = analogRead(inputVertical);
Añadir la lectura al total:
servo2total = servo2total + servo2Readings [índice];
avanzar a la siguiente posición en la matriz:
index = index + 1;
Si estamos en el final de la matriz...
Si (Índice > = numReadings)
.. .wrap todo al principio:
índice = 0;
calcular la media:
servo2Average = servo2total / numReadings;
Si (servo1Average > topRange)
{pos1 ++;
Si (pos1 > 180)
{pos1 = 180;}
Serial.println ("servo1 para arriba");
}
else if (servo1Average < bottomRange)
{pos1--;
Si (pos1 < 0)
{pos1 = 0;}
Serial.println ("servo1 abajo");
}
otra cosa
{pos1 = pos1Old;
Serial.println ("servo1 en ninguna parte");
}
Si (servo2Average > topRange)
{pos2 ++;
Si (pos2 > 110)
{pos2 = 110;} limita el movimiento del servo
Serial.println ("servo2 para arriba");
}
else if (servo2Average < bottomRange)
{pos2--;
Si (pos2 < 75)
{pos2 = 75;} limita el movimiento del servo
Serial.println ("servo2 abajo");
}
otra cosa
{pos2 = pos2Old;
Serial.println ("servo2 en ninguna parte");
}
/ * Serial.println(pos2); puede usar este bit para depurar y qué grado los servos se establecen en la pista
Serial.println(Pos1); * /
servo2.Write(POS2);
servo1.Write(Pos1);
/ * verificar si los datos se ha enviado desde el ordenador: * /
Si (Serial.available()) {}
/ * leer el byte más reciente * /
byteRead = Serial.read();
/ * El valor leído, hacia el puerto serial del eco. */
Si (byteRead = 'F');
{Serial.println("fire");
para (pos = 0; pos < 120; pos += 1) / / va desde 0 grados hasta 120 grados
{/ / en pasos de 1 grado
servoFire.write(pos); Dile el servo a la posición en la variable 'pos'
Delay(15); espera 15ms para el servo a la posición
}
para (pos = 120; pos > = 1; pos-= 1) / / va de 120 grados a 0 grados
{
servoFire.write(pos); Dile el servo a la posición en la variable 'pos'
Delay(15); espera 15ms para el servo a la posición
}
}
}
/ * Serial.println(analogRead(inputVertical));
Serial.println(analogRead(inputHorizontal)); * /
Esto puede usarse para probar el mín/máx de ollas
Delay(5); demora en el medio para dar tiempo de servo para mover
}