私は既にこの質問をしましたが、どこが間違っているのかまだ分かりません。
5vステッパーモーターで飾りをつけて、音楽を同時に演奏することを目的としているので、遅れを取ることはできません。Arduinoオルゴール
このプロジェクトは時間に敏感ですが、個人的な評価ではありません。私が言っていることは、通常は自分の時間がかかり、それがどのように機能するか知りたいのですが、この1つは行く - 私は私の現在の宿泊施設から移動する前にそれを見たい人があります。
私はいくつかのコードをコメントアウトしていますので、まずサウンドを有効にすることに集中できます。
//#include <Stepper.h>
#include <pitches.h>
//#define STEPS_PER_MOTOR_REVOLUTION 32
//#define STEPS_PER_OUTPUT_REVOLUTION 32 * 64
const int tonePin = 4;
unsigned long previousMillis = 0;
uint8_t currentNote = 0;
unsigned long currentMillis;
//int ldr = A0;
//Stepper small_stepper(STEPS_PER_MOTOR_REVOLUTION, 8, 10, 9, 11);
//pauseBetweenNotes = noteDuration;
void setup() {
// put your setup code here, to run once:
pinMode(tonePin, OUTPUT);
}
int melody[]=
{
NOTE_E5, NOTE_G5, NOTE_D6,
NOTE_C6, NOTE_G5, NOTE_F5,
NOTE_E5, NOTE_E5, NOTE_E5, NOTE_F5, NOTE_G5, NOTE_A5, NOTE_G5,
NOTE_E5, NOTE_G5, NOTE_D6,
NOTE_C6, NOTE_G5, NOTE_F5,
NOTE_E5, NOTE_G5, NOTE_G5,NOTE_A5, NOTE_B5, NOTE_C6, NOTE_C6, END
};
int noteDuration[]=
{
8,4,12,
8,4,12,
8,4,4,4,4,12,12,
8,4,12,
8,4,12,
8,4,4,4,4,12,12,
};
void loop() {
// put your main code here, to run repeatedly:
//small_stepper.setSpeed(200);
//small_stepper.step(HIGH);
currentMillis = millis();
if(currentMillis - previousMillis >= noteDuration[currentNote])
{
tone(tonePin, melody[currentNote], noteDuration[currentNote]);
previousMillis = currentMillis;
}
if(currentNote > 26-1)
{
currentNote = 0;
}
currentNote++;
}
少なくともあなたが投稿したコードでは、あなたは 'previousMillis'を更新していません(私が何かを見逃していない限り - 私はArduinoを知らない)。 E5(矩形波の場合は非常にひどい雑音である)上での永久的な、恐ろしい(おそらく刺激的な方形波)。 – Linuxios
私は "previousMillis = currentMillis;"を追加しました。 しかし、それは違いはありません.. :( – Redlight150
タイミングを歪ませずにサウンドを生成したい場合は(正確な方形波でなければなりません)、間違いなくPWMを生成して生成する必要がありますソフトウェアよりもむしろハードウェアの方形波(どのような 'tone()'が正確に行うのかはわかりません) – tofro