BASIC4MCU | 질문게시판 | 지금 이 코드에서 비상정지 기능을 넣고 싶습니다.
페이지 정보
작성자 살라미 작성일2019-07-01 18:05 조회9,056회 댓글3건본문
int IN1 = 4; //모터 릴레이 o
int IN2 = 5; //모터 릴레이 o
int EMG = 2; //비상정지버튼 i
int ULT = 13; //초음파 릴레이 o
int SW = 8; //시작 버튼 i
int UP = 9; //상 버튼 i
int DN = 10; //하 버튼 i
int SW1 = 11; //초음파 버튼 i
int LMT = 12; //50mm 리미트 스위치 i
//
void motor_stop() { digitalWrite(IN1,1); digitalWrite(IN2,1); } //모터정지
void motor_up() { digitalWrite(IN1,0); digitalWrite(IN2,1); } //모터 정회전 (전동실린더 상승)
void motor_dn() { digitalWrite(IN1,1); digitalWrite(IN2,0); } //모터 역회전 (전동실린더 하강)
void ult_on() { digitalWrite(ULT,0); } //초음파릴레이ON
void ult_off() { digitalWrite(ULT,1); } //초음파릴레이OFF
//
void setup(){
pinMode(EMG, INPUT_PULLUP); //비상정지 인풋
pinMode(SW, INPUT_PULLUP); //시작버튼 인풋
pinMode(UP, INPUT_PULLUP); //상 버튼 인풋
pinMode(DN, INPUT_PULLUP); //하 버튼 인풋
pinMode(SW1, INPUT_PULLUP); //초음파 버튼 인풋
pinMode(LMT, INPUT_PULLUP); //리미트스위치 인풋
pinMode(IN1, OUTPUT); //모터 릴레이 아웃풋
pinMode(IN2, OUTPUT); //모터 릴레이 아웃풋
pinMode(ULT, OUTPUT); //초음파 릴레이 아웃풋선
}
//
void loop(){
if(!digitalRead(EMG)){ // 비상정지
motor_stop(); ult_off(); // 정지
}
else{
if(digitalRead(SW)==LOW){ //시작스위치가 한번 눌러졌을때
motor_dn(); // 모터 역회전
ult_on();
delay(4000);
ult_on(); //초음파 ON
motor_stop(); // 모터 정지 1.5초간
delay(1500);
//
motor_up(); //모터 정회전 5초간
delay(4000);
motor_stop(); ult_off(); // 모터 정지 및 초음파 OFF
}
//
while (digitalRead(UP )==LOW) {motor_up();if(digitalRead(EMG)==LOW)return; } //UP스위치를 눌렀을 경우 모터 정회전
while (digitalRead(DN )==LOW) {motor_dn(); if(digitalRead(EMG)==LOW)return; } //DOWN스위치를 눌렀을경우 모터 역회전
while (digitalRead(SW1)==LOW) {ult_on(); motor_stop(); if(digitalRead(EMG)==LOW)return; } //초음파 스위치 눌렀을경우 초음파 ON
ult_off(); motor_stop(); // 아무 버튼이 눌리지 않았을 경우 모터 정지 및 초음파 OFF상태
}
}
처음 if와 else구문 나올때 else 안에 있는 동작 부분에서
비상정지 버튼을 눌렀을떄 동작을 바로 멈추는 기능을 넣고싶습니다 .
제가 시도한 방법은
if(digitalRead(EMG)==LOW){ motor_stop(); ult_off();return;} 넣어보기
인터럽트 해보기였는데
if는 안되었구요
인터럽트를 넣었을 경우는
아예 동작 자체를 하지 않더라구요...
도와주세요 마스터님!!
댓글 3
조회수 9,056master님의 댓글
master 작성일
비상정지 버튼을 눌렀을 때 정지를 하는 것은
1. 현재 상황 그대로 유지, 비상정지 버튼 해제시 하던 작업 이어서 함
2. 출력 및 변수 초기화를 하고 루프함수 첫번째 라인의 비상정지 버튼 체크의 if()문이 실행
어느 것일까요?
살라미님의 댓글
살라미
제가 하고자 하는것은 2ㅂ번입니다
살라미님의 댓글
살라미
프로칩스튜디오? 라는 프로그램을 깔아서
PLC 처럼 래더를 이용해서도 해보았는데
그것은 INPUT값이 튀어서 그런가
제대로 작동을 안하더라구요..