树莓派论坛

 找回密码
 立即注册

代码

树老大 发表于 2024-10-23 16:27:26 | 显示全部楼层 |阅读模式
from machine import Pin
import time
import array as arr

class HX711(object):

    GAIN = 1
    SCALE = 1
    OFFSET = 0
    def __init__(self, dt, sck, gain = 128):   
        self.dt_pin = Pin(dt, Pin.IN, Pin.PULL_UP)
        self.sck_pin = Pin(sck, Pin.OUT)

        self.set_gain(gain);

    def set_gain(self, gain):
        if(gain == 128):
            self.GAIN = 1
        if(gain == 64):
            self.GAIN = 3
        if(gain == 32):
            self.GAIN = 2

    def tare(self, value = 1):
        self.set_offset(self.read_average(value))

    def set_scale(self, value):
        self.SCALE = value;

    def set_offset(self, value):
        self.OFFSET = value;

    def is_ready(self):
        return self.dt_pin.value() == 0;

    def is_read(self):
        pass;

    def wait_ready(self, delay_ms):
        pass;

    def get_value(self, count = 10):
        return self.read_average(count) - self.OFFSET # add offset tare

    def get_units(self, count = 10):
        return self.get_value(count) / self.SCALE;

    def read_average(self, count = 10):
        sumValues = 0
        for i in range(0, count):
            sumValues += self.read();
            time.sleep_us(1);

        return sumValues / count;

    def read(self):
        value = 0;
        data = arr.array('i',[0,0,0]);
        filler = 0x00;
        self.sck_pin.off();
        data[2] = self.shiftInSlow();
        data[1] = self.shiftInSlow();
        data[0] = self.shiftInSlow();

        for i in range(0, self.GAIN):
            self.sck_pin.on();
            time.sleep_us(1);
            self.sck_pin.off();

        if (data[2] & 0x80):
            filler = 0xFF;
        else:
            filler = 0x00;

        value = filler << 24 | data[2] << 16 | data[1] << 8 | data[0];
        return value;
       

    def shiftInSlow(self):
        value8_t = 0;
        self.sck_pin.off();
        time.sleep_us(1);
        for i in range(0, 8):
            self.sck_pin.on();
            time.sleep_us(1);
            d = self.dt_pin.value()
            self.sck_pin.off();
            value8_t |= d<< (7 - i)
            time.sleep_us(1);

        return value8_t;


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版 | Archiver | 树莓派论坛 ( 粤ICP备15075382号-1 )