Paso 8: Paso 7: el programa.
algoritmo 1
#include < Servo.h >
int map_table [140] [14];
tablex de int = 0;
tabley int = 0;
cm2 de int = 1; establece en 1 Si desea que las medidas en cm, 0 si pulgadas.
Servo myservo; crear objeto servo para controlar un servo (eje)
Servo myservo2; crear objeto servo para controlar un servo (pistola)
se puede crear un máximo de ocho objetos de servo
const int MeasureOutput = 6; Pin de ping)))
int rango = 80; rango
int pos = 0; variable para almacenar la posición del servo
barrido de int = 1;
void setup()
{
Serial.Begin(9600);
myservo.Attach(9); se fija el servo en el pin 9 al objeto servo
myservo2.Attach(10); se fija el servo en el pin 10 al objeto servo
}
void loop()
{
Si (barrido == 1)
{
para (pos = 0; pos < 180; pos += 1) / / va desde 0 grados a 180 grados
{/ / en pasos de 1 grado
Map(POS);
myservo.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 = 180; pos > 1; pos-= 1) / / va de 180 grados a 0 grados
{
myservo.Write(POS); Dile el servo a la posición en la variable 'pos'
Map();
Delay(15); espera 15ms para el servo a la posición
}
barrido = 2;
}
Si (barrido == 2) {}
para (pos = 0; pos < 180; pos += 1) / / va desde 0 grados a 180 grados
{/ / en pasos de 1 grado
Measure(POS);
myservo.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 = 180; pos > = 1; pos-= 1) / / va de 180 grados a 0 grados
{
Measure(POS);
myservo.Write(POS); Dile el servo a la posición en la variable 'pos'
Delay(15); espera 15ms para el servo a la posición
}
}
}
medida nula (int número)
{
larga duración, pulgadas, cm;
pinMode (MeasureOutput, salida);
digitalWrite (MeasureOutput, bajo);
delayMicroseconds(2);
digitalWrite (MeasureOutput, alto);
delayMicroseconds(5);
digitalWrite (MeasureOutput, bajo);
pinMode (MeasureOutput, entrada);
duración = pulseIn (MeasureOutput, alto);
cm = microsecondsToCentimeters(duration);
pulgadas = microsecondsToInches(duration);
convert_to_1D_number(Number);
Si (cm2 == 1)
{
Si (cm < map_table [tablex] [tabley] - 10 & & gama < cm) {}
barrer = 3;
Attack(cm);
}
Si (cm > map_table[tablex][tabley]) {}
map_table [tablex] [tabley] = cm;
}
}
Else {}
}
}
anular el ataque (int org)
{
myservo.Attach(9);
int pos2;
para (pos2 = pos; pos < 180; pos += 1)
{
Serial.println("Attack!");
pos ++;
Delay(15);
destino (punto de venta, org);
myservo.Write(POS);
myservo2.Write(100);
}
para (pos2 = pos, pos > 1; pos = 1)
{
Serial.println("Attack!");
pos ++;
Delay(15);
destino (punto de venta, org);
myservo.Write(POS);
myservo2.Write(100);
}
barrido = 2;
}
Anular izquierdo (int org)
{
Serial.println("attackL!");
pos--;
Delay(15);
myservo.Attach(9);
destino (punto de venta, org);
myservo.Write(POS);
}
anular derecho (int org)
{
Serial.println("attackR!");
pos ++;
Delay(15);
myservo.Attach(9);
destino (punto de venta, org);
myservo.Write(POS);
myservo2.Write(100);
}
void blanco (int cantidad, int org)
{
larga duración, pulgadas, cm;
pinMode (MeasureOutput, salida);
digitalWrite (MeasureOutput, bajo);
delayMicroseconds(2);
digitalWrite (MeasureOutput, alto);
delayMicroseconds(5);
digitalWrite (MeasureOutput, bajo);
pinMode (MeasureOutput, entrada);
duración = pulseIn (MeasureOutput, alto);
cm = microsecondsToCentimeters(duration);
pulgadas = microsecondsToInches(duration);
convert_to_1D_number(Number);
Si (cm2 == 1)
{
Si (map_table [tablex] [tabley] < rango) {}
Si (cm < map_table[tablex][tabley]/2) {}
Right(org);
}
Si (cm < map_table[tablex][tabley]) {}
Left(org);
}
}
Else {}
Si (cm < map_table [tablex] -10 [tabley] & & gama < cm) {}
Right(org);
}
Si (cm < map_table [tablex] -10 [tabley] & & gama > cm) {}
Left(org);
}
}
Si (cm > map_table[tablex][tabley]) {}
map_table [tablex] [tabley] = cm;
}
}
Else {}
}
}
mapa vacío (int número)
{
larga duración, pulgadas, cm;
pinMode (MeasureOutput, salida);
digitalWrite (MeasureOutput, bajo);
delayMicroseconds(2);
digitalWrite (MeasureOutput, alto);
delayMicroseconds(5);
digitalWrite (MeasureOutput, bajo);
pinMode (MeasureOutput, entrada);
duración = pulseIn (MeasureOutput, alto);
pulgadas = microsecondsToInches(duration);
cm = microsecondsToCentimeters(duration);
convert_to_1D_number(Number);
Si (cm2 == 1)
{
map_table [tablex] [tabley] = cm;
}
Else {}
map_table [tablex] [tabley] = pulgadas;
}
Serial.println(map_table[tablex][Tabley]);
Serial.Print (",");
Serial.Print(Number);
}
void convert_to_1D_number(int number)
{
tablex = ((number % 14) + 1);
Tabley = número / 14;
}
microsecondsToInches(long microseconds) largo
{
Según ficha técnica de paralaje para el PING))), hay
73,746 microsegundos por pulgada (es decir, el sonido viaja a 1130 pies por
en segundo lugar). Esto da la distancia recorrida por el ping, saliente
y, por lo que dividimos por 2 para obtener la distancia del obstáculo.
Ver: http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf
volver microsegundos / 74 / 2;
}
microsecondsToCentimeters(long microseconds) largo
{
La velocidad del sonido es 340 m/s o 29 microsegundos por centímetro.
El ping viaja hacia fuera y hacia atrás, para encontrar la distancia de la
objeto que tomamos la mitad de la distancia recorrida.
volver microsegundos / 29 / 2;
}
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
algoritmo 2
#include < Servo.h >
Servo myservo; crear objeto servo para controlar un servo
Servo myservo2; se puede crear un máximo de ocho objetos de servo
dist int = 80;
Dirección int = 1;
Va a cambiar las variables:
int ledState = bajo; ledState permite configurar el LED
previousMillis largo = 0; almacenará la última vez actualizó a LED
las variables de seguimiento es mucho porque el tiempo, medido en milisegundos,
rápidamente se convertirá en un número más grande que puede ser almacenado en un int.
largo intervalo de tiempo = 1000; intervalo en el que a parpadear (milisegundos)
squirt de int = 0;
int pos = 0; variable para almacenar la posición del servo
const int MeasureOutput = 6;
int currentMillis = 0;
void setup()
{
Serial.Begin(9600);
myservo.Attach(9); se fija el servo en el pin 9 al objeto servo
myservo2.Attach(10);
myservo2.Write(147);
}
void loop()
{
Serial.println(squirt);
Serial.println(currentMillis);
Si (currentMillis - previousMillis > intervalo) {}
guardar la última vez que titilaba el LED
previousMillis = currentMillis;
Si (ledState == baja & & squirt == 1) {}
ledState = alto;
myservo2.Attach(10);
myservo2.Write(155);
Delay(120);
squirt = 0;
}
Si (ledState == alto & & squirt == 0) {}
ledState = bajo;
myservo2.Detach(); }
}
digitalWrite (13, ledState);
Delay(1);
Scan();
Delay(14);
currentMillis = currentMillis + 15;
digitalWrite (10, bajo);
}
void scan()
{
larga duración, pulgadas, cm;
pinMode (MeasureOutput, salida);
digitalWrite (MeasureOutput, bajo);
delayMicroseconds(2);
digitalWrite (MeasureOutput, alto);
delayMicroseconds(5);
digitalWrite (MeasureOutput, bajo);
pinMode (MeasureOutput, entrada);
duración = pulseIn (MeasureOutput, alto);
cm = microsecondsToCentimeters(duration);
pulgadas = microsecondsToInches(duration);
Si (dist > = cm) {}
Left();
}
Si (dist < cm) {}
Right();
}
Si (dist > cm) {}
myservo2.Attach(10);
squirt = 1;
myservo2.Detach();
}
}
left() vacío {}
Si (Dirección == 1)
{
pos--;
myservo.Write(POS);
Si (pos < 1) {}
Dirección = 0;
}
}
Si (dirección == 0)
{
pos ++;
myservo.Write(POS);
Si {} (pos > 150)
Dirección = 1;
}
}
}
right() vacío {}
Si (Dirección == 1)
{
pos ++;
myservo2.Attach(10);
myservo.Write(POS);
myservo.Write(POS);
Si {} (pos > 150)
Dirección = 0;
}
}
Si (dirección == 0)
{
pos--;
myservo2.Attach(10);
myservo.Write(POS);
myservo2.Write(155); conjunto servo a mitad de carrera
Delay(15);
myservo2.Detach();
myservo.Write(POS);
Si (pos < 1) {}
Dirección = 1;
}
}
}
microsecondsToInches(long microseconds) largo
{
Según ficha técnica de paralaje para el PING))), hay
73,746 microsegundos por pulgada (es decir, el sonido viaja a 1130 pies por
en segundo lugar). Esto da la distancia recorrida por el ping, saliente
y, por lo que dividimos por 2 para obtener la distancia del obstáculo.
Ver: http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf
volver microsegundos / 74 / 2;
}
microsecondsToCentimeters(long microseconds) largo
{
La velocidad del sonido es 340 m/s o 29 microsegundos por centímetro.
El ping viaja hacia fuera y hacia atrás, para encontrar la distancia de la
objeto que tomamos la mitad de la distancia recorrida.
volver microsegundos / 29 / 2;
}