BASIC4MCU | 질문게시판 | 답변 : 아두이노 스텝모터 초음파 결합
페이지 정보
작성자 master 작성일2023-05-27 16:08 조회410회 댓글0건본문
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10,11); // RX,TX
//
#include <AFMotor.h>
AF_Stepper stepper(200,2); // 앞의 200 은 200번 펄스면 1바퀴를 돈다는 의미입니다.
//
unsigned char ata[4];
float distance;
//
void setup() {
Serial.begin(9600); // set up Serial library at 9600 bps
stepper.setSpeed(2); // rpm
Serial.begin(57600);
mySerial.begin(9600);
}
//
int i;
// Test the DC motor,stepper and servo ALL AT ONCE!
// SINGLE DOUBLE INTERLEAVE MICROSTEP
void loop() {
uint8_t i;
for(i= 0;i<25;i++){ stepper.step(3,FORWARD ,SINGLE); delay(10); } // 250ms
for(i=25;i!=0;i--){ stepper.step(3,BACKWARD,SINGLE); delay(10); } // 250ms
//stepper.release();
do{ for(int io=0;io<4;io++)ata[io]=mySerial.read(); }while(mySerial.read()==0xff);
mySerial.flush();
//
if(ata[0]==0xff){
int sum;
sum=(ata[0]+ata[1]+ata[2])&0x00FF;
if(sum==ata[3]){
distance=(ata[1]<<8)+ata[2];
if(distance>280){ Serial.print("distance="); Serial.print(distance/10); Serial.println("cm"); }
else { Serial.println("Below the lower limit"); }
}
else Serial.println("ERROR");
}
delay(500);
}
//
do{ for(int io=0;io<4;io++)ata[io]=mySerial.read(); }while(mySerial.read()==0xff);
4바이트를 전송해서 거리값을 전달하고 있는데요unsigned char 는 0~255 크기이므로 cm단위로는 0~255cm를 표현 할 수 있습니다.단 255를 넘는 거리값은 255로 변경하면 됩니다.4바이트로 전송하지말고 1바이트로 전송 해보세요mySerial.read()==0xff또, 0xff를 체크하는 것은 여러가지 문제가 있습니다.if(mySerial.available()){ unsigned char a=mySerial.read(); }available() 함수를 사용하세요
댓글 0
조회수 410등록된 댓글이 없습니다.