Práctica: Semaforo Regulado

Na práctica anterior fixemos un semáforo con tres leds, que cambiaba a unha velocidade que nós lle determinamos. Agora, de xeito parecido a como fixemos co Blink, imos facer que esa velocidade poida ser regulada desde un potenciómetro.

Partindo do esquema da práctica anterior, imos agora a conectar na placa un potenciómetro de 10k (valen tamén outros valores, nós é o que temos).

(clica para aumentar)

Como ves, o potenciómetro leva a patilla do medio á entrada A0, e as dos extremos á 5V e a terra (GND). En realidade daría igual que extremo vaia a cada lado.

Regular a velocidade:

Agora imos aproveitar o que xa sabemos de potenciómetros e lecturas para facer que a velocidade de transición do noso semáforo se poida controlar desde o potenciómetro. A única diferencia co programa anterior é que creamos unha nova variable, tempo , na que gardamos a lectura do potenciómetro e que logo pasamos como delay para o semáforo. Este valor o imos multiplicar por 2, xa que, se non, o tempo máximo de transición sería moi pequeno (1023 milisegundos).

//Semaforo con velocidade regulada por potenciometro

//Definimos un pin para cada led, 8 para o verde, 9 amarelo e 10 vermello

//isto define o pin para o led Verde

int ledVerde = 8;

//define o pin para o led Amarelo

int ledAmarelo=9;

//define o pin para o led Vermello

int ledVermello=10;

// o que hai no setup lese unha soa vez

void setup() {

// inicia os pines dos leds como saídas (OUTPUT)

pinMode(ledVerde, OUTPUT);

pinMode(ledAmarelo, OUTPUT);

pinMode(ledVermello, OUTPUT);

//para poder ler datos no monitor serie

Serial.begin(9600);

}

// o que hai dentro de void loop se executa unha e outra vez

void loop() {

//le o valor en A0, o multiplica por 2 e o garda como 'tempo'

int tempo=analogRead(A0)*2;

//Encende o led Verde

digitalWrite(ledVerde,HIGH);

//Espero co verde aceso durante o valor tempo, indicado polo pote.

delay(tempo);

//Encendo o led amarelo

digitalWrite(ledAmarelo,HIGH);

//Espero un tercio do que tiven o verde aceso, o laranxa nunca dura tanto.

delay(tempo/3);

//apago os leds verde e amarelo e encendo o vermello

digitalWrite(ledVerde,LOW);

digitalWrite(ledAmarelo,LOW);

digitalWrite(ledVermello,HIGH);

//espero co vermello aceso

delay(tempo);

//apago o led vermello

digitalWrite(ledVermello,LOW);

}

Xa está, o teu semáforo agora cambia ao ritmo que ti lle marcas!

Retos:

1 - Que pasa cando facemos que o tempo sexa baixo? Saberías explicar por que?

2 - A duración do semáforo en laranxa non soe depender da duración do verde nin do vermello... poderías facer que o semáforo sempre estivera en laranxa durante un segundo?

3 - Poderías facer que o tempo que o semáforo está en vermello sexa o doble do que está en verde?