73 lines
2.9 KiB
C
73 lines
2.9 KiB
C
// ---------------------------------------------------------------------------
|
|
// toneAC2 Library - v1.1 - 09/15/2015
|
|
//
|
|
// AUTHOR/LICENSE:
|
|
// Created by Tim Eckel - teckel@leethost.com
|
|
// Copyright 2015 License: GNU GPL v3 http://www.gnu.org/licenses/gpl-3.0.html
|
|
//
|
|
// LINKS:
|
|
// Project home: https://bitbucket.org/teckel12/arduino-toneac/wiki/Home
|
|
// Blog: http://forum.arduino.cc/index.php?topic=142097.0
|
|
//
|
|
// DISCLAIMER:
|
|
// This software is furnished "as is", without technical support, and with no
|
|
// warranty, express or implied, as to its usefulness for any purpose.
|
|
//
|
|
// PURPOSE:
|
|
// Replacement to the standard tone library with the advantage of nearly twice
|
|
// the volume, 800 bytes smaller compiled code size, and less stress on the
|
|
// speaker. This alternate version uses timer 2 and allows for flexible pin
|
|
// assignment. The primary version (toneAC) allows for higher frequencies,
|
|
// higher quality, and even smaller code size. However, toneAC is fixed to
|
|
// using the PWM timer 1 pins unlike toneAC2 which can use any two pins. Both
|
|
// exclusively use port registers for the fast and smallest code possible.
|
|
//
|
|
// USAGE:
|
|
// Connection is very similar to a piezo or standard speaker. Except, instead
|
|
// of connecting one speaker wire to ground you connect both speaker wires to
|
|
// Arduino pins. Unlike toneAC, with toneAC2 you can connect to any two pins.
|
|
// Just as usual when connecting a speaker, make sure you add an in-line 100
|
|
// ohm resistor between one of the pins and the speaker wire.
|
|
//
|
|
// SYNTAX:
|
|
// toneAC2( pin1, pin2, frequency [, length [, background ]] ) - Play a note.
|
|
// Parameters:
|
|
// * pin1 - Pin to attach one of the speaker wires.
|
|
// * pin2 - Pin to attach the other speaker wire.
|
|
// * frequency - Play the specified frequency indefinitely, turn off with noToneAC2().
|
|
// * length - [optional] Set the length to play in milliseconds. (default: 0 [forever], range: 0 to 2^32-1)
|
|
// * background - [optional] Play note in background or pause till finished? (default: false, values: true/false)
|
|
// noToneAC2() - Stop playing.
|
|
//
|
|
// HISTORY:
|
|
// 09/15/2015 v1.1 - Fix a potential race condition with _tAC2_time. Moved
|
|
// development to Bitbucket.
|
|
//
|
|
// 01/27/2013 v1.0 - Initial release.
|
|
//
|
|
// ---------------------------------------------------------------------------
|
|
|
|
#ifndef toneAC2_h
|
|
#define toneAC2_h
|
|
|
|
#if defined(ARDUINO) && ARDUINO >= 100
|
|
#include <Arduino.h>
|
|
#else
|
|
#include <WProgram.h>
|
|
#endif
|
|
|
|
// This doesn't currently work. Would require more work than simply doing this.
|
|
#if defined(__AVR_ATmega8__) || defined(__AVR_ATmega128__)
|
|
#define TCCR2A TCCR2
|
|
#define TCCR2B TCCR2
|
|
#define TIMSK2 TIMSK
|
|
#define COM2A1 COM21
|
|
#define COM2A0 COM20
|
|
#define OCIE2A OCIE2
|
|
#define OCR2A OCR2
|
|
#define TIMER2_COMPA_vect TIMER2_COMP_vect
|
|
#endif
|
|
|
|
void toneAC2(uint8_t pin1, unsigned int frequency = 0, unsigned long length = 0, uint8_t background = false);
|
|
void noToneAC2();
|
|
#endif |