Pages: [1]   Go Down
Author Topic: [gelöst]Keine Verbindung zwischen Arduino (Serial.availabe)und Python!  (Read 1210 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Code:
#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
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
« Last Edit: February 06, 2012, 02:30:03 pm by Sylar » Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 260
Posts: 21566
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Heilbronn
Offline Offline
Full Member
***
Karma: 4
Posts: 149
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Heidelberg
Offline Offline
Full Member
***
Karma: 1
Posts: 207
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Was steht denn in

Code:
  {...}

? smiley-wink
Logged

 

Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.

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?


Was steht denn in

Code:
  {...}

? smiley-wink
siehe oben, hab es oben editiert
Logged

Heilbronn
Offline Offline
Full Member
***
Karma: 4
Posts: 149
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 260
Posts: 21566
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?

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

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 260
Posts: 21566
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Heilbronn
Offline Offline
Full Member
***
Karma: 4
Posts: 149
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,

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


Grüße,
Jürgen
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

0
Offline Offline
Faraday Member
**
Karma: 23
Posts: 3480
20 LEDs are enough
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Check out my experiments http://blog.blinkenlight.net

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 260
Posts: 21566
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

 
Code:
Serial.println(val,DEC);

Grüße Uwe
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Pages: [1]   Go Up
Jump to: