对于一个大学项目,我想制作一个与 mp3shield 相结合的步进电机。
它工作正常,但是当我将它们放在相同的代码中时,它的行为是否真的很奇怪,我的步进电机开始摇晃。
我的代码如下:
int sensor = A0;
int led1 = A1;
int led2 = A2;
int led3 = A3;
int led4 = A4;
int led5 = A5;
int button = 12;
int dirpin = 10;
int steppin = 11;
int buttonState;
void setup()
{
Serial.begin(9600);
pinMode(sensor, INPUT);
pinMode(button, INPUT);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(dirpin, OUTPUT);
pinMode(steppin, OUTPUT);
}
void loop()
{
buttonState = digitalRead(button);
Serial.println(buttonState);
delay(10);
if(buttonState == HIGH)
{
rotateDeg(360, .1);
playSong(6);
}
}
让步进电机转动的代码如下:
void rotateDeg(float deg, float speed){
int dir = (deg > 0)? HIGH:LOW;
digitalWrite(dirpin,dir);
int steps = abs(deg)*(1/0.225);
float usDelay = (1/speed) * 70;
for(int i=0; i < steps; i++){
digitalWrite(steppin, HIGH);
delayMicroseconds(usDelay);
digitalWrite(steppin, LOW);
delayMicroseconds(usDelay);
}
}
播放歌曲的代码:
#include <SPI.h>
#include <SdFat.h>
#include <SdFatUtil.h>
#include <SFEMP3Shield.h>
SdFat sd;
SFEMP3Shield MP3player;
void playSong(int song){
Serial.begin(9600);
//start the shield
sd.begin(SD_SEL, SPI_HALF_SPEED);
MP3player.begin();
//start playing track 1
MP3player.playTrack(song);
}
我为步进电机使用了一个驱动器,输入为 12V 1000mA。如果我想在没有电机的情况下播放歌曲,效果很好。如果我想在没有声音的情况下旋转电机,它也可以正常工作。
希望你能提供帮助。
先感谢您,
镍氢
编辑:我也有一些 LED,工作正常。当我按下一个按钮时,会有一个随机模式。当我把它放在代码中时:
if(buttonState == HIGH)
{
setLed();
rotateDeg(360, .1);
}
它就像我想要的那样工作。但如果我尝试:
if(buttonState == HIGH)
{
playSound(4);
rotateDeg(360, .1);
}
播放歌曲时电机开始摇晃,并且从未旋转过 360 度。