Ir ao conteúdo
  • Cadastre-se
Ofioneu

Arduino Tipo de variável programação arduino

Recommended Posts

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Ofioneu Como você resolveu o problema?

Seria legal de sua parte, informar como resolveu para ajudar os demais que estiverem com esta  mesma dúvida.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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

×