#include <SoftwareSerial.h>
#include <L298Drv.h>
L298Drv motor1(8, 24); //회전판 DC
L298Drv motor2(26, 28); //병맥주 DC
L298Drv motor3(42, 44); //사과펌프
L298Drv motor4(46, 48); //오렌지펌프
L298Drv motor5(43, 45); //포도펌프
L298Drv motor6(47, 49); //맥주펌프
L298Drv motor7(33, 35); //디스펜서 타미야
static int cnt= 0;
int blueTx=2; //Tx (보내는핀 설정)at
int blueRx=3; //Rx (받는핀 설정)
SoftwareSerial mySerial(blueTx, blueRx); //시리얼 통신을 위한 객체선언
const int button=32; //회전판 핀번호
int buttonchack = LOW;
int pinNum = A0; //아날로그 0번핀 사용
int distance = 0; //거리값 변수 생성
int ledPin=13;
int val = 0;
void setup() {
Serial.begin(9600);
mySerial.begin(9600); //블루투스 시리얼
pinMode (pinNum,INPUT); //A0번핀을 INPUT으로 설정
pinMode(ledPin,OUTPUT); //ledPin OUTPUT으로 설정
pinMode(button,INPUT); //limit switch Pin number
analogReference(DEFAULT); //아날로그 측정
}
void loop() {
char cmd; //문자열 변수 선언
buttonchack=digitalRead(button);
int data = analogRead(pinNum); //적외선 거리 센서로 부터 측정값을 읽어온다
int volt = map(data, 0, 1023, 0, 5000); //측정한 volt값을 0에서 5000사이의 값으로 변환
distance = (21.61/(volt-0.1696))*1000; //측정값을 통해 거리를 계산
for (int a = 0; a <= 100; a++ )//처음시작시에는 반드시 기계작동전에 맥주병 넣어두기
{
if(distance<5){
motor2.drive(150); //병맥 기울기
delay(500);
Serial.println("적");
motor7.drive(150); //디스펜서 누르기
delay(1000);
motor7.drive(-150); //디스펜서 빼기
delay(1000);
motor1.drive(25); //회전판 돌리기
delay(5000);
if(buttonchack==HIGH){
motor1.drive(0); //회전판 멈추기
delay(10000);
}
motor2.drive(-150); //병맥 기울기
delay(500);
}
//거리가 5cm보다 크면
else {
Serial.println(a);
motor7.drive(250); //디스펜서 누르기
delay(1000);
motor7.drive(-250); //디스펜서 빼기
delay(1000);
Serial.println("A");
motor1.drive(70); //회전판 돌리기
delay(5000);
Serial.println("B");
if(buttonchack==HIGH){
motor1.drive(0); //회전판 멈추기
delay(10000);
Serial.println("b");
}
}
switch(cmd){
Serial.println(cmd);
case 1:
motor3.drive(250); //사과
delay(3000);
motor3.drive(-250); //사과
delay(3000);
motor6.drive(250); //맥주
delay(3000);
motor6.drive(-250); //맥주
delay(3000);
motor1.drive(25); //회전판 돌리기
delay(5000);
if(buttonchack==HIGH){
motor1.drive(0); //회전판 멈추기
delay(10000);
}
break;
case 2:
motor4.drive(250); //오렌지
delay(3000);
motor4.drive(-250); //오렌지
delay(3000);
motor6.drive(250); //맥주
delay(3000);
motor6.drive(-250); //맥주
delay(3000);
motor1.drive(25); //회전판 돌리기
delay(5000);
if(buttonchack==HIGH){
motor1.drive(0); //회전판 멈추기
delay(10000);
}
break;
case 3:
motor5.drive(250); //포도
delay(3000);
motor5.drive(-250); //포도
delay(3000);
motor6.drive(250); //맥주
delay(3000);
motor6.drive(-250); //맥주
delay(3000);
motor1.drive(25); //회전판 돌리기
delay(5000);
if(buttonchack==HIGH){
motor1.drive(0); //회전판 멈추기
delay(10000);
}
break;
case 4:
motor6.drive(250); //맥주
delay(3000);
motor6.drive(-250); //맥주
delay(3000);
motor1.drive(25); //회전판 돌리기
delay(5000);
if(buttonchack==HIGH){
motor1.drive(0); //회전판 멈추기
delay(10000);
}
break;
}
}
}
이것은 저희가 만든 프로그램입니다. 회전판 모터가 돌면서 리밋스위치 닿으면 멈춰야하는것이 문제 점에 있습니다.
아두이노 2560 보드를 사용하고 있습니다. 리밋스위치 NC 부분이 접접되면 멈추는 프로그램을 만들려 하는데
회전 모터는 회전을 하는데 리밋스위치를 눌러도 멈추지 않고 있습니다.
이에 대해 조언 부탁드립니다.
|