Advertisement
mutchuloko

Correção LEDs

Feb 13th, 2016
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.41 KB | None | 0 0
  1. const int BTN = 2; // botao no pino digital 3 para podermos usar ISR
  2. int redPin = 13;
  3. int blueaPin = 12;
  4.  
  5. // Os pinos 9, 10, 11 são pinos de saída analógica e digital
  6. int greenaPin = 11;
  7. int whiteaPin = 10;
  8. int whitebPin = 9;
  9. // ##########################################################
  10.  
  11. int greenbPin = 8;
  12. int bluebPin = 7;
  13. int redbPin = 6;
  14.  
  15. int fade_step = 5;  // Este é o passo do sinal PWM, ou duty cycle. Quer dizer que ele aumenta o duty cycle de 5 em 5
  16. int brightness = 0; // variavel para salvar o brilho do led
  17.  
  18. volatile int counter = 0; // variavel volatil para salvamento do contador do botao
  19.  
  20. void setup() {
  21.   /*
  22.      Assim não precisa dar high no pino para ativar a resistência de pull-up(interna)
  23.   */
  24.   pinMode(BTN, INPUT_PULLUP);
  25.   pinMode(redPin, OUTPUT);
  26.   pinMode(blueaPin, OUTPUT);
  27.   pinMode(greenaPin, OUTPUT);
  28.   pinMode(whiteaPin, OUTPUT);
  29.   pinMode(whitebPin, OUTPUT);
  30.   pinMode(greenbPin, OUTPUT);
  31.   pinMode(bluebPin, OUTPUT);
  32.   pinMode(redbPin, OUTPUT);
  33.   attachInterrupt(0, inc, RISING); // conexao da interrupcao 0 com a funcao inc qunado o pino 2 estiver a passar para alta
  34. }
  35.  
  36. /* Fiz uma pequena modificação, mas o seu jeito estava certo.
  37.  * tente sempre fazer um if e else, por questôes de prática de programação não pr estar errado
  38.  * Coloquei counter igual a três somente para você fazer o teste com as duas funções.
  39.  */
  40.  
  41. void inc() { // funcao do ISR
  42.   if (counter == 3){
  43.     counter = 0;
  44.   }
  45.   else{
  46.     counter++;
  47.   }
  48. }
  49.  
  50. void loop() {
  51.   if (counter == 1)
  52.   {
  53.     digitalWrite(redPin, HIGH);
  54.     delay(100);
  55.     digitalWrite(redPin, LOW);
  56.     delay(100);
  57.     digitalWrite(blueaPin, HIGH);
  58.     delay(100);
  59.     digitalWrite(blueaPin, LOW);
  60.     delay(100);
  61.     digitalWrite(greenaPin, HIGH);
  62.     delay(100);
  63.     digitalWrite(greenaPin, LOW);
  64.     delay(100);
  65.     digitalWrite(whiteaPin, HIGH);
  66.     delay(100);
  67.     digitalWrite(whiteaPin, LOW);
  68.     delay(100);
  69.     digitalWrite(whitebPin, HIGH);
  70.     delay(100);
  71.     digitalWrite(whitebPin, LOW);
  72.     delay(100);
  73.     digitalWrite(greenbPin, HIGH);
  74.     delay(100);
  75.     digitalWrite(greenbPin, LOW);
  76.     delay(100);
  77.     digitalWrite(bluebPin, HIGH);
  78.     delay(100);
  79.     digitalWrite(bluebPin, LOW);
  80.     delay(100);
  81.     digitalWrite(redbPin, HIGH);
  82.     delay(100);
  83.     digitalWrite(redbPin, LOW);
  84.     delay(100);
  85.   }
  86.   else if (counter == 2)
  87.   {
  88.     /*
  89.      * O Problema está aqui
  90.      * Funções analógicas não trabalham com high ou low(em teoria é um high/low muito rápido que muda o nível de
  91.      * tensão das portas)
  92.      *
  93.      * Ele trabalha com cuty cycle, que é período que ele vai ficado em low ou high antes de mudar de estado
  94.      * Portanto a função analogWrite é assim analogWrite(PIN, Estado) sendo estado de 0 -> 255 (8 bits)
  95.      * Para não ficar em um loop infinito vamos fazer duas funções de loop FOR, nesse caso para o fade ficar
  96.      * mais interessante
  97.      *
  98.      * Sugiro que use 30ms no lugar de 100ms
  99.      */
  100.  
  101.     // Aumenta o brilho
  102.     for (brightness = 0; brightness < 256; brightness += fade_step) {
  103.       analogWrite(whitebPin, brightness);
  104.       analogWrite(whiteaPin, brightness);
  105.       delay(30);
  106.     }
  107.  
  108.     // Diminui o brilho
  109.     for (brightness = 255; brightness >= 0; brightness -= fade_step) {
  110.       analogWrite(whitebPin, brightness);
  111.       analogWrite(whiteaPin, brightness);
  112.       delay(30);
  113.     }
  114.    
  115.     digitalWrite(greenbPin, HIGH);
  116.     digitalWrite(greenaPin, HIGH);
  117.     delay(100);
  118.     digitalWrite(greenbPin, LOW);
  119.     digitalWrite(greenaPin, LOW);
  120.     delay(100);
  121.     digitalWrite(bluebPin, HIGH);
  122.     digitalWrite(blueaPin, HIGH);
  123.     delay(100);
  124.     digitalWrite(bluebPin, LOW);
  125.     digitalWrite(blueaPin, LOW);
  126.     delay(100);
  127.     digitalWrite(redbPin, HIGH);
  128.     digitalWrite(redPin, HIGH);
  129.     delay(100);
  130.     digitalWrite(redbPin, LOW);
  131.     digitalWrite(redPin, LOW);
  132.     delay(100);
  133.     digitalWrite(bluebPin, HIGH);
  134.     digitalWrite(blueaPin, HIGH);
  135.     delay(100);
  136.     digitalWrite(bluebPin, LOW);
  137.     digitalWrite(blueaPin, LOW);
  138.     delay(100);
  139.     digitalWrite(greenbPin, HIGH);
  140.     digitalWrite(greenaPin, HIGH);
  141.     delay(100);
  142.     digitalWrite(greenbPin, LOW);
  143.     digitalWrite(greenaPin, LOW);
  144.     delay(100);
  145.     digitalWrite(whitebPin, HIGH);
  146.     digitalWrite(whiteaPin, HIGH);
  147.     delay(200);
  148.     digitalWrite(whitebPin, LOW);
  149.     digitalWrite(whiteaPin, LOW);
  150.     delay(100);
  151.   }
  152. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement