Galera Estou com um problema no meu código como podem ver abaixo ele da essa mensagem alguém teria uma solução? 

Deixarei o código abaixo.

Código:

C_digo_Autentica__o_de_Login_e_senha.ino

Exibições: 388

Responder esta

Respostas a este tópico

olá Varley.

      Na linha 59 do seu código, "server" é declarado como um Ponteiro para um objeto "EthernetServer", como mostro na figura a seguir (seta verde na figura):

      E ele é só um Ponteiro, e nada mais que isso. Ou seja, pode ser usado para localizar objetos "EthernetServer", que nesta linha do código, ainda não existem. Mas na linha 68 (seta azul na figura anterior), dentro da função "iniciar_ethernet", o "new" cria um objeto "EthernetServer" e retorna um Ponteiro para este objeto (veja no código da biblioteca "Ethernet.h"). Então a partir daí, "server" (que é um Ponteiro!!!), está apontando um objeto real (que não tem nome, mas existe, pois foi criado pelo "new").

      No loop(),  vc está chamando o Método (nome fresco que se dá a uma função de uma classe) de nome "available". Ora, sabemos que basta usar o "." entre o nome do objeto e o nome do Método, para acessar esse Método. Porém, como eu disse antes, "server" não é o objeto, e sim o Ponteiro para este. Devido a isso, a sintaxe seria esta:

       EthernetClient client = (*server).available();

       Note que os parêntesis tem que ser obrigatoriamente usados, pois o operador "." tem precedência sobre o operador "*". Para simplificar a escrita da sintaxe, em C++   usa-se o operador "arrow" (seta, ou "->"), substituindo assim os parêntesis e o próprio operador "*". Ou seja:     (*server).   é o mesmo que   server->

       Dessa forma vc pode escrever assim que terá o mesmo resultado:

       EthernetClient client = server->available();

       No seu código basta usar uma forma ou outra. Na figura abaixo mostro o seu código para a primeira opção:

      E na próxima figura, o mesmo código usando a segunda opção:

      Qualquer uma das duas opções vai compilar sem erros, e resultam no mesmo código para o Arduino.

      Resumindo:  vc não pode escrever  "server.available()" como está no seu código original (na linha 333), pois "server" não é o objeto, mas sim o Ponteiro para o objeto.

      Abrçs,

      Elcids

Ah sim, esqueci de dizer:

      Apenas te mostrei como corrigir o erro de compilação, e também o motivo pelo qual este erro ocorreu.

      Mas não verifiquei se todo o seu código está consistente e se funciona (aí é com vc).

      Abrçs,

      Elcids

Fala Elcids blz?

Bom eu testei os dois métodos e o que funcionou 90% foi o "EthernetClient client = server->available();"

Eu entro no IP ele pede login e senha eu coloco as informações e ele abre a pagina web dos botões porém quando eu clico no botão para acionar a lampada a pagina fica carregando e depois cai quando eu dou F5 a pagina volta com o botão acionado e a lampada acende o mesmo se aplica ao desligar. 

Você por ter mais experiência claro sem abusar saberia a causa disso?

Boa noite Elcids bom quebrando um pouco a cabeça descobri aonde está acontecendo o problema fica na parte do "while" como mostra a imagem abaixo.

O que acontece é quando clico no botão para acionar a lâmpada ele aciona mas pagina demora pra responder as vezes ela cai ai eu atualizo ela volta e clico no botão para desligar ela demora ai desliga e cai.

eu mexi nessas chaves do "while" para poder chegar nesse resultado agora não sei mais o que pode ser :/ 

Bom tópico encerrado consegui resolver o problema somente comentei o "exec_ethernet();" do "void loop()" e tudo funcionou perfeitamente Obrigado Elcids pela ajuda ate agora.

olá Varley.

      Como eu te disse antes, eu só tratei de te mostrar o seu problema de compilação. Não analisei se havia um erro de lógica no seu programa (erro de lógica é outra coisa completamente diferente).

      Sim, eu percebi que provavelmente havia um erro de lógica no seu código. Mas achei melhor deixar vc resolver sozinho. Vou explicar porquê. Praticamente todo seu código se originou daquele que o Eduardo Henrique Marcondes mostrou, deste link:  codigo-base

      E o que tinha diferente no seu código era mínimo, justamente a parte de lógica na função "loop".  Assim, percebi que com um pouco mais de análise, vc iria resolver por conta própria.

     E legal que isso realmente aconteceu, que vc resolveu seu problema de lógica no código (embora tenha sido apenas o excesso da função "exec_ethernet" como vc disse, mas é um erro de lógica).

     E saliento mais uma vez: as duas formas que mostrei acima para acesso via Ponteiro, são absolutamente idênticas para o Compilador C++.  Apenas para nós seres humanos, é que pode parecer diferente. Mas são a mesma coisa. Alguns programadores preferem uma forma, outros preferem a outra. Eu por exemplo só uso a primeira, sem o "arrow", ou seja, prefiro e uso apenas o  "(*server)."  pois acho mais claro a utilização do Ponteiro. Mas cada um usa como melhor quiser.

     Aproveito para informar, que este seu tópico é o último tópico que participo aqui no LDG. Depois deste seu tópico, só irei complementar um ou dois tópicos de amigos que acabei ajudando mais diretamente fora do site, e apenas irei complementar esses tópicos para não ficarem sem conclusão.  Mas este seu tópico,  será efetivamente o último que participo, o tópico derradeiro.

     Assim, já aproveito e me despeço de vc.

     Abrçs

     Elcids

Olá, Elcids, até deletei minha resposta ao tópico logo que vi a sua, muito mais completa e exata. Não sabia dessa do ponteiro "arrow", aprendi(emos) muito. 

Fico(amos) muito tristes caso realmente deixe de participar desse grupo. As suas contribuições são maravilhosas, sentiremos muita falta.

Em nome de quem se beneficia com suas postagens (me incluo) gostaria de agradecer imensamente por cada postagem. Muito obrigado !!!

Não sei seus motivos, nem precisamos saber, já que é um trabalho voluntário, mas ficaríamos imensamente honrados se vc ficasse, ainda que com dedicação menor. Sua dedicação exemplar imagino que te toma um grande tempo. 

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço