Pages: [1] 2   Go Down
Author Topic: Problemas com Arduino+PHP  (Read 4281 times)
0 Members and 1 Guest are viewing this topic.
Rondonia
Offline Offline
Newbie
*
Karma: 0
Posts: 27
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bom dia, estou tentando manipular o Arduíno pelo PHP, mas estou tento dificuldades, estou com um código que em vez de ligar o LED ele apenas dá uma piscada e só, e o código era para deixar o LED ligado, muito estranho, segue o código.

Code:
  <<Arduíno>>
int Pino = 13;
int usbnumber = 1 ;
 
void setup() {
    pinMode(Pino, OUTPUT); 
    Serial.begin(9600);
}
void loop() {
   if (Serial.available() > 0) {
        usbnumber = Serial.read();
   }
    if (usbnumber = '1') {
          digitalWrite(Pino, LOW); //desliga   
    }
    if (usbnumber = '2'){
          digitalWrite(Pino, HIGH); //liga
        }           

}

Code:
<<PHP>>

<?php 
 
$Porta 
"com4";
if (isset(
$_POST["rcmd"])) { 
    
$rcmd $_POST["rcmd"]; 
switch (
$rcmd) { 
    case 
"desliga"
$fp =fopen($Porta"w"); 
fwrite($fpchr(1));
fclose($fp); 
    break; 
   case 
"liga"
        
$fp =fopen($Porta"w"); 
fwrite($fpchr(2));  
fclose($fp); 
break; 
default:
    } 

?>

<html>
<head><title>Controle Arduino</title>
</head>
<body>
<div align="center">
<form method="post" action="<?php echo $PHP_SELF;?>">
    <p>
      <input type="submit" value="desliga" name="rcmd" height="10%">
    </p>
    <p>&nbsp;</p>
    <p><br/>
      <input type="submit" value="liga" name="rcmd"><br />
    </p>
    <p>&nbsp;</p>
    <p>&nbsp;</p>
    <body>
</form>
</div>
</center>
</body>
</html>

Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 28
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Amigo,
dentro do IF, você usou apenas um "=" ao invés de "==" para verificar a igualdade:

if (usbnumber = '1') {
          digitalWrite(Pino, LOW); //desliga  
}

Abraço
www.webtronico.com
Logged

Rondonia
Offline Offline
Newbie
*
Karma: 0
Posts: 27
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

infelizmente do mesmo geito.   smiley-roll
Logged

0
Offline Offline
Full Member
***
Karma: 4
Posts: 133
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

O problema no seu caso é o AUTO-RESET do Arduino, toda vez que é aberta a porta serial o chip FT232RL reseta o Arduino porque pode ser a IDE enviando um programa, e o LED que pisca não é o seu programa e sim o bootloader aguardando dados.
Siga as instruções aqui:
http://www.arduino.cc/playground/Main/DisablingAutoResetOnSerialConnection
e nos dê um retorno.



PS. Conte mais sobre seu projeto, é windows? XAMPP?
Logged

Rondonia
Offline Offline
Newbie
*
Karma: 0
Posts: 27
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bom vou contar sobre meu Projeto, Estou sou acadêmico do Curso de Sistemas de Informação, estou desenvolvendo meu TCC, nele irei fazer um sistema de automação residencial, com controle de temperatura, abertura de portas e portões, ligar dispositivos, luz etc.
Sou leigo no assunto, mas estou estudando o máximo possível, acredito que irá dar tudo certo. tenho até o mês de dezembro para concluir. Conto com Vocês.

Utilizo Windows, WAMPSERV, Arduino MEGA1280.
Logged

Forum Moderator
São Paulo/SP/Brazil
Offline Offline
Sr. Member
*****
Karma: 2
Posts: 305
Brazilian Arduino Team
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

infelizmente do mesmo geito.   smiley-roll
Jeito é com JOTA. Fazendo TCC o mínimo é escrever corretamente smiley-grin

O autoreset é correto, quando você abre a porta seu arduino reseta.

Tenta isso:
1) Use o fopen com "w+" ao invés de apenas "w".
2) Coloque um sleep de uns 2 segundos(que deve dar o tempo do seu arduino fazer o "reset") depois dos "fopen" no PHP.
Logged

Rondonia
Offline Offline
Newbie
*
Karma: 0
Posts: 27
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

É Wagner Sartori Junior, a correção ortográfica deu certo, smiley-lol smiley-lol smiley-lol, mas o código ficou do mesmo jeito. não desabilitei ainda o auto-reset, devido estou na duvida se utilizo o resistor 110ohms, ou mexer na trilha.
Logged

Forum Moderator
São Paulo/SP/Brazil
Offline Offline
Sr. Member
*****
Karma: 2
Posts: 305
Brazilian Arduino Team
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Eu não aconselho você a mexer no arudino(nem resistor nem cortar trilha). Toda vez que seu código abrir o serial com o arduino, ele será resetado. O sleep no PHP deveria resolver isto. Tente aumentar para 5 segundos.

Se não funcionar, precisa debugar, e aí fica mais complicado de explicar.

Comece vendo o CHR() no PHP que converte o ASCII code 1 para um caracter. Precisa ver a real necessidade disto. Tente tirar o CHR e ler do outro lado(no arduino) apenas o número 1(sem as aspas).

Outra coisa e colocar um LED e piscar ele em trechos do seu código para ver o que está acontecendo. Ou mesmo printar(Serial.println) coisas e ler o que está acontecendo. Tipo, imprima o caracter em HEXADECIMAL que vc está recebendo do PHP. Coloque depois do Serial.read um Serial.prinln(usbnumber, HEX).
Logged

Rondonia
Offline Offline
Newbie
*
Karma: 0
Posts: 27
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

