Paso 4: Código de Arduino
Como con el código de la aplicación cubriré esto brevemente...
En primer lugar configurar todas mis variables, asignando los de LED y sensores a los pines correctos. La salida de los sensores de efecto hall se leerá utilizando la función analogRead, dando un valor entre 0 y 1023. Como se describió anteriormente salidas mitad cuando ninguÌ n imán presente, así que alrededor de 500. Uso bajo y variables de gatillo alta para poder ajustar fácilmente cuando sabe que el disco es sobre el sensor.
Los neopixels requiere una biblioteca para que de aquí definidos...
La configuración de vacía empieza los cuentos por entregas, para el Micro Rx/Tx pines (bluetooth) utilizan Serial1... Los pernos entonces están listos para ser entradas o salidas y ponga el LED apagado.
Ahora es el bucle principal...
Esta primera sección es comprobar si los datos están siendo recibida de la Serial1.available() de la bobina es leyendo la serie y conseguir el número de bytes de la cadena. Si eso de > 0 sé datos entrantes.
Si usted recuerda, todas las cadenas que envían desde la aplicación terminan con un signo de interrogación... es decir (Bright100)?
Utilizo la función .readStringUntil para leer los datos en serie hasta el signo de interrogación (Bright100) y configure la variable BTstring con esto. Comprobar si BTstring termina con un ')' para asegurarse de que recibe de comandos completados. Si son, entonces el bucle BluetoothProgram Loft... esto se describe más abajo...
Este bit siguiente controla la alarma de la salida del sol. Básicamente si la alarma está activada y el tiempo es correcto entonces comienza a aumentar de intensidad los LEDs. Por el ojo humano percibir luz logarítmico es mejor no hacer ningún tipo de transición LED ups/abajo con una curva exponencial y no lineal. Por lo tanto una ecuación está impulsando los valores PWM...
Para evitar que el puck interfiera con el control de la aplicación es desactivada al utilizar la aplicación. Para volver a activar el disco necesita mover el producto durante 5 segundos... Este pedacito de código comprueba primero si todos los sensores son salida de un valor de estado estacionario (sin imán) y luego inicia un temporizador. Cuando 5 segundos se completa la variable BTinControl es retroceder en false.
El código para el disco ahora... Los sensores deben ser leído.
Si la luz está apagado, comprobará si alguno de los sensores están por encima o por debajo de los puntos gatillo, es decir, el disco se ha colocado en el arco. Si es entonces se desvanecerá el LED blanco s su último ajuste no importa donde la coloques.
Para mantener el sistema de LED a su último valor en lugar de actualización a los valores asociados con lo que los sensores de su accionar, la variable MovedSinceStandby está establecida en false. Básicamente este bit siguiente de código comprueba si se ha mudado el puck desde su posición inicial por una cantidad fija...
Si va a mover el disco se llama 'MainProgram' para actualizar a la temperatura de brillo/color. Esto se describe más abajo.
La última parte de este bucle principal comprueba si el disco se ha colocado en la espera de muelle - es sensor 12 leer un valor por encima/por debajo de un punto gatillo. Si es así, desvanece el LED hacia abajo...
El bucle de bluetooth:
Como se describió anteriormente cuando se reciben datos a través de bluetooth, se lee la cadena. Ahora tenemos que comprobar lo que dice esa cadena...
Todas las cadenas aparte de brillo, temperatura de color y RGB son bastante fáciles de tratar. Comprobar si BTstring es igual que el texto enviado desde la aplicación.
Si recuerdan, cuando cambias pantallas en la aplicación enviará un comando de bluetooth. Aquí nos pregunta para y algunas variables en verdadero o falso así que sabemos que la pantalla está en.
Aviso al final de cada sección que configurar la variable BTinControl a true y borrar el valor de BTstring.
Cuando usted pulse el botón de encendido en la aplicación se descolorará los LEDs hacia arriba o hacia abajo. Las variables establecidas anteriormente para que la pantalla está en se utilizan para decidir si es el RGB o LED blanco a control...
Brillo, temperatura de color y RGB necesito leer las cadenas de una manera ligeramente diferente. Porque el número parte de la cadena a cambiar me pregunto si la cadena comienza con uno de los identificadores no la cadena completa, tan sólo (Bright aquí...
Ahora tengo que separar el valor del brillo real de la cadena. Es el formato de la cadena enviada desde la aplicación (Brightvalor) por lo que sé por lo tanto el valor de brillo será entre la ' t 'y la')'. La posición de la ' t ' permanece constante, siempre va a ser el 7 º carácter de la cadena. Sino porque el valor de brillo puede ser entre 10 y 100 en la posición de la ')' va a cambiar. Utilizo el comando .indexOf a trabajar a donde el ')' es, qué personaje es y entonces puede utilizar el comando .substring leer la cadena entre el carácter 7 y ')' posición de carácter. Esto me deja con solo el valor de brillo que puedo usar para ajustar el RGB o LED blanco dependiendo de la pantalla.
Ajuste temperatura de color es un proceso similar al anterior pero el valor será entre la 'p' y ')' esta vez...
Para el ajuste RGB tenemos tres valores para extraer de la cadena, pero es un proceso similar de nuevo. De la aplicación recibimos cadenas en forma (RGBvalor. valor. valor)
Para saber que el valor rojo será entre la 'B' y el primer punto. El valor verde está entre los puntos 1 º y 2 º y el valor de azul es entre el 2 º punto y ')'.
Una vez tenemos los valores de la neopixles se establecen en el nuevo color...
Aquí comprobamos si la alarma está habilitada o deshabilitada. Si se cambia la hora de alarma Haz enviado una cadena con el número de milisegundos a partir de ahora hasta la alarma. Otra vez este valor se extrae de la cadena y para poder comprobar si su tiempo para iniciar la salida del sol que necesitamos establecido una variable en el tiempo actual (millis)...
Controles de disco:
Como se describe antes si el puck (imán) es una forma que impulsará la salida del sensor hall debajo del gatillo baja y si la otra manera para arriba del gatillo del alta.
Esto permite el control de brillo y temperatura de color en el mismo arco...
Se leen los valores de los sensores. Si alguno de ellos es menor que el valor de disparo baja estamos ajuste a temperatura de color. Hay 11 sensores en el área de arco, que a su vez ir por debajo del punto de gatillo como el duende malicioso es pasará sobre ellos. Cada sensor tiene un valor PWM para los LEDs frescos y calientes contra él, comenzando con sensor de 1 a 100% 0% cálido, fresco y a 11 en 0% caliente y 100% cool.
El control de brillo se hace de la misma manera... comprobar si las salidas de los sensores son arriba del gatillo del alta esta vez y dando a cada sensor un brillo ponderación de valor.
Esta ponderación de brillo es entonces multiplicado por el valor de temperatura de color para dar el total valor de la salida. Que le permite instalar a cualquier temperatura de color a cualquier brillo...