Olá,
Estou trabalhando em um projeto de cronometro que é acionado por um botão e pausado através de um sensor ultrassônico (hc-sr04), só que começou a dar lag depois que implementei o código do sensor, antes disto estava funcionando normalmente.
Estou usando o arduino uno, 2 botões táctil e o sensor ultrassônico utilizando o código abaixo.
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
#include <NewPing.h>
#include <Ultrasonic.h>
#define I2C_ADDR 0x27 // Add your address here.
#define Rs_pin 0
#define Rw_pin 1
#define En_pin 2
#define BACKLIGHT_PIN 3
#define D4_pin 4
#define D5_pin 5
#define D6_pin 6
#define D7_pin 7
//--------------------------------------------------------
#define BTN_PLAY 10
#define BTN_STOP 11
//--------------------------------------------------------
#define ECHO_PIN 13 // Arduino pin tied to echo pin on the ultrasonic sensor.
#define TRIGGER_PIN 12 // Arduino pin tied to trigger pin on the ultrasonic sensor.
#define MAX_DISTANCE 20 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm.
long tempo_2;
long distancia;
//--------------------------------------------------------
int estado_btnplay;
int estado_btnstop;
unsigned long tempo;
unsigned long tempo_play = 0;
unsigned long tempo_stop;
unsigned long tempo_segundo;
int controle = 1;
int horas = 0;
int minutos = 0;
int segundos = 0;
int decimas = 0;
int milisegundos = 0;
int contar = 1;
//------------------------------------------------------------
// Alterar o endereço conforme modulo I2C
Ultrasonic ultrasonic(TRIGGER_PIN, ECHO_PIN);
LiquidCrystal_I2C lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);
void setup()
{
Serial.begin(9600);
pinMode(BTN_PLAY, INPUT_PULLUP);
pinMode(BTN_STOP, INPUT_PULLUP);
//LCD.Backlight ON;
lcd.begin(20,4);
lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
lcd.setBacklight(HIGH);
lcd.home ();
lcd.setCursor(3,0);
lcd.print(“Tec Dicas”);
lcd.setCursor(3,1);
lcd.print(“Cronometro”);
delay(1000);
lcd.clear();
lcd.setCursor(3,0);
lcd.print(“PLAY p/ iniciar”);
}
void loop()
{
estado_btnplay = digitalRead (BTN_PLAY);
estado_btnstop = digitalRead (BTN_STOP);
//-------------------------------------------------------
float cmMsec, inMsec;
long microsec = ultrasonic.timing();
// cmMsec = ultrasonic.convert(microsec,Ultrasonic::CM);
cmMsec = ultrasonic.convert(microsec, Ultrasonic::CM);
//--------------------------------------------------------
if ((estado_btnplay == LOW) && (controle == 1)) //apertado
{
controle = 0;
lcd.setCursor(3, 0);
lcd.print("TEMPO ‘PLAY’ ");
}
if (controle == 0)
{
milisegundos = millis();
if(milisegundos % 100 == 0){ //Entrar apenas se tiver passado o décimo de segundo
decimas++;
if(decimas == 10){ //Quando passou 10 décimos de segundo, conta um segundo
decimas = 0;
segundos++;
}
if(segundos == 60){
// Após 60 segundos, conta um minuto
segundos = 0;
minutos++;
}
if(minutos == 60){// Depois de 60 minutos, conta uma hora
minutos = 0;
horas++;
}
//exibição no LCD
lcd.setCursor(3,1);
if(horas < 10){ //se as horas forem menor que 10, acrescenta um 0 na frente
lcd.print(“0”);
}
lcd.print(horas);
lcd.print(":");
lcd.setCursor(6,1);
if(minutos < 10){//se os minutos forem menor que 10, acrescenta um 0 na frente
lcd.print(“0”);
}
lcd.print(minutos);
lcd.print(":");
lcd.setCursor(9,1);
if(segundos < 10)
{//se os segundos forem menor que 10, acrescenta um 0 na frente
lcd.print(“0”);
}
lcd.print(segundos);
lcd.print(":");
lcd.setCursor(12,1);
lcd.print(decimas);
}
}
//-----------------------------------------
if ((estado_btnstop == LOW) && (controle == 0)) //apertado
{
controle = 1;
horas = 0;
minutos = 0;
segundos = 0;
decimas = 0;
lcd.setCursor(3, 0);
lcd.print("TEMPO ‘STOP’ ");
delay(10000);
}
else if ((estado_btnstop == LOW) && (controle == 1)) //apertado
{
lcd.setCursor(3, 0);
lcd.print("PLAY p/ iniciar ");
lcd.setCursor(3,1);
lcd.print(“00:00:00:0”);
}
//----------------------------------------
//-------------------------------------------------------
if (cmMsec < 20 )
{
controle = 1;
horas = 0;
minutos = 0;
segundos = 0;
decimas = 0;
lcd.setCursor(3, 0);
lcd.print("TEMPO ‘STOP’ ");
}
lcd.setCursor(3,3);
lcd.print(cmMsec);
//-------------------------------------------------------
}
a estrutura dos botões estão de acordo com a imagem abaixo.
Alguem poderia me auxiliar com este problema.
Obrigado.