BASIC4MCU | 질문게시판 | 답변 : 아두이노 코딩해결해주실분..
페이지 정보
작성자 master 작성일2018-06-07 10:18 조회10,856회 댓글2건본문
// MCU BASIC: https://www.basic4mcu.com// DateTime : 2018-06-07 오전 10:17:50// by Ok-Hyun Park//#include <Stepper.h>#define STEPS 100 // total number of steps this motor can takeStepper stepper(STEPS,38,42,40,44);#include <MsTimer2.h>//#define DIR_CHANHE_CNT 2 // 방향전환카운트//volatile int mystep=1;volatile byte ecd_cnt=0,flag_cnt=0;volatile boolean flag=false; //챕터링방지//2)void setup(){stepper.setSpeed(30); // set the speed of the motor to 30 RPMsattachInterrupt(0,blink,FALLING); // Int0=>pin 2MsTimer2::set(20,flash); // 20ms periodMsTimer2::start();}//3)void loop(){stepper.step(mystep); // step one step: // step the motor to step number 0,1,2,or 3:}//4)void blink(){flag=true; //자기장센서챕터링방지하기위함.if(ecd_cnt==DIR_CHANHE_CNT){ mystep*=-1; ecd_cnt=0; }}//5)void flash(){if(flag==true){if(++flag_cnt==10){ flag_cnt=0; ecd_cnt++; flag=false; }}}
1.코딩에서 스텝모터 초기값 3Turns로설정하여 정회전 역회전을 반복한다
스텝모터의 속도를 60rpm으로 설정한다
stepper.setSpeed(60); // set the speed of the motor to 60 RPMsvoid loop(){stepper.step( mystep*3);stepper.step(-mystep*3);}
2,3,4번 문제는 공부해서 직접 만들어보세요
댓글 2
조회수 10,856닉네1257679님의 댓글
닉네1257679 작성일
#include <Stepper.h>
#include <MsTimer2.h>
// total number of steps this motor can take
#define STEPS 100
// create an instance of the stepper class, specifying
// the number of steps of the motor and the pins it's
// attached to
byte LED[8]={22,24,26,28,30,32,34,36};
byte SWITCH[8]={23,25,27,29,31,33,35,37};
Stepper stepper(STEPS, 23,27,25,29);
byte vai= 0;
volatile int mystep = 1;
#define DIR_CHANHE_CNT 2 //방향전환카운트
volatile byte ecd_cnt = 0;
volatile boolean flag=false; //챕터링방지
volatile byte flag_cnt=0;
2)
void setup()
{
// set the speed of the motor to 30 RPMs
for(i=0;i<8;i++)
{
val=digitalRead(SWITCH[i]);
digitalwrite(LED[i],val);
}
stepper.setSpeed(60);
attachInterrupt(0, blink, FALLING); // Int0 => pin 2
MsTimer2::set(20, flash); // 20ms period
MsTimer2::start();
}
3)
void loop()
{
stepper.step(mystep*3);
stepper.step(-mystep*3); // step one step:
byte i;
for(i=0;i<8;i++)
{
val=digitalRead(SWITCH[i]);
digitalwrite(LED[i],val);
stepper.step(mystep*i);
stepper.step(-mystep*i);
}
}
}
4)
void blink()
{
flag = true;//자기장센서챕터링방지하기위함.
if(ecd_cnt == DIR_CHANHE_CNT)
{
mystep*=-1;
ecd_cnt = 0;
}
}
5)
void flash()
{
if(flag == true) //자기장센서챕터링방지가설정되면
flag_cnt++; //카운트시작 ,적어도자기장센서가반응하는범위를벗어날떄까지카운트
if(flag_cnt == 10){
flag = false;
flag_cnt = 0; //범위를벗어나면플래그해제
ecd_cnt++;
}
}
이런식으로 말씀하신 스탑모터 60설정 및 정회전 역회전 3회씩 넣어주고
2번쨰껀 제가 스위치값을 받아와서 스탑모터 *i를 넣어줘서 응용해봤는데 맞는지 확인해주실수있을까요?
master님의 댓글
master 작성일동작시켜보고 문제가 있을 때 상세하게 작성해주세요