정보나눔

오픈소스하드웨어 프로젝트에 대한 다양한 정보를 나누는 공간입니다.

다중 시리얼통신시 값이 출력이 안됩니다
김경수 | 2019-06-07

1. 프로젝트 사용한 보드 종류

    아두이노 UNO

 

 

2. 사용한 개발 프로그램명

    아두이노 IDE 

 

3. 사용한 센서 모델명

    DHT11

 

 

4. 연결한 회로 설명 (또는 이미지)

 

 

5. 소스코드 (주석 필수)

 

#include
#include

 

LiquidCrystal_I2C lcd(0x27, 16, 2);

 

SoftwareSerial mySerial1(2, 3); // rx = 2, tx = 3
SoftwareSerial mySerial2(8, 9); // rx = 8, tx = 9
SoftwareSerial mySerial3(12, 13); // rx = 12, tx = 13

 

int rPin = 10; // RGB LED 레드 핀
int gPin = 11;// RGB LED 블루 핀

 

int str_H=0; // 습도
int str_T=0; // 온도


float str_D = 0; // 미세먼지
float dust_Val=0; // 미세먼지 벨류값

 

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  while(!Serial) { }

  
  mySerial1.begin(9600);
  mySerial2.begin(9600);
  mySerial3.begin(9600);

  
  pinMode(rPin, OUTPUT); // RGB LED 레드핀
  pinMode(gPin, OUTPUT); // RGB LED 블루핀
  
  lcd.begin();
  lcd.backlight();
}

void setColor(int r, int g) {
  analogWrite(rPin, r);
  analogWrite(gPin, g);
  // RGB 설정 함수
}

void loop() {
  // put your main code here, to run repeatedly:
  
  mySerial1.listen();
  if(mySerial1.available() > 0) {
    char in = mySerial1.read();
    str_H = in;
    Serial.print("H");
    Serial.println(str_H);
  }
  
  mySerial2.listen();
  if(mySerial2.available() > 0) {
    char in = mySerial2.read();
    str_T = in;
    Serial.print("T");
    Serial.println(str_T);
  }
  
  mySerial3.listen();
  if(mySerial3.available() > 0) {
    char in = mySerial3.read();
    str_D = in;
    Serial.print("D");
    Serial.println(str_D);
  }

   
      lcd.home();
      lcd.print("H: ");
      lcd.print(str_H);
      lcd.print("% ");
      lcd.print("T : ");
      lcd.print(str_T);
      lcd.print("℃");
      lcd.setCursor(0, 1);
      lcd.print("Dust : ");
      lcd.print(str_D);
      delay(500);
}

 

구현했는데

mySerial1 ~ mySerial3을 동시에 하면 시리얼모니터나 lcd에 출력이 안되고요.

혹시나 해서 mySerial1 ~ mySerial3을 2개씩 묶어서도 해봤는데 안되고 있고요..

 

mySerial1 ~ mySerial3을 각각 하나씩만 구현하면 출력이 됩니다.

 

 

소프트웨어시리얼 예제를 보면 저렇게 하면 가능하다는데

저는 왜 안되는지 알수가 없어서 찾아왔습니다

 

 

프로필사진

작기 2019-06-25 14:25:42

아두이노 우노보드는 UART0,1이 있습니다. 통신포트가 2개뿐이죠,

거기에 UART0은 시리얼포트 컴파일용으로 Serial.begin으로 핀0과1을 사용합니다. 

 

즉 추가적인 포트를 한개 밖에 더 열수가 없습니다. 

세개 이상의 Serial포트를 열고싶으시면 아두이노 메가 또는

UART 포트 4개이상의 보드를 사용하시기 바랍니다.

 

이상입니다. 

이전글   |    아두이노 모터작동 if문 질문있습니다. 2019-06-06
다음글   |    OpenWeatherMap 날씨정보에 관해 문의 드립니다 ... 2019-06-07