Ir ao conteúdo

Posts recomendados

Postado

           Estou tentando fazer um delta tempo (t2-t1) com o arduino, e me deparei com uma coisa que não entendi: O software lê a entrada de dois botões, sendo que quando é lido o primeiro btn (s1) ele salva em T1 o tempo decorrido na função millis(), O mesmo ele faz para a leitura de s2 para salvar o segundo tempo em T2 e assim fazer a subtração do mesmo.

           Acontece que quando é feito a subtração a resposta em deltaT é sempre um número inteiro, mesmo que eu coloque uma virgula para casas decimais a resposta é sempre em número inteiro, isso é uma condição da variável unsigned long? e se sim, tem como inserir casas decimais? Segue imagens com os resultados.

unsigned long s1 = 3;
unsigned long s2 = 4;

unsigned long deltaT;
unsigned long T1;
unsigned long T2;
byte flag = 0;



void setup() {
  Serial.begin(9600);
  pinMode(s1, INPUT_PULLUP);
  pinMode(s2, INPUT_PULLUP);

}



void loop() {
  unsigned long tcorrido = millis();
  if (flag == 0) {
    
      if (digitalRead(s1) == LOW) {
      delay(200);
      T1 = tcorrido;
      Serial.print("T1= ");
      Serial.println(T1);
    }
    
      if (digitalRead(s2) == LOW) {
        delay(200);
       
        T2 = tcorrido;
        Serial.print("T2= ");
        Serial.println(T2);
        flag = 1;
        
      }
    }
  


  if (flag == 1) {

    deltaT = ((T2 - T1) / 1000);
    Serial.print("delta= ");
    Serial.println(deltaT, 4);
    delay(1000);
    
    flag = 0;
  }

}

 

Percebam se subtrair T2 de T1 se o resultado for menor que 1 delta =0 e se for maior delta =1  e assim por diante para n comparações

 

image.thumb.png.44b677c8c413068f3b6c4d4df323b9c6.pngimage.thumb.png.44b677c8c413068f3b6c4d4df323b9c6.png

adicionado 19 minutos depois

fechem o tópico, já resolvi. Obrigado. :-)

Postado

O code em si não foi alterado drasticamente, apenas deduzi que o tipo da variável unsigned long não aceita mesmo casas decimais,  e quando é feito a subtração (T2-T1) isso sempre vai caber dentro de um float (deltaT), assim foi feita a conversão de unsigned long para float, simples assim kkkk

 

unsigned long s1 = 3;
unsigned long s2 = 4;
float deltaT;
unsigned long T1;
unsigned long T2;



if (flag == 1) {

    deltaT = (T2 - T1); // 1000);
    deltaT = deltaT / 1000;

    v = 1 / (deltaT);

  }

 

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!