Offline
Jr. Member
Karma: 0
Posts: 85
|
 |
« on: March 21, 2013, 07:35:51 am » |
Bom dia a todos,
Estou com um arduino + ethernet shield + sensor + RTC, com isto jogo informações para a LAN e acesso via navegador com o ip local. Por enquanto apenas me aparecem o valor do relógio, do sensor e algumas variáveis, tudo funcionando corretamente. Estou querendo controlar a saída PWM, escolhendo valores entre 0 e 255 enviando a informação do navegador para o arduino, procurei exemplos, achei algumas coisas parecidas como ligar e desligar um led, mas com problemas no script não consegui rodar. É possível? se não for possível e fácil, poderia ser com valores fixos como 3 opções para o pwm tipo 10% 50% e 100%, ai vc clica em 10% e o led fica 10% em intensidade, clica em 100% e então ele fica em total intensidade. Próximo passo é tentar colocar todo isto na rede externa.
|
|
|
|
|
Logged
|
|
|
|
|
|
|
'round the world...
Offline
Edison Member
Karma: 21
Posts: 2388
|
 |
« Reply #2 on: March 21, 2013, 09:46:50 am » |
Acho que é bastante diferente... Para isso tens de colocar o Arduino como servidor (creio que já está...), servir uma página com uma form onde colocas o valor de PWM que queres e um botão. Quando clicares nesse botão, o teu browser vai enviar um pedido ao Arduino onde vai aparecer o valor da caixinha de texto e o Arduino pode usar isso para fazer o que pretendes. Que sabes de HTTP?
|
|
|
|
|
Logged
|
Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o. Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum). Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.
Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).
|
|
|
|
Offline
Jr. Member
Karma: 0
Posts: 85
|
 |
« Reply #3 on: March 21, 2013, 10:25:20 am » |
Morits, ja havia lido este tópico para ver se pescava algo, mas não é isto não... é exatamente o que o bubulindo relatou. Bubulindo, sim ja esta rodando e servindo uma página, os valores ja me aparecem lá.... pode ser assim como você falou aparecendo uma caixa de texto e digitando o novo valor mas pode ser tambem com botões com valores ja definidos, tipo variável teste se clicar no botão 1 a variavel teste é igual a 10, se clicar no botão dois teste = 20 e por ai vai... não sei nada de HTTP, mas a muito tempo atras utilizava editores do pacote office por exemplo e ficava editando os códigos com o que eu ia vendo não vou conseguir fazer então?
estou fuçando o pachube paralelamente a isto também.
|
|
|
|
« Last Edit: March 21, 2013, 10:50:51 am by lmeireles43 »
|
Logged
|
|
|
|
|
'round the world...
Offline
Edison Member
Karma: 21
Posts: 2388
|
 |
« Reply #4 on: March 21, 2013, 11:48:53 am » |
Dá para fazer... escrever HTML no Office e meter isso no microcontrolador é pedir sarilhos. Não faço ideia de como está feita a tua página e é-me mais simples meter o exemplo da caixa de texto que dos radio buttons, por isso vamos por aí primeiro. O código HTML dum formulário é algo assim: <form name="input" action="PWM.ino" method="get"> Valor: <input type="text" name="pwm"> <input type="submit" value="Submit"> </form> Obviamente que criares um javascript para limitar os caracteres para apenas dentro de 255 é preciso. Talvez seja possível fazer isso directamente no objecto. Depois, ao clicares no botão de submit, o browser vai contactar o Arduino e vai pedir pelo ficheiro PWM.ino. A extensão não importa minimamente, daí ter escolhido esta. O teu programa no Arduino tem então de, ao receber este pedido, fazer parsing do pedido para ver qual o valor atribuído à variável pwm. Sinceramente, não consigo imaginar qual seja o pedido do browser de cabeça, logo o ideal é adicionares no teu programa uma parte que deite para a porta série o que o browser pede para podermos ver e escrever uma função que pesque o valor do pwm. Se meteres aqui o teu código actual, creio que podemos ajudar um pouco mais. Eu tenho o meu shield ethernet empatado com uma aplicação para ver a hora a que passa o próximo autocarro. :$ LOL
|
|
|
|
|
Logged
|
Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o. Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum). Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.
Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).
|
|
|
|
Offline
Sr. Member
Karma: 4
Posts: 292
|
 |
