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
Widerspenstige Variable
-
- User
- Beiträge: 219
- Registriert: Donnerstag 21. Juli 2011, 07:01
- Wohnort: Stade / Hamburg
- Kontaktdaten:
Code kannst du zwischen code-Tags setzen, dann kann man es hier besser lesen. Der fünfte Button von links über dem Editor. </>
Schau dir mal die Zeile 8 an.
Ich nehme an, dass dort kein Wert ankommt. Warum nicht, kann ich leider nicht beantworten. Aber ich wette, ein
in Zeile 9 würde zur Ausgabe None führen.
Schau dir mal die Zeile 8 an.
Ich nehme an, dass dort kein Wert ankommt. Warum nicht, kann ich leider nicht beantworten. Aber ich wette, ein
Code: Alles auswählen
print(analog_input)
Hallo,
Ihr habt recht! Die erste Abfrage ist immer "None". Danach läuft alles Wunschgemäß
und ich kann auch mit der Variablen rechnen. Warum? Es mag wohl an der Hardware liegen.
Man konnte das "None" in der Ausgabe bloß nicht so schnell lesen weil es so schnell hochscrollte.
Ich habe das Programm nun geändert. Klappt wunderbar.
Dankeschön
LG Bendy
Ihr habt recht! Die erste Abfrage ist immer "None". Danach läuft alles Wunschgemäß
und ich kann auch mit der Variablen rechnen. Warum? Es mag wohl an der Hardware liegen.
Man konnte das "None" in der Ausgabe bloß nicht so schnell lesen weil es so schnell hochscrollte.
Ich habe das Programm nun geändert. Klappt wunderbar.
Code: Alles auswählen
import pyfirmata
import time
board = pyfirmata.Arduino('COM5')
it = pyfirmata.util.Iterator(board)
it.start()
i=0
analog_input = board.get_pin('a:0:i')
while i <= 8:
analog_value = analog_input.read()
if analog_value is not None:
analog_value = analog_value * 5
print(round(analog_value, 2))
time.sleep(0.1)
i=i+1
LG Bendy