11.2 Ultra-Sonic Sensors
import sys
import time
from contextlib import closing
from itertools import cycle
from time import sleep
import quick2wire.i2c as i2c
from quick2wire.parts.mcp23017 import MCP23017
from quick2wire.parts.mcp23x17 import In,Out
i2c_address = 0x20
pinbank2 = 1
pinbank1 = 0
with closing(i2c.I2CMaster()) as bus:
chip = MCP23017(bus, 0x20)
chip.reset()
trig = chip[pinbank2][7]
trig.direction = Out
trig.value=0
echo = {}
echo[0] = chip[pinbank1][0]
echo[1] = chip[pinbank1][1]
echo[2] = chip[pinbank1][2]
echo[3] = chip[pinbank1][3]
echo[4] = chip[pinbank1][4]
echo[5] = chip[pinbank1][5]
echo[6] = chip[pinbank1][6]
echo[7] = chip[pinbank1][7]
echo[0].direction = In
echo[1].direction = In
echo[2].direction = In
echo[3].direction = In
echo[4].direction = In
echo[5].direction = In
echo[6].direction = In
echo[7].direction = In
led1 = chip[pinbank2][0]
led2 = chip[pinbank2][1]
led3 = chip[pinbank2][2]
led4 = chip[pinbank2][3]
led1.direction = Out
led2.direction = Out
led3.direction = Out
led4.direction = Out
try:
while True:
trig.value = 1
time.sleep(0.00001)
trig.value = 0
for i in range (0,7):
while echo[i].value==0: pass
start = time.time()
while echo[i].value==1:
pass
stop = time.time() cm[i] = (stop-start)*17000 print (cm[i])
if (cm[0] or cm[1] < 60): led1.value = 1
print("Forward limit") if (cm[2] or cm[3] < 60):
led2.value = 1
print("Reverse limit" if (cm[4] or cm[5] < 30): led3.value = 1 print("Left limit")
if (cm[6] or cm[7] < 30):
led4.value = 1
print("Right limit")
finally:
chip.reset()