Wpis z mikrobloga

Napisałem program odczytujący z pliku wartość liczbową odczytywaną przez przetwornik analogowo-cyfrowy. Wartość jest w zakresie 0-4095. Żeby ją przekonwertować na wartość zbliżoną do zmierzonego napięcia muszę wykonać proste działanie:
(wartosc_raw/4095)*5
Problem, jaki spotkałem polega na tym, że w każdym przypadku po działaniu w nawiasie mam wynik 0.0. Próbowałem zmienną wymuszać jako float i sprawdzałem to przez isinstance, dzieliłem przez 4095.0, ale wciąż dostaję to przeklęte 0.0 mimo, że wynik na pewno jest inny.

Co tu się dzieje takiego, że dostaję błędne wyniki prostego działania?

#python #programowanie #pytanie
  • 32
  • Odpowiedz
@Gorion103: ale bez *5, samo dzielenie, też wypluwa 0.0 :)
@RobertMistrz: @AwizisieAkat:
batteryraw = subprocess.call("cat /sys/bus/iio/devices/iio\:device0/involtage0raw", shell=True)
print battery
raw # tu wiem ze =/=0
batteryvol = float((batteryraw/4095)*5) # po samym dzieleniu juz wypluwa 0.0
print isinstance(batteryvol, float) # true
print battery
vol # 0.0
  • Odpowiedz
@RobertMistrz: korzystałem właśnie z tego, choć biegły nie jestem. Zdziwiło mnie jednak, że mimo wszystko powstał problem i nie daje się rozwiązać w żaden stosowany wcześniej sposób.
Dla próby przemnożyłem battery_raw wynoszący teraz 2149 przez 1.0 i otrzymuję 0.0.
  • Odpowiedz
@RobertMistrz: @Gorion103: @AwizisieAkat: jednak nie jest to rozwiązane, choć mam trop.
print battery_raw wypluwa po sobie dwie wartości oddzielone końcem linii. Jedną jest wartość >0, a druga to dokładnie 0. Nie wiem skąd to się bierze, bo zwykły cat na tej ścieżce wypluwa tylko 0-4095 z jakąś przewidywalnością co do wartości, jeśli podłączę coś >0 V.
Podejrzewam, że właśnie to 0 psuje wszystko i na nim
  • Odpowiedz
@macgajster: wg mnie i tego

subprocess.call zwraca do zmiennej batteryraw returncode 1 lub 0


Run the command described by args. Wait for command to complete, then return the returncode attribute.
  • Odpowiedz
@macgajster: te 2151 to nie jest zawartość zmiennej batteryraw, lecz wynik wykonania polecenia "cat ..."
wg mnie musisz zmienić koncepcję wczytywania wartości z pliku.
  • Odpowiedz