티스토리 뷰

// 터미널 창을 통해 값을 전달 하여 LED 제어
int ledPin = 12;
int incomingByte = 0;

void setup()  {
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
}

void loop()  {
  if(Serial.available() > 0)  {
    incomingByte = Serial.read();
    Serial.print("incomingByte = ");
    Serial.println(incomingByte);
    if(incomingByte == '1')  {
      digitalWrite(ledPin, HIGH);
    }else  if(incomingByte == '0')  {
      digitalWrite(ledPin, LOW);
    }    
  }
}

//serialEvent 사용
//하드웨어 interrupt -> 코드로 구현 시 해당 이벤트 사용 불가
int ledPin[] = {10, 11, 12};
int incomingByte = 0;

void setup()  {
  for(int i = 0; i < 3 ; i++)  {
    pinMode(ledPin[i], OUTPUT);
    digitalWrite(ledPin[i], LOW);
  }
  Serial.begin(9600);
}

void loop()  {
}

void serialEvent()  {
  incomingByte = Serial.read();
  if(incomingByte >= 48 && incomingByte <= 53)  {  // 0~5
    boolean ledFlag = incomingByte % 2 == 0 ? LOW : HIGH;
    digitalWrite(ledPin[(incomingByte - 48) / 2], ledFlag);
  }
}

//아누이노 2개 UART 통신 
//전위차가 같도록 그라운드를 같이 사용한다.
// softwareserial include
// serial.read() 는 한번 읽고 난 버퍼는 비운다 주의!!
#include <softwareserial.h>

// SoftwareSerial(RXD PIN, TXD PIN)
SoftwareSerial SWSerial(2, 3);
const int MAX_DATA_LNEGTH = 5;
int count = 0;
byte getSerialData[MAX_DATA_LNEGTH];

void setup()  {
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
  Serial.begin(9600);
  SWSerial.begin(9600);
  digitalWrite(10, LOW);
  digitalWrite(11, LOW);
  digitalWrite(12, LOW);  
}

void loop()  {
  if(SWSerial.available() > 0)  {
    getSerialData[count] = SWSerial.read();
    if(getSerialData[0] == 'A')  count++;
    if(count > 4)  {
      count = 0;
      getSerialData[0] = 0;
      if(getSerialData[4] == 'Z')  {
          getSerialData[4] = 0;
          digitalWrite(10, getSerialData[1] - 48);
          digitalWrite(11, getSerialData[2] - 48);
          digitalWrite(12, getSerialData[3] - 48);
        }
    }
  }
  if(Serial.available() > 0)  {
    SWSerial.write(Serial.read());
  }
}
댓글