Ligne 59 : |
Ligne 59 : |
| | | |
| == Le code == | | == Le code == |
− | xxx
| + | Pas besoin de taper tout le code, vous pouvez télécharger ce programme depuis [http://ardx.org/CODE06 ardx.org/CODE06] et faire un copier/coller dans votre croquis. |
| | | |
− | <nowiki>/* code */</nowiki> | + | <nowiki>/* Melody (cleft) 2005 D. Cuartielles pour K3 |
| + | * |
| + | * Cet exemple utilise un piezo pour jouer une |
| + | * mélodie. Il envoie une onde carrée à la |
| + | * fréquence adéquate pour générer la tonalité correspondante. |
| + | * |
| + | * Le calcul de la tonalité est fait en suivant |
| + | * l'opération mathématique suivante: |
| + | * |
| + | * timeHigh = période/2 = 1/(2*FrequenceTonalité) |
| + | * |
| + | * Où les différentes tonalités sont spécifiées dans la table suivante: |
| + | * |
| + | * note Fréquence Période timeHigh |
| + | * Do c 261 Hz 3830 1915 |
| + | * Ré d 294 Hz 3400 1700 |
| + | * Mi e 329 Hz 3038 1519 |
| + | * Fa f 349 Hz 2864 1432 |
| + | * Sol g 392 Hz 2550 1275 |
| + | * La a 440 Hz 2272 1136 |
| + | * Si b 493 Hz 2028 1014 |
| + | * Do C 523 Hz 1912 956 |
| + | * |
| + | * http://www.arduino.cc/en/Tutorial/Melody |
| + | */ |
| + | |
| + | int speakerPin = 9; |
| + | int length = 15; // Le nombre de notes |
| + | |
| + | // Les notes. Un espace représente un blanc |
| + | char notes[] = "ccggaagffeeddc "; |
| + | |
| + | // Rythme correspondant à chaque note |
| + | int beats[] = { 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 4 }; |
| + | int tempo = 300; |
| + | |
| + | void playTone(int tone, int duration) { |
| + | for (long i = 0; i < duration * 1000L; i += tone * 2) { |
| + | digitalWrite(speakerPin, HIGH); |
| + | delayMicroseconds(tone); |
| + | digitalWrite(speakerPin, LOW); |
| + | delayMicroseconds(tone); |
| + | } |
| + | } |
| + | |
| + | void playNote(char note, int duration) { |
| + | char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' }; |
| + | int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 }; |
| + | |
| + | // Jouer la tonalité correspondant à une note |
| + | for (int i = 0; i < 8; i++) { |
| + | if (names[i] == note) { |
| + | playTone(tones[i], duration); |
| + | } |
| + | } |
| + | } |
| + | |
| + | void setup() { |
| + | pinMode(speakerPin, OUTPUT); |
| + | } |
| + | |
| + | void loop() { |
| + | for (int i = 0; i < length; i++) { |
| + | if (notes[i] == ' ') { |
| + | delay(beats[i] * tempo); // Attendre |
| + | } |
| + | else { |
| + | playNote(notes[i], beats[i] * tempo); |
| + | } |
| + | |
| + | // Pause entre deux notes |
| + | delay(tempo / 2); |
| + | } |
| + | }</nowiki> |
| | | |
| == Cela ne fonctionne pas? == | | == Cela ne fonctionne pas? == |