« Reply #5 on: March 21, 2013, 11:57:40 am » |
Totalmente diferente! rs O que ocorre é que já tens o site a coletar informações do arduino e desejam o inverso, mandar do site para o arduino. Tenho este tutorial nos favoritos http://www.instructables.com/id/Arduino-Ethernet-Shield-Tutorial/?ALLSTEPS, mas creio que o bubulindo é muito mais apto a te responder 
|
|
|
|
|
Logged
|
|
|
|
|
'round the world...
Offline
Edison Member
Karma: 21
Posts: 2388
|
 |
« Reply #6 on: March 21, 2013, 12:19:57 pm » |
|
|
|
|
|
Logged
|
Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o. Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum). Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.
Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).
|
|
|
|
Offline
Sr. Member
Karma: 4
Posts: 292
|
 |
« Reply #7 on: March 21, 2013, 12:46:28 pm » |
já me deu vontade de comprar um ethernet para os meus arduinos rs
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Jr. Member
Karma: 0
Posts: 85
|
 |
« Reply #8 on: March 21, 2013, 02:12:10 pm » |
no inicio está assim: IPAddress ip(192,168,0,43); EthernetServer server(80); não fiz nenhuma página em html, apenas o host no arduino no caso o que eu quero mudar é a variavel que esta como pbranco e pazul no final logo eu abro o browse (IE) e digito 192.168.0.43 e me aparece as informações como abaixo: if (client) { Serial.println("new client"); boolean currentLineIsBlank = true; while (client.connected()) { if (client.available()) { char c = client.read(); Serial.write(c); if (c == '\n' && currentLineIsBlank) { client.print("Temperatura "); client.println(celsius);
client.print("Aquecedor "); client.println(estados[statusHeater]); client.print("Refrigerador "); client.println(estados[statusFan]); client.print("Relogio "); if (agora.hora <10) client.print("0"); client.print(agora.hora); client.print(":"); if (agora.minuto <10) client.print("0"); client.println(agora.minuto); client.print("Temperatura Max "); client.println(tempMax); client.print("Temperatura Min "); client.println(tempMin); client.print("Potencia Branco "); client.print(pbranco); client.println("%"); client.print("Potencia Azul "); client.print(pazul); client.println("%"); break; }
eu utilizo ele aqui if (agora.hora >= led_A_on && agora.hora < led_A_off) analogWrite(ledazul, Pazul); else { analogWrite(ledazul, 0); } if (agora.hora >= led_B_on && agora.hora < led_B_off) analogWrite(ledbranco, Pbranco); else { analogWrite(ledbranco, 0); }
ou seja se estiver na hora certa ele liga a luz com a potencia programada que é a Pazul e a Pbranco que estão definidas em int pbranco = 60; int pazul = 30; obs: pbranco e Pbranco são diferentes porque colocando 60 ele transforma em um numero que corresponde a 60% de 0 a 255 para o PWM no caso eu quero pelo HTTP uma caixa de testo onde eu posso escrever e modificar esse 60 e 30, exemplo quero que o o azul fique em 20 e nao 60, então digito 20 e clico no enviar
|
|
|
|
|
Logged
|
|
|
|
|
'round the world...
Offline
Edison Member
Karma: 21
Posts: 2388
|
 |
« Reply #9 on: March 22, 2013, 04:31:05 am » |
Já experimentaste mandar o código HTML que te deixei aqui?
E ver o que o browser faz quando carregas no botão submit?
|
|
|
|
|
Logged
|
Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o. Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum). Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.
Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).
|
|
|
|
Offline
Jr. Member
Karma: 0
Posts: 85
|
 |
« Reply #10 on: March 22, 2013, 07:21:01 am » |
Final de semana agora vou testar, porém onde coloco o código? creio que se abrir uma página em HTML e editar colocando o código ficaria lá bonitinho, mas como o arduino manda este código para abrir no browser?
|
|
|
|
|
Logged
|
|
|
|
|
'round the world...
Offline
Edison Member
Karma: 21
Posts: 2388
|
 |
« Reply #11 on: March 22, 2013, 07:31:33 am » |
Final de semana agora vou testar, porém onde coloco o código? creio que se abrir uma página em HTML e editar colocando o código ficaria lá bonitinho, mas como o arduino manda este código para abrir no browser?
if (client) { Serial.println("new client"); boolean currentLineIsBlank = true; while (client.connected()) { if (client.available()) { char c = client.read(); Serial.write(c); if (c == '\n' && currentLineIsBlank) { client.print("Temperatura "); client.println(celsius);
client.print("Aquecedor "); client.println(estados[statusHeater]); client.print("Refrigerador "); client.println(estados[statusFan]); client.print("Relogio "); if (agora.hora <10) client.print("0"); client.print(agora.hora); client.print(":"); if (agora.minuto <10) client.print("0"); client.println(agora.minuto); client.print("Temperatura Max "); client.println(tempMax); client.print("Temperatura Min "); client.println(tempMin); client.print("Potencia Branco "); client.print(pbranco); client.println("%"); client.print("Potencia Azul "); client.print(pazul); client.println("%"); //COLOCAS O CÓDIGO AQUI!! break; // <--------------Isto é para quê? }
|
|
|
|
|
Logged
|
Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o. Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum). Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.
Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).
|
|
|
|
Offline
Jr. Member
Karma: 0
Posts: 85
|
 |
« Reply #12 on: March 22, 2013, 10:45:00 am » |
Se eu tiver um tempinho testo ainda hoje, este break creio que deixei perdido pelo meio, não serve para nada
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Jr. Member
Karma: 0
Posts: 85
|
 |
« Reply #13 on: March 22, 2013, 01:48:07 pm » |
simplesmente colocar o código da este problema: expected primary-expression before "<" token
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Jr. Member
Karma: 0
Posts: 85
|
 |
« Reply #14 on: March 22, 2013, 02:24:00 pm » |
coloquei este código aqui na integra: #include <SPI.h> #include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //physical mac address byte ip[] = { 192, 168, 0, 43 }; // ip in lan //subnet mask EthernetServer server(80); //server port byte sampledata=50; //some sample data - outputs 2 (ascii = 50 DEC) int ledPin1 = 2; // LED pin 1 String readString = String(30); //string for fetching data from address boolean LEDON1 = false; //LED status flag
void setup(){ //start Ethernet Ethernet.begin(mac, ip); //Set pin 4 to output pinMode(ledPin1, OUTPUT);
//enable serial datada print Serial.begin(9600); } void loop(){ // Create a client connection EthernetClient client = server.available(); if (client) { while (client.connected()) { if (client.available()) { char c = client.read(); //read char by char HTTP request if (readString.length() < 30) { //store characters to string //-----readString.append(c); readString.concat(c); } //output chars to serial port Serial.print(c); //if HTTP request has ended if (c == '\n') { //lets check if LED should be lighted //------------LED 1 if (readString.substring(6,11) == "L1=ON") { digitalWrite(ledPin1, HIGH); // set the LED on LEDON1 = true; } else if (readString.substring(6,12) == "L1=OFF") { digitalWrite(ledPin1, LOW); // set the LED OFF LEDON1 = false; } // now output HTML data starting with standart header client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println(); //set background to yellow client.print("<body style=background-color:yellow>"); client.println("<h1>LED control</h1>"); client.println("<font color='black'>"); client.println("<br />");
//--------LED 1 CONTROLL-------- client.println("<form method=get name=LED><input type=submit name=L1 value=ON> LED 1<form>"); client.println("<form method=get name= LED><input type=submit name=L1 value=OFF ><form>"); if (LEDON1) { client.print("<font color='green' size='3'> ON"); } else { client.print("<font color='red' size = '3'> OFF"); } client.println("<font color='black' <br />"); client.println("</body></html>"); //clearing string for next read readString=""; //stopping client client.stop(); } } } } }
Funcionou perfeitamente, pagina em amarelo com boão liga e desliga.... porém quando eu copio a parte: client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println(); //set background to yellow client.print("<body style=background-color:yellow>"); client.println("<h1>LED control</h1>"); client.println("<font color='black'>"); client.println("<br />");
ele sai tudo escrito na página
|
|
|
|
|
Logged
|
|
|
|
|
|