Paso 3: El código
Yo no soy grande en compartir mi código, sólo porque es personalizado para mi setup y no tiene más probable es que uso a usted y a su configuración única. Si quieres mi código, envíeme un correo electrónico a cgmalantonio y con mucho gusto le enviaré una copia. Sin embargo voy a describir mi trabajo en seudo-código así que usted consigue la idea.Permite llegar a ella!
Primero quería una función que utilizaría el sensor de ultrasonidos para obtener lecturas mientras el motor servo a 5 puntos diferentes:
(0 = izquierda / 45 = frente de izquierda / / 90 = frente / / 135 = frontal derecho / / 180 = derecha)
Análisis {}
Usé un simple bucle for para mover el servo en incrementos de 45, de 0 a 180 y otro para traerlo de nuevo a 0. Cada vez alcanza su punto siguiente llama a mi función de "LowestNumber" y añade el valor recibido a una matriz para los 5 valores recibidos (izquierda / delantera izquierda / frontal / delantero / derecho).
algo como esto:
para (int i = 0; i < 180; i = + 45) {}
myservo.Write(i);
LowestNumber();
}
para (int i = 180; i > 0; i = i - 45) {}
myservo.Write(i);
LowestNumber();
}
La función de LowestNumber tiene 3 lecturas, espaciadas a 50 milisegundos, desde el sensor de ultrasonidos. Las 3 lecturas luego se comparan entre sí, y el valor más bajo (leer más) se acepta y se almacena en una variable (LowestNumberResult). Este número se almacena en una matriz basada en donde se coloca el servo. El sensor ultrasónico es un poco impredecible a veces así que me gusta revisar 3 veces. Y teniendo en cuenta que sólo estoy preocupado de que golpear algo, mantener el número más bajo.
su número más bajo del gancho agarrador
un = ultrasonidos. Ranging(Inc)
Delay(50)
b = ultrasonidos. Ranging(Inc)
Delay(50)
c = ultrasonidos. Ranging(Inc)
Delay(50)
si (a > b).
a = b
Si (a > c)
a = c
Una vez que todas las 5 posiciones del motor cinemático han reunido una distancia desde el sensor de ultrasonidos, entonces tenemos que manejar apropiadamente las posiciones.
}
Ahora sabemos que las distancias frente a localización de remo. Empezamos por averiguar qué dirección es la distancia más grande y si se cumplen algunas condiciones, vamos a ir en esa dirección.
Manejar {}
Algunas de las restricciones fueron así:
-son todas las direcciones mayores de 20 pulgadas
hacer que todos los caminos son claros, puede ser cualquier número,
no tiene que ser de 20 pulgadas
-Si dirección más futura es inferior a la posición delantera + 10 pulgadas (un número), seguir adelante
favoreciendo la dirección frontal significa no solo girar a la
alrededor en círculos en el centro de su habitación
Finalmente añadí una segunda declaración, al igual que esto,
diciendo que si la parte delantera era bastante clara, ir hacia adelante dos veces
-Si dirección más futura es la izquierda, verifique que esté delantera izquierda
-Si el cheque no claro derecho
-Si dirección más futura es la mejor, verifique que esté delantero derecho
-Si el cheque no claro a la izquierda
-Si dirección más futura es frontal, asegúrese de que la izquierda es claro
-Si el cheque no claro derecho
-Si dirección más futura es delantero derecho, hacen que derecha es claro
-Si el cheque no claro a la izquierda
-Si todas las direcciones son menos de 20 queremos la vuelta el remo y probar nuevas medidas
}
{} Extra
He añadido algunos extras para mi interruptor de 5 posiciones.
Energía en
A la espera de la entrada
-Si acercamos el remo de la parte delantera demasiado cerca, ¡ copia de seguridad y sacudir su cabeza hacia atrás y de cuarto
-Si pulsa una dirección, a avanzar en esa dirección
Haz clic en el centro
-inicia una consulta, entradas 8 direcciones y conducirá en aquellas direcciones
Centro haga clic de nuevo
-unidades de manera autónoma y evita las paredes/objetos
Centro haga clic una tercera vez vuelve el menú para iniciar
así como algunos giros cabeza del servo cuando se escoge una dirección (como si el remo está buscando donde va a girar)
}