ардуино уно + пхп +сом

Feika
Offline
Зарегистрирован: 29.03.2013

с пхп скрипти идут запросы на включения леда. 

он включаеться и выклюбчаеться нормально но как пытаемся прочитать состояния лета через пхп он перестает включаться и выключаться.

скечь

int led =13;
int usb ;
int w1 = 1;
int w2 = 3;
int temp = 0;
 
void setup() {
  pinMode(led, OUTPUT);
  Serial.begin(9600);
}
void loop() { 
  if (Serial.available() > 0) {
    usb = Serial.read();
  }
 
if (usb==1) {         //Если  1, включаем led
      digitalWrite(led, HIGH);
      temp = 1;
  } else if (usb==2) { //Если 2, выключаем led
      digitalWrite(led, LOW);
      temp = 2;
  }
 
 
    while (w1 <= w2) {
     Serial.println(temp);
     delay(100);
     w1++;
    }  
 
  
}
 
а вот код пхп
 
<?php
 
error_reporting(E_ALL); 
ini_set("display_errors", 1);  
 
if (isset($_GET['action'])) {
 
if ($_GET['action'] == "1") {
 
    require("php_serial.class.php");
        $serial = new phpSerial();
        $serial->deviceSet("COM3");
        //$serial->deviceSet("/dev/ttyACM0");
        $serial->confBaudRate(9600);
        $serial->deviceOpen("w+");
//sleep(2);
        $serial->sendMessage(chr(1));
        $serial->deviceClose();
print "poslal: ".$_GET['action'];
 
} else if ($_GET['action'] == "2") {
 
     require("php_serial.class.php");
        $serial = new phpSerial();
        //$serial->deviceSet("/dev/ttyACM0");
        $serial->deviceSet("COM3");
        $serial->confBaudRate(9600);
//sleep(2);
        $serial->deviceOpen("w+");
        $serial->sendMessage(chr(2));
        $serial->deviceClose();
print "poslal: ".$_GET['action'];
}
 
}
 
exec("mode COM3 BAUD=9600 PARITY=N data=8 stop=1 xon=off");
    //$fp = fopen ("/dev/ttyACM0", "w+");
    $fp = fopen ("COM3", "w+");
 
//exec("mode COM3 BAUD=9600 PARITY=N data=8 stop=1 xon=off");
    //$fpr = fopen ("COM3", "rb+");
 
if($_GET['action']==3)
{
    if (!$fp) {
       echo "Not open";
    } else {
        fwrite($fp, chr(1));
    }
    fclose($fp);
} elseif ($_GET['action']==4)
{
    if (!$fp) {
       echo "Not open";
    } else {
        fwrite($fp, chr(2));
    }
    fclose($fp);
} elseif ($_GET['action']==5)
{
    if (!$fpr) {
       echo "Not open";
    } else {
 
    while (fread($fpr, 1) != 0xA)
    {
        $a = fgets($fpr);
        echo $a;
    }
 
    }
    fclose($fpr);
}
 
?>
 
 
<!DOCTYPE html>
<html>
<head>
<title>ARDUINO</title>
</head>
<body>
 
<h1> php_serial.class.php </h1>
 
<a href="1.php?action=1">ON</a></br>
<a href="1.php?action=2">OFF</a></br>
 
 
<h1> fopen </h1>
 
<a href="1.php?action=3">ON</a></br>
<a href="1.php?action=4">OFF</a></br>
 
<h1> 4tenie iz arduino </h1>
 
<a href="1.php?action=5">polu4it</a></br>
 
</body>
</html>
 

тут 2 разных варианта передачи данных, первый на виндовсе не работает вообще на линуксе как-то пытаеться

помогите товарищи

Mbamba
Offline
Зарегистрирован: 18.06.2013

Это из-за того, что чертова ардуина перезагружается.

Когда получаете-принимаете данные, надо подключить конденсатор  между ресетом и землей.

А когда надо заливать скетч - конденсатор надо отключить.

Вот тут поподробнее http://www.arduino.ru/forum/apparatnye-voprosy/pitanie-arduino-perezagruzka-arduino

Feika
Offline
Зарегистрирован: 29.03.2013

а ели это дело все запустить через Ehternet модуль? это решит проблемму или там будут другие подводные камни?

igormwd
Offline
Зарегистрирован: 22.03.2013

у php вообще то большущие проблемы с COM портами (читайте документацию по php, даже почитайте readme вашего php_serial.class.php класса), на *nix еще как то более менее входящий/исходящий работают, а на Windows только помоему входящий возможен. Да и блин не дело это вообще скриптовыми языками с железом общаться!!!! вы бы еще драйвера на php попросили помочь написать...

ваш оптимальный выходной вариант - писать на c/c++/delphi прогу по общению с портом в роли "мостика"

Feika
Offline
Зарегистрирован: 29.03.2013

это понятно, есть идея по автоматизации процесса отопления но надо удаленно иногда смотреть что за данные дают датчики и посылать корректирующие данные на исполнение ардуине, вот и думал что php самый простой и правильный вариант, зашёл на страничку получил данные с ардуины и если что послал данные.

igormwd
Offline
Зарегистрирован: 22.03.2013

что же это за автоматизация где надо что то смотреть и делать...

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

igormwd пишет:

что же это за автоматизация где надо что то смотреть и делать...

проект называется сторож Петрович, звониш ему он смотрит манометры ( стучит по ним пальцем) и говорит чего видит, а ты ему гвоориш какой вентиль и куда на сколько градусов подкрутить... проблема видимо в том что Петрович на ПХП постоянно отвечает ПНХ :) гы гы