# -*- coding: utf-8 -*- import RPi.GPIO as GPIO import time #VCC接1號針腳,GND接6號針腳,SCK接11號針腳,DT接13號針腳 class Hx711(): def setup(self): self.SCK = 11 # 物理引腳第11號,時鐘 self.DT = 13 #物理引腳第13號,資料 self.flag=1 #用於首次讀數校準 self.initweight=0 #毛皮 self.weight=0 #測重 self.delay=0.09 #延遲時間 GPIO.setwarnings(False) GPIO.setmode(GPIO.BOARD) # Numbers GPIOs by physical location GPIO.setup(self.SCK, GPIO.OUT) # Set pin's mode is output GPIO.setup(self.DT, GPIO.IN) GPIO.setup(self.DT, GPIO.IN, pull_up_down=GPIO.PUD_UP) def start(self): GPIO.output(self.SCK,0) if GPIO.input(self.SCK): time.sleep(self.delay) value=0 while GPIO.input(self.DT): time.sleep(self.delay) #迴圈24次讀取資料 for i in range(24): GPIO.output(self.SCK,1) if(0==GPIO.input(self.SCK)): time.sleep(self.delay) value=value<<1 #左移一位,相當於乘2,二進位制轉十進位制 GPIO.output(self.SCK,0) if GPIO.input(self.SCK): time.sleep(self.delay) if GPIO.input(self.DT)==1: value+=1 GPIO.output(self.SCK,1) GPIO.output(self.SCK,0) value=int(value/1905) #1905為我感測器的特性值,不同感測器值不同。可先註釋此步驟,再去測一物體A得到一個值X,而後用X除以A的真實值即可確定特性值 if self.flag==1: #第一次讀數為毛皮 self.flag=0 self.initweight=value #初始值 else: self.weight=abs(value-self.initweight) #當前值減毛皮得測量到的重量 print(self.weight) if __name__=='__main__': send=Hx711() send.setup() while True: send.start()
# -*- coding: utf-8 -*- import RPi.GPIO as GPIO import time #程序測試 from multiprocessing import Process,Manager #VCC接1號針腳,GND接6號針腳,SCK接11號針腳,DT接13號針腳 class Hx711(): def setup(self): self.SCK = 11 # 物理引腳第11號,時鐘 self.DT = 13 #物理引腳第13號,資料 self.flag=1 #用於首次讀數校準 self.initweight=0 #毛皮 self.weight=0 #測重 self.delay=0.09 #延遲時間 GPIO.setwarnings(False) GPIO.setmode(GPIO.BOARD) # Numbers GPIOs by physical location GPIO.setup(self.SCK, GPIO.OUT) # Set pin's mode is output GPIO.setup(self.DT, GPIO.IN) GPIO.setup(self.DT, GPIO.IN, pull_up_down=GPIO.PUD_UP) def GetData(self,share_data): while 1: if share_data[9]==1: print("weight break!") break GPIO.output(self.SCK,0) if GPIO.input(self.SCK): time.sleep(self.delay) value=0 while GPIO.input(self.DT): time.sleep(self.delay) #迴圈24次讀取資料 for i in range(24): GPIO.output(self.SCK,1) if(0==GPIO.input(self.SCK)): time.sleep(self.delay) value=value<<1 #左移一位,相當於乘2,二進位制轉十進位制 GPIO.output(self.SCK,0) if GPIO.input(self.SCK): time.sleep(self.delay) if GPIO.input(self.DT)==1: value+=1 GPIO.output(self.SCK,1) GPIO.output(self.SCK,0) value=int(value/1905) #1905為我感測器的特性值,不同感測器值不同。可先註釋此步驟,再去測一物體A得到一個值X,而後用X除以A的真實值即可確定特性值 if self.flag==1: #第一次讀數為毛皮 self.flag=0 self.initweight=value #初始值 else: self.weight=abs(value-self.initweight) #當前值減毛皮得測量到的重量 #print(self.weight) time.sleep(0.2) share_data[1]=self.weight if __name__=='__main__': managerdata=Manager().dict() sharelock=Manager().Lock() managerdata[0]=0# flag managerdata[1]=0# weight data managerdata[9]=0# 結果影像 send=Hx711() send.setup() #1採集影像程序 t1=Process(target=send.GetData,args=(managerdata,)) t1.deamon=True #伴隨主程序關閉而關閉 t1.start() while True: print('wegth',managerdata[1]) time.sleep(1)