SADI Arduino Lignt & Sound Project

Technical References/Sound 2007. 10. 1. 17:19

Xbee 보드를 이용한 사운드 및 라이트 콘트롤


주제: Xbee 보드를 이용한 원격 제어를 테스트하기 위하여 만든 작업입니다.

위 영상에서 보여지듯이, 본 작업은 3개의 Xbee 보드와 3개의 아두이노 보드를 사용하고 있습니다.

오른쪽의 Xbee 보드에서는 기울기 센서로 부터 신호를 받아, 1) 본체의 3색 LCD를 밝히고, 어둡게 하는 기능을 수행하고, 2) 나머지 2개의 Xbee보드에 기울기 센서의 상태를 전송합니다.

왼쪽의 2개의 Xbee보드에서는 간단한 기술기 센서의 신호를 받아, 각자 본체의 작업을 수행하게 됩니다.
한 쪽에서는 불을 밝히고 어둡게 하는 기능을 수행하고, 다른 쪽에서는 불을 밝히고 사운드를 제어하는 기능을 수행하게 됩니다. 아래는 Xbee 신호를 보내는 쪽의 코드와 Xbee 코드를 받는 쪽의 코드입니다.

Xbee 신호를 보내는 쪽의 코드는 아래와 같습니다.

int inPin = 5;
int pinVal;
int isHigh;
void setup() {
  Serial.begin(9600);
}

void loop() {
  pinVal = digitalRead(inPin);
  if ( pinVal == LOW) {
    if(isHigh == 0) {
      Serial.flush();
      for (int i =0; i<255; i++) {
        analogWrite(12, i);
        analogWrite(11, i);
        analogWrite(10, i);
        delay(30);
        if(i % 2 == 0) Serial.print("h");
      }
      isHigh = 1;
    }
  } else {
    if (isHigh == 1) {
      for (int j = 255; j >0; j--) {
        analogWrite(12, j);
        analogWrite(11, j);
        analogWrite(10, j);
        delay (10);
        if(j % 2 == 0) Serial.print("l");
      }
      isHigh = 0;
     
      digitalWrite(12, LOW);
      digitalWrite(11, LOW);
      digitalWrite(10, LOW);
    }
  }

  delay(100);

}
 
Xbee 신호를 받는 쪽의 코드는 아래와 같습니다.

#include <SoftwareSerial.h>
#define rxPin 2
#define txPin 3
// set up a new serial port
SoftwareSerial mySerial =  SoftwareSerial(rxPin, txPin);
byte pinState = 0;

int isHigh = 0;

void setup() {
  Serial.begin(9600);
  // define pin modes for tx, rx, led pins:
  pinMode(rxPin, INPUT);
  pinMode(txPin, OUTPUT);

  // set the data rate for the SoftwareSerial port
  mySerial.begin(9600);
}

void loop() {
  if (Serial.available() > 0) {
    int inVal = Serial.read();
    if(inVal == 108) { 
      Serial.flush();
      if (isHigh == 0) {
        mySerial.print("V3A");
        mySerial.print(13, BYTE);
       
        for(int i = 0; i < 256; i++) {
          analogWrite(9, i);
          analogWrite(10, i);
          analogWrite(11, i);
          delay(10);
        }
       isHigh = 1;
      }
    } else if (inVal == 104) {
      Serial.flush();
      if(isHigh == 1) {
//        mySerial.print("VST");
//        mySerial.print(13,BYTE);
          mySerial.print("E");
        for(int j = 256; j >0; j--) {
          analogWrite(9, j);
          analogWrite(10, j);
          analogWrite(11, j);
          delay (10);
        }
        isHigh = 0;
        digitalWrite(9,LOW);
        digitalWrite(10, LOW);
        digitalWrite(11, LOW);
      }
    }
    } 
    delay(100);
}

: