PHP Serial Communication

Mahlzeit...
Wollte man die Verbindung über Serial testen, dazu hab ich dieses Tutorial:
http://www.instructables.com/id/Control-an-Arduino-with-PHP/all/?lang=de

Funktioniert super wenn der Serial Monitor geöffnet ist, aber auch nur dann wenns geöffnet ist.
Habe es aufm Mac getestet. Gibt es ne Möglichkeit das ganze zu nutzen ohne den Serial Monitor vorher öffnen zu müssen?
Wenn ich den SM nicht öffne und im Browser ein Button betätige, blinkt auf Arduino eine LED kurz, als wenn man den SM öffnet.
Dann passiert aber nix mehr wenn man im Browser was drückt, die Seite wird ständig geladen.

Hats was mit dem Reset zu tun?Arduino Playground - DisablingAutoResetOnSerialConnection
Habs auch probiert, nix geändert.

Weiß keiner? :roll_eyes:

Habe aber auch ein anderes Problem, und zwar kommt dieses auf dem SM raus.

S Kommando empfangen, setze Pin 255 auf 255
Fehler, unbekanntes Kommando
S Kommando empfangen, setze Pin 255 auf 255
Fehler, unbekanntes Kommando

hier der php/html Code

 <?php
require("php_serial.class.php");
if (isset($_GET['action']))
{
$serial = new phpSerial;
$serial->deviceSet("/dev/tty.usbmodem1a1211");
$serial->confBaudRate(115200);
$serial->deviceOpen();
    if ($_GET['action'] == "greenon")
        {
        $serial->sendMessage("0");
        $done = false;
        $line = "";
                while (!$done)
                {
                $read = $serial->readPort();
                        for ($i = 0; $i < strlen($read); $i++)
                        {
                                if ($read[$i] == "\n")
                                {
                                $done = true;
                                echo "Response from Arduino: ".$line."\n";
                                $line = "";
                                }
                                else
                                {
                                $line .= $read[$i];
                                }
                        }
                }
        }        
        else if ($_GET['action'] == "greenoff")
        {
    $serial->sendMessage("S".chr(4).chr(5));
    }
        else if ($_GET['action'] == "redon")
        {
    $serial->sendMessage("2\r");
        $read = $serial->readPort();
        echo $read;
        }
        else if ($_GET['action'] == "redoff")
        {
    $serial->sendMessage("3\r");
    }
$serial->deviceClose();
}
 
 
?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Arduino Project 1: Serial LED Control</title>
</head>
<body>
 
<h1>Arduino Project 1: Serial LED Control</h1>
<p><a href="<?=$_SERVER['PHP_SELF'] . "?action=greenon" ?>">
Click here to turn pin13 on.</a></p>
<p><a href="<?=$_SERVER['PHP_SELF'] . "?action=greenoff" ?>">
Click here to turn pin13 off.</a></p>
<p><a href="<?=$_SERVER['PHP_SELF'] . "?action=redon" ?>">
Click here to turn the RED LED on.</a></p>
<p><a href="<?=$_SERVER['PHP_SELF'] . "?action=redoff" ?>">
Click here to turn the RED LED off.</a></p>
</body>
</html>

und hier der Sketch

int ledPin13 = 13; // the pin that the green LED is attached to
int ledPin12 = 12; // the pin that the red LED is attached to

void setup() {
  // serielle konsole öffnen (debug)
  Serial.begin(115200);
  pinMode(ledPin13, OUTPUT);  // initialize the green LED pin as an output
pinMode(ledPin12, OUTPUT);  // initialize the red LED pin as an output

}

void loop() {
   // see if there's incoming serial data:
   if (Serial.available() > 0) {
     
   char command =Serial.read();
   byte pinnumber =Serial.read();
   byte pinvalue =Serial.read();
   byte returnvalue = 0;

    //Kommando auswerten
    switch(command) {

    case 'S':
      Serial.print("S Kommando empfangen, setze Pin ");
      Serial.print(pinnumber);
      Serial.print(" auf ");
      Serial.println(pinvalue);
      pinMode(pinnumber,OUTPUT);
      digitalWrite(pinnumber,pinvalue);
      //gesetzten wert auch zurückliefern
      returnvalue=pinvalue;
      break;

    case 'R':
      returnvalue = digitalRead(pinnumber);
      Serial.print("R Kommando empfangen, lese Pin ");
      Serial.print(pinnumber);
      Serial.print(". Wert = ");
      Serial.println(returnvalue);
      break;

    default:
      Serial.println("Fehler, unbekanntes Kommando");    
      break;

    }  
   }
 }

Wenn ich “greenoff” sende, warum zeigt da Pin und Value 255 an und nicht 4 und 5?
Und wieso werden im SM 2 Zeilen aufeinmal ausgegeben?
Was mache ich falsch, im Sketch oder in php?

Alles klar, hat sich nun erledigt, lag an dieser Zeile:

 if (Serial.available() > 2) {

da werden wohl die bytes angegeben die kommen können.
Nun zeigt auch nur eine Zeile im SM an und auch richtig:

S Kommando empfangen, setze Pin 4 auf 5