Paso 4: Escribir programa
Nota importante: LiquidCrystal biblioteca
En el momento de escribir esto el IDE un LinkIt viene con versión 1.6.5 del IDE de Arduino, que pasa a ser uno donde la librería LiquidCrystal que estamos usando está rota. Mira este Instructable sobre cómo reemplazar los archivos LiquidCrystal con los de trabajo.
Introducción
Estoy suponiendo que ya han establecido su Arduino IDE para trabajar con el One de LinkIt, si no, echa un vistazo a la "getting started" Guía aquí.
He adjuntado mi código final a este paso, usted debe ser capaz de leer y sus comentarios para obtener una idea bastante buena de cómo funciona. Voy a describir aquí los segmentos importantes.
Librerías de importación
El primer paso es que incluye las diferentes bibliotecas que van a utilizarse.
Definir las Variables
A continuación definimos varias variables globales que se utilizarán en el programa. Verá que algunos de ellos se definen como "char nombre [x]" que significa que son una matriz de x caracteres, que se utiliza para guardar cosas como el mensaje de texto o un mensaje de estado.
Setup() función
Esta función se ejecuta una vez que cuando arranca la Junta.
waitForSim() función
El resto del programa no funcionará si la tarjeta SIM no está inicializada, por lo que esta función sólo tiene el dispositivo en un lazo, a la espera de la tarjeta SIM estar listo (e imprimiendo puntos pequeños en la interfaz serial, para que lo que no ha muerto).
receiveSMS() función
Esta función comprobará si hay un nuevo SMS. Si hay uno, es leer en un carácter a la vez y almacenado en el buffer smsContent (una matriz de caracteres), entonces la función devuelve alta (true/1). Si no hay ningún SMS nuevo la función devuelve bajo (falso/0). Esto nos permite llamar tantas veces como nos gusta en el bucle principal, pero sólo hacer algo si hay un nuevo mensaje.
"newMessage" boolean también se establece en TRUE cuando se recibe un mensaje nuevo.
Una vez que el SMS ha sido leído se elimina con la orden flush().
chargeStatus() función
Esta función crea una línea de 16 caracteres de texto sobre el estado de carga.
Lbattery.isCharging() devuelve un 1 si la batería se está cargando y 0 si no lo es.
Lbattery.LEVEL() devuelve 0,33,66 o 100 dependiendo del nivel de carga actual de la batería.
Utilizamos la función "sprintf" para formatear la salida de las dos funciones anteriores en una buena línea de texto, que almacena en la matriz de caracteres statusMessage para uso en la función updateDisplay().
updateDisplay() función
Se trata de que todo el contenido generado previamente se envía a la pantalla LCD para la exhibición. Hará más sentido leer a través y mirar los comentarios en línea.
Lo primero a destacar es el uso de un contador, que toma nota de que cuando la pantalla fue actualizada (en milisegundos, la función millis() de Arduino), y sólo actualiza otra vez si ha transcurrido suficiente tiempo (scrollInterval).
El desplazamiento del mensaje en la 2ª línea se logra mediante el almacenamiento de dos variables:
msgStartChar
Esta variable almacena qué personaje del contenido SMS estamos impresión primero (ya que no podemos encajar el todo sms de 160 caracteres en una línea de 16 caracteres)
lcdStartChar
Esta variable almacena donde en la pantalla LCD el mensaje comienza, ya que queremos que el mensaje para desplazarse en la derecha, siempre no se puede iniciar en el primer carácter.
Cada vez que la pantalla se actualiza partimos desde la derecha (posición 15) y reducir la lcdStartChar hasta que el mensaje es a partir del primer carácter (posición 0), este desplaza con eficacia el mensaje de izquierda.
Una vez el inicio del mensaje está a la izquierda, que necesita para desplazarse fuera de la pantalla, por lo que aumentamos la msgStartChar en cada actualización.