Widerspenstige Variable
Verfasst: Sonntag 22. November 2020, 16:02
Hallo zusammen,
Ich habe ein Verständnisproblem, bin auch schon im Rentenalter und noch nicht so erfahren mit Python und Arduino.
Ich möchte später eine Aktive Magnetic Loop Antenne um 180 Grad drehen können und möchte dies mit einem Servo machen.
Das klappt in ersten Versuchen, mein selbstgebastelter Rotor dreht so leicht das der Servo das locker hinbekommt.
Die Steuerung übernimmt ein Arduino Uno. Auf diesem läuft die Firmata Software.
Ich brauche aber die Position der Antenne um sie als Kompassrose im Python-Programm auf dem Rechner darzustellen.
Dazu lese ich ein Poti mit dem analogen Eingang am Arduino aus.
Ich habe zum Lernen und Testen dieses Programm.
1 import pyfirmata
2 import time
3
4 board = pyfirmata.Arduino('COM5')
5 it = pyfirmata.util.Iterator(board)
6 it.start()
7
8 analog_input = board.get_pin('a:0:i')
9
10 while True:
11 analog_value = analog_input.read()
12 print(analog_value)
13 time.sleep(0.1)
Soweit so gut, ich bekomme fortlaufend Ausgaben der Potistellung. Z.B 0.3325, Also einen Zahlenwert zwischen 0 und 1.
Diesen möchte ich aber umrechnen in Gradzahlen von 0 bis 180
Zum Test habe ich mal die Zeile 12 geändert um die Ausgabe in Volt umzurechnen. (Das Poti hängt an der Betriebsspannung)
12 print(analog_value * 5)
Und bekomme prompt den Fehler:
TypeError: unsupported operand type(s) for *: 'NoneType' and 'int'
Nanu ich denke die Variable ist automatisch vom Typ Float?
In einem anderem Programm wird doch auch mit dieser Variablen gerechnet.
Dort kommt folgendes vor:
while True:
analog_value = analog_input.read()
if analog_value is not None:
delay = analog_value * 2
Aber ich verstehe die If Abfrage nicht.
Da steht doch nur: "Wenn die Variable nicht nichts ist dann"
Aber jede Variable die einen Inhalt hat, ist doch irgendwas!
Und Inhalt hat sie ja, eben einen Wert zwischen 0 und 1
Mir schwirrt der Kopf!
Bitte klärt mich auf!
LG Bendy
Ich habe ein Verständnisproblem, bin auch schon im Rentenalter und noch nicht so erfahren mit Python und Arduino.
Ich möchte später eine Aktive Magnetic Loop Antenne um 180 Grad drehen können und möchte dies mit einem Servo machen.
Das klappt in ersten Versuchen, mein selbstgebastelter Rotor dreht so leicht das der Servo das locker hinbekommt.
Die Steuerung übernimmt ein Arduino Uno. Auf diesem läuft die Firmata Software.
Ich brauche aber die Position der Antenne um sie als Kompassrose im Python-Programm auf dem Rechner darzustellen.
Dazu lese ich ein Poti mit dem analogen Eingang am Arduino aus.
Ich habe zum Lernen und Testen dieses Programm.
1 import pyfirmata
2 import time
3
4 board = pyfirmata.Arduino('COM5')
5 it = pyfirmata.util.Iterator(board)
6 it.start()
7
8 analog_input = board.get_pin('a:0:i')
9
10 while True:
11 analog_value = analog_input.read()
12 print(analog_value)
13 time.sleep(0.1)
Soweit so gut, ich bekomme fortlaufend Ausgaben der Potistellung. Z.B 0.3325, Also einen Zahlenwert zwischen 0 und 1.
Diesen möchte ich aber umrechnen in Gradzahlen von 0 bis 180
Zum Test habe ich mal die Zeile 12 geändert um die Ausgabe in Volt umzurechnen. (Das Poti hängt an der Betriebsspannung)
12 print(analog_value * 5)
Und bekomme prompt den Fehler:
TypeError: unsupported operand type(s) for *: 'NoneType' and 'int'
Nanu ich denke die Variable ist automatisch vom Typ Float?
In einem anderem Programm wird doch auch mit dieser Variablen gerechnet.
Dort kommt folgendes vor:
while True:
analog_value = analog_input.read()
if analog_value is not None:
delay = analog_value * 2
Aber ich verstehe die If Abfrage nicht.
Da steht doch nur: "Wenn die Variable nicht nichts ist dann"
Aber jede Variable die einen Inhalt hat, ist doch irgendwas!
Und Inhalt hat sie ja, eben einen Wert zwischen 0 und 1
Mir schwirrt der Kopf!
Bitte klärt mich auf!
LG Bendy