P2E-Buzzer-Music-FR

De MCHobby - Wiki
Révision datée du 27 janvier 2025 à 22:05 par Admin (discussion | contributions) (Page créée avec « {{P2E-NAV}} == Introduction == Dans le [P2E-Buzzer-PWM-FR|tutoriel consacré au Buzzer]], nous avons découvert qu'un signal PWM pouvait être utilisé pour produire une… »)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Sauter à la navigation Sauter à la recherche

Introduction

Dans le [P2E-Buzzer-PWM-FR|tutoriel consacré au Buzzer]], nous avons découvert qu'un signal PWM pouvait être utilisé pour produire une tonalité et des notes.

Il existe aussi un langage nommé RTTTL relativement simple permettant d'encoder une mélodie sous forme d'une caractères. __Ring Tone Text Transfer Language__ (RTTTL) a été développé par Nokia pour permettre le transfert de mélodies (appelée "_ringtones_") vers un téléphone portable Nokia. Pour l'époque, cette possibilité de personnaliser la sonnerie du téléphone fît du Nokia 3310, l'un des téléphones les plus vendu de sa génération.

 


RTTTL représente donc une mise en données de la musique destinée à être jouée sur un téléphone mobile.


Branchement simplifié

Dans cet exemple, nous allons utiliser un interpréteur RTTTTL pour reproduire les mélodies simples tels quelles étaient produite sur les téléphones Nokia de premières générations.

Derrière ce style évidemment rétro, il est possible de reconnaître des thèmes éminemment connus.

 

Remarque:

  • Le script peut être interrompu mais cela n'interrompt pas la génération du son puisque qu'un contrôleur PWM est autonome.
  • Il est bien entendu possible d'interrompre la production du son (le générateur PWM) en pressant le bouton RESET de la carte.

Code

Le code ci-dessous peut être saisi dans une session REPL ou dans Thonny IDE.

Cet exemple est également disponible dans le dépôt pwm-buzzer.py .

 1 from machine import Pin, ADC, PWM
 2 from maps import map
 3 import time
 4 
 5 # Désactive PowerSafe (lower ripple)
 6 Pin( 23, Pin.OUT, value=True )
 7 
 8 a0 = ADC( Pin( Pin.board.GP26 ) )
 9 buzzer = PWM( Pin( Pin.board.GP13 ) )
10 buzzer.duty_u16( 65535//3 )
11 while True:
12     val = a0.read_u16()
13     hertz = int( map(val, 0, 65535, 100, 10000 ) )
14     buzzer.freq( hertz )
15     print( 'frequence = %5i Hz' % (hertz) )
16     time.sleep_ms( 100 )