Paso 56: Software: leyendo la bola de IR lavadora y vaina sensores
Ahora que sabemos cómo recuperar los valores analógicos de los sensores IR, necesitamos tener un valor constante para comparar las lecturas de tiempo real contra para determinar si los objetos son detectados por los sensores. Es importante que cuando iniciemos la tabla de pong de la cerveza no tenemos tazas ni objetos colocados en el camino de los sensores IR. Desde el principio del programa antes del bucle principal, ejecute una función llamada 'Sensor_Calibration()' que tomar una cantidad específica de muestras de cada sensor IR y promedio de los valores juntos y almacenar los datos en la matriz global de UINT16 'IR_cal [24]'. Puesto que el programa asume eran no hay objetos delante de los sensores en el tiempo de calibración, compara las lecturas de tiempo real de cada sensor de infrarrojos al valor calibrado y si la intensidad de luz es un poco más alta que el valor de calibrado, se sabe que hay un objeto delante del sensor.
La rutina 'Sensor_Calibration()' tiene menos de un segundo para completar así los jugadores portalatas el derecho de tazas de cerveza después de que encienda la mesa de pong de la cerveza. Usted sabrá si la tabla de pong de la cerveza no estaba calibrada correctamente ya que no detecta las copas sobre las vainas RGB.
Una vez que tenemos los valores de calibrado de los sensores IR, el programa continuará en el bucle principal del programa donde se actualizará constantemente las lecturas analógicas de los sensores de IR. La función 'Update_Sensors()' almacena el nuevo análogo de lectura de cada sensor de la matriz global de UINT16 'IR_value [24]' y luego ejecutamos una función más llamada 'Pack_Sensor_Data()', que devuelve una variable de 32 bits que se utiliza para representar el estado de cada sensor.
La última variable global que usamos para los sensores IR es un int sin signo de 32 bits llamado 'sensor_bits'. Ya que nos estamos guardando un registro de dos Estados para cada sensor (objeto detectado y el objeto no detectados), podemos utilizar un bit para representar un sensor IR. Si nos fijamos en la foto #2, he creado un gráfico que contiene el diseño de la broca para 'sensor_bits'. Si un objeto ha sido detectado, las vainas del correspondiente bit serán (1) y si no se detecta ningún objeto luego la broca se borrará (0). Puesto que 'sensor_bits' es una variable global, nosotros podemos acceder a ella dentro de cualquier función si necesitamos conocer el estado de cada sensor. Cada función puede enmascare los datos para encontrar que detectar tazas y luego ejecutar su código en consecuencia.
Foto #3 muestra la rutina principal y cómo se implementan estas 3 funciones en el código. No hemos pasado sobre la función 'Pod_Detect()' aún pero he incluido en este ejemplo para mostrar cómo se utiliza el 'sensor_bits'.