Serielle Kommunikation

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
Python_User
User
Beiträge: 3
Registriert: Samstag 26. Mai 2018, 19:06

Hallo erstmal,

ich habe nicht viel Programmiererfahrung und nutze Python3 mit mac.

Ich versuche schon seit geraumer Zeit mit Python und dem Arduino Uno zu arbeiten.
Mein Ziel ist es, eine Led am Arduino mit einem Python-GUI an und auszuschalten.

Code: Alles auswählen

 #!/usr/bin/env python3

import serial

from tkinter import*

arduinoData = serial.Serial ("/dev/cu.usbmodem1411", 9600)
arduinoData.open

def led_on():
     arduinoData.write(b'1')


def led_off():
     arduinoData.write(b'0')


led_control_window = Tkinter.Tk()

Button = Tkinter.Button

btn = Button(led_control_window, text="ON", command=led_on)
btn1= Button(led_control_window, text="OFF", command=led_off)

btn.grid(row=0, column=1)
btn1.grid(row=1, column=1)

led_control_window.mainloop()

input("Press enter to exit")

Der Arduino-Code ist der folgende.

Code: Alles auswählen


int led = 13;
char serialData;


void setup() {                
  
  pinMode(led, OUTPUT);     
    Serial.begin(9600);
}


void loop() {
  if (Serial.available() > 0) {
    serialData = Serial.read();
    Serial.print(serialData);
    
    if (serialData == '1') {
      digitalWrite(led, HIGH); }
    
    else if (serialData =='0') {
      digitalWrite(led, LOW); }  

}
Es kommen ständig Fehlermeldungen
Ich denke es liegt an dem seriellen Port.

Ich hoffe, ihr könnt erkennen, was das Problem ist.

Danke im Vorraus
__deets__
User
Beiträge: 14536
Registriert: Mittwoch 14. Oktober 2015, 14:29

Und verrätst du uns auch die Fehlermeldungen?
__deets__
User
Beiträge: 14536
Registriert: Mittwoch 14. Oktober 2015, 14:29

Und noch ein Nachtrag: hinter dem open fehlt die Klammer unbeschädigt tu tun. Ob das überhaupt notwendig ist weiß ich allerdings auswendig nicht.
Python_User
User
Beiträge: 3
Registriert: Samstag 26. Mai 2018, 19:06

Hab das mit den Klammern jetzt hinzugefügt.
Und hier die Fehlermeldung:

Traceback (most recent call last):
File "/Users/volkanyigitbas/Desktop/Python_LED.py", line 8, in <module>
arduinoData.open()
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/serial/serialposix.py", line 261, in open
raise SerialException("Port is already open.")
serial.serialutil.SerialException: Port is already open.
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

Du hast wahrscheinlich noch die Arduino-IDE offen, die den USB-Port blockiert.

Das ›open‹ kann man auch komplett löschen, weil Serial-Objekte schon beim Erstellen geöffnet werden. ›Tkinter‹ ist nicht definiert, so dass es da dann den nächsten Fehler gibt. Sternchenimporte vermeiden. Button als an eine Variable zu binden ist ungewöhnlich. Üblicherweise schreibt man »import tkinter as tk« und greift auf alle Tk-Objekte über tk.xy zu.
Python_User
User
Beiträge: 3
Registriert: Samstag 26. Mai 2018, 19:06

Ich danke euch für die schnelle Hilfe.
Nun klappt alles wie gewünscht.
Es lag an dem open und den Button als Variable.
Antworten