Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const int BTN = 2; // botao no pino digital 3 para podermos usar ISR
- int redPin = 13;
- int blueaPin = 12;
- // Os pinos 9, 10, 11 são pinos de saída analógica e digital
- int greenaPin = 11;
- int whiteaPin = 10;
- int whitebPin = 9;
- // ##########################################################
- int greenbPin = 8;
- int bluebPin = 7;
- int redbPin = 6;
- 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
- int brightness = 0; // variavel para salvar o brilho do led
- volatile int counter = 0; // variavel volatil para salvamento do contador do botao
- void setup() {
- /*
- Assim não precisa dar high no pino para ativar a resistência de pull-up(interna)
- */
- pinMode(BTN, INPUT_PULLUP);
- pinMode(redPin, OUTPUT);
- pinMode(blueaPin, OUTPUT);
- pinMode(greenaPin, OUTPUT);
- pinMode(whiteaPin, OUTPUT);
- pinMode(whitebPin, OUTPUT);
- pinMode(greenbPin, OUTPUT);
- pinMode(bluebPin, OUTPUT);
- pinMode(redbPin, OUTPUT);
- attachInterrupt(0, inc, RISING); // conexao da interrupcao 0 com a funcao inc qunado o pino 2 estiver a passar para alta
- }
- /* Fiz uma pequena modificação, mas o seu jeito estava certo.
- * tente sempre fazer um if e else, por questôes de prática de programação não pr estar errado
- * Coloquei counter igual a três somente para você fazer o teste com as duas funções.
- */
- void inc() { // funcao do ISR
- if (counter == 3){
- counter = 0;
- }
- else{
- counter++;
- }
- }
- void loop() {
- if (counter == 1)
- {
- digitalWrite(redPin, HIGH);
- delay(100);
- digitalWrite(redPin, LOW);
- delay(100);
- digitalWrite(blueaPin, HIGH);
- delay(100);
- digitalWrite(blueaPin, LOW);
- delay(100);
- digitalWrite(greenaPin, HIGH);
- delay(100);
- digitalWrite(greenaPin, LOW);
- delay(100);
- digitalWrite(whiteaPin, HIGH);
- delay(100);
- digitalWrite(whiteaPin, LOW);
- delay(100);
- digitalWrite(whitebPin, HIGH);
- delay(100);
- digitalWrite(whitebPin, LOW);
- delay(100);
- digitalWrite(greenbPin, HIGH);
- delay(100);
- digitalWrite(greenbPin, LOW);
- delay(100);
- digitalWrite(bluebPin, HIGH);
- delay(100);
- digitalWrite(bluebPin, LOW);
- delay(100);
- digitalWrite(redbPin, HIGH);
- delay(100);
- digitalWrite(redbPin, LOW);
- delay(100);
- }
- else if (counter == 2)
- {
- /*
- * O Problema está aqui
- * 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
- * tensão das portas)
- *
- * Ele trabalha com cuty cycle, que é período que ele vai ficado em low ou high antes de mudar de estado
- * Portanto a função analogWrite é assim analogWrite(PIN, Estado) sendo estado de 0 -> 255 (8 bits)
- * Para não ficar em um loop infinito vamos fazer duas funções de loop FOR, nesse caso para o fade ficar
- * mais interessante
- *
- * Sugiro que use 30ms no lugar de 100ms
- */
- // Aumenta o brilho
- for (brightness = 0; brightness < 256; brightness += fade_step) {
- analogWrite(whitebPin, brightness);
- analogWrite(whiteaPin, brightness);
- delay(30);
- }
- // Diminui o brilho
- for (brightness = 255; brightness >= 0; brightness -= fade_step) {
- analogWrite(whitebPin, brightness);
- analogWrite(whiteaPin, brightness);
- delay(30);
- }
- digitalWrite(greenbPin, HIGH);
- digitalWrite(greenaPin, HIGH);
- delay(100);
- digitalWrite(greenbPin, LOW);
- digitalWrite(greenaPin, LOW);
- delay(100);
- digitalWrite(bluebPin, HIGH);
- digitalWrite(blueaPin, HIGH);
- delay(100);
- digitalWrite(bluebPin, LOW);
- digitalWrite(blueaPin, LOW);
- delay(100);
- digitalWrite(redbPin, HIGH);
- digitalWrite(redPin, HIGH);
- delay(100);
- digitalWrite(redbPin, LOW);
- digitalWrite(redPin, LOW);
- delay(100);
- digitalWrite(bluebPin, HIGH);
- digitalWrite(blueaPin, HIGH);
- delay(100);
- digitalWrite(bluebPin, LOW);
- digitalWrite(blueaPin, LOW);
- delay(100);
- digitalWrite(greenbPin, HIGH);
- digitalWrite(greenaPin, HIGH);
- delay(100);
- digitalWrite(greenbPin, LOW);
- digitalWrite(greenaPin, LOW);
- delay(100);
- digitalWrite(whitebPin, HIGH);
- digitalWrite(whiteaPin, HIGH);
- delay(200);
- digitalWrite(whitebPin, LOW);
- digitalWrite(whiteaPin, LOW);
- delay(100);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement