Piscar o led varias vezes com arduino ethernet shield

Ola,

Tudo bem? Se alguém souber como posso resolver este meu problema fico grato! Então vamos la:
Neste programa ao apertar o botão (via HTTP) gostaria que piscasse, no que montei somente esta piscando 6 vezes. Minha ideia seria que ele ficasse em loop ate interromper quando desejado.

#include <SPI.h>
#include <Ethernet.h>

// MAC address for shield
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
EthernetServer server(80); // Using port 80
int led = 9; // LED attached to pin 7
int val = 0;

void setup() {
pinMode(led, OUTPUT); // Led set as an output
Ethernet.begin(mac); // Start the Ethernet shield
server.begin();
Serial.begin(9600); // Start serial communication
Serial.println("Server address:"); // Print server address
// (Arduino shield)
Serial.println(Ethernet.localIP());
}
void loop() {
EthernetClient client = server.available();
if (client) {
boolean currentLineIsBlank = true;
String buffer = "";
while (client.connected()) {
if (client.available()) {
char c = client.read(); // Read from the Ethernet shield
buffer += c; // Add character to string buffer
// Client sent request, now waiting for response
if (c == '\n' && currentLineIsBlank) {
client.println("HTTP/1.1 200 OK"); // HTTP response
client.println("Content-Type: text/html");
client.println(); // HTML code
client.print("

Internet Controlled Led




");
client.print("

<INPUT type="submit" name="status" value="ON">");
client.print("

<INPUT type="submit" name="status" value="OFF">");
client.print("");
break;
}
if (c == '\n') {
currentLineIsBlank = true;
buffer = "";
}
else if (c == '\r') { // Command from webpage
// Did the on button get pressed
if (buffer.indexOf("GET /?status=ON") )
digitalWrite(led, LOW);
delay(500);
digitalWrite(led, HIGH);
delay(500);

    /*  // Did the off button get pressed
      if (buffer.indexOf("GET /?status=OFF"))
        digitalWrite(led, LOW);*/
 }
 else {
    
    currentLineIsBlank = false;
    }
  }
}
client.stop(); // End server

}
}

Olá,

Para ficar mais compreensível edita a tua mensagem anterior e coloca o teu programa entre um bloco de código. Basta colocar três acentos graves (`) seguidos antes e depois do código.

Quando detectas que o utilizador carrega num botão em vez de colocares o código para piscar o LED coloca uma variável de controlo. Depois, fora do bloco de processamento Ethernet, verifica essa variável de controlo e aí sim coloca o código para piscar o LED.

bool led_pisca = false;

void loop() {
  EthernetClient client = server.available();
  if (client) {
    boolean currentLineIsBlank = true;
    String buffer = "";
    while (client.connected()) {
      if (client.available()) {
        char c = client.read(); // Read from the Ethernet shield
        buffer += c; // Add character to string buffer
        // Client sent request, now waiting for response
        if (c == '\n' && currentLineIsBlank) {
          client.println("HTTP/1.1 200 OK"); // HTTP response
          client.println("Content-Type: text/html");
          client.println(); // HTML code
          client.print("<center><br><h1>Internet Controlled Led </h1><br><br><br><FORM>");
          client.print("<P> <INPUT type=\"submit\" name=\"status\" value=\"ON\">");
          client.print("<P> <INPUT type=\"submit\" name=\"status\" value=\"OFF\">");
          client.print("</FORM></center>");
          break;
        }
        if (c == '\n') {
          currentLineIsBlank = true;
          buffer = "";
        }
        else if (c == '\r') { // Command from webpage
          // Did the on button get pressed
          if (buffer.indexOf("GET /?status=ON") >= 0) {
            //digitalWrite(led, HIGH);
            led_pisca = true;
          }
          // Did the off button get pressed
          if (buffer.indexOf("GET /?status=OFF") >= 0) {
            digitalWrite(led, LOW);
            led_pisca = false;
          }
        }
        else {
          currentLineIsBlank = false;
        }
      }
    }
    client.stop(); // End server
  }
  
  // Verifica a variavel de controlo para piscar o LED.
  // Nota: usar a verificação de um timer ou contador em vez de usar
  // a funcao delay() para evitar bloquear o código.
  if (led_pisca) {
    digitalWrite(led, LOW);
    delay(100);
    digitalWrite(led, HIGH);
    delay(100);  
  }

}

MUITO OBRIGADO!!!! Ajudou muito.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.