반응형
설연휴 직전 녹칸다의 마지막 스트리밍인 424편에서 구독자분들께 소소한 즐거움을 드리기 위해서 스탭모터로 간단한 연주를 해보았습니다~~!
시간이 촉박해서 많이 준비하지는 못하고 까치까치 설날은~ 어저께고요 할때 설날송하고 스타워즈에서 제국의 행진이라는 곡의 일부분만 스탭모터로 재생해보았습니다!!!
회로도는 이대로 연결하면 됩니다!!
그리고 아래 소스코드를 그대로 입력하면 아마 작동이 될것입니다~!
시리얼모니터에 숫자 0을 전송하면 까치송이 재생되고 1을 전송하면 스타워즈 브금이 재생됩니다~~!
#include <AccelStepper.h>
#define DIR1 2
#define STEP1 3
AccelStepper stepper1 = AccelStepper(1, STEP1, DIR1);
int nockanda[][2] = {
{392,1500}, //솔
{330,500}, //미
{392,1000}, //솔
{523,1000}, //도
{440,1000}, //라
{523,500}, //도
{440,500}, //라
{392,2000}, //솔
{330,1500}, //미
{349,500}, //파
{330,500}, //미
{294,500}, //레
{262,500}, //도
{330,500}, //미
{294,3000}, //레
{392,1500}, //솔
{330,500}, //미
{392,1000}, //솔
{523,1000}, //도
{440,1000}, //라
{523,500}, //도
{440,500}, //라
{392,2000}, //솔
{392,1000}, //솔
{659,1000}, //미
{587,1000}, //레
{494,1000}, //시
{523,3000}, //도
{392,1500}, //솔
{330,500}, //미
{392,1000}, //솔
{523,1000}, //도
{440,1000}, //라
{523,500}, //도
{440,500}, //라
{392,2000}, //솔
{330,1500}, //미
{349,500}, //파
{330,500}, //미
{294,500}, //레
{262,500}, //도
{330,500}, //미
{294,3000}, //레
{262,1500}, //도
{294,500}, //레
{330,1000}, //미
{392,1000}, //솔
{440,1000}, //라
{440,500}, //라
{523,500}, //도
{392,2000}, //솔
{330,1500}, //미
{349,500}, //파
{330,500}, //미
{349,500}, //파
{392,500}, //솔
{196,500}, //시
{262,3000} //도
};
int nockanda2[][2] = {
{110,1000}, //라1
{110,1000}, //라1
{110,1000}, //라1
{87,500}, //파1
{131,500}, //도2
{110,1000}, //라1
{87,500}, //파1
{175,500}, //도2
{110,2000}, //라1
{165,1000}, //미2
{165,1000}, //미2
{165,1000}, //미2
{175,500}, //파2
{175,500}, //도2
{104,1000}, //라플렛1
{87,500}, //파1
{175,500}, //도2
{110,2000}, //라1
{247,1000}, //시2
{123,500}, //시1
{123,500}, //시1
{247,1000}, //시2
{233,500}, //시2플렛
{196,500}, //솔2
{185,500}, //솔2플렛
{175,500}, //파2
{185,500}, //솔2플렛
{117,500}, //시1플렛
{156,1000}, //미2플랫
{147,500}, //레2
{139,500}, //레2플렛
{131,500}, //도2
{123,500}, //시1
{131,500}, //도2
{87,500}, //파1
{104,1000}, //라1플렛
{87,500}, //파1
{104,500}, //라1플렛
{131,1000}, //도2
{110,500}, //라1
{131,500}, //도2
{165,2000}, //미2
{247,1000}, //시2
{123,500}, //시1
{123,500}, //시1
{247,1000}, //시2
{233,500}, //시2플렛
{196,500}, //솔2
{185,500}, //솔2플렛
{175,500}, //파2
{185,500}, //솔2플렛
{117,500}, //시1플렛
{156,1000}, //미2플랫
{147,500}, //레2
{139,500} //레2플렛
};
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);//결과를 시리얼모니터에서 볼거야~
stepper1.setMaxSpeed(1000); //초당 몇스탭이냐? 1000/s(초당5회전)
stepper1.setCurrentPosition(0); //현재 스탭을 설정
}
//메인스레드
void loop() {
// put your main code here, to run repeatedly:
if(Serial.available()){
char c= Serial.read();
if(c == '0'){
for(int i = 0;i<58;i++){
stepper1.setCurrentPosition(0); //0점 조절
int pitch = nockanda[i][0];
float duration = nockanda[i][1]/1500.0;
Serial.print(i);
Serial.print("/");
Serial.print(pitch);
Serial.print("/");
Serial.println(duration);
stepper1.setSpeed(pitch); //1바퀴/s
while(stepper1.currentPosition() <= pitch*duration){
stepper1.runSpeed(); //스탭모터 작동(고정속도)
}
}
}else if(c == '1'){
for(int i = 0;i<55;i++){
stepper1.setCurrentPosition(0); //0점 조절
int pitch = nockanda2[i][0];
float duration = nockanda2[i][1]/1500.0;
Serial.print(i);
Serial.print("/");
Serial.print(pitch);
Serial.print("/");
Serial.println(duration);
stepper1.setSpeed(pitch); //1바퀴/s
while(stepper1.currentPosition() <= pitch*duration){
stepper1.runSpeed(); //스탭모터 작동(고정속도)
}
delay(50);
}
}
}
}
반응형