9-4 UART 통신을 이용한 원격제어 실험

공부하는 학생 A·2024년 2월 19일
0

아두이노 

목록 보기
47/74

회로설계

이번 실험은 버튼에 의한 URAT 통신을 이용한 원격제어 실험이다.

스케치 9-4 UART 통신을 이용한 원격제어 실험 (마스터)

int pin_switch1 = 13;
int pin_switch2 = 12;
int pin_LED1 = 8;

boolean buttonState1=false;
boolean buttonState2=false;
boolean buttonState3=false;

boolean buttonSwitch1_State_old=false;
boolean buttonSwitch2_State_old=false;

void setup() {
  Serial.begin(9600);
  Serial.print("Sketch: "); Serial.println("__파일__");
  Serial.print("Uploaded: "); Serial.println("__날짜__");
  Serial.println(" ");

  pinMode(pin_LED1, OUTPUT);
  pinMode(pin_switch1, INPUT);
  pinMode(pin_switch2, INPUT);
}
void loop() {
  buttonState1=digitalRead(pin_switch1); delay(1);
  buttonState2=digitalRead(pin_switch1);delay(1);
  buttonState3=digitalRead(pin_switch1);delay(1);

  if((buttonState1 == buttonState2)&& (buttonState1 == buttonState3)){
    if (buttonState1 != buttonSwitch1_State_old){
      buttonSwitch1_State_old = buttonState1;
      if(buttonSwitch1_State_old ==  HIGH){
        Serial.write(1);
      }
      else{
        Serial.write(0);
      }
    }
  }
  buttonState1=digitalRead(pin_switch2); delay(1);
  buttonState2=digitalRead(pin_switch2);delay(1);
  buttonState3=digitalRead(pin_switch2);delay(1);
  if((buttonState1 == buttonState2) && (buttonState1 == buttonState3)){
    if (buttonState2 != buttonSwitch2_State_old){
      buttonSwitch2_State_old = buttonState2;
      if(buttonSwitch2_State_old ==  HIGH){
        Serial.write(3);
      }
      else{
        Serial.write(2);
      }
    }
  }  
}

스케치 9-4 분석

digitalRead() 함수를 이용하여 스위치 상태(HIGH 혹은 LOW)값을 읽어 들인다. 스위치의 상태가 이전과 다르다면 현재의 스위치 상태(buttonState1)를 buttonSwitch1_State_old에 저장한다. 그리고 buttonSwitch1_State_old가 HIGH이면 UART를 통해 1을 전송하며, 그렇지 않을 경우 0을 전송한다. 스위치 2에서는 buttonState2buttonSwitch2_State_old가 같지 않을 경우 buttonState2buttonSwitch2_State_old에 저장한다. 그리고 buttonSwitch2_State_old가 HIGH일 경우 UART를 통해 3을 전송하며 그렇지 않을 경우 2를 전송한다.

스케치 9-5 UART 통신을 이영한 원격제어 실험 (슬레이브)

int pin_LED1 = 13;
int pin_LED2 = 12;
int received_data = 5;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  Serial.print("Sketch: "); Serial.println("__파일__");
  Serial.print("Uploaded: "); Serial.println("__날짜__");
  Serial.println("START!! ");

  pinMode(pin_LED1, OUTPUT);
  pinMode(pin_LED2, OUTPUT);
}
void loop() {
  if(Serial.available()){
    received_data = Serial.read();
    if(received_data == 0){
      digitalWrite(pin_LED1,LOW);
      Serial.println("Received Data 0");
    }
    if(received_data == 1){
      digitalWrite(pin_LED1, HIGH);
      Serial.println("Received Data 1");
    }
    if(received_data == 2){
      digitalWrite(pin_LED2, LOW);
      Serial.println("Received Data 2");
    }
    if(received_data == 3){
      digitalWrite(pin_LED2, HIGH);
      Serial.println("Received Data 3");
    }    
  }
}

스케치 9-5 분석

Serial.available()를 이용하여 Serial 버퍼에 데이터가 있으면 Serial.read() 함수를 이용하여 데이터를 읽은 후 received_data에 저장한다. received_data가 1인 경우는 LED1를 ON시키며, 2인 경우 LED2를 ON 시킨다.

스케치 9-4,9-5 실행결과

마스터

슬레이브

profile
Shine like a star, Just like a star

0개의 댓글