2012년 8월 22일 수요일

xbee remote communication code

무선통신을 통해 모터를 작동시키기위해 xbee를 사용한다.


int a ; // 변수지정
int PWM1 = 6 ; // 모터1의 PWM을 결정

int DIR1 = 7 ; // 모터1의 방향을 결정
int EN1 = 8 ; // 모터1의 작동여부를 결정
int PWM2 = 11 ; // 모터2의 PWM을 결정
int DIR2 = 12 ; // 모터2의 방향을 결정
int EN2 = 13 ; // 모터2의 작동여부를 결정



void setup() {
  Serial.begin(9600); // xbee 통신에서 baud를 9600으로 결정한다.

                         양쪽 xbee 모두 9600으로 셋팅해야한다.
  pinMode(PWM1,OUTPUT);
  pinMode(DIR1,OUTPUT);
  pinMode(EN1,OUTPUT);

  pinMode(PWM2,OUTPUT);
  pinMode(DIR2,OUTPUT);
  pinMode(EN2,OUTPUT);  //위의 핀들을 아웃풋의 용도로 사용함을 설정

  analogWrite(PWM1,0); // 이제부터 입력이 시작된다.

                          아래 4줄은 초기 셋팅값. 모두 정지함을 의미한다.
  digitalWrite(EN1,LOW);
  analogWrite(PWM2,0);
  digitalWrite(EN2,LOW);
}



void loop(){   // 여기서 부터 명령어.
 
if(Serial.available()>0){   // 시리얼 명령어가 들어온다면.. 아래 실행

  a = Serial.read() ;

if(a==115){                 // 아스키 115는 s를 의미한다.
                                                                           s를 입력한다면...
  Serial.println("STOP");   // STOP을 출력하고
  analogWrite(PWM1,0);      // 모두 정지. 
  analogWrite(PWM2,0);      // 아래도 모두 같은 방식으로 진행된다.  
  digitalWrite(DIR1,0);
  digitalWrite(DIR2,0);
  digitalWrite(EN1,LOW);
  digitalWrite(EN2,LOW);
  delay(2000);

}
if(a==103){
  Serial.println("GO");
  analogWrite(PWM1,200);
  analogWrite(PWM2,200);
  digitalWrite(EN1,HIGH);
  digitalWrite(EN2,HIGH);
  digitalWrite(DIR1,0);
  digitalWrite(DIR2,0);
  delay(2000);

}
if(a==98){
  Serial.println("BACK");
  analogWrite(PWM1,200);
  analogWrite(PWM2,200);
  digitalWrite(DIR1,1);
  digitalWrite(DIR2,1);
  digitalWrite(EN1,HIGH);
  digitalWrite(EN2,HIGH);
  delay(2000);
}

if(a==114){
  Serial.println("RIGHT");
  analogWrite(PWM1,200);
  analogWrite(PWM2,200);
  digitalWrite(EN1,HIGH);
  digitalWrite(EN2,HIGH);
  digitalWrite(DIR1,0);
  digitalWrite(DIR2,1);
  delay(2000);
}

if(a==108){
  Serial.println("LEFT");
  analogWrite(PWM1,200);
  analogWrite(PWM2,200);
  digitalWrite(EN1,HIGH);
  digitalWrite(EN2,HIGH);
  digitalWrite(DIR1,1);
  digitalWrite(DIR2,0);
  delay(2000);
}

}
}