# Light Sensors

## Light Sensors:

**PIC\_ReadAllAmbientSensors();**\
`PIC_ReadAllAmbientSensors(); //retrieves reading for all 3 ambient light sensors. Accurate to within 20ms ago.`\
Populates the following global variables:\
**ambLeft, ambRight, ambRear**

.

**PIC\_ReadAllSurfaceSensors();**\
`PIC_ReadAllSurfaceSensors(); //retrieves reading for all 6 surface sensors. Accurate to within 20ms ago.`\
Populates the following global variables:\
**surfLeft0, surfLeft1, surfRight0, surfRight1, surfRear0, surfRear1**

.

**PIC\_ReadAllAmbientSensorsInstant();**\
`PIC_ReadAllAmbientSensorsInstant(); //retrieves instant reading for all 3 ambient light sensors.`\
Populates the following global variables:\
**ambLeft, ambRight, ambRear**\
This function pauses PIC for a short moment to take a new instant reading of the sensors and reply with the values. Use this function if an instant reading is really necessary. In most cases, a reading that is between 1ms and 20ms old is okay. In that case, you should generally use the normal function PIC\_ReadAllAmbientSensors instead.

.

**PIC\_ReadAllSurfaceSensorsInstant();**\
`PIC_ReadAllSurfaceSensorsInstant(); //retrieves instant reading for all 6 surface sensors.`\
Populates the following global variables:\
**surfLeft0, surfLeft1, surfRight0, surfRight1, surfRear0, surfRear1**\
This function pauses PIC for a short moment to take a new instant reading of the sensors and reply with the values. Use this function if an instant reading is really necessary. In most cases, a reading that is between 1ms and 20ms old is okay. In that case, you should generally use the normal function PIC\_ReadAllSurfaceSensors instead.

.

**PIC\_ReadAllAmbientAverages();**\
`PIC_ReadAllAmbientAverages(); //retrieves running average for all 3 amb light sensors.`\
Populates the following global variables:\
**ambLeftAverage, ambRightAverage, ambRearAverage**

.

**PIC\_ReadAllSurfaceAverages();**\
`PIC_ReadAllSurfaceAverages(); //retrieves running average for all 6 surface sensors.`\
Populates the following global variables:\
**surfLeft0Average, surfLeft1Average, surfRight0Average, surfRight1Average, surfRear0Average, surfRear1Average**

.

**PIC\_SetAverageIntervals();**\
`PIC_AvgIntervalSurface = 6; //Average surface every 6th 20ms period.`\
`PIC_AvgIntervalAmbient = 6; //Average ambient every 6th 20ms period.`\
`PIC_SetAverageIntervals(); //Sets average intervals to PIC processor.`\
The PIC processor automatically calculates a running average based a given count of 8 previous readings. Set the global variables PIC\_AvgIntervalSurface and PIC\_AvgIntervalAmbient first, then call PIC\_SetAverageIntervals(); to latch the values to PIC processor. A reading will be taken every n'th 20ms period, and averaged in with the previous readings taken at n'th 20ms periods. Setting the interval to a lower level will make the average change more quickly. Values can range from 1 to 255 periods.\
Note: This function also latches the global variable PIC\_AvgIntervalPower at the same time, which controls a similar average for battery voltage and current consumption averages.
