Ajuda na programação (projeto de TCC)

Eai pessoal eu curso Automação Industrial na etec e estou tendo problemas para a programação do meu projeto, a ideia é que temos a faixa de pedestre e temos dois sensores ultrassônicos que ficam antes da faixa para medir a velocidade do carro, temos também uma velocidade padrão, quando o carro ultrapassa ela a faixa ira acender para avisar o pedestre do possível perigo. Gostaria de alguma sugestão sobre a programação.

Programação até agora:

#include <Ultrasonic.h>
#include <LiquidCrystal.h>
#define trig1 2
#define echo1 3
#define trig2 4
#define echo2 5

LiquidCrystal ()
unsigned long start = 0;
unsigned long finish = 0;
int carroPassouStart = 0;
int carroPassouFinish = 0;
double tempo;
double velocidade;
double distanciaSensores = 0.15;
double fatorParaSegundos = 1000;

Ultrasonic ultra1(2 , 3);
Ultrasonic ultra2(4 , 5);

void setup() {
lcd.begin(16,2)
Serial.begin(9600); //inicia a porta serial
pinMode(trig1, OUTPUT); // define o pino 2 como saida (envia)
pinMode(echo1, INPUT); // define o pino 3 como entrada (recebe)
pinMode(trig2, OUTPUT); // define o pino 4 como saida (envia)
pinMode(echo2, INPUT); // define o pino 5 como entrada (recebe)

}

void loop() {

//seta o pino 2 com um pulso baixo "LOW" ou desligado ou ainda 0
// digitalWrite(trig1, LOW);
// delay de 10 microssegundos
//delayMicroseconds(10);
//seta o pino 2 com pulso alto "HIGH" ou ligado ou ainda 1
//digitalWrite(trig1, HIGH);
//delay de 100 microssegundos
//delayMicroseconds(100);
//seta o pino 2 com pulso baixo novamente
//digitalWrite(trig1, LOW);

//seta o pino 4 com um pulso baixo "LOW" ou desligado ou ainda 0
// digitalWrite(trig2, LOW);
// delay de 10 microssegundos
//delayMicroseconds(10);
//seta o pino 4 com pulso alto "HIGH" ou ligado ou ainda 1
//digitalWrite(trig2, HIGH);
//delay de 100 microssegundos
//delayMicroseconds(100);
//seta o pino 4 com pulso baixo novamente
//digitalWrite(trig2, LOW);

if(ultra1.Ranging(CM) < 10){
start = millis();
carroPassouStart = 1;
//Serial.println ("aqui1");
}

if(ultra2.Ranging(CM) < 10){
finish = millis();
carroPassouFinish = 1;
//Serial.println ("aqui");
}

if((carroPassouStart && carroPassouFinish )&& finish > start){
tempo = ((finish - start)/ fatorParaSegundos);
velocidade = ((distanciaSensores / tempo) * 3.6); //velocidade em km/h
Serial.print ("Tempo: ");
Serial.print (tempo);
Serial.println ("s");
//delay(1000);
Serial.print ("Velocidade: ");
Serial.print (velocidade);
Serial.println ("km/h");
//delay(1000);
lcd.print(velocidade)
carroPassouStart = 0;
carroPassouFinish = 0;
}

}

Tem que usar sensores ultrasônicos? Não existiria problemas com o efeito doppler? Que tal usar sensores tipo Switchs, barreira de luz, etc...
Mesmo assim posta o esquema de como você pretende colocar os sensores para podermos entender melhor!
Ahh quando for colocar códigos aqui ni post usa as tags [ code] [/ code]

Sobre o efeito doppler não tinha tínhamos pensado nisso, mas quando terminarmos a programação e testar se houver esse problema iremos trocar os sensores. Vou anexar aqui o esquema e uma foto da maquete.

Cara eu dei uma melhorada, você não havia iniciado o display, faltavam um monte de ";" e tem uma questão que segue no código abaixo:

#include <Ultrasonic.h>
#include <LiquidCrystal.h>
int trig1 = 6;
int echo1 = 7;
int trig2 = 8;
int echo2 = 9;
int ledSinal = 10;
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;

LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

unsigned long start = 0;
unsigned long finish = 0;
int carroPassouStart = 0;
int carroPassouFinish = 0;
double tempo;
double velocidade;
double distanciaSensores = 0.15;
double fatorParaSegundos = 1000;

