Etape 56 : Logiciel : lecture des IR balle laveuse et capteurs de Pod
Maintenant que nous savons comment récupérer les valeurs analogiques des capteurs IR, nous aurons besoin d’avoir une valeur constante à comparer les lectures en temps réel contre afin de déterminer si des objets sont détectés par les capteurs. Il est important que lorsque nous commençons vers le haut de la table de ping-pong de bière nous n’avons pas des tasses ou les objets érigés devant les capteurs IR. Dès le début du programme avant la boucle principale, nous courons une fonction appelée « Sensor_Calibration() », qui prendra un certain montant d’échantillons provenant de chaque capteur IR et la moyenne des valeurs ensemble et stocker les données dans le tableau global de UINT16 « IR_cal [24] ». Étant donné que le programme suppose qu’il n’ont aucun objet devant les capteurs au moment de l’étalonnage, il comparera les lectures en temps réel de chaque capteur IR à sa valeur calibrée et si l’intensité lumineuse est tout à fait un peu plus élevée que la valeur étalonnée, il va savoir qu’il existe un objet devant le capteur.
La routine de « Sensor_Calibration() » prend moins d’une seconde pour terminer donc les joueurs canettes le droit de tasses de bière, après avoir atteint sur la table de ping-pong de bière. Vous saurez si la table de ping-pong de bière n’était pas étalonnée correctement car il ne détecte pas les tasses sur les gousses de RVB.
Dès que nous aurons les valeurs calibrés pour les capteurs IR, le programme se poursuivra dans la boucle principale du programme où il sera constamment mettre à jour la lecture analogique des capteurs IR. La fonction « Update_Sensors() » va stocker l’analogique nouvelle lecture pour chaque capteur dans le tableau global de UINT16 « IR_value [24] », et puis nous allons lancer une fonction plus appelée « Pack_Sensor_Data() » qui renvoie une variable 32 bits qui est utilisée pour représenter l’état de chaque capteur.
La dernière variable globale que nous utilisons pour les capteurs IR est un 32 bits unsigned int appelé « sensor_bits ». Puisque nous sommes suivi de deux indique pour chaque capteur (objet non détecté et objet détecté), nous pouvons utiliser un bit pour représenter un capteur IR. Si vous regardez la photo #2, j’ai créé un tableau qui contient la disposition du bit pour « sensor_bits ». Si un objet a été détecté, les gousses correspondant bit seront définies (1) et si aucun objet n’est détecté ensuite le foret est effacé (0). Depuis « sensor_bits » est une variable globale, nous pouvons y accéder dans n’importe quelle fonction si nous avons besoin de connaître l’état de chaque capteur. Chaque fonction peut masquer les données pour trouver les gousses détecter les tasses et puis exécutent le code en conséquence.
Photo #3 montre la routine principale et comment ces 3 fonctions sont implémentées dans le code. Nous ne sommes pas allés sur la fonction « Pod_Detect() » encore, mais je l’ai inclus dans cet exemple juste pour montrer comment « sensor_bits » est utilisé.