Pessoal,

Estou com um problema a dois dias já

e não sei como  resolver,

 

Fiz/Copiei o programa que monitora entradas analógicas e digitais do arduino

Agora preciso controlar as saídas

no projeto final, vou precisar de 4 botões, para 4 saídas, 

Quando aperto o botão, a respectiva saída se fecha por uns 4 ou 5 segundo e volta abrir,

Pra quem sabe, não deve ser tão impossível assim...

 

'Montei' o tal do WebServer, funcionou muito bem

*fora esse detalhe do botão

 

Aqui está o código

CodigoArduinoEthernet.txt

se puderem dar uma olhada e me ajudarem a resolver...

Fico muito agradecido!

 

João Azevedo

Exibições: 1251

Responder esta

Respostas a este tópico

é galera...

tá tenso...

 

Ler as entradas do arduino é tetinha,

agora alterar as saídas... Very Hard!

 

Alguém sabe algum método jiraya de fazer isso,

de preferência parecido com o método de leitura

valeu

João,

Não sei como funciona a shiel ethernet, mas creio que você consiga ler o conteúdo do post que o browser envia, não?
Daí é pegar o conteúdo e fazer um parsing das variáveis do post e ver quais saídas do arduino o usuário quer ativar.

Dá uma olhadinha nesse exemplo do Arduíno Playground. Acho que vai ajudar:

http://www.arduino.cc/playground/Code/WebServer

Alexandre,

 

Esse é o meu dilema...

como fazer isso...

 

minhas ultimas tentativas foram de criar um checkbox, e usar ele como essa variavel

 

na net eu só acho uns exemplos monstros, 

e no arduino.cc nao achei exemplo disso

cara, aqui um exemplo onde eu controlo o estado da saida digital 3 do arduino (faço acender um led)...

pra isso eu envio um GET acende3=1 ou acende3=0, exemplo

http://192.168.2.108:9100/?acende=1 (isso acende meu led):

 

 


#include <SPI.h>
#include <Ethernet.h>


byte mac[] = { 0x10, 0x1D, 0xC2, 0x3F, 0xBA, 0x56 };
byte ip[] = { 192,168,2, 108 };
int led3 = 0;

Server server(9100);//vou trabalhar na porta 9100, a minha 80 é ocupada

void setup()
{

  Ethernet.begin(mac, ip);
  server.begin();
  pinMode(3, OUTPUT);  
}

void loop()
{
  // listen for incoming clients
  Client client = server.available();
  if (client) {
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    String linha = "";
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        // if you've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so you can send a reply
       
       linha.concat(c);
        if (c == '\n' && currentLineIsBlank) {
          // headers pra permitir ajax crossdomain
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Server: Rafinho Arduino");
          client.println("Access-Control-Allow-Origin: *");
          client.println();

            //pega comandos get
            int inicioa3 = linha.indexOf('acende3=');
            inicioa3     = inicioa3+1;//pega o caractere seguinte
            int fima3    = inicioa3+1;//esse comando espero apenas 1 caractere
            String acende3 = linha.substring(inicioa3,fima3);//recupero o valor do comando
           
           
            if(acende3==1){
              digitalWrite(3, HIGH);
              led3=1;
            }
            if(acende3==0){
              digitalWrite(3, LOW);
              led3=0;
            }
           
           
            //client.print(acende3);
           
           
            client.print("led3=");
            //client.print(linha);
            //client.println(led3, DEC);
            client.print(led3, DEC);
          
         
          break;
        }
       
      }
    }
    // gambi pra dar um tempinho
    delay(1);
    // fecha a conexao:
    client.stop();
  }
}

 

eu tb nao achei exemplos bons prontos, entao eu fui pegando ideias aqui, pedaços de codigo ali... sem contar que as bibliotecas do arduino sofrem mudanças... o meu codigo funciona na versao 0022 ;)

 

 

minha aplicaçao esta online, caso tenha curiosidade de ver:

http://www.webwar.com.br/rafinho/

vou deixar no ar uns dias, se tudo der certo e nao der nenhum pau, deve ficar funcionando sem eu estar por perto, eheheh

ah, uma coisa que vc deve perceber ao ver o meu codigo é que eu nao fiz formulario, botoes nem nada no webserver arduino...

