legoEv3/save/home/robot/IRtest.py
#EV3 demo code to demonstrate basic robot functions and use of ultrasonic sensor
#Copyright Berend Rah 2016
#as shown on Youtube
#https://www.youtube.com/watch?v=pe8zZEnMTGA
# from ev3dev.auto import *
from ev3dev2.sensor.lego import InfraredSensor
import time
from datetime import datetime, timedelta
import sys;
ir=InfraredSensor()
#while 1:
# n = ir.proximity
# print(str(datetime.now()) + " ir proximity " + repr(n))
# time.sleep(0.0001)
print('path', sys.path)
ir.mode='IR-PROX'
print("ir", ir, 'modes', ir.modes, 'mode', ir.mode, 'num_values', ir.num_values, 'bin_data_format', ir.bin_data_format)
old=-99
strt = datetime.now();
for i in range(200):
n = ir.value()
if old != n:
print(str(repr(n)), 'i', i, datetime.now())
old = n
time.sleep(0.0001)
print( i, 'prox', (datetime.now() - strt)/(i+1))
ir.mode='IR-SEEK'
print("ir", ir, 'modes', ir.modes, 'mode', ir.mode, 'num_values', ir.num_values, 'bin_data_format', ir.bin_data_format)
n=old=-99
strt = datetime.now();
for i in range(200):
n = ir.bin_data('bbbbbbbb') # (heading -25..25, distance 0..100 or -128 for no signal for channel 1 to 4
if old != n:
print(str(repr(n)), 'i', i, datetime.now())
old = n
time.sleep(0.0001)
print( i, 'seek', (datetime.now() - strt)/(i+1))
n = proxO = seekO = -1
for i in range(50):
ir.mode='IR-PROX'
n = ir.value()
if proxO != n:
print('prox', repr(n), 'i', i, datetime.now())
proxO = n
ir.mode='IR-SEEK'
n = ir.bin_data('bbbbbbbb') # (heading -25..25, distance 0..100 or -128 for no signal for channel 1 to 4
if seekO != n:
print('seek', repr(n), 'i', i, datetime.now())
seekO = n
time.sleep(0.0001)
print( i, 'seek', (datetime.now() - strt)/(i+1))
ir.mode = 'IR-REMOTE'
print("ir", ir, 'modes', ir.modes, 'mode', ir.mode, 'num_values', ir.num_values, 'bin_data_format', ir.bin_data_format)
n = remO = -1
strt = datetime.now();
for i in range(200000):
n = ir.bin_data('bbbbbbbb')
if remO != n:
print(repr(n), 'i', i, datetime.now())
remO = n
time.sleep(0.0001)
print( i, 'seek', (datetime.now() - strt)/(i+1))
for i in range(2000000):
n = ir.bin_data('bbbbbbbb')
if old != n:
print(str(repr(n)), 'i', i, datetime.now())
old = n
time.sleep(0.0001)
print( i, 'seek', (datetime.now() - strt)/(i+1))
exit()
while 1:
nn = []
nL = 7
for i in range(nL - 1):
nn.append(ir.proximity)
time.sleep(0.01)
nn.append(ir.proximity)
# print('nn', nn)
ns = sorted(nn)
# print('ns', ns)
n = ns[nL //2]
print(n, 'middle of', ns[0], ns[nL-1], str(datetime.now()))
if n > 50:
forward()
else:
stop()
time.sleep(0.8)
while 1:
n = ir.proximity
if old != n:
print(str(datetime.now()) + " ir proximity " + repr(n))
old = n
time.sleep(1)
IS.mode='US-DC-CM' #this is continuous mode USSmodes will display all available modes
exit();
#distance is in mm NOT cm
def mDistance():
try:
return USS.value()
time.sleep(0.3)
except IOerror: #catch connection errors
pass
def moveThreeSecs():
for m in motors:
m.run_timed(time_sp=3000, speed_sp=600) # run for 3 seconds
def turnRight():
motors[0].run_timed(time_sp=1000, speed_sp=-600)
motors[1].run_timed(time_sp=1000, speed_sp=600)
def turnLeft():
motors[0].run_timed(time_sp=1000, speed_sp=600)
motors[1].run_timed(time_sp=1000, speed_sp=-600)
while not btn.any():
dist=mDistance()
if dist <1000: #distance less than 1 meter
choice=r.randint(0,2)
if choice==0:
moveThreeSecs()
elif choice==1:
turnRight()
else:
turnLeft()
time.sleep(0.3)