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

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
SAVE
User
Beiträge: 2
Registriert: Dienstag 14. Juli 2015, 16:08

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. :)
Zuletzt geändert von cofi am Dienstag 14. Juli 2015, 16:52, insgesamt 1-mal geändert.
Grund: Code Markup gefixt
Benutzeravatar
sparrow
User
Beiträge: 4193
Registriert: Freitag 17. April 2009, 10:28

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.
SAVE
User
Beiträge: 2
Registriert: Dienstag 14. Juli 2015, 16:08

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?
Benutzeravatar
sparrow
User
Beiträge: 4193
Registriert: Freitag 17. April 2009, 10:28

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.
Antworten