Finalmente está ae o post continuação do Arduino Ethernet Shield – Acender/Apagar mais de um Led [Parte 1] que vimos como acender mais de um led, porém alguns leitores não ficaram satisfeito e com razão, pois na Parte 1 poderíamos acender vários Leds ou dispositivos remotamente porem um de cada vez e não simultaneamente, agora na Parte 2 veremos como acionar um, dois, três ou quantos dispositivos no nosso caso Leds tiverem configurados, a idéia, circuito é a mesma, o que mudou foi a lógica do código no Arduino com Ethernet Shield.
O esquemático:
É o mesmo do anterior como podemos ver.
O código:
É aqui que ocorre toda a mudança. A lógica toda esta na string “?led=100
“, na Parte 1 esta lógica podeira ter 4 estados:
STRING | DEFINIÇÃO | SAIDA |
?led=000 | Todos os leds apagados | (Led1=0, Led2=0, Led3=0) |
?led=100 | Apenas o led1 ligado | (Led1=1, Led2=0, Led3=0) |
?led=010 | Apenas o led2 ligado | (Led1=0, Led2=1, Led3=0) |
?led=001 | Apenas o led3 ligado | (Led1=0, Led2=0, Led3=1) |
Isso porque usamos três leds, ou três quaisquer dispositivos acionado pelas portas do Arduino. Ok, beleza e agora pra acionar o primeiro e terceiro led ao mesmo tempo, sem ligar o segundo led? Teremos que fazer mais umas lógicas e aumentar as estruturas condicionais (if, else e/ou else if), vamos aos novos estados que vamos usar e entender cada um deles:
STRING | DEFINIÇÃO | SAIDA |
?led=000 | Todos os leds apagados | (Led1=0, Led2=0, Led3=0) |
?led=100 | Apenas o led1 ligado | (Led1=1, Led2=0, Led3=0) |
?led=010 | Apenas o led2 ligado | (Led1=0, Led2=1, Led3=0) |
?led=001 | Apenas o led3 ligado | (Led1=0, Led2=0, Led3=1) |
?led=110 | led1 e led2 ligado | (Led1=1, Led2=1, Led3=0) |
?led=101 | led1 e led3 ligado | (Led1=1, Led2=0, Led3=1) |
?led=011 | led2 e led3 ligado | (Led1=0, Led2=1, Led3=1) |
?led=111 | Todos os leds ligados | (Led1=1, Led2=1, Led3=1) |
Então agora temos todas as possibilidades, todos leds ligados, todos apagados, apenas cada um ligado e as combinações de led1, led2 e led3 alternando.
#include "ETHER_28J60.h" #include "etherShield.h" int PinoLed1 = 7; int PinoLed2 = 8; int PinoLed3 = 9; static uint8_t mac[6] = {0x54, 0x55, 0x4f, 0x11, 0x0f, 0x2b}; static uint8_t ip[4] = {192, 168, 0, 222}; static uint16_t port = 80; ETHER_28J60 server; void setup(){ server.setup(mac, ip, port); pinMode(PinoLed1, OUTPUT); pinMode(PinoLed2, OUTPUT); pinMode(PinoLed3, OUTPUT); } void loop(){ char* params; if (params = server.serviceRequest()){ server.print("Arduino Web 2.0"); server.print("</pre> <h1><a href="?led=000">Servidor Web Embarcado</a></h1> <pre> "); // LED1 ACENDE if (strcmp(params, "?led=100") == 0){ server.print("<a href="?led=000"><b>LED1 LIGADO</b> |</a>"); server.print("<a href="?led=110"> LED2 DESLIGADO |</a>"); server.print("<a href="?led=101"> LED3 DESLIGADO</a>"); digitalWrite(PinoLed1, HIGH); digitalWrite(PinoLed2, LOW); digitalWrite(PinoLed3, LOW); } // LED2 ACENDE else if(strcmp(params, "?led=010") == 0){ server.print("<a href="?led=110">LED1 DESLIGADO |</a>"); server.print("<a href="?led=000"> <b>LED2 LIGADO</b> |</a>"); server.print("<a href="?led=011"> LED3 DESLIGADO</a>"); digitalWrite(PinoLed1, LOW); digitalWrite(PinoLed2, HIGH); digitalWrite(PinoLed3, LOW); } // LED3 ACENDE else if(strcmp(params, "?led=001") == 0){ server.print("<a href="?led=101">LED1 DESLIGADO |</a>"); server.print("<a href="?led=011"> LED2 DESLIGADO |</a>"); server.print("<a href="?led=000"> <b>LED3 LIGADO</b></a>"); digitalWrite(PinoLed1, LOW); digitalWrite(PinoLed2, LOW); digitalWrite(PinoLed3, HIGH); } /* ################################ */ // LED1 e LED2 ACENDE else if(strcmp(params, "?led=110") == 0){ server.print("<a href="?led=010"><b>LED1 LIGADO</b> |</a>"); server.print("<a href="?led=100"> <b>LED2 LIGADO</b> |</a>"); server.print("<a href="?led=111"> LED3 DESLIGADO</a>"); digitalWrite(PinoLed1, HIGH); digitalWrite(PinoLed2, HIGH); digitalWrite(PinoLed3, LOW); } // LED2 e LED3 ACENDE else if(strcmp(params, "?led=011") == 0){ server.print("<a href="?led=111">LED1 DESLIGADO |</a>"); server.print("<a href="?led=001"> <b>LED2 LIGADO</b> |</a>"); server.print("<a href="?led=010"> <b>LED3 LIGADO</b></a>"); digitalWrite(PinoLed1, LOW); digitalWrite(PinoLed2, HIGH); digitalWrite(PinoLed3, HIGH); } // LED1 e LED3 ACENDE else if(strcmp(params, "?led=101") == 0){ server.print("<a href="?led=001"><b>LED1 LIGADO</b> |</a>"); server.print("<a href="?led=111"> LED2 DESLIGADO |</a>"); server.print("<a href="?led=100"> <b>LED3 LIGADO</b></a>"); digitalWrite(PinoLed1, HIGH); digitalWrite(PinoLed2, LOW); digitalWrite(PinoLed3, HIGH); } // APAGAR TODOS OS LEDS else if(strcmp(params, "?led=000") == 0){ server.print("<a href="?led=100">LED1 DESLIGADO |</a>"); server.print("<a href="?led=010"> LED2 DESLIGADO |</a>"); server.print("<a href="?led=001"> LED3 DESLIGADO</a>"); digitalWrite(PinoLed1, LOW); digitalWrite(PinoLed2, LOW); digitalWrite(PinoLed3, LOW); } // ACENDE TODOS OS LEDS else if (strcmp(params, "?led=111") == 0){ server.print("<a href="?led=011"><b>LED1 LIGADO</b> |</a>"); server.print("<a href="?led=101"> <b>LED2 LIGADO</b> |</a>"); server.print("<a href="?led=110"> <b>LED3 LIGADO</b></a>"); digitalWrite(PinoLed1, HIGH); digitalWrite(PinoLed2, HIGH); digitalWrite(PinoLed3, HIGH); } server.print(""); server.respond(); } }
O código acima foi compilado e gravado usando a IDE Arduino 1.0.1 e Arduino 1.0.3 ambas compilaram e gravaram com sucesso.
A biblioteca que usei foi a que esta no link abaixo:
http://www.4shared.com/zip/nkrw9SZE/ENC28J60.html
Agora usando o IP para o Ethernet Shield que está no código no meu caso 192.168.0.222, abra o navegador e digite este IP em seguida pressione enter, e a pagina web que esta no Arduino será carregada, abaixo segue duas imagens do teste do acesso dos botões e ações no Arduino:
No caso acionei dois leds via web, o led1 e o led3 e abaixo o print da ação do Arduino:
Fiz um vídeo também mostrando as ações aleatórios de ligar e desligar um ou mais de um led via web e o Arduino correspondendo.
Bom este foi um post que tive a obrigação de resolver, recebi vários comentários e até e-mails com duvidas sobre como fazer e esta ae, código e imagens, no fim é simples não? E este é o ultimo usando o Arduino UNO com Ethernet Shield sendo web server, pois ficamos limitados a enviar recursos devida a limitação.
Um post que verá em breve será usando o Arduino com o Ethernet Shield mas desta vez o web server será em um computador, sendo assim temos um leque maior que possibilidades e recursos como o uso de PHP, Python, Banco de Dados, CSS e scripts.
Para ir preparando o território recomendo a visualização dos dois posts sobre instalação de um Servidor web que postei recentemente, segue os links abaixo:
Instalando e configurando um servidor web para o Arduino – Parte1
Instalando e configurando um servidor web para o Arduino – Parte2
Espero que tenham gostado do post e que tire as duvidas de quem estava precisando.
Até a próxima!
Arduino – Acender/Apagar mais de um Led [Parte 2] by Cleiton Bueno is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.