pregomal

Arduino V3

Jun 8th, 2017
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.95 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áveis que guardam períodos de tempo, utiliza-se unsigned int pois armazena até 2 bytes em números positivos, ou seja, de 0 a (2^16) - 1. Isso é duas vezes mais do que o padrão int ((2^15) - 1)
  25. unsigned int contador = 0; //Conta o período de tempo desde o último pressionamento do botão.
  26. unsigned int intervalo = 0; //É utilizado para contar o tempo que o sinal A verde permaneceu ligado.
  27.  
  28. void setup() {
  29. // Declaração dos modos de cada um dos pinos:
  30. pinMode(SinalAR, OUTPUT);
  31. pinMode(SinalAY, OUTPUT);
  32. pinMode(SinalAG, OUTPUT);
  33. pinMode(SinalBR, OUTPUT);
  34. pinMode(SinalBY, OUTPUT);
  35. pinMode(SinalBG, OUTPUT);
  36. pinMode(PedR, OUTPUT);
  37. pinMode(PedG, OUTPUT);
  38. pinMode(botao, INPUT);
  39. }
  40.  
  41. //Função que apaga todos os LEDs, utilizado na função "Pedestre".
  42. void ApagaLeds(){
  43. digitalWrite(SinalAR, LOW);
  44. digitalWrite(SinalAY, LOW);
  45. digitalWrite(SinalAG, LOW);
  46. digitalWrite(SinalBR, LOW);
  47. digitalWrite(SinalBY, LOW);
  48. digitalWrite(SinalBG, LOW);
  49. digitalWrite(PedR, LOW);
  50. digitalWrite(PedG, LOW);
  51. }
  52.  
  53. //Função para quando o pedestre apertar o botão.
  54. //A função é realizada durante 23 segundos, e em sua saída, deve-se esperar mais 11 segundos até o seu reinício. Isso coincide com o
  55. void Pedestre(){
  56. //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.
  57. ApagaLeds();
  58. contador=millis(); //Usa-se o millis para checar se o tempo decorrido foi acima de 34 segundos.
  59. digitalWrite(SinalAY, HIGH);
  60. digitalWrite(SinalBR, HIGH);
  61. digitalWrite(PedR, HIGH);
  62. delay(3000);
  63. //Chama-se a função ApagaLeds para permitir que o sinal de pedestres funcione adequadamente.
  64. ApagaLeds();
  65. digitalWrite(SinalAR, HIGH);
  66. digitalWrite(SinalBG, HIGH);
  67. digitalWrite(PedG, HIGH);
  68. delay(5000);
  69. digitalWrite(SinalBG, LOW);
  70. digitalWrite(SinalBY, HIGH);
  71. //Liga-se o segundo sinal de pedestres para sinalizar atenção)
  72. digitalWrite(PedR, HIGH);
  73. delay(3000);
  74. //Retorna ao funcionamento normal após 11 segundos.
  75. ApagaLeds();
  76. digitalWrite(PedR, HIGH);
  77. digitalWrite(SinalBR, HIGH);
  78. digitalWrite(SinalAG, HIGH);
  79. delay(12000);
  80. //Sai da função, e o contador continua até que se tenham passado 34 segundos desde o último pressionamento.
  81. }
  82.  
  83. void loop() {
  84. //Funcionamento padrão do conjunto de Sinais.
  85. ApagaLeds();
  86. digitalWrite(PedR, HIGH);
  87. digitalWrite(SinalBR, HIGH);
  88. digitalWrite(SinalAG, HIGH);
  89. while (intervalo < 1200){
  90. delay(10);
  91. intervalo=intervalo+1;
  92. //Lê o estado do botão, e, caso retorne o valor HIGH, executa a função "Pedestre".
  93. if (digitalRead(botao) == HIGH){
  94. //Caso tenha se passado 34 segundos desde o último pressionamento do botão, ele permite que o botão seja pressionado novamente.
  95. if (contador >= 34000);{
  96. Pedestre();
  97. intervalo = 1200;
  98. }
  99. }
  100. }
  101. digitalWrite(SinalAY, HIGH);
  102. delay(3000);
  103. digitalWrite(SinalAR, HIGH);
  104. digitalWrite(SinalBG, HIGH);
  105. digitalWrite(PedG, HIGH);
  106. delay(5000);
  107. digitalWrite(SinalBG, LOW);
  108. digitalWrite(SinalBY, HIGH);
  109. digitalWrite(PedR, HIGH);
  110. delay(3000);
  111. }
Advertisement
Add Comment
Please, Sign In to add comment