Ultrasonic ultra1(trig1 , echo1);
Ultrasonic ultra2(trig2 , echo2);




void setup() {
   lcd.begin(16,2);
   pinMode(ledSinal, OUTPUT);
   Serial.begin(9600); //inicia a porta serial
   pinMode(trig1, OUTPUT); // define o pino 2 como saida (envia)
   pinMode(echo1, INPUT); // define o pino 3 como entrada (recebe)
   pinMode(trig2, OUTPUT); // define o pino 4 como saida (envia)
   pinMode(echo2, INPUT); // define o pino 5 como entrada (recebe)

}

void loop() {
 
  if(ultra1.Ranging(CM) < 10){
    start = millis();
    carroPassouStart = 1;
    //Serial.println ("aqui1");
    }
   
  if(ultra2.Ranging(CM) < 10){
    finish = millis();
    carroPassouFinish = 1;
    //Serial.println ("aqui");
    }

  if((carroPassouStart && carroPassouFinish )&& finish > start){ //<==
    /*************************************************
     * Aqui como você pegou o valor do finish depois do start, 
     * ele sempre será maior  que o start e você está fazendo a seguinte compraração :
     * se carroPassouStart ou carroPassouFinish ou finish for maior que start faça isso...
     */
    tempo = ((finish - start)/ fatorParaSegundos);
    velocidade = ((distanciaSensores / tempo) * 3.6); //velocidade em km/h
    Serial.print ("Tempo:  ");
    Serial.print (tempo);
    Serial.println ("s");
   //delay(1000);
    Serial.print ("Velocidade:  ");
    Serial.print (velocidade);
    Serial.println ("km/h");
    //delay(1000);
    lcd.print(velocidade);
    carroPassouStart = 0;
    carroPassouFinish = 0;
   }
     
   
}

Dá uma olhada e me explica melhor, quanto tem que ser o tempo entre o start e o finish para que acenda as luzes?
Como você está fazendo esse cálculo que não consegui entender!

Sobre o cálculo q vamos fazer, funciona assim, pegamos os dois sensores ultrassônicos e colocamos eles a 15cm de distância um do outro, quando o carrinho passar pelo primeiro sensor começa a contar um tempo e após ele passar no segundo, ele para de contar o tempo, depois é só pegar esse tempo e dividir pela distância do sensor. Fórmula: V=D÷T

Para acender as luzes vemos a divisão se o resultado for maior q 30 km/h, as luzes acendem, se for menor ficam apagadas.

Hoje estamos tentando programar o Arduino desde manhã, e deu muitos problemas na compilação, com a versão mais nova do software do Arduino, está dando um erro do CM, e da biblioteca do sensor ultrassônico "Ranging", quando baixamos versões mais antigas da um erro diferente "WProgram.h". Já tentamos em vários computadores mas mesmo assim não conseguimos corrigir nenhum dos erros.

Esse que eu postei, compilou de boa!
Manda a versão que vocês estão usando junto com as bibliotecas!
Assim que puder dou uma olhada!

Nós usamos 3 versões diferentes, usamos a mais recente que saiu a 7 dias a 1.8.5, usamos a 1.0.6 e também a 1.6.5, as bibliotecas que estamos usando são: LiquidCrystal.h e Ultrasonic.h . A Ultrasonic eu baixei de 2 lugares a versão dela mais recente foi desse site aqui:https://www.itead.cc/blog/arduino-library-for-ultrasonic-ranging-module-hc-sr04.

Posta o código que vocês estão usando, o código!

Praticamente não houve alteração na programação, usamos a que voce tinha mandado e descobrimos que nas seguintes linhas estão dando erro de "Ranging":

if(ultra1.Ranging(CM) < 10){
start = millis();
carroPassouStart = 1;
//Serial.println ("aqui1");
}

if(ultra2.Ranging(CM) < 10){
finish = millis();
carroPassouFinish = 1;
//Serial.println ("aqui");
}

mas só quando tiramos essa linha compila normalmente.
e quando não da esse erro da o erro de "WProgram.h", esse erro não indica nenhuma linha com erro só aparece o seguinte:

fatal error: WProgram.h: No such file or directory
#include "WProgram.h"