[마이크로 프로세서] 시리얼 통신/ 소프트웨어 시리얼 통신

이현준·2020년 11월 25일
0

아두이노 1

void setup() {
  Serial.begin(9600);
}
void loop() {
   Serial.write('a');
   delay(1000);
   Serial.write('b');
   delay(1000);
}

아두이노 2

void setup() {
  Serial.begin(9600);
  pinMode(13,OUTPUT);
}
void loop() {
    
  if(Serial.available()){
    char a;
    a=Serial.read();
    Serial.println(a);
    if(a=='a'){
        digitalWrite(13,1);
    }else if(a=='b'){
      digitalWrite(13,0);
    }
  }
}

소프트웨어 시리얼 통신

기존의 RX,TX가 아닌 다른 핀을 이용해서도 시리얼 통신을 할 수 있다.

https://www.tinkercad.com/things/74af1lrjQMf-/editel

소스코드

(왼쪽 아두이노)

#include <SoftwareSerial.h>
SoftwareSerial s(2,3); // 2:RX 3:TX
void setup() {
	Serial.begin(9600);
	s.begin(9600);
}
void loop() {
  s.write('a');
  delay(1000);
  s.write('b');
  delay(1000);
}

오른쪽 아두이노

#include <SoftwareSerial.h>
	SoftwareSerial s(2,3); // 2:RX 3:TX
char data;
void setup() {
  Serial.begin(9600);
  s.begin(9600);
  pinMode(13,OUTPUT);
}
void loop() {
  if(s.available())
  {
    data = s.read();
    Serial.println(data);
  }
  if(data == 'a')
  {
  	digitalWrite(13,1);
  }
  else if(data =='b')
  {
  	digitalWrite(13,0);
  }
  delay(1000);

}

여기서 중요한 점은 양쪽 아두이노 다 delay가 조금이라도 있어야 한다는 것이다. 오른쪽 아두이노는 왼쪽 아두이노의 delay 정도면 충분할듯 아마 delay가 없으면 왼쪽 아두이노에서 보낸 데이터를 충분히 받지 못하고 출력하게 되는지.. 에러값이 들어간다. 또한 왼쪽 아두이노에서도 delay가 없으면 쓰레기 값이 들어간다. 동시에 데이터를 보내서 그런 문제가 생기는게 아닐까라고 예상해본다.

0개의 댓글