Go Down

Topic: Arduino und Python (Read 1 time) previous topic - next topic

Valium

Moin,

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

Code: [Select]
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. ._.

Code: [Select]
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


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.

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.


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


Valium


und was kommt an?


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

Valium

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?

Marcus W

#6
May 04, 2012, 01:12 am Last Edit: May 04, 2012, 09:22 am by Marcus W Reason: 1
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.

Marcus W

#7
May 04, 2012, 09:22 am Last Edit: May 04, 2012, 09:25 am by Marcus W Reason: 1
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

Valium


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. :D
Kann es dadurch probleme geben wenn man neue Skaches hochläd?

Marcus W

#9
May 04, 2012, 10:15 am Last Edit: May 04, 2012, 10:21 am by Marcus W Reason: 1
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.

Valium


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: Es benutzt das DTR um den Arduino zum Resetten zu bringen läd hoch, resettet nochmal - 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

Go Up