Boa noite galera, tenho um projeto de automação reaidencial rodando, porem meu arduino trava direto e so volta se resetar

Sao 2 arduinos comunicando por serial
Porem trava
Alguem pode dar ideia o q possa ser?
Nas saidas tem reles
A saida vai em um resistor de 10k na base de um transistor bc337 e chaveia o rele

Exibições: 930

Responder esta

Respostas a este tópico

Olá Bruno,

Eu sugiro que você poste seu código usando as indicações do Rui Viana, (Ver tópico) e dar detalhes de como esta ligado seu circuito, e tudo aquilo que considere possa ser útil para te ajudar, descrição, dizer se para a toda hora em determinado momento ou aleatoriamente por exemplo entre outros detalhes, já que qualquer opinião sem conhecer no mínimo estes detalhes seria tentar adivinhar o que esta acontecendo, essa vai ser a maneira de receber ajuda, caso contrario acho difícil, é minha opinião.

Abs.

Bom dia, desculpa, achei que daria

mais esta ai

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#define CE_PIN 9 // se for arduino mega mudar para 8
#define CSN_PIN 10 // se for arduino mega mudar para 53

const uint64_t pipe = 0xE8E8F0F0E1LL;
RF24 radio(CE_PIN, CSN_PIN);

int SINAIS[15];
int x;
int sinal_recebido;
int vezes1,vezes2,vezes3,vezes4,vezes5,vezes6;
String readString;

void setup()
{

radio.begin();
radio.openReadingPipe(1,pipe);
radio.startListening();;
pinMode(8,OUTPUT);
digitalWrite(8,0); // usado para atualizar o LED WIRELESS

pinMode(A0,INPUT); //
pinMode(A1,INPUT); //
pinMode(A2,INPUT); //
pinMode(A3,INPUT); //
pinMode(A4,INPUT); //
pinMode(A5,INPUT); //

pinMode(2,OUTPUT); //
pinMode(3,OUTPUT); //
pinMode(4,OUTPUT); //
pinMode(5,OUTPUT); //
pinMode(6,OUTPUT); //
pinMode(7,OUTPUT); //


// Define todas inicar em 0
digitalWrite(2,0); // referente a entrada A0
digitalWrite(3,0); // referente a entrada A1
digitalWrite(4,0); // referente a entrada A2
digitalWrite(5,0); // referente a entrada A3
digitalWrite(6,0); // referente a entrada A4
digitalWrite(7,0); // referente a entrada A5

x = 0; // entrada para atualizar supervisorio
sinal_recebido = 0;
}

void loop()
{

// MAPEIA 2 ****************************************************************************************************************************************************************
if(digitalRead(A0)==1&&vezes1==0)
{
digitalWrite(2,!digitalRead(2));
vezes1=1;
}
if(digitalRead(A0)==0&&vezes1==1)
{
digitalWrite(2,!digitalRead(2));
vezes1=0;
}
// MAPEIA 3 ****************************************************************************************************************************************************************
if(digitalRead(A1)==1&&vezes2==0)
{
digitalWrite(3,!digitalRead(3));
vezes2=1;
}
if(digitalRead(A1)==0&&vezes2==1)
{
digitalWrite(3,!digitalRead(3));
vezes2=0;
}
// MAPEIA 4 ****************************************************************************************************************************************************************
if(digitalRead(A2)==1&&vezes3==0)
{
digitalWrite(4,!digitalRead(4));
vezes3=1;
}
if(digitalRead(A2)==0&&vezes3==1)
{
digitalWrite(4,!digitalRead(4));
vezes3=0;
}
// MAPEIA 5 ****************************************************************************************************************************************************************
if(digitalRead(A3)==1&&vezes4==0)
{
digitalWrite(5,!digitalRead(5));
vezes4=1;
}
if(digitalRead(A3)==0&&vezes4==1)
{
digitalWrite(5,!digitalRead(5));
vezes4=0;
}
// MAPEIA 6 ****************************************************************************************************************************************************************
if(digitalRead(A4)==1&&vezes5==0)
{
digitalWrite(6,!digitalRead(6));
vezes5=1;
}
if(digitalRead(A4)==0&&vezes5==1)
{
digitalWrite(6,!digitalRead(6));
vezes5=0;
}
// MAPEIA 7 ****************************************************************************************************************************************************************
if(digitalRead(A5)==1&&vezes6==0)
{
digitalWrite(7,!digitalRead(7));
vezes6=1;
}
if(digitalRead(A5)==0&&vezes6==1)
{
digitalWrite(7,!digitalRead(7));
vezes6=0;
}

// Se o Radio estiver disponivel, ou seja, recebendo informação do transmissor imprime as informações
if(radio.available())
{
radio.read( SINAIS, sizeof(SINAIS) );

// USADO PARA SINCRONIZAR ***************************************************************************************************************************************************************
if( SINAIS[14]==129 && sinal_recebido==0 )
{
digitalWrite(2,0);
digitalWrite(3,0);
digitalWrite(4,0);
digitalWrite(5,0);
digitalWrite(6,0);
digitalWrite(7,0);
sinal_recebido=1;
}
// Parte incluida para zerar e alterar realmente o status da saida apenas 1 vezes ,eliminando o for enviado
if(SINAIS[14]==10 && sinal_recebido==1 )
{
sinal_recebido=0;
}

// ATUALIZA A SAIDA 2 ***************************************************************************************************************************************************************
if(SINAIS[13]==114 && sinal_recebido==0 )
{
digitalWrite(2,!digitalRead(2));
sinal_recebido=1;
}
// Parte incluida para zerar e alterar realmente o status da saida apenas 1 vezes ,eliminando o for enviado
if(SINAIS[13]==10 && sinal_recebido==1 )
{
sinal_recebido=0;
}
// ATUALIZA A SAIDA 3 ***************************************************************************************************************************************************************
if((SINAIS[13]==115 && sinal_recebido==0 ))
{
digitalWrite(3,!digitalRead(3));
sinal_recebido=1;
}
// Parte incluida para zerar e alterar realmente o status da saida apenas 1 vezes ,eliminando o for enviado
if(SINAIS[13]==10 && sinal_recebido==1 )
{
sinal_recebido=0;
}
// ATUALIZA A SAIDA 4 ***************************************************************************************************************************************************************
if((SINAIS[13]==116 && sinal_recebido==0 ))
{
digitalWrite(4,!digitalRead(4));
sinal_recebido=1;
}
// Parte incluida para zerar e alterar realmente o status da saida apenas 1 vezes ,eliminando o for enviado
if(SINAIS[13]==10 && sinal_recebido==1 )
{
sinal_recebido=0;
}
// ATUALIZA A SAIDA 5 ***************************************************************************************************************************************************************
if((SINAIS[13]==117 && sinal_recebido==0 ))
{
digitalWrite(5,!digitalRead(5));
sinal_recebido=1;
}
// Parte incluida para zerar e alterar realmente o status da saida apenas 1 vezes ,eliminando o for enviado
if(SINAIS[13]==10 && sinal_recebido==1 )
{
sinal_recebido=0;
}
// ATUALIZA A SAIDA 6 ***************************************************************************************************************************************************************
if((SINAIS[13]==118 && sinal_recebido==0 ))
{
digitalWrite(6,!digitalRead(6));
sinal_recebido=1;
}
// Parte incluida para zerar e alterar realmente o status da saida apenas 1 vezes ,eliminando o for enviado
if(SINAIS[13]==10 && sinal_recebido==1 )
{
sinal_recebido=0;
}
// ATUALIZA A SAIDA 7 ***************************************************************************************************************************************************************
if((SINAIS[13]==119 && sinal_recebido==0 ))
{
digitalWrite(7,!digitalRead(7));
sinal_recebido=1;
}
// Parte incluida para zerar e alterar realmente o status da saida apenas 1 vezes ,eliminando o for enviado
if(SINAIS[13]==10 && sinal_recebido==1 )
{
sinal_recebido=0;
}
}
}

