Ir ao conteúdo
  • Cadastre-se

aluizs

Membro Pleno
  • Posts

    22
  • Cadastrado em

  • Última visita

Reputação

0
  1. Izadora, boa tarde, Obrigado pelas considerações. Sou Profissional de Educação Física e tenho que avaliar a velocidade de meus alunos de tempos em tempos e este projeto tem o intuito de mensurar o tempo deles neste teste. E como eu disse, utilizando o código sem a implementação do sensor o tempo corre normalmente, sem o lag na leitura do tempo no LCD.
  2. 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. modelo da montagem dos botões, sem o sensor Alguem poderia me auxiliar com este problema. Obrigado.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...