Protobuf prototype
This commit is contained in:
parent
e277a83c5f
commit
9b567b8c6c
119 changed files with 8599 additions and 0 deletions
81
client_s1/compLib/IRSensor.py
Normal file
81
client_s1/compLib/IRSensor.py
Normal file
|
@ -0,0 +1,81 @@
|
|||
from compLib.LogstashLogging import Logging
|
||||
from compLib.MetricsLogging import MetricsLogging
|
||||
from compLib.Spi import Spi, Register
|
||||
|
||||
SENSOR_COUNT = 5
|
||||
|
||||
|
||||
class IRSensor(object):
|
||||
"""Access the different IR Sensors of the robot
|
||||
"""
|
||||
|
||||
@staticmethod
|
||||
def read(sensor: int) -> int:
|
||||
"""Read one infrared sensor
|
||||
|
||||
:param sensor: Which sensor to read. Between 1 and 5
|
||||
:raises: IndexError
|
||||
:return: Sensor value. 10 bit accuracy
|
||||
:rtype: int
|
||||
"""
|
||||
if sensor <= 0 or sensor > SENSOR_COUNT:
|
||||
raise IndexError("Invalid sensor specified!")
|
||||
|
||||
result = 0
|
||||
if sensor == 1:
|
||||
result = Spi.read(Register.IR_1_H, 2)
|
||||
elif sensor == 2:
|
||||
result = Spi.read(Register.IR_2_H, 2)
|
||||
elif sensor == 3:
|
||||
result = Spi.read(Register.IR_3_H, 2)
|
||||
elif sensor == 4:
|
||||
result = Spi.read(Register.IR_4_H, 2)
|
||||
elif sensor == 5:
|
||||
result = Spi.read(Register.IR_5_H, 2)
|
||||
|
||||
MetricsLogging.put("Infrared", result, sensor)
|
||||
return result
|
||||
|
||||
@staticmethod
|
||||
def read_all():
|
||||
"""Read all IR sensors at once.
|
||||
This is faster than read as it only uses one SPI call for all sensors!
|
||||
|
||||
:return: Tuple of all current ir sensors
|
||||
"""
|
||||
|
||||
sensors = Spi.read_array(Register.IR_1_H, 5 * 2)
|
||||
|
||||
sensor_1 = int.from_bytes(
|
||||
sensors[0:2], byteorder='big', signed=False)
|
||||
sensor_2 = int.from_bytes(
|
||||
sensors[2:4], byteorder='big', signed=False)
|
||||
sensor_3 = int.from_bytes(
|
||||
sensors[4:6], byteorder='big', signed=False)
|
||||
sensor_4 = int.from_bytes(
|
||||
sensors[6:8], byteorder='big', signed=False)
|
||||
sensor_5 = int.from_bytes(
|
||||
sensors[8:10], byteorder='big', signed=False)
|
||||
|
||||
return (sensor_1, sensor_2, sensor_3, sensor_4, sensor_5)
|
||||
|
||||
@staticmethod
|
||||
def set(sensor: int, on: bool):
|
||||
"""Turn on / off a IR emitter
|
||||
|
||||
:param sensor: Which sensor to read. Between 1 and 5
|
||||
:raises: IndexError
|
||||
"""
|
||||
if sensor <= 0 or sensor > SENSOR_COUNT:
|
||||
raise IndexError("Invalid sensor specified!")
|
||||
|
||||
if sensor == 1:
|
||||
Spi.write(Register.IR_1_LED, 1, on)
|
||||
elif sensor == 2:
|
||||
Spi.write(Register.IR_2_LED, 1, on)
|
||||
elif sensor == 3:
|
||||
Spi.write(Register.IR_3_LED, 1, on)
|
||||
elif sensor == 4:
|
||||
Spi.write(Register.IR_4_LED, 1, on)
|
||||
elif sensor == 5:
|
||||
Spi.write(Register.IR_5_LED, 1, on)
|
Reference in a new issue