Paso 6: Una mirada más de cerca cómo funciona: código
Vamos a empezar con el código de dispositivo. Es corto y simple. Tiene dos trabajos: recoge las lecturas de temperatura y responder al pulsar un botón.
Echa un vistazo a la definición de función para getTemp().
Esta función recoge las lecturas de temperatura a intervalos regulares. El intervalo se define por una constante, el intervalo, en la parte superior del archivo. El primer getTemp lo que hace es programar para ejecutar otra vez en segundos de intervalo, por llamar a imp.wakeup (intervalo, getTemp). Horarios de una devolución de llamada; el imp puede continuar haciendo otras cosas, y en segundos de intervalo, el sistema operativo telefónicamente y nos pide que vuelva a ejecutar el getTemp.
Después programar para funcionar otra vez, getTemp lee el voltaje en el divisor de termistor, luego utiliza una curva de 2ª orden simple para estimar la temperatura. Los coeficientes de la curva de ajuste se almacenan como constantes en la parte superior del archivo (si te fijas, notarás sólo estamos usando una curva lineal de ajuste! Pero el ajuste de 2 º orden hay si quieres probarlo).
A continuación, tenemos una función que cuenta al imp qué hacer cuando es el momento de ir a dormir:
Esta función hace dos cosas: en primer lugar, configura Pin1 como un pin de activación, de manera que si se presiona el botón se activará el imp de sueño profundo. En segundo lugar, dice el imp para ir al sueño profundo para como está permitido (MAXSLEEP se define como 86396 segundos en la parte superior del archivo, este es un día menos de 4 segundos. La llamada a server.sleepfor() alerta al servidor que el dispositivo se va a dormir, por lo que el agente no tendrá que esperar a que la imp que desaparecen antes de que se da cuenta de lo que ha sucedido.
A continuación, hay una función de controlador de eventos de prensa botón:
Esta es una función interesante. Resulta que, cuando usted presione el botón en todos, el imp llama a esta función inmediatamente. El imp no espere varios segundos para ir a dormir, como se podría pensar de cómo funciona el termómetro. En cambio, el imp llama a esta función inmediatamente y espera para ver si el usuario mantiene el botón de durante tres segundos. Si lo hace, va a dormir. Si no, deja la función y vuelve a hacer lo que estaba haciendo antes.
A continuación, vemos algunas devoluciones de llamada se registran para agente eventos:
El primer controlador de aquí permite que el agente al dispositivo para ir a dormir. Mientras el dispositivo está funcionando, la guarda de agente atención a cuánta temperatura cambiar es ver y ajusta la cantidad de tiempo permitirá el dispositivo permanecer despierta antes de llamar a este evento y que el dispositivo para ir a dormir para ahorrar batería.
El segundo controlador es utilizado en ocasiones especiales. El agente no sabe automáticamente ID de dispositivo del dispositivo, pero es necesario para establecer los nombres de canal para enviar datos a Xively. Normalmente, el agente y el dispositivo arrancar juntos cuando el agente se inicia por primera vez, después de que el agente se queda en. Sin embargo, a veces el agente se reiniciará por sí mismo, tal como si usted empuja nuevo código a él. En este caso, el agente necesita una forma de pedir el dispositivo cuál es su ID de dispositivo: esta función le da una forma de hacerlo.
Después de eso, hemos terminado con las definiciones, y llegamos al punto donde se iniciará operación tiempo de ejecución cuando el dispositivo se inicia. Lo primero que el imp hace cuando lo botas es averiguar por qué arrancar. Si es debido a una activación de Pin1, el imp hace lo mismo no si presiona el botón para enviarlo a dormir - se queda aquí y espera a ver si presiona el botón. Si te dejaron ir antes de tiempo de espera de 3 segundos, el imp volverá directamente a dormir antes de que incluso se conecta a internet.
Por último, nos instanciar los objetos que necesitamos hacer nuestro trabajo y verificar con el agente, después de comenzar la lectura de la temperatura para empezar.
Echemos un vistazo al código del agente en el siguiente paso, si te interesa.