Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Entradas
- const int sens_entr = 9;
- const int sens_sai = 8;
- // Saídas
- const int semaf_verde = 5;
- const int semaf_vermelho= 4;
- const int canc_entr = 3;
- const int canc_sai = 2;
- //etc
- int carros = 0;
- int cont_entr = 0;
- int cont_sai = 0;
- int car_in = 0;
- int car_out = 0;
- // Corre aquado do reset(uma unica vez)
- void setup()
- {
- Serial.begin(115200);
- // Definição de pinos como Entradas/Saidas.
- pinMode(semaf_verde, OUTPUT);
- pinMode(semaf_vermelho, OUTPUT);
- pinMode(canc_entr, OUTPUT);
- pinMode(canc_sai, OUTPUT);
- pinMode(sens_entr,INPUT_PULLUP);
- pinMode(sens_sai,INPUT_PULLUP);
- digitalWrite(semaf_verde, HIGH);
- digitalWrite(semaf_vermelho, HIGH);
- digitalWrite(canc_entr, HIGH);
- digitalWrite(canc_sai, HIGH);
- delay(1000); //Espera 1000ms (1s)
- digitalWrite(semaf_verde, LOW);
- digitalWrite(semaf_vermelho, LOW);
- digitalWrite(canc_entr, LOW);
- digitalWrite(canc_sai, LOW);
- }
- // Sequencia de codigo que corre em ciclo
- void loop()
- {
- // Se o botao de entrada for pressionado e houverem lugares disponiveis no parque
- if ((digitalRead(sens_entr)==LOW) && (digitalRead(semaf_verde)==HIGH) && (carros < 5))
- {
- digitalWrite(canc_entr, HIGH); // A cancela abre e inicializa o contador de tempo
- cont_entr=0;
- if(car_in == 0) // Contador de carros apenas incrementado no primeiro instante (primeiro ciclo do loop) em que se se deteta um carro a entrar
- {
- carros++;
- car_in = 1;
- }
- if((carros == 5)) // Caso o parque esteja cheio acende o led vermelho e apaga o verde
- {
- digitalWrite(semaf_verde, LOW);
- digitalWrite(semaf_vermelho, HIGH);
- }
- }
- // Se botao de entrada deixar de estar pressionado e cancela de entrada se mantiver aberta
- if(( digitalRead(canc_entr) == HIGH) && (digitalRead(sens_entr)==HIGH))
- {
- car_in = 0; // Variavel de controlo para a chegada do proximo carro reinicializada
- if(cont_entr >=500) // Cancela apenas fecha quando tiverem decorrido 5 segundos (500 ciclos com um delay de 10ms)
- {
- digitalWrite(canc_entr, LOW);
- }
- }
- // Se o botao de saida for pressionado
- if ((digitalRead(sens_sai)==LOW))
- {
- digitalWrite(canc_sai, HIGH); // Cancela de saida abre
- cont_sai=0; // Contador de tempo de abertura da cancela de saida inicilizado
- if(car_out == 0) // Contador de carros apenas decrementado no primeiro instante (primeiro ciclo do loop) em que se se deteta um carro a sair
- {
- if(carros>0) // Controlo para que o numero de carros no interior do parque nao seja considerado negativo
- carros--;
- car_out = 1;
- }
- digitalWrite(semaf_verde, HIGH); // Led verde ligado e vermelho desligado independentemente do estado anterior, uma vez que fica sempre pelo menos um lugar livre
- digitalWrite(semaf_vermelho, LOW);
- }
- // Se o botao de saida deixar de estar pressionado e cancela de saida se mantiver aberta
- if(( digitalRead(canc_sai) == HIGH) && (digitalRead(sens_sai)==HIGH))
- {
- car_out = 0; // Variavel de controlo para a saida do proximo carro reinicializada
- if(cont_sai >=500) // Cancela apenas fecha quando tiverem decorrido 5 segundos (500 ciclos com um delay de 10ms)
- digitalWrite(canc_sai, LOW);
- }
- Serial.print (carros);
- Serial.print (" ");
- Serial.print (car_in, DEC);
- Serial.print (" ");
- Serial.print (car_out, DEC);
- Serial.print (" ");
- Serial.print (digitalRead(sens_entr));
- Serial.println(digitalRead(sens_sai));
- cont_entr++; // Incrementados os contadores de tempo das cancelas no final de cada loop
- cont_sai++;
- delay(10); // 10 ms
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement