에듀이노-아두이노 전문 교육쇼핑몰 에듀이노-코딩교육 전문 쇼핑몰
뒤로가기

묻고답하기

제목

loop문 탈출

작성자 김유진(ip:)

작성일 2019-05-22

조회 50

평점 0점  

추천 추천하기

내용
/* 이 소스는 에듀이노(Eduino)에 의해서 번역, 수정, 작성되었고 소유권 또한 에듀이노의 것입니다.
* 소유권자의 허락을 받지 않고 무단으로 수정, 삭제하여 배포할 시 법적인 처벌을 받을 수도 있습니다.
*
* 에듀이노 SmartCar 예제
* - 스마트 자동차 전진, 후진, 정지 명령 시리얼통신으로 제어하기 -
*
* PC와 USB케이블을 우노 보드와 연결한 상태에서
* 터미널을 통해 키보드 명령을 하면 스마트 자동차가 움직이는 예제.
*
* 명령
* 1. 터미널에 키보드로 g 라고 입력함
* -> 로봇이 전진
* 2. 터미널에 키보드로 b 라고 입력함
* -> 로봇이 후진
* 3. 터미널에 키보드로 s 라고 입력함
* -> 로봇이 정지
*
*/

int RightMotor_E_pin = 5; // 오른쪽 모터의 Enable & PWM
int RightMotor_1_pin = 8; // 오른쪽 모터 제어선 IN1
int RightMotor_2_pin = 9; // 오른쪽 모터 제어선 IN2
int LeftMotor_3_pin = 10; // 왼쪽 모터 제어선 IN3
int LeftMotor_4_pin = 11; // 왼쪽 모터 제어선 IN4
int LeftMotor_E_pin = 6; // 왼쪽 모터의 Enable & PWM

int count=0;

int Rmotor_dir=1;
int Lmotor_dir=1;

// 명령 함수들
void SmartCar_Go();
void SmartCar_Back();
void SmartCar_Stop();

char prev_command;
int E_carSpeed = 0; // 최대 속도의 60 %
char command;

void setup() {
// declare the ledPin as an OUTPUT:
pinMode(RightMotor_E_pin, OUTPUT); // 출력모드로 설정
pinMode(RightMotor_1_pin, OUTPUT);
pinMode(RightMotor_2_pin, OUTPUT);
pinMode(LeftMotor_3_pin, OUTPUT);
pinMode(LeftMotor_4_pin, OUTPUT);
pinMode(LeftMotor_E_pin, OUTPUT);

Serial.begin(9600); // PC와의 시리얼 통신 9600bps로 설정

Serial.println("Welcome Eduino!");

digitalWrite(RightMotor_E_pin, HIGH); // 오른쪽 모터의 Enable
digitalWrite(LeftMotor_E_pin, HIGH); // 왼쪽 모터의 Enable
}
//g전진 b후진 s스탑
void loop() //최저 스피드 140은 달려줘야 로봇이 처음부터 구동됨 / ++변수카운트 100당 1초
{

char command = Serial.read(); // 명령 저장
Serial.println("Recived command");
Move(140,200,1);
delay(500);
/*Move(140,200,2);
delay(500); */

/*l_circle(170,70,1);
delay(500);
SmartCar_Stop();
return 0;*/

}

