Estou tendo dificuldade em desenvolver a seguinte lógica no arduino.....RESOLVIDO....

Sou novo em programação e gostaria de desenvolver em codigo a seguinte lógica...por exemplo:

Tenho 6 entradas e 1 saida no arduino, então gostaria de programa-lo para a seguinte tarefa: quando em qualquer entrada tiver nivel alto independentemente da sequencia das entradas, terei um pulso de 1 segundo na saida...alguém sabe a solução para isso?

Exibições: 793

Responder esta

Respostas a este tópico

Posso, mas não tem muita coisa, estou fazendo o teste na placa do arduino mesmo...estou testando só uma saida ai, acredito que esteja tudo certo

Oi SGF,

escrevi este code para vc testar.

Ele não é o ideal mas funciona e serve para vc aperfeiçoa-lo.

Rui

Anexos

Olá Rui Viana muito obrigado era mais ou menos isso que queria, não estava conseguindo porque não sabia como setar esses comandos como o contador e também funçoes como void Pulse(), ainda não tinha visto isso, tento aprender quase tudo sozinho. Preciso dessa lógica para acionar um CI de gravação de voz que é o ISD1820 para reproduzir um determinado som quando um nivel lógico de entrada esta alto, ai então é que eu uso o pulso de saida para ativar-lo e assim reproduzir o som, tipo...um CI vai "dizer" "Sistema ligado" e outro "Sistema desligado", ainda estou estudando programação vou tentar entender esse seu código.

Muito Obrigado mesmo

SGF, este código temo seguinte problema:

Exemplo:

Se o nivel na Porta 2, 3, etc.  ficar HIGH, quando chegar no final da rotina, ele vai disparar o Pulso e aguardar por um Segundo.

Neste ínterim, se uma porta de numero mais baixo ficar HIGH, por menos de 1 segundo, ele não vai perceber.

Entendeu?

Se for usado para proteção, tenha muito cuidado ao fazer a solução, e teste exaustivamente para que tenha certeza que não haverá possibilidade de falhas.

Rui

Rui, acho que entendi, mas acredito que não vai ter problema porque meu hardware que estou tentando desenvolver não vai dar pulsos com menos de 1 segundo. Mas ainda tenho que entender melhor esse seu código.

Muito legal, ainda estou comprando os componentes ja tenho um monte deles. Estou projetando no Eagle cad. Basicamente é uma placa eletrônica para controle residencial a distancia por meio de um celular, nessa parte da programação que não conseguia resolver serve para ativar os CI's ISD1820 para enviar o audio via celular, a cada tecla do celular corresponde a um relay, por exemplo aperto na tecla 1, liga o relay, aperto novamente desliga o relay e então a cada vez que teclo um número recebo uma mensagem de "sistema ligado ou sistema desligado", ainda estou a espera de todos os componentes

Obrigado Rui

Olá Rui Viana boa tarde, seu codigo está funcionando como esperado mas gostaria de entede-lo melhor.

Podes me explicar o que faz o comando  boolean "Flag_BOT1;  "  " void Pulse() "e no caso do contador ele está ali para contar 1s e desligar o led certo, porque o contator é igual a zero? E essa condição 

if (Contador >0) // Se o Contador é maior que 0
Pulse();

o que significa?

Obrigado

O seu problema não é de logica do código, apesar dos erros apontados pelos colegas estarem certos, o problema é que você não esta colocando um resistor de pull donw nas entradas, vou subir um vídeo, segue código.

const int entrada8 = 2;
const int entrada9 = 3;
const int entrada2 = 4;
const int entrada3 = 5;
const int entrada4 = 6;
const int entrada5 = 7;
const int entrada6 = 8;
const int entrada7 = 9;


const int saida0 = 13;


int estadoentrada8 = 0;
int estadoentrada9 = 0;
int estadoentrada2 = 0;
int estadoentrada3 = 0;
int estadoentrada4 = 0;
int estadoentrada5 = 0;
int estadoentrada6 = 0;
int estadoentrada7 = 0;


void setup() {

pinMode(saida0, OUTPUT);

pinMode(entrada8, INPUT);
pinMode(entrada9, INPUT);
pinMode(entrada2, INPUT);
pinMode(entrada3, INPUT);
pinMode(entrada4, INPUT);
pinMode(entrada5, INPUT);
pinMode(entrada6, INPUT);
pinMode(entrada7, INPUT);


}

void loop() {

estadoentrada8 = digitalRead( entrada8 );
estadoentrada9 = digitalRead( entrada9 );
estadoentrada2 = digitalRead( entrada2 );
estadoentrada3 = digitalRead( entrada3 );
estadoentrada4 = digitalRead( entrada4 );
estadoentrada5 = digitalRead( entrada5 );
estadoentrada6 = digitalRead( entrada6 );
estadoentrada7 = digitalRead( entrada7 );

 

if (estadoentrada8 || estadoentrada9 || estadoentrada2 || estadoentrada3 || estadoentrada4 || estadoentrada5 || estadoentrada6 || estadoentrada7 == HIGH)
{
  // do Thing A
digitalWrite (saida0,HIGH);
delay (1000);


}

else if (estadoentrada8 || estadoentrada9 || estadoentrada2 || estadoentrada3 || estadoentrada4 || estadoentrada5 || estadoentrada6 || estadoentrada7 == LOW)
{
  // do Thing B
  digitalWrite (saida0,LOW);
 

  }
}

Olá Carlos vou testar com os resistores de pulldown mas nesse seu video a simulação não iria dar certo porque eu não tenho um pulso na entrada e sim nivel lógico alto continuo em qualquer entrada e então preciso de um pulso na saída. O código que o Rui Viana me forneceu Funcionou e fez mais ou menos o que eu esperava.

Obrigado pela atenção

Agora entendi o que pretende, ok.

Abs.

Veja se este atende:

const int entrada8 = 2;
const int entrada9 = 3;
const int entrada2 = 4;
const int entrada3 = 5;
const int entrada4 = 6;
const int entrada5 = 7;
const int entrada6 = 8;
const int entrada7 = 9;

const int saida0 = 13;

int estadoentrada8 = 0;
int estadoentrada9 = 0;
int estadoentrada2 = 0;
int estadoentrada3 = 0;
int estadoentrada4 = 0;
int estadoentrada5 = 0;
int estadoentrada6 = 0;
int estadoentrada7 = 0;
byte comando;

void setup() {
pinMode(saida0, OUTPUT);
pinMode(entrada8, INPUT);
pinMode(entrada9, INPUT);
pinMode(entrada2, INPUT);
pinMode(entrada3, INPUT);
pinMode(entrada4, INPUT);
pinMode(entrada5, INPUT);
pinMode(entrada6, INPUT);
pinMode(entrada7, INPUT);

}
void loop() {
estadoentrada8 = digitalRead( entrada8 );
estadoentrada9 = digitalRead( entrada9 );
estadoentrada2 = digitalRead( entrada2 );
estadoentrada3 = digitalRead( entrada3 );
estadoentrada4 = digitalRead( entrada4 );
estadoentrada5 = digitalRead( entrada5 );
estadoentrada6 = digitalRead( entrada6 );
estadoentrada7 = digitalRead( entrada7 );

if (estadoentrada8 || estadoentrada9 || estadoentrada2 || estadoentrada3 || estadoentrada4 || estadoentrada5 || estadoentrada6 || estadoentrada7 == HIGH)
{comando=0;}

switch(comando)
{
case 0:
digitalWrite (saida0,HIGH);
delay (1000);
digitalWrite (saida0,LOW);
break;
}
}

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço