Arduino und Python

Moin,

ich habe ein kleines und eben so seltsames Problem. Ich habe auf meinem Arduino UNO folgenes Script laufen:

int data = 0;
int ledPin = 13;

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


void loop()
{
   data = Serial.read();
    
    if(data == 5)
    {
     digitalWrite(ledPin, HIGH);
    }
    if(data == 0)
    {
     digitalWrite(ledPin, LOW);
    }
}

Wenn ich jetzt folgenes in der Python (2.5) Befehlszeile tue, kann ich die LED an bzw ausschalten.

Wenn ich jetzt aber den gleichen Code in ein Script packe und das ausführe, läuft es nicht. ._.

import sys
import serial
import time
port = 'COM3'
ser = serial.Serial(port)
time.sleep(2)
ser.write(chr(5))
ser.close()

Kennt jemand die Lösung? Ist hat sicher was mit den verschiednen Typen zu tun.. wenn ihr wisst was ich meine..
Ich bin am verzweiflen... Ich will doch nur meinem Arduino Variablen vom Rechner übergeben... (Strings u.a.)

Valium

Probier mal den Aufruf Deines Scriptes mit "python -vvv SCRIPTNAME-py" etwas "gesprächiger zu machen. Evtl. erzählt ja python wo der Schuh drückt.

mkl0815:
Probier mal den Aufruf Deines Scriptes mit "python -vvv SCRIPTNAME-py" etwas "gesprächiger zu machen. Evtl. erzählt ja python wo der Schuh drückt.

Hier die Ausgabe, ich kann kann da keine Fehler rauslesen.
Im Board kommt ja auch was an, aber etwas anderes als wenn ich das direkt über die Befehlszeile mache..

Ausgabe: http://www.heypasteit.com/clip/0BEU

und was kommt an?

Weiß ich nicht...
Wenn neben den Serial Monitor laufen lassen, kann Python den Port nicht benutzen....

Ich hab's!
Es liegt an am dem ser.close(). Soblad das ausgeführt wird, wird der Arduino resetet. Ergo geht auch die LED aus.

Ist es normal das der Arduino resetet wenn eine serielle Verbindung auf gebaut bzw geschlossen wird?
Wenn ja, kann man das verhindern?

Das Problem hatte ich mal mit einem LCD-Sketch der seriell mit Linux gequatscht hat... hat mich auch sehr aufgeregt, hab dann ein wenig gegoogelt und gefunden, dass das schließen der verbindung Einen Reset durchführt - und man einen Kondensator oder Widerstand(?) auf die seriellpins geben muss oder einen widerstand auslöten... ich bring es nichtmehr ganz zusammen, aber ich such morgen mal.

Habs gefunden:

http://arduino.cc/playground/Main/DisablingAutoResetOnSerialConnection

Wow... fast alles richtig gehabt: beim Diecemila reicht ein 120Ohm Widerstand, beim Uno ein 10µF Kondensator zwischen Reset und 5V bzw. Reset und Ground

Hey, vielen Dank. :smiley:
Kann es dadurch probleme geben wenn man neue Skaches hochläd?

Vor dem Hochladen musst du die umbauten wieder rückgängig machen - oder falls du dich zu der Brechstangenvariante den auslötens entscheidest - den reset drücken um hochzuladen. Das Prinzip des hochladens beim Arduino mach eben genau das: Er zieht den DTR auf Low um den Arduino zuresetten, läd hoch, resettet nochmal - beim auf- und abbau einer seriellen Verbindung wird der DTR ebenfalls auf Low gesetzt - und das unterdrückst du durch die Baumaßnahmen.

EDIT:
Bei der einfachen variante (Widerstand bzw. Cap) kannst du zusätzlich ja einen Schalter/Taster/Jumper in die Schaltung einbauen, der einfach die Druchleitung unterbricht.

Hab's grad mit nem 22µF Cap probiert, läuft!
Das mit dem Reseten hatte ich grad selbst gelesen, werde wohl zu einem Kippschalter greifen.

Liebe Grüße,
Valium