BASIC4MCU | 질문게시판 | 답변 : 답변 : 답변 : 아두이노 제어 질문 드립니다
페이지 정보
작성자 살라미 작성일2019-05-10 17:31 조회12,949회 댓글4건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=8515
작성일
작성일
작성일
본문
// MCU BASIC: https://www.basic4mcu.com// DateTime : 2019-05-08 오전 8:06:45// by Ok-Hyun Park//int ULT=7; // 릴레이(초음파)int SW=8; // 작동스위치 푸시버튼사용int UP=9; // 실린더 UP 버튼int DOWN=10; // 실린더 DOWN버튼int LSU=11; // 리미트UPint LSD=12; // 리미트DOWNint EMG=13; // 비상정지버튼int IN1=3; // 드라이버 정int IN2=4; // 드라이버 역int EN=11; // PWM으로 속도 조절시 필요int mode=0; // 초기 정지모드//void motor_stop(){ digitalWrite(IN1,0); digitalWrite(IN2,0); }void motor_up() { digitalWrite(IN1,1); digitalWrite(IN2,0); }void motor_dn() { digitalWrite(IN1,0); digitalWrite(IN2,1); }//void setup(){pinMode(IN1,OUTPUT); pinMode(IN2,OUTPUT); pinMode(EN,OUTPUT);pinMode(ULT,OUTPUT); //릴레이(진동자 On/Off)pinMode(SW,INPUT_PULLUP);pinMode(LSU,INPUT_PULLUP); pinMode(LSD,INPUT_PULLUP);pinMode(EMG,INPUT_PULLUP); pinMode(UP,INPUT_PULLUP); pinMode(DOWN,INPUT_PULLUP);}//void loop(){if(!digitalRead(EMG)||!digitalRead(SW)){ // 비상정지motor_stop(); digitalWrite(ULT,LOW); // 정지}else{if(!digitalRead(SW)){ // 작동스위치if(digitalRead(LSD)){} // DOWN리미트 감지중이면 통과else{motor_dn(); digitalWrite(ULT,HIGH);while(!digitalRead(LSD)){ if(!digitalRead(EMG))return; } // DOWN리미트 감지까지 dn//delay(200); motor_stop(); delay(1500);//motor_up();while(!digitalRead(LSU)){ if(!digitalRead(EMG))return; } // UP리미트 감지까지 upmotor_stop(); digitalWrite(ULT,LOW);}}//if (!digitalRead(UP ))motor_up();else if(!digitalRead(DOWN))motor_dn();else motor_stop();}}위 소스로 동작 시켰을시상하 버튼으로 조작하는 정역의 구동은 역시 되질 않습니다..다만 한가지 바뀐것이 있다면작동스위치를 4번정도 눌러줘야 1사이클을 실행합니다그래서 배선도 첨부 합니다...
댓글 4
조회수 12,949master님의 댓글
master 작성일
리미트 스위치를 저렇게 연결하면 전원 쇼트납니다.
NC는 사용하지말고
C에 GND 연결하고, NO핀을 아두이노 입력핀에 연결하세요
살라미님의 댓글
살라미
리미트 스위치말고는 이상없나요??
왜 작동이 안되는지 ㅠㅠ 그것 제외하면 문제는 없어보이는데말이죠..
master님의 댓글
master
여러개의 조합으로 회로가 구성되어 있을 때
단 1개의 문제라도 있으면 그 부분에 걸려서 동작이 생각한대로 되지 않습니다.
각 부분을 하나씩 체크하세요
예를들면
if(digitalRead(LSD)){} // DOWN리미트 감지중이면 통과
이 코드는 감지 되었다면 HIGH이고, 감지 되지 않았다면 LOW인데
평소 HIGH로 있다가 감지 시 LOW가 된다면 체크 논리가 바뀌어야겠죠
if(!digitalRead(LSD)){} // DOWN리미트 감지중이면 통과 // ! 논리 부정연산자 추가
//
스위치 , 리미트 스위치, 등등 모든 부분을 하나씩 제대로 동작하는지 체크하세요
살라미님의 댓글
살라미
네 하나하나 다 확인해보겠습니다
감사합니다!