ele apenas "imprime" led3=0 ou led3=1 dependendo do estado do led

e ele recebe por querystring(GET) a acao, se vai acender ou apagar...

os botoes de controle eu fiz num webserver SEPARADO, que enviam, via ajax, a requisiçao com a querystring para mudança de estado do led...

fiz assim porque simplifica as coisas pro arduino, e fica mais facil pra gente programar :D... o unico "porem" disso é manter outro servidor, mas existem muitos servidores com hospedagem gratuita que se pode usar ;)

 

pra ver o codigo do servidor "externo" ao arduino, só visualizar o codigo fonte dessa pagina do webwar/rafinho ;)

Wagner,

Faz dias que estou pra te responder, mais preferi estudar um pouco mais antes de responder,

 

Descobri que o Shield que comprei vem com o chip ENC28J60, que é diferente do padrão do arduino

ai muda toda a estrutura e a bibliotecas, por isso não ia,

Apesar de esquentar bastante, Funciona, e isso é que importa

 

Consegui fazer "funcionar", já acesso ele pela rede

até ai "tranqüilo", 

 

Meu problema agora é outro,

agora vou ter que reaprender tudo,

Não consigo mais nem visualizar as entradas,

Não consigo manipular as saídas

Não consigo escrever uma grande quantidade de comandos HTML,

parece que é ela quantidade de caracteres, chega uma hora que para de funcionar...

ai eu comento as linhas de cima, as debaixo funcionam...

 

Continuo estudando pra fazer isso funcionar...

 

Obrigado!

 

 

poisé João... mesmo eu usando um baseado no WIZ5100, que é mais "padrao", eu tb tive problema em escrever "paginas" html por limitaçao mesmo, por isso eu decidi, no arduino, só tratar os dados vindos por clientes http, mas as "paginas" serem feitas em outro servidor

mais poxa vida!

 

HTML não ocupa nada, é só texto,

minha pagina é bem simples,

era só pra mostrar uma 4 entradas e alterar Duas Saídas...

Quando compila aparece: 

Binary sketch size: 5022 bytes (of a 30720 byte maximum)

então memória sobrando tem, 

já tentei alterar esse 

#define BUFFER_SIZE 500

na esperança... passei pra 5000, mais não mudou nada!

acabei de perceber que quando tem mais de um cliente conectado ao server do arduino, ele fica meio  "doidin", nao sabe pra quem entregar qual requisiçao, as vezes no browser imprime um monte d elixo e os headers...

e o pior de tudo é que eu falo que prefiro CLP comercial... (uso siemens)

tem gente que briga comigo...

que diz que arduino dá conta...

que funciona bem...

que não é difícil fazer...

 

Eu tô tentando!

Mais estou sobre a tênue linha do Arrependimento

tá bem foda fazer isso, e funciona quando quer!!!

 

bom, eu gosto pra caralho do Arduino, porque pro que eu vou usar ele é perfeito: um robo com 2 funções:

-cortador de grama autonomo

-patrulheiro controlado pela internet

 

desde que comecei a mexer com o shield ethernet eu percebi que ele tem limitaçoes severas, por isso eu pus a parte grossa do html e javascript num server externo, usando o shield pra pegar o get de comandos basicos:

acende=1 (o que esta de exemplo no ar faz so isso)

frente=1

velocidade=15

tras=1

direita=2

 

etc... vai ter um punhadinho de comandos que vão por querystring (mas por ajax pra ficar na pagina bonitinha)

 

 

a questao é que o proprio arduino "da conta" de fazer muita coisa...

"da conta" de fazer um webserver basico, mas as bibliotecas sao amadoras(ainda)... repara, o arduino tem um processador de 20 Mhz, basicamente o mesmo poder de fogo de um Palm IIIe...Isso não é pouco... tem maluco que fez até video-game nele com graficos a là SNES...

Repare na palavra "MALUCO"... Somos malucos que fazemos as coisas por fazer, pelo fazer, ja que pra comprar um SNES hoje em dia voce so precisa balançar uma nota de 50 reais.

 

enfim, tem coisa que é legal e barato fazer com Arduino... mas se é profissional e tem algo pronto que faça o serviço, po, nao faz sentido não tomar o atalho.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço