BASIC4MCU | 질문게시판 | 서보모터 제어에 관하여 궁금합니다
페이지 정보
작성자 오소로롯 작성일2022-05-24 00:24 조회695회 댓글3건본문
https://cafe.naver.com/circuitsmanual/220290
우선 링크해주신 카페글을 참조하였습니다
<프로그램 조건>
1) Serial.available()
• 아두이노의 Serial에 수신된 byte 수
• 0 이면, 수신된 데이터 없음
2) Serial.parseInt()
• Serial에 수신된 데이터로부터 정수(integer)를 읽어 온다.
1) Serial에 수신된 데이터가 있는가? 없으면 loop()함수 탈출
2) Serial에서 정수를 읽어온다.
3) 0 보다 작거나 180 보다 크면? 예외처리
4) 서보 모터에 각도를 출력한다. 5) 적당한 시간을 기다린다.
1) sn = 0 인데, parseInt()에 값이 들어오기도 함.
2) sn = 0 인 경우, parseInt() 하지않고 빠져나가고
3) 다음 loop에서 sn > 0 이 되면, parseInt() 하면됨.
인데 작성해주신 코드를 참고하여 해보았으나, Serial 출력창에 문자가 출력되지 않고 각도수치를 입력해도 반응이 없었습니다.
그래서 제 나름대로 수정하여 해보았는데
Serial 창에 각도를 입력하면 서보가 입력된 각만큼 회전하여 작동이 잘 되고
회전한 후 다시 원상복구 됩니다
문제는
1) Serial에 수신된 데이터가 있는가? 없으면 loop()함수 탈출
2) sn = 0 인 경우, parseInt() 하지않고 빠져나가고
3) 다음 loop에서 sn > 0 이 되면, parseInt() 하면됨.
이말이 무슨뜻인지, 어떻게 코드로 작성하는지 헷갈립니다
<코드>
#include <Servo.h>
Servo servo9;
void setup()
{
Serial.begin(115200);
servo9.attach(9, 500, 2500);
}
void loop()
{
int sn = Serial.available();
if(sn=0)
{
return;
}
int deg = Serial.parseInt();
if((deg<0)||(deg>180))
{
Serial.println("Error");
return;
}
servo9.write(deg);
Serial.print(sn);
Serial.print(":");
Serial.println(deg);
delay(1000);
}
sn이 0이면 루프 함수를 탈출하라는게 입력이 0이거나 더이상 입력되지 않을경우 원래상태로 돌아가란 건지 모르겠습니다.
그리고 시리얼 모니터에 출력되는 수치가 n:n으로 나오는데
왜 그런건지도 궁금합니다!
댓글 3
조회수 695master님의 댓글
master 작성일
Serial 출력창에 문자가 출력되지 않고
//
void setup(){
Serial.begin(115200);
Serial.println("test");
}
void loop(){}
간단한 코드로 시리얼 모니터에 출력되는지 확인하세요
master님의 댓글
master 작성일
1) Serial에 수신된 데이터가 있는가? 없으면 loop()함수 탈출
//
void loop(){
if(Serial.available()==0)return; // 수신 개수가 0이면 루프 함수를 빠져나감
//
아래도 기능은 마찬가지 입니다.
void loop(){
int sn=Serial.available(); // 수신된 바이트 수를 읽고
if(sn<'1')||(sn>'3'))return; // 바이트 수가 1자리~3자리가 아니면 빠져나감
오소로롯님의 댓글
오소로롯
감사합니다 말씀해주신거 이해하여 잘해결하였습니다 감사합니다!!