$retval = 0; $device = $argv[1]; $baudRate = 9600; $prompt = 'brightness>'; $port = new SerialPort(); try { $port->open($device); $port->setBaudRate($baudRate); $port->setFlowControl(SerialPort::FLOW_CONTROL_NONE); $port->setCanonical(false); $port->setVTime(0)->setVMin(0); $stdin = fopen('php://stdin', 'r'); print $prompt; while (FALSE !== ($line = fgets($stdin))) { if (preg_match('/^(?:quit|exit)/', $line)) { break; } $brightness = pack('C', (int) $line); $port->write($brightness); print $prompt; } fclose($stdin); } catch (Exception $e) { print 'exception occurred' . PHP_EOL; print $e->getMessage() . PHP_EOL; $retval = 2; } if ($port->isOpen()) { $port->close(); } exit($retval);
use PHPMake\SerialPort; /* シリアルポートを開きます */ $port = new SerialPort('COM3'); /* ボーレートを 9600 に設定します */ $port->setBaudRate(SerialPort::BAUD_RATE_9600); /* フロー制御は行いません */ $port->setFlowControl(SerialPort::FLOW_CONTROL_NONE); /* * データの読み込みにカノニカル入力モードを用いません。 * この設定では SerialPort::read() は * 最低1バイト読み込むまで呼び出し元に制御を戻しません。 */ $port->setCanonical(false)->setVTime(0)->setVMin(1); /* データを送信します。 */ $written = $port->write('hello'); /* * 最大256バイトまでデータを読み込みます。 * 上で行った読み込みタイムアウトの設定と合わせると、 * SerialPort::read() は次のように振る舞います。 * * - 最低1バイト読み込むまでブロックする * - 最大256バイト読み込む * * 実際に読み込まれたデータのサイズは * strlen($data) * などとして求められます。 */ $data = $port->read(256); $dataSize = strlen($data); var_dump($data);
if ($argc != 2) { print 'Usage: php ' . basename(__FILE__) . ' port_string' . PHP_EOL . ' port_string 接続するポート' . PHP_EOL; exit(1); } use PHPMake\SerialPort; $status = 0; $portString = $argv[1]; $port = new SerialPort(); $data = null; try { $port->open($portString); $port->setBaudRate(SerialPort::BAUD_RATE_9600)->setFlowControl(SerialPort::FLOW_CONTROL_NONE)->setCanonical(false)->setVTime(0)->setVMin(1); while ($data = $port->read(256)) { print 'data received.' . PHP_EOL; if ($data == '!!!') { print 'exit.' . PHP_EOL; break; } else { var_dump($data); print PHP_EOL; $port->write($data); } } } catch (Exception $e) { print $e->getMessage() . PHP_EOL; $status = 2; } if ($port->isOpen()) { $port->close(); } exit($status);
$filename = basename(__FILE__); print <<<EOU 使い方: php {$filename} port port arduino が接続されたポート EOU; exit(1); } use PHPMake\SerialPort; //$pins = array(chr(55), chr(56), chr(57), chr(58), chr(59), chr(60), chr(61)); $pins = array('7', '8', '9', ':', ';', '<', '='); $port = new SerialPort($argv[1]); $port->setFlowControl(SerialPort::FLOW_CONTROL_SOFT)->setBaudRate(SerialPort::BAUD_RATE_38400); $port->setCanonical(false)->setVTime(1)->setVMin(0); print 'arduino の準備を待っています '; while ($port->read(1) != '?') { print '.'; } print '準備完了' . PHP_EOL; $output = count($pins) . implode('', $pins); $port->write($output); $asc = true; $sig = '1'; while (true) { $sig = $asc ? '1' : '0'; foreach ($pins as $pin) { $port->write($sig . $pin); usleep(50000); } $asc = !$asc; }
<?php if ($argc < 2) { print 'Usage: php ' . basename(__FILE__) . ' port_string [message]' . PHP_EOL . ' port_string 接続するポート' . PHP_EOL . ' message 出力する文字列' . PHP_EOL; exit(1); } use PHPMake\SerialPort; $status = 0; $portString = $argv[1]; $message = $argc == 3 ? $argv[2] : "hello"; $port = new SerialPort(); try { $port->open($portString); $port->setBaudRate(SerialPort::BAUD_RATE_9600)->setFlowControl(SerialPort::FLOW_CONTROL_NONE)->setCanonical(false)->setVTime(1)->setVMin(0); while ($port->read()) { } // void the remain data print $port->read($port->write($message)) . PHP_EOL; } catch (Exception $e) { print $e->getMessage() . PHP_EOL; $status = 2; } if ($port->isOpen()) { $port->close(); } exit($status);