Je reposte mon code que j'ai coupé en deux pour plus de lisibilité et de compréhension.
Mon projet:
faire fonctionner un servomoteur dans la bouche d'une marionnette pour la faire chanter.
Problème :1
Je ne comprends pas pourquoi
Serial.println(noteDuration);
me renvoie pour valeur 95 pour durée 1, 190 pour 2,380 pour 4 et 760 pour 8.
Voilà la partie du code:
#include <Servo.h>
#include "pitches.h"
Servo boucheServo1;
int pinServo = 9;
int melody[] = {
NOTE_E4, NOTE_E4, NOTE_E4, NOTE_E4,NOTE_E4,NOTE_E4,NOTE_E4,NOTE_G4 ,NOTE_C4,NOTE_D4,NOTE_E4,NOTE_F4,NOTE_F4,NOTE_F4,NOTE_F4,NOTE_F4,NOTE_E4,NOTE_E4,NOTE_E4,NOTE_E4,NOTE_E4,NOTE_D4,NOTE_D4,NOTE_E4,NOTE_D4,NOTE_G4, NOTE_E4, NOTE_E4, NOTE_E4,NOTE_E4,NOTE_E4,NOTE_E4,NOTE_E4 ,NOTE_G4,NOTE_C4,NOTE_D4,NOTE_E4,NOTE_F4,NOTE_F4,NOTE_F4,NOTE_F4,NOTE_F4,NOTE_E4,NOTE_E4,NOTE_E4,NOTE_E4,NOTE_G4,NOTE_G4,NOTE_F4,NOTE_D4,NOTE_C4};
// note durations: 4 = quarter note, 8 = eighth note, etc.:
int noteDurations[] = {
2,2,4,2,2,4,2,2,2,1,8,2,2,2,1,2,2,2,1,1,2,2,2,2,4,4,2,2,4,2,2,4,2,2,2,1,8,2,2,2,2,2,2,2,1,1,2,2,2,2,8 };
void setup() {
Serial.begin(9600);
for (int thisNote = 0; thisNote < 51; thisNote++) {
int noteDuration = noteDurations[thisNote]*95;
tone(A0, melody[thisNote],noteDuration); // A0 es la sortie de l arduino
int pauseBetweenNotes = noteDuration * 1.30;
delay(pauseBetweenNotes);
}
boucheServo1.attach(pinServo);
}
void loop() {
for (int thisNote = 0; thisNote < 51; thisNote++) {
int noteDuration = noteDurations[thisNote]*95;
tone(8, melody[thisNote],noteDuration);
int pauseBetweenNotes = noteDuration * 1.30;
delay(pauseBetweenNotes);
Serial.println(noteDuration);// renvois 95 pour durée 1, 190 pour 2,380 pour 4 et 760 pour 8.
}
Maintenant la partie 2 :
switch
Lorsque je vérifie le code j'ai ce message d’erreur.
'noteDuration' was not declared in this scope
voilà le code:
#include <Servo.h>
#include "pitches.h"
Servo boucheServo1;
int pinServo = 9;
int melody[] = {
NOTE_E4, NOTE_E4, NOTE_E4, NOTE_E4,NOTE_E4,NOTE_E4,NOTE_E4,NOTE_G4 ,NOTE_C4,NOTE_D4,NOTE_E4,NOTE_F4,NOTE_F4,NOTE_F4,NOTE_F4,NOTE_F4,NOTE_E4,NOTE_E4,NOTE_E4,NOTE_E4,NOTE_E4,NOTE_D4,NOTE_D4,NOTE_E4,NOTE_D4,NOTE_G4, NOTE_E4, NOTE_E4, NOTE_E4,NOTE_E4,NOTE_E4,NOTE_E4,NOTE_E4 ,NOTE_G4,NOTE_C4,NOTE_D4,NOTE_E4,NOTE_F4,NOTE_F4,NOTE_F4,NOTE_F4,NOTE_F4,NOTE_E4,NOTE_E4,NOTE_E4,NOTE_E4,NOTE_G4,NOTE_G4,NOTE_F4,NOTE_D4,NOTE_C4};
// note durations: 4 = quarter note, 8 = eighth note, etc.:
int noteDurations[] = {
2,2,4,2,2,4,2,2,2,1,8,2,2,2,1,2,2,2,1,1,2,2,2,2,4,4,2,2,4,2,2,4,2,2,2,1,8,2,2,2,2,2,2,2,1,1,2,2,2,2,8 };
void setup() {
Serial.begin(9600);
for (int thisNote = 0; thisNote < 51; thisNote++) {
int noteDuration = noteDurations[thisNote]*95;
tone(A0, melody[thisNote],noteDuration); // A0 es la sortie de l arduino
int pauseBetweenNotes = noteDuration * 1.30;
delay(pauseBetweenNotes);
}
boucheServo1.attach(pinServo);
}
void loop() {
for (int thisNote = 0; thisNote < 51; thisNote++) {
int noteDuration = noteDurations[thisNote]*95;
tone(8, melody[thisNote],noteDuration);
int pauseBetweenNotes = noteDuration * 1.30;
delay(pauseBetweenNotes);
Serial.println(noteDuration);// renvois 95 pour durée 1, 190 pour 2,380 pour 4 et 760 pour 8.
}
/*-------------------------------------------------------------
----------------partie 2---------------------------------------
---------------------------------------------------------------*/
switch (noteDuration) { // debut de la structure
case 95:
boucheServo1.write(115);
break;
case 190:
boucheServo1.write(125);
break;
case 380:
boucheServo1.write(135);
break;
case 760:
boucheServo1.write(145);
break;
} //fin du switch
delay(1500);
}
Merci.