Paso 4: El código
Está bien dos tipos de personas:
1. codificadores que realmente quieren entender el código.
2. las personas que no conocen un lick de codificación y sólo desean el archivo de origen de materia prima.
Buenas noticias para usted, esta página cubre!
Tenga en cuenta que este código está bajo licencia GPL v3.
Así que para aquellos de ustedes que solo quiero el archivo de origen de materia prima, es en Github:
** Pero antes de hacer clic en ese enlace, por favor Desplácese hacia abajo y lea el código settings.* *
Para aquellos de ustedes que quieren entender el código, gracias por apreciar el tiempo que pasé escribiéndolo! Vamos a saltar a la derecha en:
Lo primero que tenemos que incluir estas tres bibliotecas. ¿Confundir lo que son los dos últimos? Eso está bien. Aparecieron en el anterior tutorial de costura que unía. Si ya sabes cómo agregar bibliotecas de Arduino al IDE, sin embargo, aquí está el enlace directo a los repositorios Github:
A continuación iré sobre las funciones que uso en el código:
Flash destella dos LED juntos.
alterna alterna ambos LED.
parpadea parpadea ambos LED una vez.
toDegrees convierte a un par de lecturas magnéticas x e y en un rumbo en grados.
por ciento toma dos números y crea un por ciento con el primero como 100% y el segundo como la fracción.
CÓDIGO CONFIGURACIÓN ***
turnTime es la cantidad de tiempo que se estima que llevaría al usuario a girar en milisegundos. Por ejemplo, puede reducir la turnTime para ayudar a enseñar vueltas vinculados vs alargando el tiempo de vuelta para dejar espacio para explicaciones sobre la forma de esquí entre vueltas.
desaceleración es esencialmente cuánto desea que el usuario para reducir la velocidad al final de cada turno. Por ejemplo, el valor a 2 asume que el usuario se reducir a la mitad su velocidad antes de girar. Si usted le está enseñando al usuario entrar en una pizza gradual, puede disminuir el valor que vamos a decir 1.3 para que el usuario tenga que reducir su velocidad en 1/4 antes de dar vuelta.
maxLearnCount es un número de vueltas que el dispositivo utiliza para aprender el curso antes de comenzar a decir al usuario donde esquiar con el LED. Esto es útil si una colina tiene bordes con diferentes longitudes y desea obtener el tiempo promedio que toma cruzar esas longitudes.
skiPercent es el porcentaje de tiempo que desea que el dispositivo que esperar antes de decirle al usuario para reducir la velocidad. Por ejemplo, bajar el porcentaje permite vueltas más graduales, mientras que lo contrario generalmente más abrupta se convierte.
readyTime es la cantidad general de tiempo que crees que tarda en subir y bajar el ascensor en milisegundos.
Ahora vamos a inicializar el acelerómetro:
A continuación nos dirigiremos a través del código de instalación. Hay dos partes.
1. inicializar el LED en la chaqueta.
2. cargar el acelerómetro. Si no, sólo alternan el LED para mostrar la falta.
Ahora para las diferentes variables.
learnCount se utiliza para realizar un seguimiento de cuántas vueltas el dispositivo ha pasado aprendizaje, parando una vez alcanza la cantidad máxima de aprendizaje conjunto de vueltas arriba.
lastTurn se utiliza para recordar la última vez que ocurrió una vez, lo que permite la medición del tiempo de vuelta.
lastDir se utiliza para mantener la dirección general del usuario.
lastAcc se utiliza para mantener la aceleración global general del usuario.
dir es una matriz que contiene las dos direcciones sugeridas de cada turno.
dirTime es el tiempo promedio que tarda el usuario en la Cruz el camino.
currentDir se utiliza para mantener la pista de que el usuario debe ir en la dirección.
liftMode se usa para ahorrar batería cuando un ascensor o "alfombra mágica".
Por último, el código loop() . Hay varias partes:
1. medio de leer datos de acelerómetro.
El código toma cinco lecturas y les un promedio hacia fuera para mejor precisión.
Hay 3 variables importantes aquí:
magAvg es la dirección que el usuario se enfrenta a grados. Se utiliza para ayudar a guiar al usuario.
accAvg es la aceleración total de x e y del usuario. Esto se utiliza para detectar cuando el usuario se retrasa.
liftAvg es la aceleración z general del usuario. Esto se utiliza para detectar "levante" el movimiento (hacia arriba)
2. Verifique si el usuario se puede esquiar por la montaña, ha superado la cantidad de vueltas de máximo aprendizaje (maxLearnCount) por encima de y se puede esquiar cuesta abajo.
3. sabiendo lo que sabemos, compruebe primero si el usuario ha terminado un turno basado en cuánto les costó a la montaña cruzada en el proceso de aprendizaje, por lo tanto, la variable dirTime . Transferir a través de a la otra vuelta y retraso basado en cuánto tiempo creemos que es tiempo entre vueltas, por lo tanto, la variable turnTime .
4. Si no hemos llegado a la fase de inflexión todavía, comprobar si debemos decir al usuario para reducir la velocidad después de cierto tiempo basado en cuando el usuario debe detener, por lo tanto la variable skiPercent definida anteriormente. Si no, entonces tenemos que guiar al usuario en qué dirección debe ser van. Puesto que nadie es perfecto, les daremos 10 grados de holgura a cada lado.
5. la única opción de izquierda en cuanto a lo que sucede es que hemos alcanzado el tiempo para contar el usuario para reducir la velocidad. Lo haremos por la alternancia de las luces y hacia atrás hasta que el usuario ha llegado a la fase de rodaje.
6. esta declaración más es en lo que respecta a si el usuario va cuesta abajo, significa que el usuario debe ser subida en este punto, por lo que pondremos el usuario en el modo elevación para que podamos ahorrar batería y luego retrasar para que el usuario dispone de tiempo para llegar a la alfombra del ascensor/magia.
7. esta declaración lo es en cuanto a si el usuario es más allá de aprender el modo, lo que significa que el usuario debe estar en modalidad de aprendizaje en este punto. Esto es importante porque si el usuario está tomando su aprendizaje de la primera vuelta, no queremos estropear la variable dirTime , porque obviamente su primer viaje a través de la ruta tomará más tiempo ya que tienen que ganar velocidad. Con eso, primero lo compruebe para asegurarse de que se trata no es la 1ª grabación de datos, porque eso significaría que no tendríamos los datos anteriores para construir. A continuación nos promedio hacia fuera de la dirección del usuario con su dirección pasada para que podamos conseguir una lectura exacta en cuanto a donde queremos que el usuario a modo de aprendizaje para este giro particular.
8. a fin de detectar vueltas, esperamos hasta que el usuario comienza vertimiento de velocidad hasta el punto que queremos que, por lo tanto, el conjunto de desaceleración variable anterior. Luego asignaremos la dirección que el usuario ha ido 1 de las 2 direcciones sugeridas queremos el usuario ir pulg (tenemos una dirección sugerida para la izquierda a través de la montaña y otro para ir derecho a través de). También tenemos que registrar la cantidad de tiempo que tardó la montaña y escribir en la variable dirTime .
9. esta declaración lo es en cuanto a si se trata de la primera grabación de datos, es decir, tan sólo asignamos los datos actuales a sus respectivas variables, para que en el lazo siguiente podemos empezar con un promedio de los datos.
10. esta declaración lo es en cuanto a si el usuario está en modo de elevación, lo que significa que son. Para ahorrar batería, sólo comprobamos para movimiento hacia abajo solamente una vez por segundo y flash de lo LED para indicar al usuario que en el modo elevación.
11. retrasando 50 milisegundos, no sobrecarga el código y ahorrar batería, ya que incluso revisando lecturas cada 50 milisegundos, equivale a lectura de datos 20 veces por segundo.