PHP soros kommunikáció AVR-Board

Avatar
cstamas82
Újonc
Újonc
Hozzászólások: 9
Csatlakozott: 2009. szeptember 11. péntek, 6:00

PHP soros kommunikáció AVR-Board

Hozzászólás Szerző: cstamas82 »

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.
Avatar
cstamas82
Újonc
Újonc
Hozzászólások: 9
Csatlakozott: 2009. szeptember 11. péntek, 6:00

Máshogy

Hozzászólás Szerző: cstamas82 »

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
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Valószínű a fordító küld még egy üzenet végét (String végét) jelző 0-át is? :roll:
Avatar
cstamas82
Újonc
Újonc
Hozzászólások: 9
Csatlakozott: 2009. szeptember 11. péntek, 6:00

Ötlet

Hozzászólás Szerző: cstamas82 »

Kipróbáltam, hogy kicseréltem a 0 és 1 -et 1 és 2-re de a jelenség ugyanaz volt.
Avatar
DOGMAN
Chipgyilok
Hozzászólások: 293
Csatlakozott: 2006. augusztus 27. vasárnap, 6:00

Hozzászólás Szerző: DOGMAN »

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.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

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....
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Más:
Ez a „ledPin = 13” melyik kimenetet takarja?
Nem véletlenül a soros komunikácsió jelzésére van beépítve?
Mert akkor alappból felül írja a te rutinodat, és a villogássa nem azt jelzi, amire te gondolsz!
:?:
Avatar
Bence
Tranzisztorgyógyász
Hozzászólások: 166
Csatlakozott: 2007. október 30. kedd, 6:00

Hozzászólás Szerző: Bence »

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?
Bence
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Soros kommunikációs sebességbeli hiba. Esetleg nem a 9600,8,1,n módon van megnyitva...
Avatar
Bence
Tranzisztorgyógyász
Hozzászólások: 166
Csatlakozott: 2007. október 30. kedd, 6:00

Hozzászólás Szerző: Bence »

4800,8,1,n így van megnyitva PHP-ban is meg a Terminalban is.
Bence
Avatar
cstamas82
Újonc
Újonc
Hozzászólások: 9
Csatlakozott: 2009. szeptember 11. péntek, 6:00

Kipróbáltam

Hozzászólás Szerző: cstamas82 »

<?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.
Avatar
cstamas82
Újonc
Újonc
Hozzászólások: 9
Csatlakozott: 2009. szeptember 11. péntek, 6:00

Azt hiszem megvan

Hozzászólás Szerző: cstamas82 »

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.
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

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! :!:
Avatar
DOGMAN
Chipgyilok
Hozzászólások: 293
Csatlakozott: 2006. augusztus 27. vasárnap, 6:00

Hozzászólás Szerző: DOGMAN »

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! :!:
kipróbáltam:

Kód: Egész kijelölése

<?php 
$fp =fopen("test.adat", "w"); 
fwrite($fp, chr(1)); 
fclose($fp); 
?> 
megnézve hex editorban:
Kép
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Ezek szerint nem ASCII-kódot kapsz, mint a termináltól, hanem bináris értéket!
Arra kellene átírni a vevő részt is?
Még kíváncsi lennék „ABC,abc” karakterekre mit küld?
:?:
Válasz küldése