collapse

* Links de Robótica

* Posts Recentes

Pendentes de compras colectivas por Hugu
[Hoje às 00:51]


Preços e fabricantes de pcb por vasco
[Ontem às 23:18]


Palavras Cruzadas por LVirtual
[Ontem às 20:54]


[Projecto] Bomba Airsoft por jm_araujo
[Ontem às 19:01]


Apresentação por Tech_JA
[23 de Setembro de 2017, 09:19]


Medir Agua que está no Poço por filjoa
[21 de Setembro de 2017, 20:58]


URGENTE - display de 7 segmentos com backpack por helderjsd
[20 de Setembro de 2017, 12:30]


Isaac Asimov - I, Robot por senso
[18 de Setembro de 2017, 03:41]


ic SL440 da Plessey? por senso
[16 de Setembro de 2017, 13:11]


Compra Colectiva RS-Amidata por brunus
[15 de Setembro de 2017, 22:31]

Autor Tópico: Ajuda com millis  (Lida 1179 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline m2snd

  • Mini Robot
  • *
  • Mensagens: 65
Ajuda com millis
« 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

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:

Código: [Seleccione]
#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
« Última modificação: 15 de Janeiro de 2012, 16:42 por Psycop »

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.390
  • Helpdesk do sitio
Re: Ajuda com millis
« Responder #1 em: 03 de Outubro de 2011, 23:01 »
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.
Avr fanboy

Offline m2snd

  • Mini Robot
  • *
  • Mensagens: 65
Re: Ajuda com millis
« Responder #2 em: 03 de Outubro de 2011, 23:25 »
Refereste ao espaço entre o millis e o parenteses?ja retirei e modifiquei o long para unsigned long. Continua na mesma.....

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.390
  • Helpdesk do sitio
Re: Ajuda com millis
« Responder #3 em: 03 de Outubro de 2011, 23:35 »
Troca isto:
Código: [Seleccione]
            if (end1 <= millis ()) {
Por isto:
Código: [Seleccione]
if( (millis() >= end1) ){
Avr fanboy

Offline m2snd

  • Mini Robot
  • *
  • Mensagens: 65
Re: Ajuda com millis
« Responder #4 em: 04 de Outubro de 2011, 00:02 »
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.

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.390
  • Helpdesk do sitio
Re: Ajuda com millis
« Responder #5 em: 04 de Outubro de 2011, 00:05 »
E não é isso que é suposto?
Avr fanboy

Offline m2snd

  • Mini Robot
  • *
  • Mensagens: 65
Re: Ajuda com millis
« Responder #6 em: 04 de Outubro de 2011, 00:13 »
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, onde fui tirar a ideia...

Offline m2snd

  • Mini Robot
  • *
  • Mensagens: 65
Re: Ajuda com millis
« Responder #7 em: 05 de Outubro de 2011, 15:37 »
FINALMENTE!!!!   :D  :D
Descobri qual era o problema!!!!
O browser precisa de uma actualização decorrido o tempo pretendido, então foi só acrescentar:

Código: [Seleccione]
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.....