Bonjour
Je suis nouveau sur Arduino (et en C) et un de mes premiers projets est de développer des jouets pour bébé. Pour cela j'ai besoin de jouer des musiques de comptines.
J'ai des dizaines de morceaux composés chacun de dizaines de notes. Plutôt que de taper laborieusement mes fréquences et mes durées avec "Tone" dans des tableaux de chiffres, j'ai développé un petit programme qui permet d'entrer une partition "au kilomètre" et de la faire jouer, en entrant une simple chaine : "LA31MI42SO22DO53" qui veut dire La de la gamme 3 (440hz) pendant 1 temps, ensuite Mi de la gamme 4 pendant 2 temps etc.
Je souhaite transformer ce programme en un objet de bibliothèque pour l'utiliser dans mes différentes applications. Je bloque à la déclaration de mon tableau de notes "char *note[]" qui donne des erreurs de compilation: où et comment faut-il le faire? dans le .h? dans le .cpp? avec [] ou pas? avec une * ? avec un dimensionnement? Tout marche dans mon petit programme ci-dessous, mais impossible d'en faire un include.
Après plusieurs tentatives infructueuses et plusieurs jours de lectures sur les classes, les objets les includes, pointeurs et autres je me tourne vers vous pour des conseils.
J'ai mis en gras ce qui pose souci (pour info j'ai réussi à faire mon objet en transformant le tableau note[] en string ("DODDREMBMIFAFD...") et j'en extrais 2 à 2 les caractères avec substring mais il y a peut-être plus simple, plus économe, plus rapide et plus élégant? j'ai mis ces fichiers en PJ si vous voulez les utiliser, ils fonctionnent bien, et c'est CADEAU!)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 const char *note[] = {"DO","DD","RE","MB","MI","FA","FD","SO","SD","LA","SB","SI","SL"}; const int tempo=300, brocheBIP=10; const String partition = "SI21MI31MB31SI21MI31FD31SO32"; const int longueur = partition.length(); int frequence; byte duree, gamme; String noteLue; void setup() { pinMode(brocheBIP,OUTPUT); } void loop() { for (int i=1 ; i < longueur; i+=4) { noteLue = partition.substring(i-1,i+1) ; byte j=1; while (j < 14) { if (noteLue == note[j-1]) { gamme = partition.substring(i+1,i+2).toInt() ; duree = partition.substring(i+2,i+3).toInt() ; frequence=int(440*pow(2,(gamme+j/12-15/4))); if (j==13) { noTone(brocheBIP); } else { tone(brocheBIP, frequence,(60000/tempo)*duree); } delay((60000/tempo)*duree); noTone(brocheBIP); } j++; } } }
Partager