Forum: Mikrocontroller und Digitale Elektronik Python_Arduinoausgänge_steuern


von Javir (Gast)


Lesenswert?

Hallo zusammen,

ich versuche die Arduinoausgänge über python zu steuern. Nun weiß ich 
nicht, wieso es bei Code1 funktionieret und bei Code 2 nicht. Der 
einzige Underschied ist, dass ich im ersten Code '1' eingeben muss. Ich 
hoffe ihr Könnt damit unterstützen.

ps: das ist mein erster Code in Python und Deutsch ist ne Fremdsprache 
für mich.

Danke


Code1
1
import serial #Serial imported for Serial communication
2
import time #Required to use delay functions
3
4
ArduinoSerial = serial.Serial('com42',9600)
5
time.sleep(0.5)
6
7
def steuerung(eingabe):
8
9
     if (eingabe == '1'):
10
          ArduinoSerial.write(str.encode('A'))
11
          time.sleep(0.5)
12
          print (" LED is on")
13
14
     elif (eingabe == 'a'):
15
          ArduinoSerial.write(str.encode('a'))
16
          time.sleep(0.5)
17
          print ("led is off")
18
          
19
     else :
20
          ArduinoSerial.write(str.encode('0'))
21
          time.sleep(0.5)
22
          print ("led is off")     
23
  
24
while 1:
25
     
26
   #print ("write 1 to turn lauterbach on or 2 to turn XeTK on and press 'enter' ")
27
   Anweisung = raw_input()
28
   steuerung(Anweisung)




Code2
1
import serial #Serial imported for Serial communication
2
import time #Required to use delay functions
3
4
ArduinoSerial = serial.Serial('com42',9600)
5
time.sleep(0.5)
6
7
def steuerung():
8
9
10
          ArduinoSerial.write(str.encode('A'))
11
          time.sleep(0.5)
12
          print (" LED is on")
13
14
15
16
steuerung()

von Günni (Gast)


Lesenswert?

Muss in der Zeile
elif (eingabe == 'a')
nicht statt 'a' analog zur if-Abfrage
elif (eingabe == '2')
stehen?

von nicht"Gast" (Gast)


Lesenswert?

Moin,

ich tippe auf einen Mischmasch an Tabs und Leerzeichen. Theoretisch 
sollte es nämlich funktionieren.


Gibts eine Fehlermeldung oder geht die LED nur nicht an?

Grüße,

von Ben S. (bensch123)


Lesenswert?

nicht"Gast" schrieb:
> ich tippe auf einen Mischmasch an Tabs und Leerzeichen. Theoretisch
> sollte es nämlich funktionieren.

Und genau deswegen ist das angeblich leichte Python für mich kein ernst 
zu nehmender Kandidat. Was hat sich der Erschaffer der Sprache bei 
diesem Blödsinn nur gedacht?

Ich habe keine Ahnung von Arduino, aber ich dachte immer ARduino hat 
einen Atmega oder STM32 als Basis? Wie kann man und warum sollte man da 
mit Python "programmieren"? Klingt eher nach Arduino mit nem raspberry 
pi oder cython🙄

Klärt mich mal auf, da ist mir google zu schade für.

von nicht"Gast" (Gast)


Lesenswert?

@Ben,

na so schwer ist das nicht. Offensichtlich will der TE den Arduino nicht 
selber programmieren, sondern vom PC aus ansteuern. Auf dem Arduino 
läuft ein Programm, dass die Kommandos über die serielle entgegen nimmt 
und dann die Ports schaltet.

von Jack V. (jackv)


Lesenswert?

nicht"Gast" schrieb:
> ich tippe auf einen Mischmasch an Tabs und Leerzeichen.

Zumindest im geposteten Code ist das okay.

Ben S. schrieb:
> Was hat sich der Erschaffer der Sprache bei
> diesem Blödsinn nur gedacht?

Was dir nicht gefällt, ist also Blödsinn. Nun ja …

von Franz (Gast)


Lesenswert?

>Ich habe keine Ahnung von Arduino,
So ist es.
> aber ich dachte immer ARduino hat einen Atmega oder STM32 als Basis?

Du musst eher umgekehrt fragen, für welchen Prozessor gibt es kein 
Arduino-Framework.
Hier ein Liste mit Prozessorangabe der offiziellen Arduino Boards:
https://de.wikipedia.org/wiki/Liste_von_Arduino-Boards

von Günter Lenz (Gast)


Lesenswert?

von nicht"Gast" schrieb:
>Offensichtlich will der TE den Arduino nicht
>selber programmieren, sondern vom PC aus ansteuern. Auf dem Arduino
>läuft ein Programm, dass die Kommandos über die serielle entgegen nimmt
>und dann die Ports schaltet.

Also gibt es zwei Programme, einmal auf dem PC und
ein Programm auf den Arduino, und beide müssen
fehlerfrei sein, damit es funktioniert. Man könnte
erst mal zwei PCs mit einem 0-Modemkabel verbinden
um zu sehen was Python da sendet. Dann könnten die
beiden Programme auch noch fehlerfrei sein, aber
die Kabelverbindung einen Fehler haben.

von Franz (Gast)


Lesenswert?


von Javir (Gast)


Lesenswert?

nicht"Gast" schrieb:
> Offensichtlich will der TE den Arduino nicht selber programmieren,
> sondern vom PC aus ansteuern

Genauso will ich machen. Wieso macht sich hier jeder lustig, fasse ich 
wirklich nicht.

Beim ersten Code ist die LED an und funktioniert wie erwartet. Beim 
zweiten Code wird " LED is on" auf der console angezeigt.
Rx-LED am Arduino wird auch an. Ausser LED am Board.

von 900ss (900ss)


Lesenswert?

Franz schrieb:
> für welchen Prozessor gibt es kein Arduino-Framework

Das gibt es sogar für einen SPARC V8 :)
http://navspark.mybigcommerce.com/navspark-gl-arduino-compatible-development-board-with-gps-glonass/

Und es gibt auch noch MicroPython, was direkt auf einem Mikrocontroller 
läuft.

Aber das hat sich ja inzwischen alles geklärt.

von Klaus (Gast)


Lesenswert?

Zurück zum Thema

Wird Dir beim Start das Python Programmes Code2 auch die print Ausgabe 
angezeigt? Wird also komkret die Funktion steuerung() tatsächlich 
aufgerufen?

von Yalu X. (yalu) (Moderator)


Lesenswert?

Den einzigen wesentlichen Unterschied sehe ich darin, dass die zweite
Variante das Zeichen schon 0,5 s nach dem Programmstart sendet, während
die erste erst auf eine Benutzereingabe wartet. Kann es sein, dass über
irgendeinen Mechanismus beim Start des Pythonprogramms der Arduino
resettet wird und 0,5 s danach noch nicht bereit ist, Zeichen zu
empfangen? Funktioniert die zweite Variante, wenn du vor dem Senden des
Zeichens einen weiteren Sleep von 10 s einfügst?

von Klaus (Gast)


Lesenswert?

Mist nicht richtig gelesen. Oben schreibt Javir ja, dass die Print 
Ausgabe kommt (und die EmpfangsLED auch was bekommt.
Damit riecht es tatsächlich eher nach einem Problem, das nicht 
unmittelbar am Python Code liegt.
(Timing, Zustände des Arduino....)

Ist das Senden einer '0' aus dem else zweig von Code1 ggf wichtig?
Muss der Arduino erst in einen entsprechenden Zustand?
Ich würde das tatsächlich mal mit einem Terminal Programm probieren und 
die Signale per Hand senden.

von Rolf M. (rmagnus)


Lesenswert?

Javir schrieb:
> Beim ersten Code ist die LED an und funktioniert wie erwartet. Beim
> zweiten Code wird " LED is on" auf der console angezeigt.
> Rx-LED am Arduino wird auch an. Ausser LED am Board.

Am besten könntest du dir mit einem zweiten seriellen Port mal mitlesen, 
was genau da gesendet wird. So auf den ersten Blick gibt's ja eigentlich 
keinen Unterschied. Du könntest auch mal ein flush() nach dem write() 
machen.

Ben S. schrieb:
> nicht"Gast" schrieb:
>> ich tippe auf einen Mischmasch an Tabs und Leerzeichen. Theoretisch
>> sollte es nämlich funktionieren.
>
> Und genau deswegen ist das angeblich leichte Python für mich kein ernst
> zu nehmender Kandidat.

Weil man dort kaputte Einrückung vermeiden muss? Da ich sowieso immer 
vernünftig einrücke, ist dieses "Problem" für mich nicht existent.

> Ich habe keine Ahnung von Arduino, aber ich dachte immer ARduino hat
> einen Atmega oder STM32 als Basis? Wie kann man und warum sollte man da
> mit Python "programmieren"? Klingt eher nach Arduino mit nem raspberry
> pi oder cython🙄
>
> Klärt mich mal auf, da ist mir google zu schade für.

Verstehe. Du willst es zwar gerne wissen, bist aber sogar noch zu faul, 
das mal in Google einzugeben…

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.