컴퓨터에서 아두이노로 0~9의 숫자를 전송한다. 아두이노에서는 전송 받은 숫자만큼 아두이노 보드의 LED를 점멸 시킨다.

 

※ 명령어

  • Serial.available( ) : 시리얼 통신에 수신된 데이터가 있는지 확인한다. 있을 경우 참(true)의 값을 갖는다.
  • Serial.read( ) : 시리얼 통신을 통하여 수신된 값을 읽는다.
  • isDigit(변수) : 변수의 값이 ASCII 코드의 0~9의 숫자 범위에 있는지 여부를 판단한다. 범위에 있을 경우 참(true)의 값을 갖는다.
  • pinMode(핀번호, 설정) : 핀의 입출력 모드를 설정한다. '핀번호'에는 설정하고자 하는 핀의 번호, '설정'에는 입력으로 사용하기 위해서는 'INPUT', 출력으로 사용하기 위해서는 'OUTPUT', 입력이며 풀업 사용시 'INPUT_PULLUP'을 기술한다.
  • digitalWrite(핀번호, 값) : 핀에 디지털 출력(High or Low)을 한다. '핀번호'에는 출력하고자 하는 핀의 번호를, '값'에는 'HIGH' 혹은 'LOW'를 설정하여 High 혹은 Low 출력을 한다.
/*
 * 예제
 * 컴퓨터로부터 시리얼 통신을 통하여 데이터 수신하기
 */
 
const int ledPin = 13;     // LCD 출력을 할 핀번호 설정
int blinkNumber = 0;      // 점멸횟수 변수 설정

void setup() {
  Serial.begin(9600);     // 9600bps로 시리얼 통신 설정
  pinMode(ledPin,OUTPUT); // 13번 핀을 출력으로 설정
  
}

void loop() {
  // 시리얼 통신으로 입력 받은 데이터가 있는지를 검사하여
  // 데이터가 있을 경우에 if문 안의 명령어를 실행
  if(Serial.available()){
    char val = Serial.read();     // val 변수에 시리얼 통신값 읽어오기
    if(isDigit(val)){                  // 입력된 값이 0~9의 숫자인지를 판단
      blinkNumber = (val - '0');  // val은 ASCII 코드값이므로 숫자로 바꿔주기 위하여 '0'의 아스키 코드값을 빼주면 실제 숫자가 저장된다.
    }
  }
  
  // blinkNumber 만큼 LED를 점멸시킴
  for(char i = 0; i<blinkNumber; i++){
    digitalWrite(ledPin,HIGH);
    delay(200);
    digitalWrite(ledPin,LOW);
    delay(200);
  }
  
  blinkNumber=0;    // 점멸 횟수를 리셋한다.
}

시리얼 모니터에서 6을 입력했다.

 

+ Recent posts