A data reader comprising: an image sensor including a complimentary metal oxide semiconductor, CMOS, wherein the CMOS includes a total number of rows of sensor pixels; an electronic rolling shutter, ERS, for sequentially integrating each row of sensor pixels and for resetting electrical charges and reading electrical charges for each row of sensor pixels to capture images of a target; a light source for generating pulses of light; and a processor operatively connected to and controlling the CMOS, the ERS, and the light source to: capture a first image of the target, create a light level histogram from the first image of the target, determine an ambient light intensity based on the light level histogram, determine whether the ambient light intensity is high, medium, or low based on the light level histogram; and based on the ambient light intensity, coordinate an integration time for each row of sensor pixels with the pulses of light to capture a second image of the target, wherein: when the processor determines that the ambient light intensity is high, cause the ERS to have a first elapsed time between resetting a row and reading a row, and cause the rows to sequentially integrate such that the total number of rows of sensor pixels does not integrate during the same time period; when the processor determines that the ambient light intensity is medium, cause the ERS to have a second elapsed time longer than the first elapsed time between resetting a row and reading a row, cause the rows to sequentially integrate such that the total number of rows of sensor pixels does not integrate during the same time period, and pulse the light source at a rate corresponding to a number of rows that integrate during the same time period such that each row in the number of rows receives one pulse of the light source; and when the processor determines that the ambient light intensity is low, cause the ERS to have a third elapsed time longer than the second elapsed time between resetting a row and reading a row, cause the rows to sequentially integrate such that the total number of rows of sensor pixels integrates during the same time period, and pulse the light source once when all the rows are integrating. an image sensor including a complimentary metal oxide semiconductor, CMOS, wherein the CMOS includes a total number of rows of sensor pixels; an electronic rolling shutter, ERS, for sequentially integrating each row of sensor pixels and for resetting electrical charges and reading electrical charges for each row of sensor pixels to capture images of a target; a light source for generating pulses of light; and a processor operatively connected to and controlling the CMOS, the ERS, and the light source to: capture a first image of the target, create a light level histogram from the first image of the target, determine an ambient light intensity based on the light level histogram, determine whether the ambient light intensity is high, medium, or low based on the light level histogram; and based on the ambient light intensity, coordinate an integration time for each row of sensor pixels with the pulses of light to capture a second image of the target, wherein: when the processor determines that the ambient light intensity is high, cause the ERS to have a first elapsed time between resetting a row and reading a row, and cause the rows to sequentially integrate such that the total number of rows of sensor pixels does not integrate during the same time period; when the processor determines that the ambient light intensity is medium, cause the ERS to have a second elapsed time longer than the first elapsed time between resetting a row and reading a row, cause the rows to sequentially integrate such that the total number of rows of sensor pixels does not integrate during the same time period, and pulse the light source at a rate corresponding to a number of rows that integrate during the same time period such that each row in the number of rows receives one pulse of the light source; and when the processor determines that the ambient light intensity is low, cause the ERS to have a third elapsed time longer than the second elapsed time between resetting a row and reading a row, cause the rows to sequentially integrate such that the total number of rows of sensor pixels integrates during the same time period, and pulse the light source once when all the rows are integrating. when the processor determines that the ambient light intensity is high, cause the ERS to have a first elapsed time between resetting a row and reading a row, and cause the rows to sequentially integrate such that the total number of rows of sensor pixels does not integrate during the same time period; when the processor determines that the ambient light intensity is medium, cause the ERS to have a second elapsed time longer than the first elapsed time between resetting a row and reading a row, cause the rows to sequentially integrate such that the total number of rows of sensor pixels does not integrate during the same time period, and pulse the light source at a rate corresponding to a number of rows that integrate during the same time period such that each row in the number of rows receives one pulse of the light source; and when the processor determines that the ambient light intensity is low, cause the ERS to have a third elapsed time longer than the second elapsed time between resetting a row and reading a row, cause the rows to sequentially integrate such that the total number of rows of sensor pixels integrates during the same time period, and pulse the light source once when all the rows are integrating.