Advertisement
Guest User

Untitled

a guest
Mar 6th, 2015
213
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.71 KB | None | 0 0
  1. // Entradas
  2. const int sens_entr = 9;
  3. const int sens_sai = 8;
  4.  
  5. // Saídas
  6. const int semaf_verde = 5;
  7. const int semaf_vermelho= 4;
  8. const int canc_entr = 3;
  9. const int canc_sai = 2;
  10.  
  11. //etc
  12. int carros = 0;
  13. int cont_entr = 0;
  14. int cont_sai = 0;
  15. int car_in = 0;
  16. int car_out = 0;
  17.  
  18. // Corre aquado do reset(uma unica vez)
  19. void setup()
  20. {
  21.  
  22. Serial.begin(115200);
  23.  
  24. // Definição de pinos como Entradas/Saidas.
  25. pinMode(semaf_verde, OUTPUT);
  26. pinMode(semaf_vermelho, OUTPUT);
  27. pinMode(canc_entr, OUTPUT);
  28. pinMode(canc_sai, OUTPUT);
  29. pinMode(sens_entr,INPUT_PULLUP);
  30. pinMode(sens_sai,INPUT_PULLUP);
  31.  
  32. digitalWrite(semaf_verde, HIGH);
  33. digitalWrite(semaf_vermelho, HIGH);
  34. digitalWrite(canc_entr, HIGH);
  35. digitalWrite(canc_sai, HIGH);
  36. delay(1000); //Espera 1000ms (1s)
  37. digitalWrite(semaf_verde, LOW);
  38. digitalWrite(semaf_vermelho, LOW);
  39. digitalWrite(canc_entr, LOW);
  40. digitalWrite(canc_sai, LOW);
  41. }
  42.  
  43. // Sequencia de codigo que corre em ciclo
  44. void loop()
  45. {
  46. // Se o botao de entrada for pressionado e houverem lugares disponiveis no parque
  47. if ((digitalRead(sens_entr)==LOW) && (digitalRead(semaf_verde)==HIGH) && (carros < 5))
  48. {
  49. digitalWrite(canc_entr, HIGH); // A cancela abre e inicializa o contador de tempo
  50. cont_entr=0;
  51. 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
  52. {
  53. carros++;
  54. car_in = 1;
  55. }
  56. if((carros == 5)) // Caso o parque esteja cheio acende o led vermelho e apaga o verde
  57. {
  58. digitalWrite(semaf_verde, LOW);
  59. digitalWrite(semaf_vermelho, HIGH);
  60. }
  61. }
  62. // Se botao de entrada deixar de estar pressionado e cancela de entrada se mantiver aberta
  63. if(( digitalRead(canc_entr) == HIGH) && (digitalRead(sens_entr)==HIGH))
  64. {
  65. car_in = 0; // Variavel de controlo para a chegada do proximo carro reinicializada
  66. if(cont_entr >=500) // Cancela apenas fecha quando tiverem decorrido 5 segundos (500 ciclos com um delay de 10ms)
  67. {
  68. digitalWrite(canc_entr, LOW);
  69. }
  70. }
  71. // Se o botao de saida for pressionado
  72. if ((digitalRead(sens_sai)==LOW))
  73. {
  74. digitalWrite(canc_sai, HIGH); // Cancela de saida abre
  75. cont_sai=0; // Contador de tempo de abertura da cancela de saida inicilizado
  76. 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
  77. {
  78. if(carros>0) // Controlo para que o numero de carros no interior do parque nao seja considerado negativo
  79. carros--;
  80. car_out = 1;
  81. }
  82. digitalWrite(semaf_verde, HIGH); // Led verde ligado e vermelho desligado independentemente do estado anterior, uma vez que fica sempre pelo menos um lugar livre
  83. digitalWrite(semaf_vermelho, LOW);
  84. }
  85. // Se o botao de saida deixar de estar pressionado e cancela de saida se mantiver aberta
  86. if(( digitalRead(canc_sai) == HIGH) && (digitalRead(sens_sai)==HIGH))
  87. {
  88. car_out = 0; // Variavel de controlo para a saida do proximo carro reinicializada
  89. if(cont_sai >=500) // Cancela apenas fecha quando tiverem decorrido 5 segundos (500 ciclos com um delay de 10ms)
  90. digitalWrite(canc_sai, LOW);
  91. }
  92.  
  93. Serial.print (carros);
  94. Serial.print (" ");
  95. Serial.print (car_in, DEC);
  96. Serial.print (" ");
  97. Serial.print (car_out, DEC);
  98. Serial.print (" ");
  99. Serial.print (digitalRead(sens_entr));
  100. Serial.println(digitalRead(sens_sai));
  101.  
  102. cont_entr++; // Incrementados os contadores de tempo das cancelas no final de cada loop
  103. cont_sai++;
  104.  
  105.  
  106.  
  107.  
  108. delay(10); // 10 ms
  109. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement