BASIC4MCU | 질문게시판 | 아두이노 코딩 질문입니다.
페이지 정보
작성자 바리 작성일2018-06-23 18:53 조회6,629회 댓글0건본문
염치없이 또 질문하러 와서 죄송합니다...주변에 물어볼 수 있는 곳이 없어서 여기에 계속 글을 올리게 되네요ㅠㅠ알려주신 랜덤 기능은 덕분에 잘 구현할 수 있었습니다! 감사합니다!
제가 이번엔 질문드리고 싶은건 블루투스 (A,B,C,D) 수신에 따른 손동작을 하여 RC카를 5초동안 구동시키고 정지시킨 후에 이번엔 랜덤이 아니고 A를 받았을 땐 Y, B를 받았을 땐 X, C를 받았을 땐 W, D를 받았을 땐 Z를 보내려고 합니다. 5초가 지나서 RC카가 정지하고 바로 X,Y,Z,W를 보내는 것이 아니고 msg[0]==0&&msg[1]==0&&msg[2]==0&&msg[3]==0 라는 손동작(주먹)을 해야만 보낼 수 있도록 하려고 합니다. 그래서 제가 코딩을 해봤는데 처음엔 제가 원하는대로 잘 작동하다가 중간에 코딩이 꼬이는건지 모르겠지만 RC카가 정지를 안하거나 앱으로 다시 알파벳을 못 보내는 현상이 일어납니다. 원인이 무엇인지 모르겠어서 이렇게 도움을 요청합니다...ㅠㅠ한번만 더 도움부탁드릴게요ㅠㅠ
#include <SPI.h>
#include "RF24.h"
#include <SoftwareSerial.h>
SoftwareSerial btSerial(2,10);
const int IN1=9; //Right Motor(-)
const int IN2=6; //Right Motor(+)
const int IN3=5; //Left Motor(+)
const int IN4=3; //Left Motor(-)
int msg[4];
char data=9;
unsigned long pre_time=0,cur_time;
long interval=5000;
RF24 radio(7,8);
const uint64_t pipe=0xE8E8F0F0E1LL;
void setup(){
pinMode(IN1,OUTPUT);
pinMode(IN2,OUTPUT);
pinMode(IN3,OUTPUT);
pinMode(IN4,OUTPUT);Serial.begin(19200);
btSerial.begin(19200);
radio.begin();
radio.openReadingPipe(1,pipe);
radio.startListening();
}
void loop(){
cur_time=millis();
if(radio.available()){
radio.read(msg,sizeof(msg));
if(btSerial.available()){
data=btSerial.read();
}
}
if(data=='A'){if(msg[0]>20&&msg[1]>15&&msg[2]>15&&msg[3]>15){ //forward 다 피면 앞으로
analogWrite(IN1,150);
analogWrite(IN2,0);
analogWrite(IN3,150);
analogWrite(IN4,0);Serial.print("Go");
pre_time=cur_time;
data=0;
}
}if(data=='B'){
if(msg[0]>20&&msg[1]==0&&msg[2]==0&&msg[3]==0){ //backward 엄지 피면 뒤로
analogWrite(IN1,0);
analogWrite(IN2,150);
analogWrite(IN3,0);
analogWrite(IN4,150);Serial.print("Back");
pre_time=cur_time;
data=1;}
}if(data=='C'){
if(msg[0]>25&&msg[1]>20&&msg[2]>20&&msg[3]==0){ //left_엄지 검지 중지 피면 왼쪽
analogWrite(IN1,0);
analogWrite(IN2,150);
analogWrite(IN3,150);
analogWrite(IN4,0);Serial.print("Left");
pre_time=cur_time;
data=2;}
}if(data=='D'){
if(msg[0]<5&&msg[1]<5&&msg[2]>25&&msg[3]>25){ //right_중지 약지 피면 오른쪽
analogWrite(IN1,150);
analogWrite(IN2,0);
analogWrite(IN3,0);
analogWrite(IN4,150);Serial.print("Right");
pre_time=cur_time;
data=3;
}
}
if((data==0)&&(cur_time-pre_time>interval)){
analogWrite(IN1,0);
analogWrite(IN2,0);
analogWrite(IN3,0);
analogWrite(IN4,0);if(msg[0]==0&&msg[1]==0&&msg[2]==0&&msg[3]==0){
btSerial.print('Y');
pre_time=cur_time;
data=9;
}
}if((data==1)&&(cur_time-pre_time>interval)){
analogWrite(IN1,0);
analogWrite(IN2,0);
analogWrite(IN3,0);
analogWrite(IN4,0);if(msg[0]==0&&msg[1]==0&&msg[2]==0&&msg[3]==0){
btSerial.print('X');
pre_time=cur_time;
data=9;
}
}if((data==2)&&(cur_time-pre_time>interval)){
analogWrite(IN1,0);
analogWrite(IN2,0);
analogWrite(IN3,0);
analogWrite(IN4,0);if(msg[0]==0&&msg[1]==0&&msg[2]==0&&msg[3]==0){
btSerial.print('W');
pre_time=cur_time;
data=9;
}
}if((data==3)&&(cur_time-pre_time>interval)){
analogWrite(IN1,0);
analogWrite(IN2,0);
analogWrite(IN3,0);
analogWrite(IN4,0);if(msg[0]==0&&msg[1]==0&&msg[2]==0&&msg[3]==0){
btSerial.print('Z');
pre_time=cur_time;
data=9;
}
}
}
댓글 0
조회수 6,629등록된 댓글이 없습니다.