TIMERS

Ola

Estou a realizar um projecto, onde tem dois tubos (um de vidro e um de cobre) na vertical, onde tenho que passar la um íman e tem 2 sensores em cada tubo um em cima e um em baixo e eu tenho de medir o tempo entre o sensor de cima e o sensor de baixo, mas estou com dificuldades nos timers, e precisa de ajuda.

Espero que a explicaçao nao tenha sido confusa

Deixo aqui a parte do programa que consegui fazer:

#include <Wire.h>
#include <LiquidCrystal.h>



LiquidCrystal lcd(8, 9, 4, 5, 6, 7);


// define some values used by the panel and buttons
  int lcd_key     = 0;
  int adc_key_in  = 0;
  int sensor1 = 9;
  int sensor2 = 11;
  int sensor3 = 10;
  int sensor4 = 12;
  


void setup()
{
   pinMode(sensor1, INPUT);
   pinMode(sensor2, INPUT);
   pinMode(sensor3, INPUT);
   pinMode(sensor4, INPUT);
   lcd.begin(16, 2);              // start the library
   lcd.setCursor(0,0);
   lcd.print ("* Queda Graves *");
   lcd.setCursor(0,1);
   lcd.print (" V1.0      2014 ");
   delay (1500);
  }


void loop ()
{
  lcd.setCursor (0,0);
  lcd.print ("Tb1           ms");
  if (digitalRead(sensor1) == HIGH) {
    time1 millis();
  if (digitalRead(sensor2) == HIGH) {
    lcd.setCursor (5, 0);
    lcd.print (time1); //aqui deve estar colocado o tempo que demorou no tubo 1 
    }
  }
  

  lcd.setCursor (0, 1);
  lcd.print ("Tb2           ms");
  if (digitalRead(sensor3) == HIGH) {
    time2 millis();
  if (digitalRead(sensor4) == HIGH) {
    lcd.setCursor (5, 1);
    lcd.print (time2); //aqui deve estar colocado o tempo que demorou no tubo 2
    }
  }
  
}

Obrigado!

Esse código nem compila
Algo assim talvez:

#include <Wire.h>
#include <LiquidCrystal.h>



LiquidCrystal lcd(8, 9, 4, 5, 6, 7);


// define some values used by the panel and buttons
int lcd_key     = 0;
int adc_key_in  = 0;
int sensor1 = 9;
int sensor2 = 11;
int sensor3 = 10;
int sensor4 = 12;

unsigned long time1 = 0;
unsigned long time2 = 0;

void setup()
{
  pinMode(sensor1, INPUT);
  pinMode(sensor2, INPUT);
  pinMode(sensor3, INPUT);
  pinMode(sensor4, INPUT);
  lcd.begin(16, 2);              // start the library
  lcd.setCursor(0,0);
  lcd.print ("* Queda Graves *");
  lcd.setCursor(0,1);
  lcd.print (" V1.0      2014 ");
  delay (1500);
}


void loop ()
{
  lcd.setCursor (0,0);
  lcd.print ("Tb1           ms");
  if (digitalRead(sensor1) == HIGH) {
    time1 = millis();
    if (digitalRead(sensor2) == HIGH) {
      time2 = millis();
      lcd.setCursor (5, 0);
      lcd.print (time2 - time1); //aqui deve estar colocado o tempo que demorou no tubo 1 
    }
  }

}

Convém não estares sempre a escrever no LCD como tens no loop …

obrigado, vou testar o codigo espero que funcione ;)

Ambos os sensores ficam activos ao mesmo tempo??

Acho que o encadeamento dos teus if's está errado...

Nao, tambem penso que os ifs estao errados, mas nao sei bem como corrigir

Tenta assim

void loop ()
{
  if (digitalRead(sensor1) == HIGH) {//Significa que o primeiro sensor foi despoletado
    time1 = millis();//capturas o tempo a que esse evento ocorreu
    lcd.clear();
    lcd.setCursor (0,0);
    lcd.print ("Tb1");
    lcd.setCursor (3,0);
    lcd.print (time1);//
    lcd.setCursor (10,0);
    lcd.print ("ms");
  }
  if (digitalRead(sensor2) == HIGH) {
    time2 = millis();
    lcd.setCursor (0,1);
    lcd.print ("Tb2");
    lcd.setCursor (3,1);
    lcd.print (time2); //aqui deve estar colocado o tempo que demorou no tubo 1 
    lcd.setCursor (10,0);
    lcd.print ("ms");
    delay(500);
    lcd.clear();
    lcd.setCursor (0,0);
    lcd.print("Diferenca");
    lcd.setCursor (0,1);
    lcd.print(time2-time1);
    
  }
}