aumentei o sleep para 5 e ficou do mesmo jeito, mas e esse esquema de debugar, como posso entender melhor.
Logged

Forum Moderator
São Paulo/SP/Brazil
Offline Offline
Sr. Member
*****
Karma: 2
Posts: 305
Brazilian Arduino Team
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Debugar é você saber exatamente o que está acontecendo em algum ponto do seu programa(valor de variáveis, conteúdo de memória, etc...). No arduino(entenda microcontroladores AVR com função debug), como você não tem um programador especializado com funções de debug, você vai precisar cuspir as saídas do que você quer para algum lugar. Pode ser um LED que pisca uma vez quando chega em um ponto do seu programa, duas vezes quando chega em outro e assim por diante.

Como ele está ligado via porta serial na sua máquina, recomendo fazer as saídas na porta serial. Leia mais sobre os métodos print() e println() do Serial:
http://arduino.cc/en/Serial/Print
http://arduino.cc/en/Serial/Println

Abrindo o "Serial Monitor" no IDE do Arduino, você consegue ver as saídas da porta serial, entretanto, o PHP vai "deixar" de funcionar porque você só pode abrir a porta serial em um software de cada vez.

Se você está tendo dificuldades, experimente os exemplos de serial que vem com o IDE do Arduino. O que você está tentando fazer não é coisa de "iniciante" é mais para médio/avançado, então recomendo ler mais e entender exatamente o que faz cada coisa que você está fazendo no seu programa.
Logged

0
Offline Offline
Full Member
***
Karma: 4
Posts: 133
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

kabixi, você costurou um monte de código junto e quer que rode de primeira?

Releia o que os colegas Webtronico e Wagner escreveram
consulte http://www.arduino.cc/en/Reference/HomePage.

Sugiro que consulte algum codigo já consagrado, como deste site:
http://blog.bsoares.com.br/php/controlling-arduino-with-php
e aí sim mudando uma parte por vez e testando. Compare com o seu código e veja onde errou.

Postar o seu código com as devidas alterações não seria correto pois o TCC perderia a função principal que é mostrar que aprendeu e também acaba com a graça do desafio.



   

Logged

Rondonia
Offline Offline
Newbie
*
Karma: 0
Posts: 27
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


não é que costurei o código, simplesmente o código era para ligar um LED RGB ai tirei os outros códigos e deixei apenas um, na teoria era pra funcionar normalmente.

ele até funciona, mas somente dá uma piscada.

esse blog do Bruno Soares já visitei imensas vezes, e as referencias também já conheço quase tudo, mas estou a procura ainda da solução, pois sei que para fazer tudo o que desejo fazer irei ter muito e muitos problemas, senão não terá graça ...

 smiley-cool
Logged

Sao Paulo
Offline Offline
Jr. Member
**
Karma: 0
Posts: 53
Arduino is perfect
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

kabixi: eu lembro que visitei esse forum mesmo que tu está tentando, apanhei muitooooooooooo pra conseguir, mas consegui...nao lembro qual era a zica nao, na verdade, a minha porta nao abria conexao...hahaha...em relação ao resistor de 110ohms, eu acho recomendavel voce mesmo montar um resistorzinho, ou pegar um potenciometro e achar 110ohms, nao aconselho mexer em absolutamente nada do arduino...

vou ver se faco essa semana essa mesma coisa que tu quer fazer, e ai faco algum tutorial se eu conseguir de novo...hahaha...usa windows ?linux ??(isso varia pra abrir a porta)

Abraços
Logged

Rondonia
Offline Offline
Newbie
*
Karma: 0
Posts: 27
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

To usando o Windows 7 Home Premium, WampServ.
Logged

0
Offline Offline
Full Member
***
Karma: 4
Posts: 133
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

E ai kabixi, nenhum progresso?
Veja, eu não tenho base nenhuma em php/html/mysql, instalei o XAMPP, joguei seu php lá e programei o arduino, em 5 min o código tava funcionando, para não ficar resetando o arduino, coloquei um resistor de 100 ohm entre o reset e 5V(era o que eu tinha) e retirei os sleep do php, ficou rápido...
Como não pode se perder  o desafio, vou postar as linhas que contém erros,

******************** Arduino:
int Pino = 13;
int usbnumber = 1 ;
 
void setup() {
    pinMode(Pino, OUTPUT); 
    Serial.begin(9600);
}
void loop() {
   if (Serial.available() > 0) {
        usbnumber = Serial.read();
   }
    if (usbnumber = '1') {
          digitalWrite(Pino, LOW); //desliga   
    }
    if (usbnumber = '2'){
          digitalWrite(Pino, HIGH); //liga
        }           

}

********************* PHP:
<?php
 
$Porta = "com4";
if (isset($_POST["rcmd"])) {
    $rcmd = $_POST["rcmd"];
switch ($rcmd) {
    case "desliga":
      $fp =fopen($Porta, "w");
      fwrite($fp, chr(1));
      fclose($fp);
    break;
   case "liga":
        $fp =fopen($Porta, "w");
      fwrite($fp, chr(2)); 
      fclose($fp);
      break;
      default:
    }
}
?>
<html>
<head><title>Controle Arduino</title>
</head>
<body>
<div align="center">
<form method="post" action="<?php echo $PHP_SELF;?>">
    <p>
      <input type="submit" value="desliga" name="rcmd" height="10%">
    </p>
    <p>&nbsp;</p>
    <p><br/>
      <input type="submit" value="liga" name="rcmd"><br />
    </p>
    <p>&nbsp;</p>
    <p>&nbsp;</p>
    <body>
</form>
</div>
</center>
</body>
</html>

Logged

Pages: [1] 2   Go Up
Jump to: