1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
//! Sound functionality provided by the arduino framework use super::gpio::Pin; /// Allow a pin to output square wave notes asynchronously using the IntervalTimer behind the scenes. /// /// # See Also /// - [tone() - Arduino Reference](https://www.arduino.cc/reference/en/language/functions/advanced-io/tone/) /// - [noTone() - Arduino Reference](https://www.arduino.cc/reference/en/language/functions/advanced-io/notone/) pub trait Tone { /// Generates a square wave of the specified frequency (and 50% duty cycle) on a pin. /// A duration can be specified, otherwise the wave continues until a call to noTone(). /// The pin can be connected to a piezo buzzer or other speaker to play tones. /// /// Only one tone can be generated at a time. If a tone is already playing on a different /// pin, the call to tone() will have no effect. If the tone is playing on the same pin, /// the call will set its frequency. /// /// Use of the tone() function will interfere with PWM output on pins 3 and 11 /// (on boards other than the Mega). It is not possible to generate tones lower than 31Hz. /// For technical details, see Brett Hagman’s notes. /// /// # Notes and Warnings /// If you want to play different pitches on multiple pins, you need to call noTone() on one /// pin before calling tone() on the next pin. /// /// # See Also /// - [tone() - Arduino Reference](https://www.arduino.cc/reference/en/language/functions/advanced-io/tone/) fn tone(&self, frequency: u16); /// Generates a square wave of the specified frequency (and 50% duty cycle) on a pin. /// A duration can be specified, otherwise the wave continues until a call to noTone(). /// The pin can be connected to a piezo buzzer or other speaker to play tones. /// /// Only one tone can be generated at a time. If a tone is already playing on a different /// pin, the call to tone() will have no effect. If the tone is playing on the same pin, /// the call will set its frequency. /// /// Use of the tone() function will interfere with PWM output on pins 3 and 11 /// (on boards other than the Mega). It is not possible to generate tones lower than 31Hz. /// For technical details, see Brett Hagman’s notes. /// /// # Notes and Warnings /// If you want to play different pitches on multiple pins, you need to call noTone() on one /// pin before calling tone() on the next pin. /// /// # See Also /// - [tone() - Arduino Reference](https://www.arduino.cc/reference/en/language/functions/advanced-io/tone/) fn tone_with_duration(&self, frequency: u16, duration: u64); /// Stops the generation of a square wave triggered by tone(). Has no effect if no tone is being generated. /// /// # Notes and Warnings /// If you want to play different pitches on multiple pins, you need to call noTone() on one /// pin before calling tone() on the next pin. /// /// # See Also /// - [noTone() - Arduino Reference](https://www.arduino.cc/reference/en/language/functions/advanced-io/notone/) fn no_tone(&self); } extern "C" { fn tone(pin: u8, frequency: u16, duration: u64); fn noTone(pin: u8); } impl Tone for Pin { fn tone(&self, frequency: u16) { unsafe { tone(self.into(), frequency, 0) } } fn tone_with_duration(&self, frequency: u16, duration: u64) { unsafe { tone(self.into(), frequency, duration) } } fn no_tone(&self) { unsafe { noTone(self.into()) } } }