BASIC4MCU | 질문게시판 | 답변 : 아두이노 스텝모터 값 제어(헤더파일 사용X)
페이지 정보
작성자 master 작성일2022-12-09 12:37 조회5,669회 댓글2건본문
const int maxSensor=12,minSensor=11;
//
int count=0,target=0;
//
#define CW 2 //정회전
#define CCW 3 //역회전
//
void CW_n(int n){
for(int i=0;i<n;i++){
digitalWrite(CW,1); delayMicroseconds(500); digitalWrite(CW,0); delayMicroseconds(500);
}
}
//
void CCW_n(int n){
for(int i=0;i<n;i++){
digitalWrite(CCW,1); delayMicroseconds(500); digitalWrite(CCW,0); delayMicroseconds(500);
}
}
//
void setup(){
pinMode(CW,OUTPUT); pinMode(CCW,OUTPUT);
pinMode(maxSensor,INPUT_PULLUP); pinMode(minSensor,INPUT_PULLUP);
Serial.begin(9600);
//---------------------------------------------
Serial.print((String)"역회전=");
while(digitalRead(minSensor)){ count--; Serial.println(count); CCW_n(1); } // min 이동
Serial.print((String)"역회전 합="); Serial.println(count);
count=0; // 좌표초기화
delay(1000);
//---------------------------------------------
Serial.print((String)"정회전=");
while(digitalRead(maxSensor)){ count++; Serial.println(count); CW_n(1); } // max 이동
Serial.print((String)"정회전 합="); Serial.println(count);
count/=2; // 좌표 1/2 재 지정
delay(1000);
//---------------------------------------------
Serial.print((String)"원점이동=");
while(count){ count--; Serial.println(count); CCW_n(1); } // 중간점 이동 (count=0 까지)
delay(1000);
//---------------------------------------------
Serial.println("Enter 2 Integers to add");
}
//
void loop(){
while(Serial.available()){
int v=Serial.parseInt(); Serial.print((String)"입력 값 : "); Serial.println(v);
target=(float)v/0.072; Serial.print((String)"스텝 수 : "); Serial.println(target);
}
//-------------
if(count>target){ count--; CCW_n(1); }
if(count<target){ count++; CW_n(1); }
}
댓글 2
조회수 5,669산만님의 댓글
산만 작성일
감사합니다. 혹시 한가지만 더 질문해두 될까요?
아두이노가 부팅되고 바로 원점을 찾는게 아니라 별도의 원점 찾으라는 입력(시리얼에서)이 됐을 때 원점 찾기를 한번만 하고 싶은데 방법이 있을까요?
그리고 각도를 입력하고 그 위치에 도달 했을 때 현재 위치 값도 모니터에 나타내고 싶습니다. 여러가지를 시도해 봤는데 안되서 질문 올립니다.ㅠㅠ
master님의 댓글
master 작성일
//---------------------------------------------
Serial.print((String)"역회전=");
while(digitalRead(minSensor)){ count--; Serial.println(count); CCW_n(1); } // min 이동
Serial.print((String)"역회전 합="); Serial.println(count);
count=0; // 좌표초기화
delay(1000);
//---------------------------------------------
Serial.print((String)"정회전=");
while(digitalRead(maxSensor)){ count++; Serial.println(count); CW_n(1); } // max 이동
Serial.print((String)"정회전 합="); Serial.println(count);
count/=2; // 좌표 1/2 재 지정
delay(1000);
//---------------------------------------------
Serial.print((String)"원점이동=");
while(count){ count--; Serial.println(count); CCW_n(1); } // 중간점 이동 (count=0 까지)
delay(1000);
//---------------------------------------------
셋업함수에 있는 이 코드를 함수에 넣어서 만들면
(loop 함수와 같은) 다른 곳에서도 함수만 호출하면 되겠죠