PHP soros kommunikáció AVR-Board
PHP soros kommunikáció AVR-Board
Vásároltam egy arduino (AVR Board) panelt. Írtam egy kis programot bele ami ha soros vonalon 1-t kap akkor egy led világít ha 0-t akkor elalszik. Rádugtam a gépemre és hyperterminállal felvettem vele a kapcsolatot és minden rendben működik. 1-re világít 0-ra elalszik.
int in = 0;
int ledPin = 13;
void setup() {
Serial.begin(9600); // opens serial port, sets data rate to 9600 bps
pinMode(ledPin,OUTPUT);
}
void loop() {
// send data only when you receive data:
if (Serial.available() > 0) {
// read the incoming byte:
in = Serial.read();
if(in==48){
digitalWrite(ledPin,LOW);
}
if(in==49){
digitalWrite(ledPin,HIGH);
}
}
}
Ezután csináltam egy kis PHP fájlt benne ezzel:
<?php
require("php_serial.class.php");
$serial = new phpSerial();
$serial->deviceSet("COM9");
$serial->confBaudRate(9600); //Baud rate: 9600
$serial->confParity("none"); //Parity (this is the "N" in "8-N-1")
$serial->confCharacterLength(8); //Character length
$serial->confStopBits(1); //Stop bits (this is the "1" in "8-N-1")
$serial->confFlowControl("none");
$serial->deviceOpen();
$serial->sendMessage('1');
?>
Hiába fut le csak 1 pillanatra villan fel a led majd elalszik.
int in = 0;
int ledPin = 13;
void setup() {
Serial.begin(9600); // opens serial port, sets data rate to 9600 bps
pinMode(ledPin,OUTPUT);
}
void loop() {
// send data only when you receive data:
if (Serial.available() > 0) {
// read the incoming byte:
in = Serial.read();
if(in==48){
digitalWrite(ledPin,LOW);
}
if(in==49){
digitalWrite(ledPin,HIGH);
}
}
}
Ezután csináltam egy kis PHP fájlt benne ezzel:
<?php
require("php_serial.class.php");
$serial = new phpSerial();
$serial->deviceSet("COM9");
$serial->confBaudRate(9600); //Baud rate: 9600
$serial->confParity("none"); //Parity (this is the "N" in "8-N-1")
$serial->confCharacterLength(8); //Character length
$serial->confStopBits(1); //Stop bits (this is the "1" in "8-N-1")
$serial->confFlowControl("none");
$serial->deviceOpen();
$serial->sendMessage('1');
?>
Hiába fut le csak 1 pillanatra villan fel a led majd elalszik.
Máshogy
Találtam egy máshogy megírt php programot:
<?php
require("php_serial.class.php");
$fp =fopen("com8", "w");
for ($i = 0; $i <= 3; $i++) {
fwrite($fp, chr(1));
sleep(3);
}
fclose($fp);
?>
Ez 4x felvillantja a LED-et. Mostmár csak azt nem értem, hogy miért nem marad égve ha 1x kiadom az 1-et úgy mint amikor hiperterminállal csinálom
<?php
require("php_serial.class.php");
$fp =fopen("com8", "w");
for ($i = 0; $i <= 3; $i++) {
fwrite($fp, chr(1));
sleep(3);
}
fclose($fp);
?>
Ez 4x felvillantja a LED-et. Mostmár csak azt nem értem, hogy miért nem marad égve ha 1x kiadom az 1-et úgy mint amikor hiperterminállal csinálom
Ötlet
Kipróbáltam, hogy kicseréltem a 0 és 1 -et 1 és 2-re de a jelenség ugyanaz volt.
Mivel négy 1-esre négyszer villan fel, ezért akkor mind a 4 esetben küld mást is nemcsak 1-est. Ezzel kizárható az, hogy a kapcsolat bezárása küld valami mást is.(fclose($fp);-re gondolok)
Vagyis biztos amit kapu48 mondott: a string kiküldésekor tesz hozzá valamit. PHP win alatt általában \r\n-t szokott linux meg csak \r-t.
Írd át a duinoban úgy a progit, hogy vágja le a bejövő stringek első karaterét, és csak azt értékeld ki.
Vagyis biztos amit kapu48 mondott: a string kiküldésekor tesz hozzá valamit. PHP win alatt általában \r\n-t szokott linux meg csak \r-t.
Írd át a duinoban úgy a progit, hogy vágja le a bejövő stringek első karaterét, és csak azt értékeld ki.
http://hu.php.net/fwrite
http://hu2.php.net/fclose
tedd file-ba, ne sorosportra.Így látod mi van benne...
Ill a sysinternals seialmon prg-jával monitorozd a portot....
http://hu2.php.net/fclose
tedd file-ba, ne sorosportra.Így látod mi van benne...
Ill a sysinternals seialmon prg-jával monitorozd a portot....
Sziasztok!
Kipróbáltam én is, úgy, hogy két soros portot összekötöttem, az egyikre PHP-val küldtem az adatokat, a másikat meg néztem Terminallal, így láttam, hogy a PHP mit küld. Erre jöttem rá: amikor 1-et küldtem akkor "±"-t kaptam. Ha "1234567890"-t küldtem, akkor ezt kaptam: "±˛3´56·¸90". Szóval volt olyan szám amit jól küldött el, volt amit nem. Ez miért van?
Kipróbáltam én is, úgy, hogy két soros portot összekötöttem, az egyikre PHP-val küldtem az adatokat, a másikat meg néztem Terminallal, így láttam, hogy a PHP mit küld. Erre jöttem rá: amikor 1-et küldtem akkor "±"-t kaptam. Ha "1234567890"-t küldtem, akkor ezt kaptam: "±˛3´56·¸90". Szóval volt olyan szám amit jól küldött el, volt amit nem. Ez miért van?
Bence
Kipróbáltam
<?php
$fp =fopen("COM8", "w");
fwrite($fp, chr(1));
fclose($fp);
?>
Ezzel a PHP kóddal kipróbáltam de a LED nem világított. Áttettem a 10-es kimenetre. Hiperterminállal továbbra is tökéletesen megy.
$fp =fopen("COM8", "w");
fwrite($fp, chr(1));
fclose($fp);
?>
Ezzel a PHP kóddal kipróbáltam de a LED nem világított. Áttettem a 10-es kimenetre. Hiperterminállal továbbra is tökéletesen megy.
Azt hiszem megvan
Kipróbáltam a soros port monitorozását és a char(1)-re én 01 küldök. char(9)-re 09 küldök. Ez volt az egyik hiba és valóban a 13 kimenet soros portot jelzi. Tehát eddig egyszer sem működött csak a soros port zavart meg.
kipróbáltam:kapu48 írta:Mivel még semmit nem tudunk a PHP-által átküldött adatok formátumáról, ezért ezt kellene valahogyan feltérképezni. Pl.: Ahogy Róbert javasolta File-be írás után valami Hex-editoral átnézni! Ha már tudnád milyen adatott kapsz, kitudnád értékelni!
Kód: Egész kijelölése
<?php
$fp =fopen("test.adat", "w");
fwrite($fp, chr(1));
fclose($fp);
?>

