Seite 1 von 1

Python und Arduino... TypeError: an integer is required

Verfasst: Dienstag 14. Juli 2015, 16:18
von SAVE
Guten Tag,

folgendes Problem... Ich bin ziemlich neu und hab mir mein bisheriges bisschen in Happen selbst angeeignet... Allerdings komme ich gerade nicht weiter... :K

Mein Programm soll dem Arduino ein Buchstaben über USB schicken und die Daten die der Arduino ausgibt in einem Label anzeigen... Allerdings tut er weder das eine noch das andere. Über die Arduino Konsole funktioniert auch soweit alles... Also liegt es an dem Programm. Ich hoffe mir kann jemand helfen...

Hier das Programm:

Code: Alles auswählen

from tkinter import *
import serial
import time

fenster = Tk()                  #Erzeugung eines Fensters
fenster.title("LOGIN")    #Titel des Fensters
fenster.geometry("200x50")     #Größe des Fensters

print ("PLEASE LOG IN")

port = serial.Serial('COM7', 9600)

data = port.read()

eingabe = Entry(fenster, text="Passwort")
eingabe.pack()

def zünden():
    print (data)
    port.write("z")
    print (data)
    time.sleep(1)
    print (data)
    time.sleep(1)
    print (data)
    time.sleep(1)
    print (data)
    time.sleep(1)
    print (data)
    time.sleep(1)
    print (data)
    time.sleep(1)

def ausgabe():                  #Definition für Aktion bei Buttondruck
    print ("CHECKING")
    time.sleep(1)
    if (eingabe.get()) == "Nudelsalat":
        eingabe.delete(0, END)
        print ("CONNECT...")
        port.write("a")
        fenster2 = Tk()
        fenster2.title("ZÜNDKONSOLE")
        button2 = Button(fenster2, command=zünden, text="ZÜNDEN")
        button2. pack()
        label = Label(fenster2, text=data)
        label.pack()
    
    else:
        eingabe.delete(0, END)
        port.write("f")
        print ("WRONG PASSWORD")

button1 = Button(fenster, command=ausgabe, text="LOGIN")    #Erzeuge einen Button
button1.pack()                              #Postioniere den Button automatisch

#button2 = Button(fenster2, command=zünden, text="ZÜNDEN")
#button2. pack()

label1 = Label(text=data)
label1.pack()

#label = Label(fenster2, text=data)
#label.pack()

mainloop()                      #Starten des loops
Und der Fehler der rauskommt wenn man sich mit dem richtigen Passwort anmelden will:

Code: Alles auswählen

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Python34\lib\tkinter\__init__.py", line 1533, in __call__
    return self.func(*args)
  File "C:\Users\user\Documents\Zündkonsole.py", line 40, in ausgabe
    port.write("a")
  File "C:\Python34\lib\site-packages\serial\serialwin32.py", line 283, in write
    data = to_bytes(data)
  File "C:\Python34\lib\site-packages\serial\serialutil.py", line 76, in to_bytes
    b.append(item)  # this one handles int and str for our emulation and ints for Python 3.x
TypeError: an integer is required
Danke schon mal für antworten... Ich hoffe mir kann jemand weiterhelfen. :)

Re: Python und Arduino... TypeError: an integer is required

Verfasst: Dienstag 14. Juli 2015, 16:46
von sparrow
1. Bitte schreib deinen Code in die Code-Tags (der Button "Code" über dem Editor fügt die ein)

2. Versuch mal port.write("a".encode())

Ich meine, das hat bei mir mal das Problem gelöst.

Re: Python und Arduino... TypeError: an integer is required

Verfasst: Dienstag 14. Juli 2015, 18:26
von SAVE
1. Alles klar, hab die Funktion schon gesucht :lol:

2. Danke und hast du noch eine Idee warum er die vom Arduino gesendeten Texte nicht im Label anzeigt?

Re: Python und Arduino... TypeError: an integer is required

Verfasst: Dienstag 14. Juli 2015, 21:05
von sparrow
Dein Code ist ein bisschen... chaotisch.

Kapsel die Kommunikation mit dem Gerät doch in eigene Funktionen (hinterher vielleicht sogar in ein eigenes Modul).
Ganz ohne GUI.

Und wenn das dann klappt, dann kannst du das noch immer an eine GUI koppeln.

Und dann nützt ein port.read() am Anfang des Programms natürlich nichts, sondern du musst dann lesen, wenn du auch Daten erwartest.