You are on page 1of 4

EA076E - Projeto 1 - Semáforo

Daniel Takeshi Nagamini RA145788

Vídeo: ​https://www.youtube.com/watch?v=D6xESChZbdk&feature=youtu.be

Configurações dos componentes do Processor Expert:

TimerInt

Properties:
Interupt period = 10ms

BitIO(LEDs)

É necessário criar um para cada LED:

Properties:
Component name = Script
Pin for I/O = (Esquemático)
Direction = Output

Methods:
ClrVal = generate code
SetVal = generate code
(Não é necessário gerar nenhum outro código)

BitIO(Push button)

Properties:
Component name = Botao
Pin for I/O = PTA13
Direction = Input

ADC(LDR)

Properties:
Component name = LDR
A/D channel (pin) = PTB0
Conversion time = 9.61us
Arquivo main.c

Global variables:

uint16_t estadoldr=0; // Valor retornado pelo LDR


int estadobotao=1; // Valor do estado do botão
int contador=0; // Contador de tempo
int contadoradc=0; // Contador de tempo de ativação do LDR(ADC)

main function:

for(;;) { // Loop

(void)LDR_Measure(TRUE); /* do conversion and wait for the result */


(void)LDR_GetValue16(&estadoldr); /* get the result into value variable */

​ ​ if(contadoradc>200){ // Check LDR state for night mode // 200 é o tempo que o LDR
deve ser ativado para que o night mode passe a valer
if(contadoradc==205){ // LEDs apagados
LEDVermelhoCarros_ClrVal();
LEDAmareloCarros_ClrVal();
LEDVerdeCarros_ClrVal();
LEDVermelhoPedestres_ClrVal();
LEDVerdePedestres_ClrVal();
}
if(contadoradc==400){
LEDAmareloCarros_SetVal();
LEDVermelhoPedestres_ClrVal();
}
if(contadoradc==600){
LEDAmareloCarros_ClrVal();
LEDVermelhoPedestres_SetVal();
contadoradc=210; // Loop para piscar vermelho e amarelo
}
​ ​}
else{ // Case the LDR is not in night mode
​if(estadobotao==1){ // Estado inicial quando o botão não é apertado
LEDVermelhoCarros_ClrVal();
LEDAmareloCarros_ClrVal();
LEDVerdeCarros_SetVal(); // Verde para os carros
LEDVermelhoPedestres_SetVal(); // Vermelho para os pedestres
LEDVerdePedestres_ClrVal();
}
if(estadobotao==0){ // Estado quando o botão é apertado
if(contador==200){ // Amarelo para os carros
LEDVerdeCarros_ClrVal();
LEDAmareloCarros_SetVal();
}
if(contador==400){ // Vermelho para os carros e verde para os pedestres
LEDAmareloCarros_ClrVal();
LEDVermelhoCarros_SetVal();
LEDVermelhoPedestres_ClrVal();
LEDVerdePedestres_SetVal();
}
if(contador==600){
LEDVermelhoPedestres_SetVal();
}
if(contador==610){
LEDVerdePedestres_ClrVal();
}
if(contador==700){
LEDVermelhoPedestres_ClrVal();
}
if(contador==800){
LEDVermelhoPedestres_SetVal();
}
if(contador==900){
LEDVermelhoPedestres_ClrVal();
}
if(contador==1000){ // Depois de piscar o vermelho
contador=0; // Limpa o contador para próxima interação
estadobotao=1; // Habilita o estado para ler o botão novamente
}
​}
​ ​}
​}

Arquivo events.c

void TI1_OnInterrupt(void){ // Variáveis globais externas

extern int estadobotao;


extern int contador;
extern uint16_t estadoldr;
extern int contadoradc;

if(estadobotao==1){ // Estado de leitura do botão


estadobotao=Botao_GetVal();
}
if(estadobotao==0){ // Botão apertado passa a incrementar o contador
contador++;
}
if(estadoldr<65000){ // Valor do LDR quando entra no modo noturno
contadoradc++;
}
else{ // Limpa o LDR caso haja luz
contadoradc=0;
}
}

You might also like