boa noite amigo alguém poderia me ajudar por favor!, colocar um delay após a ativação do relé, e logo na sequência desativar o mesmo. para que ele trabalhe na forma de pulso. #include
#include
#include
#include
//Define o Mac Address da placa de rede. Essa informação pode ser encontrada em uma etiqueta colada embaixo da mesma.
byte mac[] = { 0x90, 0xA2, 0xDA, 0x0E, 0xA1, 0x5C };
//Define o IP da placa. Caso necessário altere o mesmo para se adequar a sua rede.
IPAddress ip(192, 168, 0, 90);
EthernetServer server(80);
File webFile;
//na linha de baixo está sendo definido as portas em que o módulo relé serial está conectado.
SerialRelay relays(8, 9, 3); // (pino de data, pino de clock, quantidade de módulos)
#define REQ_BUF_SZ 60
char HTTP_req[REQ_BUF_SZ] = {0};
char req_index = 0;
int estado_botao[41];
char * pch;
void setup()
{
//ESTADO INICIAL DOS BOTOES 0 -> desligado, 1 -> ligado:
estado_botao[1] = 0;
estado_botao[2] = 0;
estado_botao[3] = 0;
estado_botao[4] = 0;
estado_botao[5] = 0;
estado_botao[6] = 0;
estado_botao[7] = 0;
estado_botao[8] = 0;
estado_botao[9] = 0;
estado_botao[10] = 0;
estado_botao[11] = 0;
estado_botao[12] = 0;

Serial.begin(9600);
Serial.println("Inicializando cartao microSD...");
if (!SD.begin(4)) {
Serial.println("ERRO - inicializacao do cartao falhou!");
return;
}
Serial.println("SUCESSO - cartao microSD inicializado.");
if (!SD.exists("index.htm")) {
Serial.println("ERRO - index.htm nao foi encontrado!");
return;
}
Serial.println("SUCESSO - Encontrado arquivo index.htm.");
Ethernet.begin(mac, ip);
server.begin();
}
void loop()
{
EthernetClient client = server.available(); //verifica se existe alguém querendo se conectar
if (client) { // existe cliente?
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) { // Existe informacao vinda do cliente
char c = client.read(); // Le cada byte enviado pelo cliente, ou seja, cada caracter.
// Por padrao, o ultimo caracter enviado pelo cliente (nosso navegador) é em branco e termina com \n
// Dessa forma conseguimos saber se o cliente acabou de enviar informacoes para o servidor (Arduino)
if (req_index < (REQ_BUF_SZ - 1)) {
HTTP_req[req_index] = c; // salva os caracteres das solicitacoes do browser
req_index++;
}
if (c == '\n' && currentLineIsBlank) {
// envia para o cliente o protocolo padrao de sucesso HTTP
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println();

//caso a request seja pela ação de um botão:
if (StrContains(HTTP_req, "ajax_botao")) {
for (int i = 1 ; i <= 40 ; i++) { //Serial.println(HTTP_req); char botao[] = "botaoxx"; if (i < 10) { botao[5] = '0'; botao[6] = '0' + i; } else { botao[5] = '0' + (i / 10); botao[6] = '0' + (i % 10); } //Serial.println(botao); if (StrContains(HTTP_req, botao)) { SetBotao(i, client); } } } else { // grava no arquivo webFile a página que temos no microSD webFile = SD.open("index.htm"); if (webFile) { while (webFile.available()) { client.write(webFile.read()); // envia para o cliente a página - nessa linha de fato o Arduino imprime no browser a página } webFile.close(); } } Serial.println(HTTP_req); //para debug, verifica no monitor serial a requisição req_index = 0; //reseta o index do buffer e a variável que armazena as requisições StrClear(HTTP_req, REQ_BUF_SZ); break; } // toda linha de texto recebida do cliente termina com \r\n if (c == '\n') { //verifica se acabou a linha, já que \n é o ultimo caracter currentLineIsBlank = true; } else if (c != '\r') { // o cliente ainda está enviando informações currentLineIsBlank = false; } } } delay(1); // dá um tempo para o browser receber os dados client.stop(); // fecha a conexão } } void SetBotao(int botao, EthernetClient client) { int modulo = (botao - 1) / 4 + 1; int rele = botao % 4; if (rele == 0) { rele = 4; } Serial.print("modulo:"); Serial.print(modulo); Serial.print(" rele:"); Serial.print(rele); Serial.print(" - "); if (estado_botao[botao] == 0) { relays.SetRelay(rele, SERIAL_RELAY_ON, modulo); estado_botao[botao] = 1; //client.print("1"); Serial.println("1"); } else { relays.SetRelay(rele, SERIAL_RELAY_OFF, modulo); estado_botao[botao] = 0; //client.print("0"); Serial.println("0"); } client.print("0|"); for (int i = 1 ; i <= 40 ; i++) { client.print(estado_botao[i]); client.print("|"); } } // funcao para limpar arrays (no nosso caso, as variaveis que armazenam requests) void StrClear(char *str, char length) { for (int i = 0; i < length; i++) { str[i] = 0; } } // funcao que procura pela string SFIND em STR // retorna 1 se a string for encontrada // retorna 0 se a setring não for encontrada char StrContains(char *str, char* sfind) { char found = 0; char index = 0; char len; len = strlen(str); if (strlen(sfind) > len) {
return 0;
}
while (index < len) {
if (str[index] == sfind[found]) {
found++;
if (strlen(sfind) == found) {
return 1;
}
}
else {
found = 0;
}
index++;
}
return 0;
}

Exibições: 656

Responder esta

Respostas a este tópico

Olá,

  Sua duvida parece simples mas o código está ilegível.

  Tente enviar novamente conforme um desses sugestões:

http://labdegaragem.com/forum/topics/sugest-o-de-como-postar?commen...

http://labdegaragem.com/forum/topics/duvidas-ajuda-na-programa-o?co...

Tente substituir o trecho:

if (estado_botao[botao] == 0) {
relays.SetRelay(rele, SERIAL_RELAY_ON, modulo);
estado_botao[botao] = 1;
//client.print("1");
Serial.println("1");
}
else {
relays.SetRelay(rele, SERIAL_RELAY_OFF, modulo);
estado_botao[botao] = 0;
//client.print("0");
Serial.println("0");
}

Por:

//if (estado_botao[botao] == 0) {
relays.SetRelay(rele, SERIAL_RELAY_ON, modulo);
estado_botao[botao] = 1;
//client.print("1");
Serial.println("1");

delay(500);
//}else {
relays.SetRelay(rele, SERIAL_RELAY_OFF, modulo);
estado_botao[botao] = 0;
//client.print("0");
Serial.println("0");
//}

boa tarde amigo ,como especificar o botão para pulso preciso de 3 reles para pulso tenho 12 reles uso 3 modulo rele com 4 

com esse delay todos meus reles vai virar pulso?

Aih complica um pouco.

Vc teria que criar por ex um:

int tipo_botao[41];

Depois escrever em cada um deles por ex 0 para normal e 1 para pulso.

aih lá no acionamento antes de executar esse bloco trocado colocar um if(). Se for 0 executa de um jeito, se for 1 executa de outro.

entendi brigado pelas as resposta . vou ver se acho algum projeto parecido com isso valeu..

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço