/******************************************************************************* ** * Projeto 80 - Saída PWM com Interrupção por timer * Autor: Angelo Luis Ferreira * Data: 02/04/2020 (dd/mm/AA) * http://squids.com.br/arduino * *******************************************************************************/ #include // hardware const byte pinLed = 9; const byte pinBuzzer = 10; const byte pinSensor = 2; byte pinPWM; // define pwm no pino 9 ou pino 10 // variáveis int duty = 0; const byte increment = 20; byte control = 0; boolean state = 0; void setup(){ pinMode(pinLed, OUTPUT); pinMode(pinBuzzer, OUTPUT); pinMode(pinSensor, INPUT); Timer1.initialize(500000); // Inicializa o timer1 com período de 0,5 segundos Timer1.attachInterrupt(setTimer); // Chama a função setTimer a cada período do timer (a cada 0,5 seg) attachInterrupt(digitalPinToInterrupt(2), setStop, RISING); // // Chama função "setStop", quando houver o toque no sensor Serial.begin(9600); } void loop() { // liga ou desliga o led laranja if(state){ Timer1.resume(); // retoma o timer for (byte i =9; i< 11; i++) { pinPWM = i; Timer1.pwm(pinPWM, duty); // setup pwm no pino 9 e 10, variando de 0% to 100% duty cicle } } else { Timer1.stop(); // desarma o timer Timer1.disablePwm(pinPWM); // desarma o pwm no pino 10 e libera o digitalWrite() e analogWrite() digitalWrite(pinLed, LOW); noTone(pinBuzzer); } } void setTimer() { if (duty > 1024) control = 1; if (duty == 0) control = 0; Serial.println(duty); switch (control) { case 0: duty += increment; break; case 1: duty -= increment; break; } } void setStop() { state = !state; }