속도를 멈추실려면 아래 코드를 실행시키면 됩니다.
Speed = 0;
HCMotor.DutyCycle(0, Speed);
[ Original Message ]
// 리미트스위치를 사용한 왕복구동 실험
#include <HCMotor.h>
#include <MsTimer2.h>
#define DIR_PIN 8 //스텝모터드라이버 DIR 연결핀
#define CLK_PIN 9 //스텝모터드라이버 CLK 연결핀
#define LLIMIT_PIN 2
#define RLIMIT_PIN 3
double incomingByte = 0; // for incoming serial data
int Speed = 10;
unsigned long TIME = 0;
unsigned long TIME2 = 0;//물어본 시간을 저장할 변수
HCMotor HCMotor;
void setup()
{
Serial.begin(115200);
TIME = millis();
HCMotor.Init();
HCMotor.attach(0, STEPPER, CLK_PIN, DIR_PIN);
HCMotor.Steps(0, CONTINUOUS);
HCMotor.DutyCycle(0, Speed);
pinMode(LLIMIT_PIN, INPUT);
pinMode(RLIMIT_PIN, INPUT);
}
void loop()
{
if (digitalRead(LLIMIT_PIN) == LOW)
HCMotor.Direction(0, FORWARD);
else if (digitalRead(RLIMIT_PIN) == LOW)
HCMotor.Direction(0, REVERSE);
else if (Serial.available() > 0) {
// read the incoming byte:
incomingByte = Serial.read();
float interval = (incomingByte * 125) + 56000;
unsigned long TIME2 = millis();
// if((TIME2-TIME) >= interval)
// {
// while(1)Speed = 0;
//
// }
// else {
// if (digitalRead(LLIMIT_PIN) == LOW)
// HCMotor.Direction(0, FORWARD);
// else if (digitalRead(RLIMIT_PIN) == LOW)
// HCMotor.Direction(0, REVERSE);
// }
if (!((TIME2 - TIME) >= interval)) {
if (digitalRead(LLIMIT_PIN) == LOW)
HCMotor.Direction(0, FORWARD);
else if (digitalRead(RLIMIT_PIN) == LOW)
HCMotor.Direction(0, REVERSE);
}
while (1) {
delay(1000);
Speed = 0;
}
}
HCMotor.DutyCycle(0, Speed);
}
while(1) 반복문이 돌면서 Speed = 0;을 계속 실행하게끔 코드를 구현했는데도 2초정도 멈췄다가 다시 움직이기 시작합니다. 혹시 해당 리니어 레일은 소프트 웨어로 완전히 멈추는 동작을 실행할 수 없는지 알 수 있을까요?
회원에게만 댓글 작성 권한이 있습니다.