Boa noite pessoal!

Estou tentando fazer uma aplicação para controle do sentido de rotação de um motor 12v através de uma pagina WEB o código php é o seguinte:

<?php

$sock = socket_create(AF_INET, SOCK_STREAM, \SOL_TCP);
// Se conecta ao IP e Porta:
socket_connect($sock,"192.168.1.4",8081);

// Executa a ação correspondente ao botão apertado.
if(isset($_POST['bits'])) {
$msg = $_POST['bits'];
if(isset($_POST['Esquerda' ])){ if($msg[0] === '1') { $msg[0]='0'; } else { $msg[0]='1'; }}
if(isset($_POST['Direita'])){ if($msg[1]=='1') { $msg[1]='0'; } else { $msg[1]='1'; }}

socket_write($sock,$msg,strlen($msg));
}

socket_write($sock,'R#',2); //Requisita o status do sistema.

// Espera e lê o status e define a cor dos botões de acordo.
$status = socket_read($sock,6);
if (($status[4]=='M')&&($status[5]==='#')) {
if ($status[0] === '0') {
$cor1 = lightcoral;
} else {
$cor1 = lightgreen;
}

if ($status[1] == '0') {
$cor2 = lightcoral;
} else {
$cor2 = lightgreen;
}

echo "span class="t70igc" id="t70igc_4">form method =\"post\" action=\"teste.php\">";
echo "<input type=\"hidden\" name=\"bits\" value=\"$status\">";
echo "span class="t70igc" id="t70igc_3">button style=\"width:70; background-color: $cor1 ;font: bold 14px Arial\" type = \"Submit\" Name = \"Esquerda\">Esquerda</button></br></br>";
echo "<button style=\"width:70; background-color: $cor2 ;font: bold 14px Arial\" type = \"Submit\" Name = \"Direita\">Direita</button></br></br>";

echo "</form>";
}
// Caso ele não receba o status corretamente, avisa erro.
else { echo "Falha ao receber status do Motor"; }
socket_close($sock);
?>

</body>
</html>

e o do arduino é o seguinte:

include <SPI.h>
#include span class="t70igc" id="t70igc_12">Ethernet.h>

//Configurações do Ethernet Shield
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192,168,1, 4 }; // ip que o arduino assumirá
byte gateway[] = { 192,168,1, 1 }; // ip do roteador
byte subnet[] = { 255, 255, 0, 0 };

char Motor[6] = "0000M";
char Direita[7] = "0000M#";
char Esquerda[8] = "0000M#";
int D0 = 10;
int D1 = 6;
EthernetServer server(8081); // Cria o servidor na porta 8081

char msg[7] = "0000M#";

void setup() {

Ethernet.begin(mac, ip, gateway, subnet);
server.begin();
pinMode(D0,OUTPUT);
pinMode(D1,OUTPUT);

}

void loop() {

EthernetClient client = server.available();

// SE receber um caracter...
if (client) {
// guarda o caracter na string 'msg'
msg[1]=msg[2]; msg[2]= msg[3]; msg[3]=msg[4];msg[4]=msg[5];msg[5]=msg[6];msg[6]=msg[7];msg[7]=msg[8];
msg[8]=client.read();

if (msg[4]=='#') {
switch(msg[5]) {
case 'R':
// Se receber o comando 'R#' envia de volta o status dos
// motores. (Que é a string 'Motor')
client.write(Motor);
break;
case 'D':
// Caso Gire para direita
digitalWrite(D0,HIGH);
delay(2000);
digitalWrite(D0,LOW);
delay(2000);
break;
case 'E':
// Caso gire para esquerda.
digitalWrite(D1,HIGH);
delay(2000);
digitalWrite(D1,LOW); 
delay(2000); 
break;
case 'M':

Direita[0]=msg[1];//1=esquerda 0=direita
Esquerda[1]=msg[2];
if (Motor[0]=='1') digitalWrite(D0,HIGH); else digitalWrite(D0,LOW);
if (Motor[1]=='0') digitalWrite(D1,HIGH); else digitalWrite(D1,LOW);

break;

}
}
}
}

