Проблемы с отображением средних данных из АЦП - PullRequest
0 голосов
/ 27 апреля 2018

У меня проблема с моим кодом. Я пытаюсь считывать измерения напряжения с моего АЦП и получать среднее значение из каждых 100 показаний, а затем отображать среднее значение на экране по умолчанию. Предполагается, что процесс повторяется, и метка должна обновляться каждые 0,5 секунды. Однако мой ярлык даже не отображается на экране.

Вот некоторые фрагменты моего кода

import matplotlib
matplotlib.use("TkAgg")
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
from matplotlib.figure import Figure
import matplotlib.animation as animation
from matplotlib import style

import tkinter as tk
from tkinter import ttk
from matplotlib import pyplot as plt

import time
import Adafruit_ADS1x15
adc = Adafruit_ADS1x15.ADS1115()
GAIN = 1

LARGE_FONT = ('Verdana', 18)
NORM_FONT = ('Verdana', 14)
SMALL_FONT = ('Verdana' , 11)
MENU_FONT= ('Arial', 12, "bold")



def update_label(label):

    def getvoltage():

        readings = [0]*100
        maxsample = 100
        counter = 0

        while (counter < maxsample):

            reading = adc.read_adc(0, gain=GAIN)
            readings.append(reading)
            counter += 1

        avg = sum(readings)/100
        voltage = (avg * 0.1259)/100
        readings.clear()

        label.config(text=str('Voltage: {0:.2f}'.format(voltage)))
    label.after(500, getvoltage)



class Controller(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)

        tk.Tk.wm_title(self, "Controller")

        container = tk.Frame(self)
        container.pack(side="top", fill="both", expand=True)
        container.grid_rowconfigure(0, weight=1)
        container.grid_columnconfigure(0,weight=1)    
        self.show_frame(DefaultScreen)

class DefaultScreen(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self,parent)
        self.configure(bg="white")

        f = Figure(figsize = (10,3), dpi=100)
        a = f.add_subplot(111)
        a.plot([1,2,3,4,5,6,7,8],[2,4,6,8,10,12,14,16])

        button1 = ttk.Button(self,text="Contact Page",
                            command=lambda:controller.show_frame(ContactPage))
        button1.pack(anchor="se", pady=10, padx=10)
        ventilatorstatus="Ventilator Status: Closed"
        ventstatus= tk.Label(self, text=ventilatorstatus, font=LARGE_FONT, bg="white")
        ventstatus.place(relx=0.5, rely=0.15, anchor="center")
        voltage_label = tk.Label(self, font=LARGE_FONT, bg="white")
        voltage_label.place(relx=0.5, rely= 0.22, anchor="center")
        update_label(voltage_label)

        canvas= FigureCanvasTkAgg(f, self)
        canvas.show()
        canvas.get_tk_widget().pack(anchor="s", fill=tk.X, expand=True, pady=20)



app = Controller()
app.attributes('-fullscreen', True)
app.mainloop()

Было бы замечательно, если бы кто-нибудь сказал мне, что я делаю неправильно .. Спасибо:)

1 Ответ

0 голосов
/ 27 апреля 2018

Для тех, кто может найти ответ полезным:

import matplotlib
matplotlib.use("TkAgg")
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
from matplotlib.figure import Figure
import matplotlib.animation as animation
from matplotlib import style

import tkinter as tk
from tkinter import ttk
from matplotlib import pyplot as plt

import time
import Adafruit_ADS1x15
adc = Adafruit_ADS1x15.ADS1115()
GAIN = 1

LARGE_FONT = ('Verdana', 18)
NORM_FONT = ('Verdana', 14)
SMALL_FONT = ('Verdana' , 11)
MENU_FONT= ('Arial', 12, "bold")



def update_label(label):

    def getvoltage():

        readings = [0]*100
        maxsample = 100
        counter = 0

        while (counter < maxsample):

            reading = adc.read_adc(0, gain=GAIN)
            readings.append(reading)
            counter += 1

        avg = sum(readings)/100
        voltage = (avg * 0.1259)/100
        readings.clear()

        label.config(text=str('Voltage: {0:.2f}'.format(voltage)))
        label.after(500, getvoltage)
    getvoltage()



class Controller(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)

        tk.Tk.wm_title(self, "Controller")

        container = tk.Frame(self)
        container.pack(side="top", fill="both", expand=True)
        container.grid_rowconfigure(0, weight=1)
        container.grid_columnconfigure(0,weight=1)    
        self.show_frame(DefaultScreen)

class DefaultScreen(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self,parent)
        self.configure(bg="white")

        f = Figure(figsize = (10,3), dpi=100)
        a = f.add_subplot(111)
        a.plot([1,2,3,4,5,6,7,8],[2,4,6,8,10,12,14,16])

        button1 = ttk.Button(self,text="Contact Page",
                            command=lambda:controller.show_frame(ContactPage))
        button1.pack(anchor="se", pady=10, padx=10)
        ventilatorstatus="Ventilator Status: Closed"
        ventstatus= tk.Label(self, text=ventilatorstatus, font=LARGE_FONT, bg="white")
        ventstatus.place(relx=0.5, rely=0.15, anchor="center")
        voltage_label = tk.Label(self, font=LARGE_FONT, bg="white")
        voltage_label.place(relx=0.5, rely= 0.22, anchor="center")
        update_label(voltage_label)

        canvas= FigureCanvasTkAgg(f, self)
        canvas.show()
        canvas.get_tk_widget().pack(anchor="s", fill=tk.X, expand=True, pady=20)



app = Controller()
app.attributes('-fullscreen', True)
app.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...