Python Forum
HX711&matplotlib problems - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: General Coding Help (https://python-forum.io/forum-8.html)
+--- Thread: HX711&matplotlib problems (/thread-19736.html)



HX711&matplotlib problems - olego - Jul-12-2019

Hi!
I'm making a project in python on rpi 3b+ for a machine I've build in my laboratory and have some problems with the code. :cry:
The aim is to collect data from hx711 wich is connected to load cell in a csv file and to show real time plot on rpi screen.
I'm going to connect 4 hx711 to save and plot data from 4 load cells.
Now i'm trying to make work only 1 cell.
Here is the code:

import sys
import csv
import time
from datetime import datetime 
import RPi.GPIO as GPIO
from hx711 import HX711
import matplotlib.pyplot as plt
csvfile = datetime.now().strftime('Base-%Y-%m-%d-%H-%M.csv')
fieldnames = ["time1","force1"]
with open(csvfile, "a")as output:
            writer = csv.DictWriter(output, fieldnames=fieldnames)
            writer.writeheader()
# choose pins on rpi (BCM5 and BCM6)
hx = HX711(dout=5, pd_sck=6)

# HOW TO CALCULATE THE REFFERENCE UNIT
#########################################
# To set the reference unit to 1.
# Call get_weight before and after putting 1000g weight on your sensor.
# Divide difference with grams (1000g) and use it as refference unit.

hx.setReferenceUnit(1)

hx.reset()
hx.tare()
fig = plt.figure()
ax = fig.add_subplot(111)
fig.show()
i = 0
x, y = [], []
while True:

    try:
        force1 = "{0: 4.1f}".format(hx.getWeight())     
        time1 = datetime.now().strftime('%H:%M:%S.%f')
        print(force1, time1)
        x.append(i)
        ax.plot(x, force1, color='b')
        fig.canvas.draw()
        ax.set_xlim(left=max(0, i-10), right=i+10)
        ax.set_ylim([-100,100])
        i += 1
        data = [force1, time1]
        with open(csvfile, "a")as output:
            writer = csv.DictWriter(output, fieldnames=fieldnames)
            info = {
            "time1": time1,
            "force1": force1
            }
            writer.writerow(info)
            writer = csv.writer(output, delimiter=",", lineterminator = '\n')  
        time.sleep(0.01) # update script every 60 seconds

    except (KeyboardInterrupt, SystemExit):
        GPIO.cleanup()
        sys.exit()
here is a problem that it plots a straght line wich only goes up, but
print(force1, time1)
prints right values of force1
as examples i took this code to check cpu that works perfectly:
import time
import matplotlib.pyplot as plt
import psutil
fig = plt.figure()
ax = fig.add_subplot(111)
fig.show()
i = 0
x, y = [], []
while True:
    x.append(i)
    y.append(psutil.cpu_percent())
    ax.plot(x, y, color='b')
    fig.canvas.draw()
    ax.set_xlim(left=max(0, i-10), right=i+10)
    ax.set_ylim([-100,100])
    print(psutil.cpu_percent())
    time.sleep(0.1)
    i += 1
plt.close()
Could you please help me to solve the problem?
I'm a scientist and more mechanic than a programmer.