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)