Amigos, tenho um projeto de um carrinho controlado via Bluetooth. Tudo funcionando, motores, luz freio, farol, seta e tudo mais. Porém preciso implementar o Pisca Alerta.

Todos os comandos são acionados com state. Veja exemplo:

--------------------Código --------------------

f (digitalRead(BTState) == LOW) {

state_rec = 'S';
}

// Salva os valores da variável 'state'
if (Serial.available() > 0) {
   state_rec = Serial.read();
   state = state_rec;

if (state != 'S') {
Serial.print(state);
}

// Se o estado recebido for igual a 'F', o carro se movimenta para frente.
if (state == 'F') {
    analogWrite(motorDB1, vSpeed);
    analogWrite(motorDA1, vSpeed);
    analogWrite(motorDA2, 0);
    analogWrite(motorDB2, 0);

    analogWrite(motorTB1, vSpeed);
    analogWrite(motorTA1, vSpeed);
    analogWrite(motorTA2, 0);
    analogWrite(motorTB2, 0);

    digitalWrite(FreioParadaEsquerda, LOW);
    digitalWrite(FreioParadaDireita, LOW);
}

else if (state == 'B') { // Se o estado recebido for igual a 'B', o carro se movimenta para trás.
    analogWrite(motorDA1, 0);
    analogWrite(motorDB1, 0);
    analogWrite(motorDB2, vSpeed);
    analogWrite(motorDA2, vSpeed);
    analogWrite(motorTA1, 0);
    analogWrite(motorTB1, 0);
    analogWrite(motorTB2, vSpeed);
    analogWrite(motorTA2, vSpeed);

    digitalWrite(FreioParadaEsquerda, LOW);
    digitalWrite(FreioParadaDireita, LOW);

    digitalWrite(ReDireita, HIGH);
    digitalWrite(ReEsquerda, HIGH);
}

-----------------E assim por diante----------------------

O pisca alerta deve ser acionado com o "X" e interrompido com "x"

Preciso de uma lógica para ele piscar ao receber "X" e para de piscar com o "x".

Alguém pode me dar uma luz para isso?

Ficarei muito grato pela ajuda.

Exibições: 867

Responder esta

Respostas a este tópico

Olá Fábio!

Uma maneira fácil de fazer isso é usando uma pequena lib para controle de intervalos de tempo com Arduino.

Ela usa internamente o millis, então não vai interferir na atividade principal do robô.

Veja uma exemplo de uso aqui:

http://josecintra.com/blog/arduino-controlando-intervalos-tempo/

O que você poderia fazer é definir uma variável booleana "pisca"

Mais ou menos assim:

boolean pisca = false;
Timing timerPisca;
Defina aqui também o pino onde está o led do pisca (ledPisca).

No setup:

timerPisca.begin(0);

Depois no código principal, fazer assim:

if (state == 'X'){

pisca = !pisca; // Liga ou desliga pisca

}

if (pisca && timerPisca.onTimeout(2000)) { // Acende/Apaga pisca alerta a cada 2 segundos

digitalWrite(ledPisca,!digitalRead(ledPisca));
 }

 Fabio, esqueci de um detalhe:

Para garantir que o pisca não se perca entre os comandos, acrescente o seguinte comandp

if (state == 'X'){

pisca = !pisca; // Liga ou desliga pisca

digitalWrite(ledPisca,LOW);

}

Outra coisa é que é preciso garantir que o transmissor envie uma única vez o comando X quando pressionado, principalmente se é feito através de pushbuttons que podem sofrer o efeito bounce.

Oi  José, Muito Obrigado.

Deu certo!!! 

Não conhecia esse Library. Cada dia aprendendo mais.

Eu diminui o tempo entre piscada mas será que tem como aumentar o tempo em que os led ficam ligados?

Olá Fábio!

Você diz que quer o tempo do led acesso maior que o apagado no pisca alerta?

Talvez precise de 2 timers, mas preciso pensar melhor...

Vou quebrar um pouco a cabeça e depois te falo...

Isso, Por exemplo: 1seg apagado e 1seg ligado.

Estou tentando fazer com 2 timers mas não deu certo. acho que estou errando na lógica.

José, resolvi o problema.
Eu tinha certeza que alterando o valor (pisca && timerPisca.onTimeout(2000)) para o tempo desejado seria resolvido. E estava certo.

Só que na ocasião eu havia esquecido de como o transmissor enviaria o comando para ligar.
Descobri que enviava um lote de "30X "ligar" de uma só vez. ajustei para apenas 3 e assim da tempo de receber tudo antes de desligar o led...

Só para saber....

Mesmo assim obrigado pelo apoio.
Abraço!

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço