정보나눔

오픈소스하드웨어 프로젝트에 대한 다양한 정보를 나누는 공간입니다.

조이스틱을 통한 dc모터 제어에 대해 궁금합니다.
박해영 | 2017-10-27

아두이노 조이스틱 아날로그 값을 받은 후 몇 이상이면 1, 몇 이하면 2.  이런식으로 조이스틱의 값에 따라 변수안에 숫자를 넣은 후 그 숫자를 다른 아두이노에게 블루투스로 보내 받은 값이 1이면 모터 a와 b를 앞으로 2이면 뒤로 3이면 정지로 설정하였습니다. 하지만 블루투스가 값을 전송하지 못하는 것 같습니다. 프로그램에 무엇이 잘 못됬을까요?

#include<SoftwareSerial.h>
SoftwareSerial btSerial(2,3);
const int udlow = 300;
const int udhigh = 450;
const int lrlow = 300;
const int lrhigh = 450;
int ud;
int lr;
char lrdirection;
char uddirection;
void setup() {
  // put your setup code here, to run once:
btSerial.begin(9600);
Serial.begin(9600);
}

void loop() {
  lrdirection = 0;
  uddirection = 0;
  ud=analogRead(0);
  lr=analogRead(1);
    if(ud>udhigh){
      lrdirection='1';
      Serial.println(lrdirection);
          delay(100);
            btSerial.write(lrdirection);
    }
    else if(ud<udlow){
      lrdirection='2';
            Serial.println(lrdirection);
            btSerial.write(lrdirection);
    delay(100);
    }
  else{
        uddirection='3';
              btSerial.write(uddirection);
      Serial.println(uddirection);
      delay(100);
      }
    }

이게 마스터 부분

 

#include<SoftwareSerial.h>
SoftwareSerial btSerial(2,3);
int in1x = 10;  
int in2x = 4;  
int in3x = 5;
int in4x = 6;
int enAx = 11;
int enBx = 7;
char buffer[20];
char bufferindex=0; 
void setup() {
  pinMode(in1x, OUTPUT); 
  pinMode(in2x, OUTPUT); //각 포트 출력으로 사용
  pinMode(in3x, OUTPUT);
  pinMode(in4x, OUTPUT);
 btSerial.begin(9600); 
 Serial.begin(9600);//시리얼모니터 사용
}

void loop() {
    while(btSerial.available()){
      buffer[bufferindex]=btSerial.read();
      bufferindex++;}
     int indata=atoi(buffer); 
    //입력된 데이터 in_data에 저장
    if(indata!=0) { 
     Serial.println(indata);}
    delay(100);
    for(int a=0; a<21;a++){
      buffer[a]=NULL;
    }//친구가 리스트에 값을 넣어보라고 하여 해보았지만 결과는 똑같이 되지 않았습니다.
    bufferindex=0;
    if(indata == '1')    //입력된 데이터가 '1'이라면x축 앞으로
    { 
      digitalWrite(in1x, HIGH);
      digitalWrite(in2x, LOW);
      digitalWrite(in3x, HIGH);
      digitalWrite(in4x, LOW);
      analogWrite(enAx,255);
      analogWrite(enBx,255);//앞으로 회전
    }
    else if(indata == '2') //입력된 데이터가 '2'라면x축 뒤로
    { 
      digitalWrite(in1x, LOW);
      digitalWrite(in2x, HIGH);
      digitalWrite(in3x, LOW);
      digitalWrite(in4x, HIGH);
      analogWrite(enAx,255);
      analogWrite(enBx,255);//뒤로 회전 (어떤 방향으로 꽂았느냐에 따라서 방향 반대)    }

   else if(indata == '3')//정지
   {
    digitalWrite(in1x, LOW);
    digitalWrite(in2x, LOW);
    digitalWrite(in3x, LOW);
    digitalWrite(in4x, LOW);
     }}//슬레이브 부분

이전글   |    아두이노 메가 블루투스 2017-10-27
다음글   |    MOVI 쉴드 음성인식 모듈 2017-10-27