void Move(int sp, int times, int rl)// rl=1 전진 rl=2 후진
{
count=0;
for(;;)
{
count++;
if(rl==1)
{
if(count {
E_carSpeed = sp;
Serial.println("Forward");
digitalWrite(RightMotor_1_pin, HIGH);
digitalWrite(RightMotor_2_pin, LOW);
digitalWrite(LeftMotor_3_pin, HIGH);
digitalWrite(LeftMotor_4_pin, LOW);
for(int i=0; i<=E_carSpeed; i=i+5)
{
analogWrite(RightMotor_E_pin, i); // 오른쪽 모터 전진 PWM제어
analogWrite(LeftMotor_E_pin, i);
}
}
else if(count>times)
{
SmartCar_Stop();
break;
}
}
else
{
if(count {
E_carSpeed = sp;
Serial.println("Backward");
digitalWrite(RightMotor_1_pin, LOW);
digitalWrite(RightMotor_2_pin, HIGH);
digitalWrite(LeftMotor_3_pin, LOW);
digitalWrite(LeftMotor_4_pin, HIGH);

for(int i=0; i<=E_carSpeed; i=i+5)
{
analogWrite(RightMotor_E_pin, i); // 오른쪽 모터 전진 PWM제어
analogWrite(LeftMotor_E_pin, i);
}
}
else if(count>times)
{
SmartCar_Stop();
break;
}
}
}
}
void SmartCar_Back(int sp,int times) // 후진
{
count=0;
for(;;)
{
count++;
if(count {
E_carSpeed = sp;
Serial.println("Backward");
digitalWrite(RightMotor_1_pin, LOW);
digitalWrite(RightMotor_2_pin, HIGH);
digitalWrite(LeftMotor_3_pin, LOW);
digitalWrite(LeftMotor_4_pin, HIGH);

for(int i=0; i<=E_carSpeed; i=i+5)
{
analogWrite(RightMotor_E_pin, i); // 오른쪽 모터 전진 PWM제어
analogWrite(LeftMotor_E_pin, i);
}
}
else if(count>times)
{
SmartCar_Stop();
break;
}
}
}
void SmartCar_Stop(){ // 정지
for(int i=E_carSpeed; i>=0; i=i-5){
if(prev_command == 'g'){
analogWrite(RightMotor_E_pin, i);
analogWrite(LeftMotor_E_pin, i);
delay(20);
}else if(prev_command == 'b'){
analogWrite(RightMotor_E_pin, i);
analogWrite(LeftMotor_E_pin, i);
delay(20);
}
}
digitalWrite(RightMotor_E_pin, LOW); // 오른쪽 모터 정지
digitalWrite(LeftMotor_E_pin, LOW); // 왼쪽 모터 정지
}

void circle(int sp,int times,int rl) // rl 1은 왼쪽 rl 2는 오른족
{
count=0;

for(;;)
{
count++;
if(rl==1)
{
if(count {
E_carSpeed = sp;
Serial.println("Forward");
digitalWrite(RightMotor_1_pin, HIGH);
digitalWrite(RightMotor_2_pin, LOW);
Serial.println("Backward");
digitalWrite(LeftMotor_3_pin, LOW);
digitalWrite(LeftMotor_4_pin, HIGH);

for(int i=0; i<=E_carSpeed; i=i+5)
{
analogWrite(RightMotor_E_pin, i); // 오른쪽 모터 전진 PWM제어
analogWrite(LeftMotor_E_pin, i);
}
}
else if(count>times)
{
SmartCar_Stop();
break;
}
}
if(rl==2)
{
if(count {
E_carSpeed = sp;
Serial.println("Backward");
digitalWrite(LeftMotor_3_pin, LOW);
digitalWrite(LeftMotor_4_pin, HIGH);
Serial.println("Forward");
digitalWrite(RightMotor_1_pin, HIGH);
digitalWrite(RightMotor_2_pin, LOW);


for(int i=0; i<=E_carSpeed; i=i+5)
{
analogWrite(RightMotor_E_pin, i); // 오른쪽 모터 전진 PWM제어
analogWrite(LeftMotor_E_pin, i);
}
}
else if(count>times)
{
SmartCar_Stop();
break;
}
}
}
}

loop문에서 빠져나오지못하고 무한반복합니다..

게시글 신고하기

신고사유

신고해주신 내용은 쇼핑몰 운영자의 검토 후 내부 운영 정책에 의해 처리가 진행됩니다.

닫기

첨부파일

비밀번호
수정

비밀번호 입력후 수정 혹은 삭제해주세요.

댓글목록

등록된 댓글이 없습니다.

댓글 수정

이름

비밀번호

내용

/ byte

수정 취소

비밀번호

확인 취소

댓글 입력

이름

비밀번호

내용

/ byte

평점

에게만 댓글 작성 권한이 있습니다.

댓글 입력

이름

비밀번호

내용

/ byte

에게만 댓글 작성 권한이 있습니다.

고객센터

    1670-9626

  • 팩스.063-902-6678
  • 이메일.eduino@robodyne.co.kr
  • Kakao. 에듀이노
  • 운영시간 : AM 10:00 ~ PM 16:30
  • 점심시간 : PM 12:00 - PM 13:00 토/일/공휴일 휴무
  • 고객센터 연결하기
입금계좌
  • 예금주: (주)로보다인시스템
  • 국민. 754801-01-760296
  • 농협. 301-0234-1423-01
  • IBK기업은행. 506-080015-01-016
배송 안내
  • 배송 방법 : 택배
  • 배송 지역 : 전국지역
  • 배송 비용 : 조건부 무료 : 주문 금액 100,000원 미만일 때 배송비 3,000원을 추가합니다.
  • 배송 기간 : 1일 ~ 2일
  • 배송 안내 :
    - 제주도, 산간벽지나 도서지방은 별도의 추가금액을 지불하셔야 하는 경우가 있습니다.
    고객님께서 주문하신 상품은 입금 확인후 배송해 드립니다. 다만, 상품종류에 따라서 상품의 배송이 다소 지연될 수 있습니다.
교환/반품 안내
교환 및 반품이 가능한 경우
- 상품을 공급 받으신 날로부터 7일이내 단, 가전제품의
  경우 포장을 개봉하였거나 포장이 훼손되어 상품가치가 상실된 경우에는 교환/반품이 불가능합니다.
- 공급받으신 상품 및 용역의 내용이 표시.광고 내용과
  다르거나 다르게 이행된 경우에는 공급받은 날로부터 3월이내, 그사실을 알게 된 날로부터 30일이내

교환 및 반품이 불가능한 경우
- 고객님의 책임 있는 사유로 상품등이 멸실 또는 훼손된 경우. 단, 상품의 내용을 확인하기 위하여
  포장 등을 훼손한 경우는 제외
- 포장을 개봉하였거나 포장이 훼손되어 상품가치가 상실된 경우
  (예 : 가전제품, 식품, 음반 등, 단 액정화면이 부착된 노트북, LCD모니터, 디지털 카메라 등의 불량화소에
  따른 반품/교환은 제조사 기준에 따릅니다.)
- 고객님의 사용 또는 일부 소비에 의하여 상품의 가치가 현저히 감소한 경우 단, 화장품등의 경우 시용제품을
  제공한 경우에 한 합니다.
- 시간의 경과에 의하여 재판매가 곤란할 정도로 상품등의 가치가 현저히 감소한 경우
- 복제가 가능한 상품등의 포장을 훼손한 경우
  (자세한 내용은 고객만족센터 1:1 E-MAIL상담을 이용해 주시기 바랍니다.)

※ 고객님의 마음이 바뀌어 교환, 반품을 하실 경우 상품반송 비용은 고객님께서 부담하셔야 합니다.
  (색상 교환, 사이즈 교환 등 포함)
«
»