Bom dia Pessoal. Estou fazendo a automação da minha casa, estou montando com interruptor touch, fazendo a programação em matriz, vou usar 3 arduinos mega se conectando via rede. Estou tendo um problema com parte da programação, parte dela esta abaixo, por exemplo eu digito no browser 192.168.0.150:8090/ligado=0f, todo este endreço eu preciso somente do valor digitado entre o sinal de igual(=) e a letra f, que á e posição da matriz onde se encontra a porta do rele, até ai tudo bem, o valor é extraído. O problema é que ele faz isso 10 vezes, ou seja liga/deliga o rele 10 vezes sempre, coloquei várias condicionais para fazer uma so fez mas não esta dando certo. Se alguém puder me ajudar eu ficaria muito agradecido



#include <SPI.h>
#include <String.h>
#include <Ethernet.h>
byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x9B, 0x36 }; // Endereço Mac
byte ip[] = { 192, 168, 0, 150 }; // Endereço de Ip da sua Rede
EthernetServer server(8090); // Porta de serviço
String readString;
String HoraLiga;
int rele[] =  {6,7};
boolean statusrele[] = {1,2};
int relecont = 2;
void setup()
{
  Ethernet.begin(mac, ip); // Inicia o Ethernet
   Serial.begin(9600); // Inicia a comunicação Serial
 
  for (int i = 0; i < relecont; i++)
  {
    pinMode(rele[i],OUTPUT);
    digitalWrite(rele[i],HIGH);
    statusrele[i] = false;
   }

}
void loop()
{
 
 EthernetClient client = server.available();// Criar uma conexão de cliente
 if (client)
 {
  while (client.connected())
  {
    if (client.available())
    {
      char c = client.read();
     
        if (readString.length() < 30)// ler caractere por caractere vindo do HTTP
        {       
           readString += (c);
      }
        if (c == '\n')
        {
          if(readString.indexOf("ligado") > 0)
          {
            int posIgual = readString.indexOf("=") + 1;
            int posE = readString.indexOf("f");
            int horaliga;
         
            HoraLiga = readString.substring(posIgual,posE);
            horaliga = HoraLiga.toInt();
          
            digitalWrite(rele[horaliga], !statusrele[horaliga]);
            statusrele[horaliga] = !statusrele[horaliga];
       
            
            Serial.print(horaliga);
            
            delay(200);
            readString="";
             
            client.stop();
         

Exibições: 426

Responder esta

Respostas a este tópico

Boa tarde!

O problema pode estar no IF

if (c == '\n')

Você tem que testar se chegou no fim do request. Use uma variável para testar se se chegou no fim da requisição.

Aqui tem um exemplo de como fazer isso:

http://blog.filipeflop.com/arduino/tutorial-ethernet-shield-w5100.html

Repare na variável currentLineIsBlank

Caro Jose deu certo. Vamos ver se voce pode me ajudar em mais uma coisa. Eu preciso acertar a comunicao entre 3 placas de arduino, eu gostaria de fazer via ip. Cada um com seu ethernet shied. Por exemplo esse arduino que foi configurado eu digito o comando no browser e ele fazer o comando. O que eu gostaria de fazer agora seria substituir o browser e fazer com que outro arduino faca o comando. Exemplo porta 5 recebeu pulso entao envia 192.168.0.150:8090/0f, ou seja conforme a porta ele enviaria determinada inforamacao, estou me batendo um pouco nisso.

Angelo, bom dia!

Sugiro então que encerre este tópico colocando a palavra [RESOLVIDO] na frente do título e abra outro com essa nova dúvida.

Outros colegas podem ter a mesma dúvida e isso facilitará as pesquisas no fórum.

Descreva com detalhes o seu problema

Abraço,

José Cintra

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço