Muschda
Posts: 1
Joined: Thu Jan 11, 2018 8:16 pm

Langsame Reaktion PHP->Python->Serial->Arduino

Thu Jan 11, 2018 9:30 pm

Hallo,

ich habe folgendes auf die Beine gestellt:
Apache2 Server auf dem RPI über den PHP Dateien aufgerufen werden, welche wiederum Python Dateien aufrufen, welche Daten Seriell an den Arduino Übertagen. Dieser Steuert über Ausgänge einen LED-Streifen.

Bei Rot und Grün geht der Streifen Sofort aus und nach ca. 2s geht die gewünschte Farbe an. Der Browser Lädt dabei ca 1s.
Bei Aus geht der Streifen Sofort aus und der Browser Lädt auch ca 1s.
Bei Blau passiert nichts und der Browser Lädt nur ca 100ms.

Warum Passiert bei Blau überhaupt nichts?
Liegt es am Puffer? Wenn ja bitte ich um einen Lösungsvorschlag.
Kann mir jemand eine Seite zeigen bei der "advanced" Arduino Befehle erklärt werden, weil bei Arduino/Reference
(https://www.arduino.cc/reference/en/) werden nur die Basic Befehle erklärt bzw. gezeigt.
Und warum Geht der Streifen immer Sofort aus aber erst kurze Zeit darauf wieder an?


index.html:

Code: Select all

<!DOCTYPE html>
<html lang="de">

<head>
	<title>	LED-Streifen </title>
	<meta charset="utf-8">
	<link href="style.css"
	rel="stylesheet" type="text/css">
</head>

<body>
	<button OnClick="location.href='startgruen.php'"> LED-Streifen Grün </button>
	<button OnClick="location.href='startrot.php'"> LED-Streifen Rot </button>
	<button OnClick="location.href='startblau.php'"> LED-Streifen Blau </button>
	<button OnClick="location.href='stopalles.php'"> LED-Streifen AUS </button>
</body>

</html>


startgruen.php:

Code: Select all

<?php
shell_exec("sudo python /home/pi/server/startgruen.py");
header("Location:index.html");
?>


startgruen.py:

Code: Select all

import serial
import time

s = serial.Serial('/dev/ttyACM0' , 9600)
s.isOpen()
time.sleep(1)
s.write("0,255,0")


Relevanter Arduino Sketch:

Code: Select all

void loop(){
  if (Serial.available()) {
     r = Serial.parseInt();
     g = Serial.parseInt();
     b = Serial.parseInt();
   
analogWrite(R, r);
analogWrite(G, g);
analogWrite(B, b);
  }
}
Danke für alle Antworten
MFG Muschda

User avatar
mline
Posts: 1048
Joined: Sun Jan 27, 2013 1:47 pm
Location: Austria, Vienna

Re: Langsame Reaktion PHP->Python->Serial->Arduino

Fri Jan 12, 2018 7:22 am

Muschda wrote:
Thu Jan 11, 2018 9:30 pm
Warum Passiert bei Blau überhaupt nichts?
Muschda wrote:
Thu Jan 11, 2018 9:30 pm
startgruen.php:

Code: Select all

<?php
shell_exec("sudo python /home/pi/server/startgruen.py");
header("Location:index.html");
?>
startgruen.py:

Code: Select all

import serial
import time

s = serial.Serial('/dev/ttyACM0' , 9600)
s.isOpen()
time.sleep(1)
s.write("0,255,0")
Der Inhalt von startblau.php bzw. startblau.py wäre hier wohl interessanter. Oder steht da das selbe drinn wie beim grünen?

Auf jeden Fall fehlt im python Script ein

Code: Select all

s.close()
am Ende womit du die serielle Schnittstelle die du geöffnet hast auch wieder sauber schliesst.
Muschda wrote:
Thu Jan 11, 2018 9:30 pm
Warum Passiert bei Blau überhaupt nichts?
Liegt es am Puffer? Wenn ja bitte ich um einen Lösungsvorschlag.
Leider hab ich keine Idee was du mit "Puffer" meinst.
Muschda wrote:
Thu Jan 11, 2018 9:30 pm
Kann mir jemand eine Seite zeigen bei der "advanced" Arduino Befehle erklärt werden, weil bei Arduino/Reference
(https://www.arduino.cc/reference/en/) werden nur die Basic Befehle erklärt bzw. gezeigt.
Auf dieser Seite werden schon alle Befehle beschrieben die vom Arduino unterstützt werden. Alles was darüber hinaus geht muss per Library hinzugefügt werden.
Welche "advanced Befehle" hättest du denn gerne oder besser: was sollen die genau machen?
Muschda wrote:
Thu Jan 11, 2018 9:30 pm
Und warum Geht der Streifen immer Sofort aus aber erst kurze Zeit darauf wieder an?
Ich habe da schon eine Vermutung. Bei vielen Arduino Boards wird beim Öffnen der seriellen Schnittstelle am PC ein Reset am Arduino ausgelöst. Damit startet dein Programm neu, alle GPIOs am Arduino werden in den Urzustand (alles Input) zurückgesetzt, dann erst wird wieder setup() und danach loop() ausgeführt.
Du kannst das ja überprüfen indem du die LED auf Pin 13 ganz am Ende der Routine setup() im Sketch einschaltest. Geht diese aus und wieder an, weißt du das der Arduino neu gestartet wurde.

Prüf das erstmal, dann sehen wir weiter :)
<~~>

Return to “Deutsch”

Who is online

Users browsing this forum: No registered users and 2 guests