-
Notifications
You must be signed in to change notification settings - Fork 1
/
WebServerDoJeComTemp.pde
157 lines (135 loc) · 5.36 KB
/
WebServerDoJeComTemp.pde
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
/*
* Web Server com ativação de LED e exibição da temperatura ambiente
* Autor: Jeronimo Avelar Filho - jeronimo@blogdoje.com.br
* www.blogdoje.com.br
* Baseado no exemplo WebServer da versão 0018 da IDE Arduino e no exemplo
* do blog http://www.scienceprog.com/getting-hands-on-arduino-ethernet-shield/
* Alterado em 11/05/2011 por Jeronimo:
* Atualização para o ambiente Arduino 0022
* - Utilização do objeto String no lugar da library WString.h
* - Inclusão de bibliotecas necessárias para o funcionamento da library Ethernet.h
*/
#include <Client.h>
#include <Ethernet.h>
#include <Server.h>
#include <Udp.h>
#include <SPI.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 169, 1, 201 };
Server server(80);
int conta_caracter=0 ;
int max_linha = 80 ;
String linha_de_entrada = String(max_linha) ;
int ledPin = 4 ;
boolean LEDON = false ;
float temperatura ;
float r1 = 10000.0 ; // valor da resistencia
// fixa do divisor de tensão
void setup()
{
pinMode(ledPin, OUTPUT) ;
Serial.begin(9600) ;
Ethernet.begin(mac, ip);
server.begin();
digitalWrite(ledPin,LOW) ;
}
void loop()
{
Client client = server.available();
if (client) {
// an http request ends with a blank line
boolean current_line_is_blank = true;
conta_caracter=0 ;
linha_de_entrada="" ;
while (client.connected()) {
if (client.available()) {
// recebe um caracter enviado pelo browser
char c = client.read();
// se a linha não chegou ao máximo do armazenamento
// então adiciona a linha de entrada
if(linha_de_entrada.length() < max_linha) {
linha_de_entrada.concat(c) ;
}
// Se foi recebido um caracter linefeed - LF
// e a linha está em branco , a requisição http encerrou.
// Assim é possivel iniciar o envio da resposta
if (c == '\n' && current_line_is_blank) {
// envia uma resposta padrão ao header http recebido
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();
// começa a enviar o formulário
client.print("<html>") ;
client.print("<body>");
// le sensor de temperatura , ele fornece uma resistencia
// que é função da temperatura
int analogValue = analogRead(0);
temperatura = converteTemp( analogValue) ;
client.println("<h2>TEMPERATURA AMBIENTE</h2><hr/>");
client.println(temperatura) ;
client.println("<br>") ;
client.println("<h2>CONTROLE DO LED</h2><hr/>");
client.println("<form method=get name=LED>") ;
client.println("LIGA <input ") ;
// verifica o status do led e ativa o radio button
// correspondente
if(LEDON) {
client.println("checked='checked'") ;
}
client.println("name='LED' value='ON' type='radio' >");
client.println("DESLIGA <input ") ;
if(!LEDON) {
client.println("checked='checked'") ;
}
client.println("name='LED' value='OFF' type='radio' >");
// exibe o botão do formulário
client.println("<br><br><br><input type=submit value='ATUALIZA'></form>") ;
client.println("<br><font color='blue' size='3'>Acesse <a href=http://www.blogdoje.com.br/>www.blogdoje.com.br</a>");
client.println("</body>") ;
client.println("</html>");
break;
}
if (c == '\n') {
// se o caracter recebido é um linefeed então estamos começando a receber uma
// nova linha de caracteres
// os codigos de impressão abaixo são para depuração e visualizar no monitor serial
// o que está chegando do browser
Serial.print(linha_de_entrada.length()) ;
Serial.print("->") ;
Serial.print(linha_de_entrada) ;
// Analise aqui o conteudo enviado pelo submit
if(linha_de_entrada.indexOf("GET") != -1 ){
// se a linha recebida contem GET e LED=ON enão guarde o status do led
if(linha_de_entrada.indexOf("LED=ON") != -1 ){
digitalWrite(ledPin,HIGH) ;
LEDON=true ;
}
if(linha_de_entrada.indexOf("LED=OFF") != -1 ){
// se a linha recebida contem GET e LED=OFF enão guarde o status do led
digitalWrite(ledPin,LOW) ;
LEDON=false ;
}
}
current_line_is_blank = true;
linha_de_entrada="" ;
} else if (c != '\r') {
// recebemos um carater que não é linefeed ou retorno de carro
// então recebemos um caracter e a linha de entrada não está mais vazia
current_line_is_blank = false;
}
}
}
// dá um tempo para o browser receber os caracteres
delay(1);
client.stop();
}
}
float converteTemp( int av) {
// determina a resistencia do sensor
float r = (av * r1 ) / ( 1023 - av) ;
r = r / 1000.0 ;
// calcula a temperatura com base equação cubica
// deduzida a partir dos dados da curva do fornecedor
float t = 73.5923087897328 - (7.55658933843571 * r) + (0.310715305324934 * r * r ) - ( 0.00459929744270984 * r * r * r) ;
return t ;
}