Interaktiva LED öl Pong tabell (56 / 87 steg)
Steg 56: Programvara: läser IR boll bricka och Pod sensorer
Nu när vi vet hur man hämtar de analoga värdena från IR-sensorer, kommer vi att ha ett konstant värde att jämföra den verklig tid behandlingen mot för att avgöra om något objekt upptäcks av sensorer. Det är viktigt att när vi startar upp i beer pong tabell vi inte har några koppar eller objekt placeras i vägen för IR-sensorer. Alldeles i början av programmet innan huvudloop kör vi en funktion kallad "Sensor_Calibration()" som tar en viss mängd prover från varje IR-sensorn och medelvärden tillsammans och lagrar data i matrisen globala UINT16 "IR_cal [24]". Eftersom programmet förutsätter att det var inga föremål framför sensorerna på kalibrering tid, det kommer att jämföra realtid mätvärde varje IR-sensorn till dess kalibrerade värde och om ljusintensiteten är ganska lite högre än kalibrerad värdet, det vet att det finns ett objekt framför sensorn.
'Sensor_Calibration()' rutinen tar mindre än en sekund att slutföra så att spelarna kan rack öl muggar rätt när de slår på tabellen öl pong. Vet du om tabellen öl pong inte var kalibrerade eftersom det inte kommer att upptäcka kopparna över RGB skida.
När vi har de kalibrerade värdena för IR-sensorer, kommer att programmet fortsätta i huvudprogrammet ögla där det kommer att ständigt uppdatera de analoga avläsningarna från IR-sensorer. Funktionen "Update_Sensors()" kommer att lagra den nya analoga läsning för varje sensor i matrisen globala UINT16 "IR_value [24]" och sedan kommer vi att köra en mer funktion kallas "Pack_Sensor_Data()" som kommer tillbaka en 32-bitars variabel som används för att representera tillståndet för varje sensor.
Den senaste globala variabel som vi använder för IR-sensorer är en 32-bitars unsigned int kallas "sensor_bits". Eftersom vi att hålla reda på två stater för varje sensor (objektet upptäcks och objektet inte upptäcks), vi kan använda en bit för att representera en IR-sensorn. Om du tittar på foto #2, har jag skapat ett diagram som innehåller lite layout för "sensor_bits". Om ett objekt har identifierats, skida motsvarande bit sätts (1) och om inget objekt identifieras sedan lite rensas (0). Eftersom "sensor_bits" är en global variabel, kan vi nå det inom någon funktion om vi behöver veta tillståndet för varje sensor. Varje funktion kan maskera av data för att hitta vilken skida upptäcka koppar och sedan köra sin kod därefter.
Foto #3 visar de viktigaste rutinen och hur dessa 3 funktioner är implementerade i koden. Vi har inte gått över funktionen "Pod_Detect()" ännu men jag har tagit det i detta exempel bara för att visa hur "sensor_bits" används.