BASIC4MCU | 질문게시판 | 아두이노 whillis 함수 delay처럼 사용하는방법이 궁금합니다.
페이지 정보
작성자 이게아닌데 작성일2023-06-08 17:54 조회436회 댓글1건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=22837
본문
왕복운동을 하면서 초음파를이용해 거리가 가까우면 아두이노 rc카를 만들고있는 중입니다.왕복운동 코드는 만들어서 초음파센서까지 결합하고 가까우면 멈추겠거니하고 실행하니 잘 안되더군요.딜레이 시간동안 초음파센서 코드가 작동을 안하는것 같아서 delay대신 millis함수를 사용하고싶은데 millis함수를 delay처럼 사용하는법을 알고싶습니다.밑에 while문에 들어있는 왕복운동이 delay함수를 millis함수로 만들어본건데 작동을 하진 않더라고요..motor_drive();m_a_dir = 0; //모터A 정방향m_b_dir = 0; //모터B 정방향m_a_spd = MOTOR_SPEED; //모터A의 속력값 조정m_b_spd = MOTOR_SPEED; //모터B의 속력값 조정delay(1000);// 시작되기전 시간motor_drive();m_a_dir = 0; //모터A 정방향m_b_dir = 0; //모터B 정방향m_a_spd = 0; //모터A의 정지m_b_spd = 0; //모터B의 정지delay(3000);// 직진시간motor_drive();m_a_dir = 0; //모터A 정방향m_b_dir = 1; //모터B 역방향m_a_spd = MOTOR_SPEED; //모터A의 속력값 조정m_b_spd = MOTOR_SPEED; //모터B의 속력값 조정delay(1000);// 멈추는시간motor_drive();m_a_dir = 0; //모터A 정방향m_b_dir = 0; //모터B 정방향m_a_spd = 0; //모터A의 정지m_b_spd = 0; //모터B의 정지delay(800);// 도는시간while (cmd == 'e') //'e'가 입력되었을 때, 왕복운동{ unsigned long currentMillis = millis(); // 현재 시간을 저장unsigned char bt_cmd = 0;bt_cmd = Serial.read(); //변수에 입력된 데이터 저장long distance=0;distance = howclose();// 거리감지//Serial.print(distance);if (distance <= 20){ motor_drive();m_a_dir = 0; //모터A 정방향m_b_dir = 0; //모터B 정방향m_a_spd = 0; //모터A의 정지m_b_spd = 0; //모터B의 정지long distance=0;distance = howclose();//Serial.print(distance);}else if(distance > 20){ unsigned long currentMillis = millis(); // 현재 시간을 가져옴if ( 1000 > previousMillis >= 0){ motor_drive();m_a_dir = 0; //모터A 정방향m_b_dir = 0; //모터B 정방향m_a_spd = MOTOR_SPEED; //모터A의 속력값 조정m_b_spd = MOTOR_SPEED; //모터B의 속력값 조정}if (4000 > previousMillis >= 1000){motor_drive();m_a_dir = 0; //모터A 정방향m_b_dir = 0; //모터B 정방향m_a_spd = 0; //모터A의 정지m_b_spd = 0; //모터B의 정지}if (5000> previousMillis >= 4000){motor_drive();m_a_dir = 0; //모터A 정방향m_b_dir = 1; //모터B 역방향m_a_spd = MOTOR_SPEED; //모터A의 속력값 조정m_b_spd = MOTOR_SPEED; //모터B의 속력값 조정}if ( 5800> previousMillis >= 5800){motor_drive();m_a_dir = 0; //모터A 정방향m_b_dir = 0; //모터B 정방향m_a_spd = 0; //모터A의 정지m_b_spd = 0; //모터B의 정지previousMillis = currentMillis;}if(Serial.available()) //데이터가 입력되었을 때{break; //입력된 데이터에 따라 모터에 입력될 변수를 조정하는 함수}}}
댓글 1
조회수 436master님의 댓글
master 작성일
길더라도 전체소스를 첨부하세요
파일이 여러개라면 압축해서 첨부파일로 올려도 됩니다.