[gelöst]Keine Verbindung zwischen Arduino (Serial.availabe)und Python!

Wie kann man eine Verbindung über die Serial Schnittestelle erstellen? Hab folgendes laufen auf dem Arduino.

Doch jedes mal meint er, dass die Serielle schnittstelle nicht verfügbar ist.

#void setup()
{
 Serial.begin(9600);
 pinMode(outPin, OUTPUT);
 Serial.flush();
 mail = HIGH;
}

void loop()
{  
  delay(1000);
  
  if(Serial.available())
  {
    val = Serial.read();
    if(val == 0)
    {
      Serial.println("Ja");
     digitalWrite(outPin,HIGH);
     delay(10000);
    }
    else if(val == 1)
    {
      Serial.println("Nein");
     digitalWrite(outPin,HIGH);
     delay(10000);   
    }
  }

Python Code

try:
	ser = serial.Serial('COM7', 9600)
	print "Serial connected"
	time.sleep(3.0)
except serial.SerialException:
	print "no device connected - exiting"
	sys.exit()

Laut Python funktioniert es und es kommt keine Fehlermeldung raus. Es liegt irgendwie an Arduino. RX und TX leuchten je nach delay auf. Wenn ich den Python Skript laufen lasse, dann hab ich in der SDK keine Verbindung mehr zur Arduino --> heißt Python hat zugriff auf Arduino, nur leider übersteht er halt nie die if bedingung. Leider weiß ich echt nicht mehr weiter

Die Sache funktioniert wenn Du probeweise über das Terminal von IDE Daten an den Arduino verschickst?
Grüße Uwe

Hallo,

mit "if(Serial.available() > 0)"

wird geprüft ob Daten am Port angekommen sind, nicht ob der Port da ist.

Grüße,
Jürgen

Was steht denn in

  {...}

? :wink:

uwefed:
Die Sache funktioniert wenn Du probeweise über das Terminal von IDE Daten an den Arduino verschickst?
Grüße Uwe

Wie meinst das genau? Hab ein anders Programm probiert, mit der ich über das Terminal Daten ans Arduino verschicke. Das funktionierte. Aber mit meinem Code, kann ich keine Daten übers Terminal verschicken, da er ja aufs Python Skript abwartet und somit besteht keine Verbindung zwischen der SDK und Arduino.

JuergenR:
Hallo,

mit "if(Serial.available() > 0)"

wird geprüft ob Daten am Port angekommen sind, nicht ob der Port da ist.

Grüße,
Jürgen

Aha, dachte der Überprüft ob der Port da ist oder nicht. Und wie kann ich es überprüfen, ob der Port da ist?

df6ih:
Was steht denn in

  {...}

? :wink:

siehe oben, hab es oben editiert

Hallo,

Port da - oder nicht da - gibt es am Arduino nicht.
Der Standard-Port ist ja nicht dynamisch, wie z.B. am PC wo man mal schnell was per USB dazustecken kann.

Grüße,
Jürgen

Wenn Du mit einem Terminalprogramm vom PC Daten an den Arduino senden kannst und dieser sie sieht dann tippe ich daß das Problem auf der PC Seite liegt; entweder beim Programm oder beim Betriebssystem, das die Schnittstelle nicht richtig anspricht.
Grüße Uwe

JuergenR:
Hallo,

Port da - oder nicht da - gibt es am Arduino nicht.
Der Standard-Port ist ja nicht dynamisch, wie z.B. am PC wo man mal schnell was per USB dazustecken kann.

Grüße,
Jürgen

Stimmt..aber ich brauche ja eine Überprüfung, ob eine Serialverbindung existiert oder nicht.
Liege ich da falsch?

uwefed:
Wenn Du mit einem Terminalprogramm vom PC Daten an den Arduino senden kannst und dieser sie sieht dann tippe ich daß das Problem auf der PC Seite liegt; entweder beim Programm oder beim Betriebssystem, das die Schnittstelle nicht richtig anspricht.
Grüße Uwe

Über das SerialMonitor von ArduinoSDK kann ich aufs Arduino zugreifen.

Also wenn ich nur das Arduino starte, dann blinkt nur das TX auf. Wenn ich das Python Skript starte, dann blinkt auch das RX mit.
Theoretisch können doch beide mit dem Arduino kommunizieren, sonst würde TX nicht aufleuchten (Arduino), sowie das Python Skript(RX).

Ich glaube es fehlt irgendwie noch die Verbindung über die Serial Schnittstelle..

Wenn das TX und das RX LED blinkt dann heißt das das Daten in beide richtungen verschickt werden. Hast Du die gleichen Parameter der seriellen Schnittstelle eingestellt (Baudrate, Start-Stop-Bit, Parität)?
Grüße Uwe

Im Prinzip hab ich nur in den Arduino,Python Code geschrieben, dass die Baudrate 9600 ist, sowie der COM anschluss.

Aber hier mal die Eigenschaften des Arduinos
Bits per Sec: 9600
Datenbits: 8
Parität: Keine
Stopbits: 1
Russsteuerung: Keine

Habe hier nix verändert und alles original gelassen.

Hallo,

kommt auf der PC-Seite was an?
Der Arduino sollte laut Deinem Scetch ja alle 1 Sekunde "Nein" schicken...

Grüße,
Jürgen

Auf der PC Seite kommt nix an, weil Arduino die if bedingung nicht besteht und somit kein "nein" oder "ja" rückgeben kann.

Habe nur nach der if bedingung noch ein else, wo ich im serial monitor sehen kann, dass er die if bedingung nicht erfüllt. Das sehe ich, aber mehr leider nicht..

Dann ändere Dein Programm doch mal so, daß immer etwas ausgegeben wird. Erst einmal den Fehler eingrenzen...

Ich würde ja vermuten, daß Du '0' und 0x0 sowie '1' und 0x1 verwechselst.

Das ist auch mein Verdacht.
Schicke mal das Empfangene Zeichen als Dezimalwert an den PC zurück.
einfach

Serial.println(val,DEC);

Grüße Uwe

HABS HINBEKOMMEN!!

es fehlte bei
if(val == 0) die Anführungszeichen. --> if(val == '0')

ansonsten hat fast alles gepasst. Aktuell erkennt er bei mir in kürzester Zeit, dass eine Mail da ist.

Echt sehr geil! Ein großer Aufwand, aber top wie das läuft....nächstes Ziel Facebook Notification^^

Ich möchte mich hiermit bei allen für die Ratschläge und Tipps bedanken!! Klasse