LusoRobótica - Robótica em Português
Software => C/C++ => Tópico iniciado por: m2snd em 03 de Outubro de 2011, 22:50
-
Sabem-me dizer o que está mal no código?
estou a tentar modificar este código:
http://arduino.cc/forum/index.php/topic,3674.msg28270.html#msg28270 (http://arduino.cc/forum/index.php/topic,3674.msg28270.html#msg28270)
O objectivo é, depois de fazer o UP no cliente, passados 4 segundos desligar sozinho, ou seja, HIGH passar a LOW, automaticamente passados os 4 segundos. O meu código é este:
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 1, 66 };
byte gateway[] = { 192, 168, 1, 254 };
byte subnet[] = { 255, 255, 255, 0 };
byte state1 = 0;
long end1;
int val = 0;
Server server(80);
byte sampledata=50;
//luzes da casa
int estore = 7;
String readString = String(30);
boolean luzCozinhaON = false;
void setup(){
Ethernet.begin(mac, ip, subnet);
pinMode (estore,OUTPUT);
Serial.begin(9600);
}
//--------------------------inicio codigo
void loop()
{
Client client = server.available();
if (client) {
while (client.connected()) {
if (client.available()) {
char c = client.read();
if (readString.length() < 30)
{
readString.concat(c);
}
Serial.print(c);
if (c == '\n') {
//---------------------------------
switch (state1) {
case 0:
Serial.print( val );
if (readString.substring(6,11) == "L7=UP")
{
digitalWrite (estore, HIGH);
end1 = millis () + 4000; // Activar for 4 segundos
state1 = 1;
}
break;
case 1:
if (end1 <= millis ()) {
digitalWrite (estore, LOW); // depois dos 4 segundos desligar
state1 = 0;
}
break;
}
//-----------------------------------------------------------------------------------------------
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();
client.println("<h1><center>CASA</center></h1>");
client.println("<font color='black'>");
client.println("<br />");
client.println("<form method=get name=LED><input type=submit name=L7 value=UP> Persiana<form>");
client.println("<form method=get name= LED><input type=submit name=L7 value=DOWN ><form>");
if (luzCozinhaON)
{
client.print("<font color='green' size='3'> UP");
}
else
{
client.print("<font color='red' size = '3'> DOWN");
}
client.println("<font color='black' <br /><br>");
//procedimento final
client.println("</body></html>");
readString="";
client.stop();
}
}
}
}
}
O que está acontecer, (tenho um led a testar o pino 7), ele acende quando clico no UP, mas decorrido o tempo, o led não desliga
-
Experimenta mudar o long para unsigned long, que é esse o tipo de dados para guardar o millis(), de resto parece estar certo.
Já agora, ele está a compilar ao teres a chamada á função com um espaço entre o nome e os parentises?
Cá para mim existe uma variavel com esse nome algures e ele só te está a dar um warning que o IDE do arduino não mostra e os () são ignorados pelo parser, por isso remove lá o espaço que nunca vi ninguem a chamar funções com um espaço pelo meio.
-
Refereste ao espaço entre o millis e o parenteses?ja retirei e modifiquei o long para unsigned long. Continua na mesma.....
-
Troca isto:
if (end1 <= millis ()) {
Por isto:
if( (millis() >= end1) ){
-
continua na mesma Senso...
Não sei onde estará o erro...testei o código que indiquei no link em cima e funciona....passados o tempo, o led desliga-se sozinho.
-
E não é isso que é suposto?
-
Não é isso....o que quero dizer é que o código que adaptei e o qual me estas a dar a ajuda, não esta a funcionar, ao contrario deste, http://arduino.cc/forum/index.php/topic,3674.msg28270.html#msg28270 (http://arduino.cc/forum/index.php/topic,3674.msg28270.html#msg28270), onde fui tirar a ideia...
-
FINALMENTE!!!! :D :D
Descobri qual era o problema!!!!
O browser precisa de uma actualização decorrido o tempo pretendido, então foi só acrescentar:
client.println("<META HTTP-EQUIV=REFRESH CONTENT=1;url=http://192.168.1.66/>");
E pronto, mais um passo adiante....obrigado senso e XicoMBD pela disponibilidade.....