Stap 56: Software: lezen van de IR bal wasmachine en Pod sensoren
Nu we weten hoe de analoge waarden worden opgehaald uit de IR-sensoren, zal moeten we een constante waarde te vergelijken de real-time lezingen tegen om te bepalen als alle objecten worden gedetecteerd door de sensoren. Het is belangrijk dat wanneer we het bier pong tafel opstart we hoeven niet alle cups of objecten geplaatst in de weg van de IR-sensoren. Aan het begin van het programma voor de hoofdlus lopen we een functie genaamd 'Sensor_Calibration()', die zal nemen een bepaalde hoeveelheid monsters van elke IR-sensor en samen de gemiddelden en de gegevens worden opgeslagen in de globale UINT16 array 'IR_cal [24]'. Aangezien het programma wordt ervan uitgegaan dat er waren geen objecten voor de sensoren op kalibratie moment, het zal de real-time lezingen van elke IR-sensor op de geijkte waarde te vergelijken, en als de lichtsterkte vrij een beetje hoger dan de geijkte waarde is, zal het weten dat er een object voor de sensor.
De 'Sensor_Calibration()' routine duurt minder dan een seconde om te voltooien dus de spelers kunnen rack bier kopjes rechts nadat ze weer op het bier pong tafel. U weet als het bier pong tafel was niet correct gekalibreerd omdat het de cups zal niet via de RGB-peulen detecteren.
Als we eenmaal de geijkte waarden voor de IR-sensoren, zal het programma blijven in het hoofdprogramma lus waar het voortdurend wordt bijgewerkt in de analoge metingen van de IR-sensoren. De functie 'Update_Sensors()' de nieuwe analoge lezen voor elke sensor in de globale UINT16 array 'IR_value [24]' zal slaan en dan lopen we één meer functie genaamd 'Pack_Sensor_Data()', die een 32-bits variabele die wordt gebruikt terugkeren zal om de status van elke sensor.
De laatste globale variabele die we voor de IR-sensoren gebruiken is een 32-bits unsigned int 'sensor_bits' genoemd. Aangezien we het bijhouden van twee staten voor elke sensor (object gedetecteerd en object niet gedetecteerd), we kunnen gebruiken een beetje te vertegenwoordigen een IR-sensor. Als je kijkt naar foto #2, heb ik een grafiek met de bits-indeling voor 'sensor_bits' gemaakt. Als een object is geconstateerd, de peulen overeenkomt bits (1) zal worden ingesteld en als er geen object is gedetecteerd dan de bit zal worden ontruimd (0). Aangezien 'sensor_bits' een globale variabele is, bereikbaar wij binnen een functie als we willen weten van de status van elke sensor. Elke functie kan maskeren uit de gegevens om te vinden welke peulen cups detecteren en vervolgens de code dienovereenkomstig uit te voeren.
Foto #3 toont de belangrijkste routine en hoe deze 3 functies zijn geïmplementeerd in de code. Zijn we niet gegaan over de 'Pod_Detect()'-functie nog maar ik heb het ook in dit voorbeeld wil laten zien hoe 'sensor_bits' is gebruikt.