Advertisement
RuiViana

Untitled

May 20th, 2015
428
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.03 KB | None | 0 0
  1. // Liga led com tempos variados V02
  2. // para uso educativo
  3. // Rui 20/05/2015
  4.  
  5. int Botao = 2; // Botão tem que ser no pino 2
  6. int Led[] = {4, 5, 6, 7, 8, 9, 10, 11, 12, 13}; // Leds
  7.  
  8. long Tempo[10]; // tempo de acendimento do LED
  9. int BotaoSeq = 0; // Sequencia de acendimento do LED
  10.  
  11. // ------------------------------- Seup ---------------------------
  12. void setup()
  13. {
  14. pinMode(Botao,INPUT); // botao entrada
  15. digitalWrite(Botao,HIGH); // Pull-up
  16.  
  17. for(int i=0; i<10; i++)
  18. {
  19. pinMode(Led[i], OUTPUT);
  20. }
  21.  
  22. attachInterrupt(0, LigaLed, FALLING); // Enable interrupt 0 no pino D2
  23. }
  24. // ---------------------------------- LigaLed -------------------------------
  25. void LigaLed() // Rotina de tratamento do itrpt
  26. {
  27. if (BotaoSeq == 10) BotaoSeq = 0; // Se contagem = 10 zera contagem
  28. Tempo[BotaoSeq] = 1; // Tempo = 1 no Led indicado pelo botão
  29. for (unsigned j = 0; j < 10; j++) // Faça 10 vezes
  30. {
  31. if (Tempo[j] > 0 ) // Se tempo maior que zero
  32. {
  33. Tempo[j] = Tempo[j] + 10000; // Some mais 10000 (ajustar este tempo para 1seg)
  34. }
  35. }
  36. BotaoSeq++; // Incrementa contagem de LED
  37. }
  38. // --------------------------- loop --------------------------
  39. void loop()
  40. {
  41. for(;;) // Faça sempre
  42. {
  43. for (unsigned k = 0; k < 10; k++) // Faça 10 vezes
  44. {
  45. Tempo[k]--; // Decrementa tempo de cada LED
  46. if (Tempo[k]< 0) Tempo[k] = 0; // Se ficar negativo, zera
  47. }
  48.  
  49. for (unsigned L = 0; L < 10; L++) // Faça 10 vezes
  50. {
  51. if (Tempo[L] >0) digitalWrite(Led[L],HIGH); // Se tiver tempo acende LED
  52. else digitalWrite(Led[L],LOW); // Se não apague
  53. }
  54. }
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement