diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..07ad298 Binary files /dev/null and b/.DS_Store differ diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..11e3a15 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ + +*.e4q + +scale.e4p + +0.1 + +.eric6project/scale.e6t diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/hx711.py b/hx711.py new file mode 100644 index 0000000..8ae7f4a --- /dev/null +++ b/hx711.py @@ -0,0 +1,118 @@ +from machine import Pin + +class HX711: + def __init__(self, dout, pd_sck, gain=128): + + self.pSCK = Pin(pd_sck , mode=Pin.OUT) + self.pOUT = Pin(dout, mode=Pin.IN, pull=Pin.PULL_DOWN) + + self.GAIN = 0 + self.OFFSET = 0 + self.SCALE = 1 + self.lastVal = 0 + self.allTrue = False + + self.set_gain(gain); + + + def createBoolList(size=8): + ret = [] + for i in range(8): + ret.append(False) + return ret + + def is_ready(self): + return self.pOUT() == 0 + + def set_gain(self, gain): + if gain is 128: + self.GAIN = 1 + elif gain is 64: + self.GAIN = 3 + elif gain is 32: + self.GAIN = 2 + + self.pSCK.value(False) + self.read() + print('Gain setted') + + def read(self): + + dataBits = [self.createBoolList(), self.createBoolList(), self.createBoolList()] + while not self.is_ready(): + pass + + for j in range(2, -1, -1): + for i in range(7, -1, -1): + self.pSCK.value(True) + dataBits[j][i] = self.pOUT() + self.pSCK.value(False) + + + #set channel and gain factor for next reading + for i in range(self.GAIN): + self.pSCK.value(True) + self.pSCK.value(False) + + + #check for all 1 + if all(item == True for item in dataBits[0]): + print('all true') + self.allTrue=True + return self.lastVal + + self.allTrue=False + + + readbits = "" + for j in range(2, -1, -1): + for i in range(7, -1, -1): + if dataBits[j][i] == True: + readbits= readbits +'1' + else: + readbits= readbits+'0' + + self.lastVal = int(readbits, 2) + + return self.lastVal + + + + def read_average(self, times=3): + sum = 0 + effectiveTimes = 0 + readed = 0 + for i in range(times): + readed = self.read() + if self.allTrue == False: + sum += readed + effectiveTimes+=1 + + if effectiveTimes == 0: + return 0 + return sum / effectiveTimes + + def get_value(self, times=3): + return self.read_average(times) - self.OFFSET + + def get_units(self, times=3): + return self.get_value(times) / self.SCALE + + def tare(self, times=15): + sum = self.read_average(times) + self.set_offset(sum) + + def set_scale(self, scale): + self.SCALE = scale + + def set_offset(self, offset): + self.OFFSET = offset + + def power_down(self): + self.pSCK.value(False) + self.pSCK.value(True) + + + def power_up(self): + self.pSCK.value(False) + diff --git a/scale.py b/scale.py new file mode 100644 index 0000000..6d9430d --- /dev/null +++ b/scale.py @@ -0,0 +1,6 @@ +from hx711 import HX711 +hx = HX711('G9', 'G10') +hx.set_scale(48.36) +hx.tare() +val = hx.get_units(5) +print(val)