Nejednoznačné chování kódu v Pythonu na Raspberry – Python – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Nejednoznačné chování kódu v Pythonu na Raspberry – Python – Fórum – Programujte.comNejednoznačné chování kódu v Pythonu na Raspberry – Python – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené.
Jirka550
Duch
9. 9. 2021   #1
-
0
-

Ahoj. Čtu na Raspberry Pi 4 dva kanály z AD převodníku (mikrofony). Pokud kód spustím, jak je uveden níže, program při počtu prvků=50 po 38 cyklech ztuhne. Při počtu prvků=25 tuhne po 76 cyklech, při 100 prvcích po 19 cyklech. Zdá se to neuvěřitelné, ale pokud zplatním níže označený řádek "print(pole_1)" na konci def mer_zvuk(), program jede očekávaně (skončil jsem u 6026 cyklů, než jsem ho sestřelil). Máte, prosím, někdo nápad, čím to může být? Pokud nahradím hodnotu čtenou z převodníku náhodným číslem, jede to taky dobře, převodník je podle mě ale v pořádku. Díky za jakýkoliv nápad. Jirka

from gpiozero import MCP3008
from time import sleep
import numpy as np
#
volty = [0, 0]
vref = 3.3
maxval_0 = 0
maxval_1 = 0
pocet_prvku = 50

pole_0 = np.ones(pocet_prvku, 'i')
pole_1 = np.ones(pocet_prvku, 'i')
 #
def mer_zvuk():
    global maxval_0
    global maxval_1
    global pole_0
    global pole_1
    #
    for x in range(pocet_prvku):
        volty[0] = MCP3008(channel=0).value * vref
        volty[1] = MCP3008(channel=1).value * vref
        pole_0[x] = int(volty[0] * 1000)
        pole_1[x] = int(volty[1] * 1000)
        sleep(0.01)
                
    maxval_0 = max(pole_0)
    maxval_1 = max(pole_1)
    # print(pole_1)    # tohle když není platný kód, tak program po několika průbězích tuhne!!!
      
pocet = 0
while pocet != 10000:
    mer_zvuk()
    pocet = pocet + 1
    print(str(maxval_0) + " " + str(maxval_1) + " " + str(maxval_0 - maxval_1))
    print(pocet)
    

Nahlásit jako SPAM
IP: 89.176.11.–
gna
~ Anonymní uživatel
1850 příspěvků
9. 9. 2021   #2
-
0
-

Jediný efekt toho printu je asi v tom, že je poměrně pomalý. Ale myslím, že není problém číst plnou rychlostí.

To, co se mi nelíbí je, že pro každé čtení vytváříš novou instanci MCP3008. Netuším, jak je ta třída implementovaná, ale v tom by mohl být problém. Tou pauzou v printu možná dáš Pythonu/systému čas něco pouklízet.

channel0 = MCP3008(channel=0)
channel1 = MCP3008(channel=1)

funkce:
    cyklus:
        val0 = channel0.value
        val1 = channel1.value
Nahlásit jako SPAM
IP: 213.211.51.–
Jirka550
Duch
9. 9. 2021   #3
-
0
-

#2 gna
Ahoj, skutečný odborníku, přepsal jsem to dle Tvé rady a už to chodí. Ten původní kód jsem převzal z oficiální příručky k RasPio Analog Zero, kde vypisovali hodnoty na konzoli co desetinu vteřiny a nikam je neukládali. O pár stránek dál už je ten správný postup, tam jsem se ale v zápalu vášně zatím nedostal... 

Moc děkuji za radu!

Nahlásit jako SPAM
IP: 89.176.11.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 8 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý