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();
Tags:
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
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por