quando mando executar a pagina PHP aparece o seguinte erro:

Warning: socket_connect(): in C:\xampp\htdocs\Motor\controle.php on line 13

Warning: socket_write(): in C:\xampp\htdocs\Motor\controle.php on line 25

Warning: socket_read(): in C:\xampp\htdocs\Motor\controle.php on line 28

tenho q fazer esta aplicação até quarta dia 31/04, alguem pode me socorrer? o que esta errado sou meio leigo em programação WEB

Exibições: 636

Responder esta

Respostas a este tópico

Posta o arquivo "controle.php", para visualizar o todo.

Mas a princípio, está alertando para o uso sem verificar a inicialização do objeto $sock...

OK! como disse sou leigo em prog.WEB como verifico a inicialização, to no trampo assim q chegar em casa posto o arquivo

segue o arquivo controle.php

Anexos

Esta é uma extensão que foi movida...

Qual sua versão do php?

versão 5.5.11

Conheço php há um bom tempo, mas nunca trabalhei com sockets...

Mas aproveitando sua dúvida fui a trás para aprender...

Os exemplos mais novos com relação a este assunto, está relacionado ao "fsockopen".

Dê uma olhada neste link http://www.php.net/manual/pt_BR/function.fsockopen.php.

agora apareceu outro erro
Warning: fsockopen(): in C:\xampp\htdocs\TCCII\controle.php on line 10
Uma tentativa de conexão falhou porque o componente conectado não respondeu corretamente após um período de tempo ou a conexão estabelecida falhou porque o host conectado não respondeu. (10060)

o codigo PHP ficou assim:

<?php
$fp = fsockopen("controle.php", 8081, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
$out = "GET / HTTP/1.1\r\n";
$out .= "Host: http://localhost/TCCII/controle.php/index.php\r\n";
$out .= "Connection: Close\r\n\r\n";

fwrite($fp, $out);
while (!feof($fp)) {
echo fgets($fp, 128);

$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
// Se conecta ao IP e Porta:
$sock = socket_connect($sock,"192.168.1.4",8081);

// Executa a ação correspondente ao botão apertado.
if(isset($_POST['bits'])) {
$msg = $_POST['bits'];
if(isset($_POST['Esquerda' ])){ if($msg[0] === '1') { $msg[0]='0'; } else { $msg[0]='1'; }}
if(isset($_POST['Direita'])){ if($msg[1]=='1') { $msg[1]='0'; } else { $msg[1]='1'; }}

socket_write($sock,$msg, strlen($msg));
}

socket_write($sock,'R#',2); //Requisita o status do sistema.

// Espera e lê o status e define a cor dos botões de acordo.
$status = socket_read($sock,6);
if (($status[4]=='M')&&($status[5]==='#')) {
if ($status[0] === '0') {
$cor1 = lightcoral;
} else {
$cor1 = lightgreen;
}

if ($status[1] == '0') {
$cor2 = lightcoral;
} else {
$cor2 = lightgreen;
}

echo "<form method =\"post\" action=\"teste.php\">";
echo "<input type=\"hidden\" name=\"bits\" value=\"$status\">";
echo "<button style=\"width:70; background-color: $cor1 ;font: bold 14px Arial\" type = \"Submit\" Name = \"Esquerda\">Esquerda</button></br></br>";
echo "<button style=\"width:70; background-color: $cor2 ;font: bold 14px Arial\" type = \"Submit\" Name = \"Direita\">Direita</button></br></br>";

echo "</form>";
}
// Caso ele não receba o status corretamente, avisa erro.
else { echo "Falha ao receber status do Motor"; }
socket_close($sock);
}
fclose($fp);
}
?>

</body>
</html>

Nas pesquisas que fiz, algumas dicas diz respeito a porta usada "8081".

Sugestões: usar a 8080, ou verificar se tem permissão via roteador para usar outra porta.

tentei a porta 8080 e nada . ta osso!

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço