Programação Semafaro no Arduino com LDR


#1

Boa tarde
Eu queria uma ajuda para fazer uma programação no arduino, tenho dificuldade para tal coisa…Isso é para um trabalho ( projeto ) que estou realizando.
O trabalho consiste em fazer um semáforo com, semáforo de pedestre incluido, utilizando o comando MILLIS… O LDR serve para que quando estiver no " Vermelho" e algo faça sombra no LDR, pisque um led separado do semáforo
Eu ate consegui fazer o semáforo, mas não consigo incluir o LDR no programa
Estou tentando fazer isso tem 2 semanas e não surte efeito positivo

Desde já, obrigado.


#2

O código desse exemplo serve para fazer a detecção. No seu código, você deve criar uma flag quando o semaforo estiver vermelho (levanta o pino pra acender o vermelho e marca um boolean):

bool is_red = false;
`...`
digitalWrite(PIN_RED,HIGH);
is_red = true;

Aí no lugar que tá lendo o LDR:

if (is_red && ldr_val > x){
    ...
}

#3

eu não consigo por o LRD, olha o programa :

//**Programa Semaforo interativo
//com detecção de avanço ao sinal vermelho.

//*** Criando as variaveis dos led’s e organizando as portas ***
int LEDVERDE = 3;
int LEDAMARELO = 4;
int LEDVERMELHO = 5;
int LEDVERDE1 = 6;
int LEDVERMELHO1 = 7;
int LEDVERMELHO2 = A0; //Led do LDR
int VALORLDR = 0;

unsigned long previa = 0; //Amazena o ultimo valor
int estado = 0; // Estado inicial dos led’s
bool CARROVERMELHO = false;

//=========================================================================================

// ***Programando os pinos dos led’s como entrada ***

void setup() {
pinMode(LEDVERMELHO, OUTPUT);
pinMode(LEDAMARELO, OUTPUT);
pinMode(LEDVERDE, OUTPUT);
pinMode(LEDVERMELHO1, OUTPUT);
pinMode(LEDVERDE1, OUTPUT);
pinMode(LEDVERMELHO2, OUTPUT);

}
//==========================================================================================

//Começando a fazer o pregrama funcionar

void loop() {

//Immprime o valor do LDR no monitor serial

Serial.println(VALORLDR);

//***O valor será lido entre 0 e 1023

VALORLDR=analogRead(LEDVERMELHO2);

unsigned long TempoTotal = millis();
if (TempoTotal - previa <= 2000){

// Acende o led vermelho dos carros e o led verde dos pedestres

digitalWrite(LEDVERMELHO, 1);
CARROVERMELHO = true;
digitalWrite(LEDAMARELO, 0);
digitalWrite(LEDVERDE, 0);

digitalWrite(LEDVERMELHO1, 0);
digitalWrite(LEDVERDE1, 1);

}
//===========================================================================================

if (TempoTotal - previa > 2000 && TempoTotal - previa < 4000){

// Acendendo o led verde dos carros e o led vermelho dos pedestres

digitalWrite(LEDVERMELHO, 0);
digitalWrite(LEDAMARELO, 0);
digitalWrite(LEDVERDE, 1);

 digitalWrite(LEDVERMELHO1, 1);
 digitalWrite(LEDVERDE1, 0);
}

//============================================================================================

if (TempoTotal - previa >= 4000 && TempoTotal - previa<=6000){

// Acendendo o led amarelo dos carros e mantendo o led vermelho dos pedestres aceso

digitalWrite(LEDVERMELHO, 0);
digitalWrite(LEDAMARELO, 1);
digitalWrite(LEDVERDE, 0);

 digitalWrite(LEDVERMELHO1, 1);
 digitalWrite(LEDVERDE1, 0);

}
//=============================================================================================
if (CARROVERMELHO && VALORLDR > 600){
digitalWrite(LEDVERMELHO2, 1);
}
else {
digitalWrite(LEDVERMELHO2, 0);
}

// Retornando o programa para o inicio, assim deixando o loop eterno

if (TempoTotal - previa >= 6000){
previa=TempoTotal;
}}