Mercurial > micropython-is31fl3731
changeset 2:5f42778239b8
Add audio_play
| author | Radomir Dopieralski <sheep-devel@sheep.art.pl> |
|---|---|
| date | Wed, 29 Jun 2016 02:05:53 +0200 |
| parents | 88e1e6b73a24 |
| children | 8e509d3b74e0 |
| files | is31fl3731.py |
| diffstat | 1 files changed, 27 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/is31fl3731.py Wed Jun 29 01:36:37 2016 +0200 +++ b/is31fl3731.py Wed Jun 29 02:05:53 2016 +0200 @@ -9,6 +9,8 @@ _BREATH2_REGISTER = const(0x09) _AUDIOSYNC_REGISTER = const(0x06) _SHUTDOWN_REGISTER = const(0x0a) +_GAIN_REGISTER = const(0x0b) +_ADC_REGISTER = const(0x0c) _CONFIG_BANK = const(0x0b) _BANK_ADDRESS = const(0xfd) @@ -47,6 +49,9 @@ return self.i2c.readfrom_mem(self.address, register, 1)[0] self.i2c.writeto_mem(self.address, register, bytearray([value])) + def _mode(self, mode=None): + return self._register(_CONFIG_BANK, _MODE_REGISTER, mode) + def init(self): """Initialize the display.""" self._mode(_PICTURE_MODE) @@ -57,9 +62,6 @@ self._register(frame, col, 0xff) self.audio_sync(False) - def _mode(self, mode=None): - return self._register(_CONFIG_BANK, _MODE_REGISTER, mode) - def sleep(self, value): """Enables, disables or gets the sleep mode.""" return self._register(_CONFIG_BANK, _SHUTDOWN_REGISTER, value) @@ -76,7 +78,7 @@ if delay == 0: self._mode(_PICTURE_MODE) return - delay /= 11 + delay //= 11 if not 0 <= loops <= 7: raise ValueError("Loops out of range") if not 0 <= frames <= 7: @@ -133,14 +135,28 @@ """Enable, disable or get sync of brightness with audio input.""" return self._register(_CONFIG_BANK, _AUDIOSYNC_REGISTER, value) - def audio_play(self, value=None): - """Enable, disable or get frame display according to the audio input.""" - if value is None: - return self._mode() == _AUDIOPLAY_MODE - elif value: - self._mode(_AUDIOPLAY_MODE) - else: + def audio_play(self, sample_rate, audio_gain=0, + agc_enable=False, agc_fast=False): + """ + Enable or disable frame display according to the audio input. + + The ``sample_rate`` specifies sample rate in microseconds. If it is 0, + disable the audio play. The ``audio_gain`` specifies amplification + between 0dB and 21dB. + """ + if sample_rate == 0: self._mode(_PICTURE_MODE) + return + sample_rate /= 46 + if not 1 <= sample_rate <= 256: + raise ValueError("Sample rate out of range") + self._register(_CONFIG_BANK, _ADC_REGISTER, sample_rate % 256) + audio_gain //= 3 + if not 0 <= audio_gain <= 7: + raise ValueError("Audio gain out of range") + self._register(_CONFIG_BANK, _GAIN_REGISTER, + bool(agc_enable) << 3 | bool(agc_fast) << 4 | audio_gain) + self._mode(_AUDIOPLAY_MODE) def fill(self, color=0, frame=None): """Fill the display with specified color."""
