송신측
#include <SoftwareSerial.h>
int RX = 10;
int TX = 11;
int incomingByte = 0;
SoftwareSerial mySerial = SoftwareSerial(RX,TX);
void setup(){
mySerial.begin(9600);
}
void loop(){
for(int i=0;i<10;i++){
incomingByte = i;
mySerial.print(incomingByte);
delay(1000);
}
}
========================================================================
수신측
#include <SoftwareSerial.h>
int RX = 10;
int TX = 11;
SoftwareSerial mySerial = SoftwareSerial(RX,TX);
int dataPin = 2;
int clockPin = 3;
int latchPin = 4;
int incomingByte = 0;
// 0에서 9까지 숫자 표시를 위한 세그먼트 a, b, c, d, e, f, g, dp의 점멸 패턴
// 켜지는 부분이 1로 표현됨
byte digits_data[10] =
{0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6, 0xBE, 0xE4, 0xFE, 0xE6};
void setup() {
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(latchPin, OUTPUT);
mySerial.begin(9600);
Serial.begin(9600);
}
void loop() {
if(mySerial.available()){
incomingByte = mySerial.read();
incomingByte = incomingByte - 48;
Serial.println(incomingByte);
}
digitalWrite(latchPin, LOW); // 래치 출력 금지
shiftOut(dataPin, clockPin, LSBFIRST, ~digits_data[incomingByte]); // 데이터 출력
digitalWrite(latchPin, HIGH); // 래치 출력 허용
}
ps.
중간에 생긴 문제점은 듀에밀라노베에서 데이터를 보내는데
mySerial.println(); 으로 해가지고
println에서 출력해주는 int 상수값과 ln에 해당하는 Line Feed, Carriage Return 값까지 전송되는 문제점이 있었음.
그래서 mySerial.println(incomingByte); 로 사용하면
수신측 데이터가 한번에 상수, Line Feed(아스키값 10), Carriage Return(아스키값 13)의 총 3가지의 데이터가 한꺼번에 수신됨.