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.
Tags:
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
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
}
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.
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!
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por