Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
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. :-)

Editado por DiF
Botão CODE <>

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

Sim, vou colocar a solução aqui, assim que eu chegar em casa.

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);

  }

 

Editado por DiF
Botão CODE <>
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Ofioneu ,

 

Grato pela sua atitude de postar a resolução do problema para que todos possam se beneficiar !

 

Paulo

  • Curtir 3

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






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

×