Paso 5: Crear un bosquejo
Bosquejo:
Mi bosquejo completo está disponible en el archivo .zip en el siguiente paso, sin embargo, es útil tener una idea del plan general para facilitar la adaptación.
Interrupción:
Necesitamos para la radio por modulación de pin D5 alta/baja a una velocidad de 50 baudios. Es decir, cada 20ms necesitamos representar un nuevo pedacito de datos como una alta o baja de un 1 o 0 respectivamente. Utilizamos este flujo de datos para codificar una cadena de texto. Existen diversos métodos para ello, pero 7-bit ASCII es más común. Mantendremos un doble-buffer que contiene la cadena de transmisión y una copia que estamos preparando con datos actualizados.
Para conseguir una transmisión más eficiente y confiable y sobre todo para darnos la exacta sincronización, enviamos la cadena bajo interrupción. Esto requiere un pedazo corto y rápido de código simplemente para mantener la pista de que bit que byte de la cadena se transmite actualmente y pasar a la siguiente broca cada vez. Cuando terminamos una cadena cambiar los almacenadores intermediarios de la cadena, moviendo sobre enviar los datos más actualizados del otro buffer.
Bucle principal:
En el bucle principal, circulamos, leyendo cada uno de los sensores y el GPS cada vez que estén listos. Los últimos valores se almacenan en variables. Cuando el GPS está preparado para dar una nueva ubicación, leemos, decodificarlo y actualizar la copia de trabajo de la cadena. Tenemos que apagar interrumpe brevemente con el fin de actualizar el buffer para que no terminen de transmitir una cadena construida a mitad. Como resultado, actualizamos el tampón sólo cuando una nueva ubicación GPS está lista, para que no tengamos interrupciones durante demasiado tiempo.
Cada vez que cambiamos amortiguadores que establecemos una bandera diciendo que el bucle principal que se inicia una nueva transmisión. La vieja cadena que sólo fue enviada entonces se escribe en la tarjeta SD antes de abrir el búfer hasta que se actualiza.
También tenemos que mantener un ojo en el GPS para asegurarse de que permanece en modo de vuelo. La razón que utilizamos un GPS de Ublox módulo es que operará hasta las alturas que nos visitará - muchos GPS no funcionan encima de cerca de 14 kilómetros. Para hacer el trabajo de Ublox en altura, tenemos que asegúrese de que esté en el modo correcto.
Sensores y puertos:
La junta puede hablar con el módulo GPS por I2C o UART. He elegido usar la interfaz I2C para que puedo utilizar el UART para la depuración mediante la conexión al puerto serie del PC. También utilizaremos el I2C para hablar con el sensor de presión de Honeywell, pero los dos parecen coexistir en las líneas I2C sin conflicto.
La Junta tendrá dos sensores de temperatura DS18B20. Usé uno interno y uno externo. Estos son muy sensibles a tiempo y necesitaba desactivar interrupciones de unos microsegundos al leerlos. De lo contrario son muy fácil de usar. Usé una copia de la biblioteca de alambre que decía tener menos cuelgues que el nativo Arduino uno. Cierto o no, funcionó bien.
La tarjeta SD se encuentra en los pines SPI y está a cargo de la biblioteca de SDfat. Tarjeta SD de escritura tiene que una carga de memoria y uno de los verdaderos trucos para este bosquejo intentaba controlar cuánto SRAM gratis estaba disponible.