Skip to content
Snippets Groups Projects
buzzer.cpp 1021 B
Newer Older
  • Learn to ignore specific revisions
  • #include "Marlin.h"
    #if HAS_BUZZER
    
      #include "buzzer.h"
      #include "ultralcd.h"
    
    
      void buzz(long duration, uint16_t freq) {
        if (freq > 0) {
    
          #if ENABLED(LCD_USE_I2C_BUZZER)
    
            lcd_buzz(duration, freq);
    
          #elif PIN_EXISTS(BEEPER) // on-board buzzers have no further condition
            SET_OUTPUT(BEEPER_PIN);
    
            #if ENABLED(SPEAKER) // a speaker needs a AC ore a pulsed DC
    
              //tone(BEEPER_PIN, freq, duration); // needs a PWMable pin
    
              unsigned int delay = 1000000 / freq / 2;
              int i = duration * freq / 1000;
              while (i--) {
    
                WRITE(BEEPER_PIN, HIGH);
    
                delayMicroseconds(delay);
    
                WRITE(BEEPER_PIN, LOW);
    
                delayMicroseconds(delay);
               }
            #else // buzzer has its own resonator - needs a DC
    
              WRITE(BEEPER_PIN, HIGH);
    
              delay(duration);
    
              WRITE(BEEPER_PIN, LOW);
    
          #else
            delay(duration);
          #endif
        }
        else {
          delay(duration);
        }
      }
    #endif