a ligação feita para acionamento das lampadas ficou assim

Olá Bruno,

Estou respondendo somente dando uma olhada rápida porque estou saindo para almoçar com a família,

você verificou os baud rate, porque não tenta abaixar ou mesmo subir a taxa em ambos Arduino.

Mais tarde tentarei fazer testes com seu código aqui.

Abs.

Boa noite, entao primeira coisa que mudei
Tava em 9600 passei para 115200 melhorou
Porem esse particularmente nao usa serial mais trava e esse nao trabalha com mais arduinos
Somente ela msm
E trava as vezes
So resetando para voltar
Chegou rodar 50min mais travou dps
Nao sei mais oq possa ser
No aguardo!
Obrigado

amigo, vc não teria dois arduinos mega para colocar no lugar desses seus arduinos uno?

eu uma vez estava insistindo em usar o arduino uno por ser mais barato e ter quase certeza que ele seria suficiente, mas me deparava com travamentos aleatórios, ora travava, ora não travava, ora travava em pouco tempo, ora demorava horas pra travar. Desconfiei que uma variável que eu estava usando acumulava muita informação ali e esgotava a memória, mas não tive paciência de investigar a fundo, pois quando substitui pelo mega eu nunca mais me deparei com travamento naquele projeto. Uma hora talvez eu crie coragem de investigar o que era, mas por hora  a simples substituição resolveu.

Concordo em grande parte com o imhugo Bruno, eu tive aplicações e problemas com Arduino UNO e cartão SD e no fim das contas o problema era memoria, como são aplicações comerciais, não me preocupei em investigar e sim em solucionar o problema, eu tinha certeza que o problema era memoria, e não podia entregar um equipamento sem a devida confiança no produto, então cortei o mal pela raiz.

Eu trocaria os UNO por MEGA e depois pode até continuar a pesquisar se quiser, mas resolve seu problema, e se não resolver por certo não será investimento perdido, até se quisesse revender poderia faze-lo, o grande calcanhar de Aquiles destes MCU são em minha opinião a memoria,  e o UNO é o mais vulnerável neste sentido, acredito que sempre que façamos um projeto onde sabemos que a memoria será bastante consumida, devemos optar pelo MEGA. 

PD. Isso não é um veredito é claro, apenas uma opinião, aguarde que o pessoal deve dar sua opinião a respeito ainda, existe um grupo que o colega Weider criou aqui, você faz parte dele? Se não trate de procurar, ( http://labdegaragem.com/group/nrf24l01) quem sabe tenha alguma dica.

Abs.

Muito obrigado pela atenção, vou ver o que faço
Vlew msm assim

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço