pregomal

Arduino V2

Jun 7th, 2017
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.27 KB | None | 0 0
  1. /*Na declaração das cores, foi-se utilizado o padrão: XC, sendo X a rua e sendo C a cor.
  2. Para a definição da cor, utiliza-se o padrão R = Vermelho, Y = Amarelo, G = Verde*/
  3.  
  4. //Declarando os pinos de saída das luzes do sinal da rua A
  5. int SinalAR=2;
  6. int SinalAY=3;
  7. int SinalAG=4;
  8.  
  9. //Declarando os pinos de saída das luzes do sinal da rua B
  10. int SinalBR=8;
  11. int SinalBY=9;
  12. int SinalBG=10;
  13.  
  14. //Declarando os pinos de saída das luzes do sinal de pedestres
  15. int PedR=11;
  16. int PedG=12;
  17.  
  18. //Declara-se o pino de entrada do sinal do botão
  19. int botao=13;
  20.  
  21. //Armazena o estado do botão. Utiliza-se uma variável do tipo "bool" para economizar dados, visto que o estado do botão só pode possuir dois valores.
  22. bool EstadoBotao = LOW;
  23.  
  24. // variável que guarda o tempo desde o último pressionamento do botão, unsigned long pois armazena até 32 bits em números positivos. (0 até 2^32-1)
  25. unsigned long intervalo=0;
  26.  
  27. void setup() {
  28. // Declaração dos modos de cada um dos pinos:
  29. pinMode(SinalAR, OUTPUT);
  30. pinMode(SinalAY, OUTPUT);
  31. pinMode(SinalAG, OUTPUT);
  32. pinMode(SinalBR, OUTPUT);
  33. pinMode(SinalBY, OUTPUT);
  34. pinMode(SinalBG, OUTPUT);
  35. pinMode(PedR, OUTPUT);
  36. pinMode(PedG, OUTPUT);
  37. pinMode(botao, INPUT);
  38. }
  39.  
  40. //Função que apaga todos os LEDs, utilizado na função "Pedestre".
  41. void ApagaLeds(){
  42. digitalWrite(SinalAR, LOW);
  43. digitalWrite(SinalAY, LOW);
  44. digitalWrite(SinalAG, LOW);
  45. digitalWrite(SinalBR, LOW);
  46. digitalWrite(SinalBY, LOW);
  47. digitalWrite(SinalBG, LOW);
  48. digitalWrite(PedR, LOW);
  49. digitalWrite(PedG, LOW);
  50. }
  51.  
  52. //Função para quando o pedestre apertar o botão.
  53. //A função é realizada durante 34 segundos, para que ela possa ser chamada a qualquer momento, e deixa um intervalo de 34 segundos entre uma chamada e outra.
  54. void Pedestre(){
  55. //O sinal A é o único que deve ter seu comportamento alterado de maneira imediata quando o botão é pressionado. Para tal, o sinal B só terá seu comportamento modificado após o final disso.
  56. if (digitalRead(SinalAR) == HIGH){
  57. // Ele não deve fazer modificação alguma quando o Sinal Vermelho da rua A estiver ligado. Dessa forma, ele automaticamente sai do comando if, e continua o funcionamento como planejado, esperando 8 segundos até sua próxima troca de sinal.
  58. }
  59. else{
  60. //Caso o Sinal ligado na rua A não seja o vermelho, ele deve enviar um sinal alto para as portas SinalAY, SinalBR e PedR, e esperar 3 segundos.
  61. ApagaLeds();
  62. digitalWrite(SinalAY, HIGH);
  63. digitalWrite(SinalBR, HIGH);
  64. digitalWrite(PedR, HIGH);
  65. }
  66. delay(3000);
  67. //Chama-se a função ApagaLeds para permitir que o sinal de pedestres funcione adequadamente.
  68. ApagaLeds();
  69. digitalWrite(SinalAR, HIGH);
  70. digitalWrite(SinalBG, HIGH);
  71. digitalWrite(PedG, HIGH);
  72. delay(5000);
  73. digitalWrite(SinalBG, LOW);
  74. digitalWrite(SinalBY, HIGH);
  75. //Liga-se o segundo sinal de pedestres para sinalizar atenção)
  76. digitalWrite(PedR, HIGH);
  77. delay(3000);
  78. //Retorna ao funcionamento normal após 11 segundos.
  79. ApagaLeds();
  80. digitalWrite(PedR, HIGH);
  81. digitalWrite(SinalBR, HIGH);
  82. digitalWrite(SinalAG, HIGH);
  83. delay(12000);
  84. digitalWrite(SinalAY, HIGH);
  85. delay(3000);
  86. ApagaLeds();
  87. digitalWrite(SinalAR, HIGH);
  88. digitalWrite(SinalBG, HIGH);
  89. digitalWrite(PedG, HIGH);
  90. delay(5000);
  91. digitalWrite(SinalBG, LOW);
  92. digitalWrite(SinalBY, HIGH);
  93. digitalWrite(PedR, HIGH);
  94. delay(3000);
  95. ApagaLeds();
  96. //Sai da função, permitindo que o botão seja pressionado novamente.
  97. }
  98.  
  99. void loop() {
  100. //Funcionamento padrão do conjunto de Sinais.
  101. ApagaLeds();
  102. digitalWrite(PedR, HIGH);
  103. digitalWrite(SinalBR, HIGH);
  104. digitalWrite(SinalAG, HIGH);
  105. delay(12000);
  106. //Lê o estado do botão, e, caso retorne o valor HIGH, executa a função "Pedestre".
  107. if (digitalRead(botao) == HIGH){
  108. Pedestre();
  109. }
  110. digitalWrite(SinalAY, HIGH);
  111. delay(3000);
  112. if (digitalRead(botao) == HIGH){
  113. Pedestre();
  114. }
  115. ApagaLeds();
  116. digitalWrite(SinalAR, HIGH);
  117. digitalWrite(SinalBG, HIGH);
  118. digitalWrite(PedG, HIGH);
  119. delay(5000);
  120. if (digitalRead(botao) == HIGH){
  121. Pedestre();
  122. }
  123. digitalWrite(SinalBG, LOW);
  124. digitalWrite(SinalBY, HIGH);
  125. digitalWrite(PedR, HIGH);
  126. delay(3000);
  127. if (digitalRead(botao) == HIGH){
  128. Pedestre();
  129. }
  130. }
Advertisement
Add Comment
Please, Sign In to add comment