<?php
 
/*
 
  irp_extxArduino - Example for irp_classes (https://github.com/msillano/irp_classes)
 
  Copyright (c) 2017 Marco Sillano.  All right reserved.
 
 
  This library is free software; you can redistribute it and/or
 
  modify it under the terms of the GNU Lesser General Public
 
  License as published by the Free Software Foundation; either
 
  version 2.1 of the License, or (at your option) any later version.
 
 
  This library is distributed in the hope that it will be useful,
 
  but WITHOUT ANY WARRANTY; without even the implied warranty of
 
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 
  Lesser General Public License for more details.
 
 
  You should have received a copy of the GNU Lesser General Public
 
  License along with this library; if not, write to the Free Software
 
  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
*/
 
// using 'PHP Serial extension' free: TX/RX to/from Arduino in php
 
// see  arduino/rawRxTx02.ino
 
function txArduino($raw)
 
  {
 
    $arduinocom = 'COM3'; // TODO: change here if required
 
    if (!ser_isopen())
 
        ser_open($arduinocom, 9600, 8, "None", "1", "None");
 
    //
 
    if (!ser_isopen())
 
      {
 
        echo "<div class=Error>";
 
        echo "ERROR: '.$arduinocom.' not open ";
 
        echo "</div>";
 
        exit;
 
      }
 
    echo '+++ from Serial: ' . ser_version() . '<br>';  // to verify 1000 bytes limits
 
    sleep(2);
 
    $fromarduino = '';
 
    // wait an 'A' from Arduino
 
    do
 
      {
 
        sleep(2);
 
        $fromarduino = ser_read(); // handshake
 
      } while (strpos($fromarduino, 'A') === false);
 
    //  echo 'start send <br>';
 
    // then send 'T' + data
 
    ser_write('T'); // command: T 
 
    sleep(1);
 
    ser_write($raw); // send data
 
  }
 
//  receive RAW fron Arduino
 
function rxArduino($protocol=NULL)
 
  {
 
    $arduinocom = 'COM3'; // TODO: change here if required
 
    if (!ser_isopen())
 
        ser_open($arduinocom, 9600, 8, "None", "1", "None");
 
    //
 
    if (!ser_isopen())
 
      {
 
        echo "<div class=Error>";
 
        echo "ERROR: '.$arduinocom.' not open ";
 
        echo "</div>";
 
        exit;
 
      }
 
    echo '+++ from Serial: ' . ser_version() . '<br>';
 
    sleep(2);
 
    $fromarduino = '';
 
    $RXstatus    = 0;
 
    // RX finite state Automata
 
    while (true)
 
      {
 
        sleep(2);
 
        switch ($RXstatus)
 
        {
 
            case 0: // waiting  'A'
 
                $fromarduino = ser_read();
 
                //              echo 'status 0, rx ='.$fromarduino.'<br>';
 
                if (strpos($fromarduino, 'A') === false)
 
                    break;
 
                $RXstatus = 1;
 
                break;
 
            case 1: // sends 'R' command
 
                ser_write('R');
 
                sleep(1);
 
                $fromarduino = ser_read();
 
                //              echo 'status 1, rx ='.$fromarduino.'<br>';
 
                $fromarduino = '';
 
                sleep(2);
 
                $RXstatus = 2;
 
                break;
 
            case 2: //collect all data    
 
                $fromarduino .= ser_read();
 
                //              echo 'status 2, rx ='.$fromarduino.'<br>';
 
                if (strpos($fromarduino, '}') !== false)
 
                  {
 
                    $RXstatus = 3; // end RAW
 
                    break;
 
                  }
 
                if (strpos($fromarduino, 'A') !== false)
 
                    $RXstatus = 0; // restart
 
                break;
 
            case 3: // done: format RAW and returns
 
                $s = strpos($fromarduino, '={'); // start RAW
 
                $e = strpos($fromarduino, '}'); // end RAW
 
                if ($e > $s)
 
                    return trim(substr($fromarduino, $s + 2, $e - $s - 2));
 
                $e = strrpos($fromarduino, '}');
 
                if ($e > $s)
 
                    return trim(substr($fromarduino, $s + 2, $e - $s - 2));
 
                $status = 0; // bad data, restart
 
        }
 
      }
 
  }
 
?>
 
 |