bom dia amigos alguém pode me ajudar a mudar esse projeto ,tenho 3 Módulo Relé Serial com 4 reles cada Módulo ,preciso que 3 reles mande pulso ,alguém me ajuda por favor...

#include <SPI.h>
#include <SD.h>
#include <Ethernet_v2.h>
#include <SerialRelay.h>

//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: 198

Responder esta

Respostas a este tópico

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço