Arduino Uno Serial - PHP communicatie

Status
Niet open voor verdere reacties.

bas1278

Gebruiker
Lid geworden
31 mrt 2009
Berichten
139
hallo allemaal!

Het is lang geleden dat ik op dit forum ben geweest, dus ik hoop dat ik mijn vraag nu op de goede plaats post.

Ik ben bezig om mijn Arduino Uno met mijn computer te laten communiceren, dit wil ik via mijn webserver doen met php. uiteindelijk wil ik het ledje op mijn arduino aan en uit laten gaan als ik dat op een webpagina aanklik. ik krijg mijn ledje (pin 13) wel aan (HIGH) maar niet meer uit (LOW). Zelf heb ik het gevoel dat hij naar 1 commando stopt met luisteren voor meer commando's maar ik heb nog niet uitgevonden wat ik verkeerd heb gedaan.

mijn code:

php:
PHP:
<?php

error_reporting(E_ALL); 
ini_set("display_errors", 1);  

if (isset($_GET['action'])) {

    require("php_serial.class.php");

        $serial = new phpSerial();
        $serial->deviceSet("COM4"); //communicatie poort
        $serial->confBaudRate(9600);
        $serial->deviceOpen();

if ($_GET['action'] == "led1") {

        $serial->sendMessage("0\r"); //led aan

} else if ($_GET['action'] == "led0") {

        $serial->sendMessage("1\r"); //led uit
}

$serial->deviceClose();

}
?>

<!DOCTYPE html>
<html>
<head>
<title>ARDUINO</title>
</head>
<body>
<h1> ARDUINO AND PHP COMMUNICATION </h1>

<a href="?action=led1">ON</a></br>
<a href="?action=led0">OFF</a></br>

</body>
</html>

en arduino code:
Code:
int ledPin = 13;
int incomingByte;

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

void loop()
{
  if(Serial.available() > 0){
    incomingByte = Serial.read();
 
    if(incomingByte == '0'){
      digitalWrite(ledPin, HIGH);
    }
    if(incomingByte == '1'){
      digitalWrite(ledPin, LOW);
    }
  }
}

Alvast bedankt voor de hulp!
 
Heb je via PHP al gechecked dat "0" ook gestuurd wordt? Is de "\r" nodig om de data te versturen? In principe moet dat niet heel veel uitmaken, maar je kunt eens proberen zonder.

Andere mogelijkheid zou kunnen zijn dat de seriele poort niet opnieuw op komt na de eerste keer. Is het nodig de seriele poort telkens te sluiten? heeft de serial class een "flush" methode om de buffer te forceren?

Je zou op de arduino eens de led kunnen laten knipperen telkens als er input binnen komt. Als na de eerste keer de arduino niet meer knippert is het probleem waarschijnlijk in PHP / seriële buffer.

edit:

uit de handleiding van die class (weet niet helemaal de context niet):

PHP:
var $autoflush = true;
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan