// Projeto 12 - Medição da velocidade
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int pinEntrada = 8;
const int pinLED = 9;
int estado = 0;
unsigned long tempo1;
unsigned long tempo2;
float duracao;
float velocidade;
float duracaoms;
unsigned long fitaOpaca = 20; //Largura da fita opaca em mm
void setup()
{
Serial.begin(9600);
lcd.init();
lcd.backlight();
lcd.clear();
pinMode(pinEntrada, INPUT);
pinMode(pinLED, OUTPUT);
digitalWrite(pinLED, LOW);
lcdInicio();
}
void loop()
{
estado = digitalRead(pinEntrada);
if (estado == HIGH) // Quando a tira opaca interrompe o feixe
{
tempo1 = micros();
digitalWrite(pinLED, HIGH);
while(estado == HIGH)
{
estado = digitalRead(pinEntrada);
}
tempo2 = micros();
duracao = (tempo2-tempo1); //Tempo em microssegundos
velocidade = fitaOpaca*1000/duracao; //Velocidade em m/s
duracaoms = duracao/1000;
lcdFinal();
}
digitalWrite(pinLED, LOW);
}
void lcdInicio()
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Largura da tira");
lcd.setCursor(0,1);
lcd.print(fitaOpaca);
lcd.print(" mm");
}
void lcdFinal()
{
Serial.print("Tempo = ");
Serial.print(duracaoms,3); //Tempo em ms com 3 casas decimais
Serial.print(" ms");
Serial.print(" ");
Serial.print("Velocidade = ");
Serial.print(velocidade,3);
Serial.println(" m/s");
lcd.clear();
lcd.setCursor(0,0);
lcd.print("t = ");
lcd.print(duracaoms, 3);//Tempo em ms com 3 casas decimais
lcd.print(" ms");
lcd.setCursor(0,1);
lcd.print("v = ");
lcd.print(velocidade, 3);//Velocidade em m/s com 3 casas decimais
lcd.print(" m/s");
}