BASIC4MCU | 질문게시판 | 아두이노 코딩 질문드립니다.
페이지 정보
작성자 바리 작성일2018-06-23 03:14 조회8,588회 댓글2건본문
저번에 질문했었는데 다른 문제로 질문드립니다.
아두이노에서 btSerial.print를 통해 X,Y,Z,W를 앱으로 랜덤으로 보내려고 합니다.
어떤식으로 코딩을 해야하는지 감이 안잡혀서 질문드립니다. 힌트라도 주시면 감사하겠습니다.
#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=0;
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=='P'){
pre_time = cur_time;
btSerial.print('V');
Serial.print("start");
data=0;
}
if(data=='E'){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);pre_time=cur_time;
btSerial.print('Y');
Serial.print("Go");
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);pre_time=cur_time;
btSerial.print('X');
Serial.print("Back");
data=0;}
}
if(data=='C'){
if(msg[0]>25&&msg[1]>20&&msg[2]>20&&msg[3]==0){ //left_엄지 검지 중지 피면 왼쪽
analogWrite(IN1,0);
analogWrite(IN2,80);
analogWrite(IN3,80);
analogWrite(IN4,0);
delay(800);
analogWrite(IN1,150);
analogWrite(IN2,0);
analogWrite(IN3,150);
analogWrite(IN4,0);pre_time=cur_time;
btSerial.print('W');
Serial.print("Left");
data=0;}
}
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);
delay(800);
analogWrite(IN1,150);
analogWrite(IN2,0);
analogWrite(IN3,150);
analogWrite(IN4,0);
pre_time=cur_time;
btSerial.print('Z');
Serial.print("Right");
data=0;}
}
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);pre_time=cur_time;
btSerial.print('X');
Serial.print("Go");
data=0;}
}
if(pre_time>0&&(cur_time-pre_time>interval)){
pre_time=cur_time;
analogWrite(IN1,0);
analogWrite(IN2,0);
analogWrite(IN3,0);
analogWrite(IN4,0);}
댓글 2
조회수 8,588바리님의 댓글
바리 작성일
글을 수정할 수 없어서 댓글로 작성합니다. 제가 랜덤으로 보내는 것을 해봤는데 X,Y,Z,W를 5초동안 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=0;
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=='P'){
pre_time = cur_time;
btSerial.print('V');
Serial.print("start");
data=0;
}
if(data=='E'){
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);
pre_time=cur_time;
btSerial.print('Y');
Serial.print("Go");
data=0;
}
}
int value = random(0,4);
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);
pre_time=cur_time;
Serial.print("Back");
data=0;
}
}
if(data=='C'){
if(msg[0]>25&&msg[1]>20&&msg[2]>20&&msg[3]==0){ //left_엄지 검지 중지 피면 왼쪽
analogWrite(IN1,0);
analogWrite(IN2,80);
analogWrite(IN3,80);
analogWrite(IN4,0);
pre_time=cur_time;
Serial.print("Left");
data=0;
}
}
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);
pre_time=cur_time;
Serial.print("Right");
data=0;
}
}
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);
pre_time=cur_time;
Serial.print("Go");
data=0;
}
}
if(pre_time>0&&(cur_time-pre_time>interval)){
pre_time=cur_time;
analogWrite(IN1,0);
analogWrite(IN2,0);
analogWrite(IN3,0);
analogWrite(IN4,0);
int value = random(0,4);
if(value == 0){
btSerial.print('X');
}
else if(value == 1){
btSerial.print('Y');
}
else if(value == 2){
btSerial.print('Z');
}
else if(value == 3){
btSerial.print('W');
}
}
}
master님의 댓글
master 작성일
RC카 제어에 의한 전송과 랜덤값 전송의 순서도를 작성하셔야겠습니다.
알고리즘이 정확하면 코딩은 별 것 아닙니다.
//
글 내용으로는 정확한 알고리즘이 이해되지 않습니다.
그림이든 표든 추가적인 설명이 필요합니다.
랜덤값을 어떤 조건에서 보낸다는 말일까요?