|
#coding:utf-8 #設(shè)置中文編碼
import RPi.GPIO as GPIO #導(dǎo)入樹(shù)莓派GPIO模塊
import sys,time #導(dǎo)入時(shí)間模塊
from threading import * #導(dǎo)入thread模塊所有函數(shù)
dc = 0 #速度
mmd = 'r' #上一次的行駛狀態(tài)
num = 1 #尋跡狀態(tài)標(biāo)志
thread_num = 0 #尋跡線程個(gè)數(shù)
thread_bi = 0 #避障線程個(gè)數(shù)
num_bi = 1 #避障狀態(tài)標(biāo)志
#定義控制馬達(dá)的兩個(gè)引腳
m1 = 23
m2 = 22
m3 = 24
m4 = 27
m5 = 19
m6 = 13
m7 = 20
m8 = 16
GPIO.setwarnings(False) #設(shè)置屏蔽警告信息
GPIO.setmode(GPIO.BCM) #設(shè)置引腳為BCM編碼模式
GPIO.setup(m1,GPIO.OUT) #設(shè)置m1方向?yàn)檩敵?/font>
GPIO.setup(m2,GPIO.OUT) #設(shè)置m2方向?yàn)檩敵?/font>
GPIO.setup(m3,GPIO.OUT)
GPIO.setup(m4,GPIO.OUT)
GPIO.setup(m5,GPIO.OUT)
GPIO.setup(m6,GPIO.OUT)
GPIO.setup(m7,GPIO.OUT)
GPIO.setup(m8,GPIO.OUT)
'''
#定義燈的引腳
g1 = 5
g2 = 6
g3 = 21
g4 = 12
#左邊
GPIO.setup(g1,GPIO.OUT) #紅色
GPIO.setup(g2,GPIO.OUT) #綠色
#右邊
GPIO.setup(g3,GPIO.OUT) #紅色
GPIO.setup(g4,GPIO.OUT) #綠色
'''
#定義尋跡引腳
LineR = 26
LineL = 17
LineM1 = 25
LineM2 = 18
GPIO.setup(LineR,GPIO.IN,GPIO.PUD_UP) #設(shè)置引腳為輸入
GPIO.setup(LineL,GPIO.IN,GPIO.PUD_UP) #設(shè)置引腳為輸入
GPIO.setup(LineM1,GPIO.IN,GPIO.PUD_UP) #設(shè)置引腳為輸入
GPIO.setup(LineM2,GPIO.IN,GPIO.PUD_UP) #設(shè)置引腳為輸入
#加減速
PW1 = GPIO.PWM(m1,500) #設(shè)置PWM脈沖頻率
PW2 = GPIO.PWM(m2,500)
PW3 = GPIO.PWM(m3,500)
PW4 = GPIO.PWM(m4,500)
PW5 = GPIO.PWM(m5,500)
PW6 = GPIO.PWM(m6,500)
PW7 = GPIO.PWM(m7,500)
PW8 = GPIO.PWM(m8,500)
PW1.start(0)
PW2.start(0)
PW3.start(0)
PW4.start(0)
PW5.start(0)
PW6.start(0)
PW7.start(0)
PW8.start(0)
PW1.ChangeDutyCycle(dc) #設(shè)置PW1停止
PW2.ChangeDutyCycle(dc)
PW3.ChangeDutyCycle(dc)
PW4.ChangeDutyCycle(dc)
PW5.ChangeDutyCycle(dc)
PW6.ChangeDutyCycle(dc)
PW7.ChangeDutyCycle(dc)
PW8.ChangeDutyCycle(dc)
def thread_xunji(): #子線程實(shí)現(xiàn)函數(shù)
sum = 0
global num #聲明全局變量
global thread_num #聲明全局變量
while num:
if(GPIO.input(LineL)==0 and GPIO.input(LineR)==0 and
GPIO.input(LineM1)==0 and GPIO.input(LineM2)==0):
sum = sum + 1
print "地板"
if(sum > 100):
PW1.ChangeDutyCycle(0)
PW2.ChangeDutyCycle(0)
PW3.ChangeDutyCycle(0)
PW4.ChangeDutyCycle(0)
PW5.ChangeDutyCycle(0)
PW6.ChangeDutyCycle(0)
PW7.ChangeDutyCycle(0)
PW8.ChangeDutyCycle(0)
elif(GPIO.input(LineL)==1 and GPIO.input(LineR)==1 and
GPIO.input(LineM1)==1 and GPIO.input(LineM2)==1):
print "懸空"
PW1.ChangeDutyCycle(0)
PW2.ChangeDutyCycle(0)
PW3.ChangeDutyCycle(0)
PW4.ChangeDutyCycle(0)
PW5.ChangeDutyCycle(0)
PW6.ChangeDutyCycle(0)
PW7.ChangeDutyCycle(0)
PW8.ChangeDutyCycle(0)
#左邊碰到黑帶左轉(zhuǎn)
elif(GPIO.input(LineL)==1 and GPIO.input(LineR)==0 and
GPIO.input(LineM1)==0 and GPIO.input(LineM2)==0):
print "左轉(zhuǎn)"
sum = 0
PW1.ChangeDutyCycle(0)
PW2.ChangeDutyCycle(0)
PW3.ChangeDutyCycle(0)
PW4.ChangeDutyCycle(0)
PW5.ChangeDutyCycle(0)
PW6.ChangeDutyCycle(0)
PW7.ChangeDutyCycle(0)
PW8.ChangeDutyCycle(0)
PW3.ChangeDutyCycle(60)
PW7.ChangeDutyCycle(60)
elif(GPIO.input(LineL)==0 and GPIO.input(LineR)==1 and
GPIO.input(LineM1)==0 and GPIO.input(LineM2)==0):
print "右轉(zhuǎn)"
sum = 0
PW1.ChangeDutyCycle(0)
PW2.ChangeDutyCycle(0)
PW3.ChangeDutyCycle(0)
PW4.ChangeDutyCycle(0)
PW5.ChangeDutyCycle(0)
PW6.ChangeDutyCycle(0)
PW7.ChangeDutyCycle(0)
PW8.ChangeDutyCycle(0)
PW1.ChangeDutyCycle(60)
PW5.ChangeDutyCycle(60)
elif(GPIO.input(LineL)==0 and GPIO.input(LineR)==0 and
GPIO.input(LineM1)==1 or GPIO.input(LineM2)==1):
print "前進(jìn)"
sum = 0
PW1.ChangeDutyCycle(0)
PW2.ChangeDutyCycle(0)
PW3.ChangeDutyCycle(0)
PW4.ChangeDutyCycle(0)
PW5.ChangeDutyCycle(0)
PW6.ChangeDutyCycle(0)
PW7.ChangeDutyCycle(0)
PW8.ChangeDutyCycle(0)
#前進(jìn)全綠
PW1.ChangeDutyCycle(60) #加速
PW3.ChangeDutyCycle(60) #加速
PW5.ChangeDutyCycle(60) #加速
PW7.ChangeDutyCycle(60) #加速
time.sleep(0.01)
print "children I daied!"
num = 1
thread_num = 0
print 'thread_num = ',thread_num
from socket import * #導(dǎo)入模塊中所有函數(shù),可以直接使用函數(shù)名,不需要帶模塊名
#第一步:創(chuàng)建套接字
server = socket() #創(chuàng)建一個(gè)套接字 TCP,IPV4
print server
#第二步:綁定IP地址和端口號(hào)
server.bind(('172.27.35.3', 9996)) #綁定本地IP地址,端口號(hào)為8989
#第三步:監(jiān)聽(tīng)
server.listen(5) #監(jiān)聽(tīng)客戶端鏈接,隊(duì)列長(zhǎng)度為5
#第四步:接收客戶端鏈接
try: #捕捉while中是否有ctrl + C按下
while 1 :
print 'accept...'
client,addr = server.accept() #接受鏈接到服務(wù)器的客戶端,得到客戶端元組
print client,addr
client.send('welcome...')
while 1:
cmd = client.recv(100) #從客戶端接收100個(gè)數(shù)據(jù)存放到服務(wù)器buff
print '客戶端發(fā)來(lái)消息:',cmd
print "正在運(yùn)行"
#前進(jìn)
if cmd == 'w':
print "mmd = ",mmd
if mmd == 'w':
#維持現(xiàn)狀
pass
elif mmd == 'r':
#設(shè)置PW腳脈沖為0
PW2.ChangeDutyCycle(0)
PW4.ChangeDutyCycle(0)
PW6.ChangeDutyCycle(0)
PW8.ChangeDutyCycle(0)
#dc = 60
#啟動(dòng)時(shí)60碼
for dc in range(0, 100, 50):
PW1.ChangeDutyCycle(dc) #加速
PW3.ChangeDutyCycle(dc) #加速
PW5.ChangeDutyCycle(dc) #加速
PW7.ChangeDutyCycle(dc) #加速
time.sleep(1)
elif mmd == 's':
#先減速
#設(shè)置PW腳脈沖為0
PW1.ChangeDutyCycle(0)
PW3.ChangeDutyCycle(0)
PW5.ChangeDutyCycle(0)
PW7.ChangeDutyCycle(0)
for ac in range(dc, 0, -50):
PW2.ChangeDutyCycle(ac) #減速
PW4.ChangeDutyCycle(ac) #減速
PW6.ChangeDutyCycle(ac) #減速
PW8.ChangeDutyCycle(ac) #減速
time.sleep(1)
#再加速
#設(shè)置PW腳脈沖為0
PW2.ChangeDutyCycle(0)
PW4.ChangeDutyCycle(0)
PW6.ChangeDutyCycle(0)
PW8.ChangeDutyCycle(0)
#dc = 60
#啟動(dòng)時(shí)60碼
for dc in range(0, 100, 50):
PW1.ChangeDutyCycle(dc) #加速
PW3.ChangeDutyCycle(dc) #加速
PW5.ChangeDutyCycle(dc) #加速
PW7.ChangeDutyCycle(dc) #加速
time.sleep(1)
else:
#先暫停
PW1.ChangeDutyCycle(0)
PW2.ChangeDutyCycle(0)
PW3.ChangeDutyCycle(0)
PW4.ChangeDutyCycle(0)
PW5.ChangeDutyCycle(0)
PW6.ChangeDutyCycle(0)
PW7.ChangeDutyCycle(0)
PW8.ChangeDutyCycle(0)
#設(shè)置PW腳脈沖為0
PW2.ChangeDutyCycle(0)
PW4.ChangeDutyCycle(0)
PW6.ChangeDutyCycle(0)
PW8.ChangeDutyCycle(0)
#dc = 60
#啟動(dòng)時(shí)60碼
for dc in range(0, 100, 50):
PW1.ChangeDutyCycle(dc) #加速
PW3.ChangeDutyCycle(dc) #加速
PW5.ChangeDutyCycle(dc) #加速
PW7.ChangeDutyCycle(dc) #加速
time.sleep(0.5)
#記錄狀態(tài)
mmd = 'w'
#后退
elif cmd == 's':
print "mmd = ",mmd
if mmd == 's':
#維持現(xiàn)狀
pass
elif mmd == 'w':
#先減速
#設(shè)置PW腳脈沖為0
PW2.ChangeDutyCycle(0)
PW4.ChangeDutyCycle(0)
PW6.ChangeDutyCycle(0)
PW8.ChangeDutyCycle(0)
for ac in range(dc, 0, -50):
PW1.ChangeDutyCycle(ac) #減速
PW3.ChangeDutyCycle(ac) #減速
PW5.ChangeDutyCycle(ac) #減速
PW7.ChangeDutyCycle(ac) #減速
time.sleep(1)
#再加速
#設(shè)置PW腳脈沖為0
PW1.ChangeDutyCycle(0)
PW3.ChangeDutyCycle(0)
PW5.ChangeDutyCycle(0)
PW7.ChangeDutyCycle(0)
#dc = 60
#啟動(dòng)時(shí)60碼
for dc in range(0, 100, 50):
PW2.ChangeDutyCycle(dc) #加速
PW4.ChangeDutyCycle(dc) #加速
PW6.ChangeDutyCycle(dc) #加速
PW8.ChangeDutyCycle(dc) #加速
time.sleep(1)
elif mmd == 'r':
#加速
#設(shè)置PW腳脈沖為0
PW1.ChangeDutyCycle(0)
PW3.ChangeDutyCycle(0)
PW5.ChangeDutyCycle(0)
PW7.ChangeDutyCycle(0)
#啟動(dòng)時(shí)60碼
for dc in range(0, 100, 50):
PW2.ChangeDutyCycle(dc) #加速
PW4.ChangeDutyCycle(dc) #加速
PW6.ChangeDutyCycle(dc) #加速
PW8.ChangeDutyCycle(dc) #加速
time.sleep(1)
else:
PW1.ChangeDutyCycle(0)
PW2.ChangeDutyCycle(0)
PW3.ChangeDutyCycle(0)
PW4.ChangeDutyCycle(0)
PW5.ChangeDutyCycle(0)
PW6.ChangeDutyCycle(0)
PW7.ChangeDutyCycle(0)
PW8.ChangeDutyCycle(0)
#加速
#設(shè)置PW腳脈沖為0
PW1.ChangeDutyCycle(0)
PW3.ChangeDutyCycle(0)
PW5.ChangeDutyCycle(0)
PW7.ChangeDutyCycle(0)
#dc = 60
#啟動(dòng)時(shí)60碼
for dc in range(0, 100, 50):
PW2.ChangeDutyCycle(dc) #加速
PW4.ChangeDutyCycle(dc) #加速
PW6.ChangeDutyCycle(dc) #加速
PW8.ChangeDutyCycle(dc) #加速
time.sleep(1)
#記錄狀態(tài):后退
mmd = 's'
#停止
elif cmd == 'r':
mmd = 'r'
num = 0
PW1.ChangeDutyCycle(0)
PW2.ChangeDutyCycle(0)
PW3.ChangeDutyCycle(0)
PW4.ChangeDutyCycle(0)
PW5.ChangeDutyCycle(0)
PW6.ChangeDutyCycle(0)
PW7.ChangeDutyCycle(0)
PW8.ChangeDutyCycle(0)
#右轉(zhuǎn)
elif cmd == 'e':
print "mmd = ",mmd
if mmd == 'w':
mmd = 'd'
#前進(jìn)右轉(zhuǎn)右綠
PW2.ChangeDutyCycle(0)
PW3.ChangeDutyCycle(0)
PW4.ChangeDutyCycle(0)
PW6.ChangeDutyCycle(0)
PW7.ChangeDutyCycle(0)
PW8.ChangeDutyCycle(0)
elif mmd == 's':
mmd = 'c'
#后退右轉(zhuǎn)右紅
PW1.ChangeDutyCycle(0)
PW2.ChangeDutyCycle(0)
PW3.ChangeDutyCycle(0)
PW5.ChangeDutyCycle(0)
PW6.ChangeDutyCycle(0)
PW7.ChangeDutyCycle(0)
elif mmd == 'r':
mmd = 'd'
#停車右轉(zhuǎn)右綠
PW2.ChangeDutyCycle(0)
PW3.ChangeDutyCycle(0)
PW4.ChangeDutyCycle(0)
PW6.ChangeDutyCycle(0)
PW7.ChangeDutyCycle(0)
PW8.ChangeDutyCycle(0)
for dc in range(0, 100, 50):
PW1.ChangeDutyCycle(dc) #加速
PW5.ChangeDutyCycle(dc) #加速
time.sleep(1)
elif mmd == 'd':
pass
elif mmd == 'c':
pass
elif mmd == 'a':
mmd = 'd'
#停止
PW1.ChangeDutyCycle(0)
PW2.ChangeDutyCycle(0)
PW3.ChangeDutyCycle(0)
PW4.ChangeDutyCycle(0)
PW5.ChangeDutyCycle(0)
PW6.ChangeDutyCycle(0)
PW7.ChangeDutyCycle(0)
PW8.ChangeDutyCycle(0)
#前進(jìn)右轉(zhuǎn)右綠
for dc in range(0, 100, 50):
PW1.ChangeDutyCycle(dc) #加速
PW5.ChangeDutyCycle(dc) #加速
time.sleep(1)
elif mmd == 'z':
mmd = 'c'
#停止
PW1.ChangeDutyCycle(0)
PW2.ChangeDutyCycle(0)
PW3.ChangeDutyCycle(0)
PW4.ChangeDutyCycle(0)
PW5.ChangeDutyCycle(0)
PW6.ChangeDutyCycle(0)
PW7.ChangeDutyCycle(0)
PW8.ChangeDutyCycle(0)
#后退右轉(zhuǎn)右紅
for dc in range(0, 100, 50):
PW4.ChangeDutyCycle(dc) #加速
PW8.ChangeDutyCycle(dc) #加速
time.sleep(1)
#左轉(zhuǎn)
elif cmd == 'q':
print "mmd = ",mmd
if mmd == 'w':
mmd = 'a'
#前進(jìn)左轉(zhuǎn)左綠
PW1.ChangeDutyCycle(0)
PW2.ChangeDutyCycle(0)
PW4.ChangeDutyCycle(0)
PW5.ChangeDutyCycle(0)
PW6.ChangeDutyCycle(0)
PW8.ChangeDutyCycle(0)
elif mmd == 's':
mmd = 'z'
#后退左轉(zhuǎn)左紅
PW1.ChangeDutyCycle(0)
PW3.ChangeDutyCycle(0)
PW4.ChangeDutyCycle(0)
PW5.ChangeDutyCycle(0)
PW7.ChangeDutyCycle(0)
PW8.ChangeDutyCycle(0)
elif mmd == 'r':
mmd = 'a'
#前進(jìn)左轉(zhuǎn)左綠
PW1.ChangeDutyCycle(0)
PW2.ChangeDutyCycle(0)
PW4.ChangeDutyCycle(0)
PW5.ChangeDutyCycle(0)
PW6.ChangeDutyCycle(0)
PW8.ChangeDutyCycle(0)
for dc in range(0, 100, 50):
PW3.ChangeDutyCycle(dc) #加速
PW7.ChangeDutyCycle(dc) #加速
time.sleep(1)
elif mmd == 'a':
pass
elif mmd == 'z':
pass
elif mmd == 'd':
mmd = 'a'
#停止
PW1.ChangeDutyCycle(0)
PW2.ChangeDutyCycle(0)
PW3.ChangeDutyCycle(0)
PW4.ChangeDutyCycle(0)
PW5.ChangeDutyCycle(0)
PW6.ChangeDutyCycle(0)
PW7.ChangeDutyCycle(0)
PW8.ChangeDutyCycle(0)
#前進(jìn)左轉(zhuǎn)左綠
for dc in range(0, 100, 50):
PW3.ChangeDutyCycle(dc) #加速
PW7.ChangeDutyCycle(dc) #加速
time.sleep(1)
elif mmd == 'c':
mmd = 'z'
#停止
PW1.ChangeDutyCycle(0)
PW2.ChangeDutyCycle(0)
PW3.ChangeDutyCycle(0)
PW4.ChangeDutyCycle(0)
PW5.ChangeDutyCycle(0)
PW6.ChangeDutyCycle(0)
PW7.ChangeDutyCycle(0)
PW8.ChangeDutyCycle(0)
#后退左轉(zhuǎn)左紅
for dc in range(0, 100, 50):
PW2.ChangeDutyCycle(dc) #加速
PW6.ChangeDutyCycle(dc) #加速
time.sleep(1)
#尋跡
elif cmd == 'xun':
print "xun"
if(thread_num == 0):
t = Thread(target = thread_xunji)
t.start()
thread_num = 1
else:
print "thread"
client.send('Thread is working...')
#t.join()
#避障
elif cmd == 'bi':
print "bi"
if(thread_bi == 0):
t = Thread(target = thread_bizhang)
t.start()
thread_bi = 1
else:
num_bi = 0
elif cmd == 'end':
break
client.close() #關(guān)閉對(duì)應(yīng)客戶端
#捕捉到ctrl + c后停止電機(jī)
except KeyboardInterrupt:
PW1.ChangeDutyCycle(0)
PW2.ChangeDutyCycle(0)
PW3.ChangeDutyCycle(0)
PW4.ChangeDutyCycle(0)
PW5.ChangeDutyCycle(0)
PW6.ChangeDutyCycle(0)
PW7.ChangeDutyCycle(0)
PW8.ChangeDutyCycle(0)
|
|