아두이노

아두이노 - 시리얼, LED

haniru 2026. 3. 22. 00:05

시리얼

1. Serial.begin(9600);

"자, 이제부터 대화 시작한다! 속도는 9600으로 맞춰!"

  • 설명: 통신을 준비하는 명령어입니다. 보통 setup() 안에 딱 한 번 써줍니다.
  • 비유: 전화를 걸 때 상대방과 내 목소리 톤(속도)을 맞추는 것과 같아요. 9600이 가장 표준적인 속도입니다. 양쪽 속도가 다르면 글자가 깨져서 보입니다.

2. Serial.available()

"우체통에 편지 들어온 거 있어? 있으면 몇 통이나 있어?"

  • 설명: 현재 아두이노로 들어온 데이터가 있는지 확인하는 함수입니다.
  • 비유: 우체통 입구를 살짝 열어서 편지가 들어있는지 확인하는 거예요. 편지가 있으면 그 개수(바이트 수)를 알려주고, 없으면 0이라고 답합니다. 보통 if (Serial.available() > 0) 요렇게 세트로 씁니다.

3. Serial.read()

"제일 앞에 있는 편지 한 통 꺼내서 읽어봐!"

  • 설명: 들어온 데이터를 진짜로 읽어오는(가져오는) 명령어입니다.
  • 비유: 우체통에서 편지를 딱 한 장 꺼내는 행위입니다. 한 번 읽고 나면 그 데이터는 우체통에서 사라집니다.

 
사용자 입력받기

void setup() {
  Serial.begin(115200);
}

void loop() {
  if (Serial.available()) {
    char userInput = Serial.read();
    Serial.print(userInput);
  }
}

 
LED 켜고 끄기

const int LED = 13;

void setup() {
  Serial.begin(115200);
  pinMode(LED, OUTPUT);
}

void loop() {
  if (Serial.available()) {
    char userInput = Serial.read();

    switch(userInput) {
      case 'n':
        digitalWrite(LED, HIGH);
        break;
      case 'f':
        digitalWrite(LED, LOW);
        break;
      default:
        break;
    }
  }
}

 
 
LED 밝기 조절하기

const int LED = 11;

void setup() {
  Serial.begin(115200);
  pinMode(LED, OUTPUT);
}

void loop() {
  if (Serial.available()) {
    char userInput = Serial.read();

    switch(userInput) {
      case '0': analogWrite(LED, 0); break;
      case '1': analogWrite(LED, 25*1); break;
      case '2': analogWrite(LED, 25*2); break;
      case '3': analogWrite(LED, 25*3); break;
      case '4': analogWrite(LED, 25*4); break;
      case '5': analogWrite(LED, 25*5); break;
      case '6': analogWrite(LED, 25*6); break;
      case '7': analogWrite(LED, 25*7); break;
      case '8': analogWrite(LED, 25*8); break;
      case '9': analogWrite(LED, 25*9); break;
      default: break;
    }
  }
}

 
 
digitalRead(pin):특정 핀의 값을 읽는 명령어
pin: 읽고자 한느 핀 번호 HIGH  또는 LOW 값을 돌려준다. digitalRead 함수는 할당된 핀이 VCC(=5V) 또는 GND에 연결된 상태에 따라 논리적으로 1, 0을 읽는 함수이다.
 
 
0, 1 읽기 - 디지털 입력 핀을 0V에 연결하면 논리적으로 0 값이 입력됨

const int digitalPin = 2;

void setup() {
  Serial.begin(115200);

  pinMode(digitalPin, INPUT);
}

void loop() {
  int digitalValue = digitalRead(digitalPin);
  Serial.println(digitalValue);
}

 
1

 
 
0

 
버튼회로 구성하기 - 누르면 1, 떼면 0

const int digitalPin = 2;

void setup() {
  Serial.begin(115200);

  pinMode(digitalPin, INPUT);
}

void loop() {
  int digitalValue = digitalRead(digitalPin);
  Serial.println(digitalValue);
}

 
버튼값에 따라 LED 켜고 끄기

const int ledPin = 13;
const int buttonPin = 2;

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin, INPUT);
}

void loop() {
  int buttonInput = digitalRead(buttonPin);
  digitalWrite(ledPin, buttonInput);
}

 
버튼 값에 따라 LED 밝기 조절하기

const int ledPin = 11;
const int buttonPin = 2;

void setup() {
  pinMode(buttonPin, INPUT);
}

void loop() {
  int buttonInput = digitalRead(buttonPin);
  if(buttonInput == HIGH) {
    for (int t_high=0; t_high<=255; t_high++) {
      analogWrite(ledPin, t_high);
      delay(4);
    }
  } else {
    analogWrite(ledPin, 0);
  }
}

 
LED 주사위 만들기

const int led[6] = { 3,5,6,9,10,11 };
const int buttonPin = 2;

void setup() {
  for(int x=0; x<=5; x++) {
    pinMode(led[x], OUTPUT);
  }
  pinMode(buttonPin, INPUT);
}

void loop() {
  int buttonInput = digitalRead(buttonPin);
  if (buttonInput == HIGH) {
    for (int x=0; x<=5; x++) {
      for (int x=0; x<=5; x++) {
        digitalWrite(led[x], LOW);
      }

      digitalWrite(led[x], HIGH);

      buttonInput = digitalRead(buttonPin);
      if (buttonInput == LOW) break;

      delay(50);
    }
  }
}

KakaoTalk_20260321_221352518.mp4
0.76MB

 
 
analogRead(pin): 특정 아날로그 핀의 값을 읽는 명령어
pin: 읽고자 하는 아날로그 핀 번호 0~1023 사이의 값을 돌려준다
 
ADC값 간단하게 읽어보기

const int analogPin = A0;

void setup() {
  Serial.begin(115200);
}

void loop() {
  int analogValue = analogRead(analogPin);
  Serial.println(analogValue);
}

 
 
1023

 
0

 
679~680 출력됨 -> (1024/5V) * 3.3V = 675.8V  가 나와야한다고 함

 
가변저항 회로 구성하기 -> 0~1023 사이의 값이 나온다

const int analogPin = A0;

void setup() {
  Serial.begin(115200);
}

void loop() {
  int analogValue = analogRead(analogPin);
  Serial.println(analogValue);
}

 
가변저항 입력에 따라 LED 밝기 조절하기

const int ledPin = 3;
const int analogPin = A0;

void setup() {
  Serial.begin(115200);
}

void loop() {
  int sensorInput = analogRead(analogPin);
  Serial.println(sensorInput);

  analogWrite(ledPin, sensorInput/4);
}

KakaoTalk_20260321_230635944.mp4
2.25MB

 
 
디지털 LED 막대 측정기

const int led[6] = { 3, 5, 6, 9, 10, 11 };
const int analogPin = A0;

void setup() {
  Serial.begin(115200);
  for (int x=0; x<=5; x++) {
    pinMode(led[x], OUTPUT);
  }
}

void loop() {
  int sensorInput = analogRead(analogPin);
  Serial.println(sensorInput);
  
  for (int i = 0; i < 6; i++) {
    // 기준값: 146, 292, 438, 584, 730, 876
    if (sensorInput > (146 * (i + 1))) {
      digitalWrite(led[i], HIGH);
    } else {
      digitalWrite(led[i], LOW);
    }
  }
}

KakaoTalk_20260321_233241054.mp4
2.29MB

 
아날로그 LED 막대 측정기

const int led[6] = { 3, 5, 6, 9, 10, 11 };
const int analogPin = A0;

void setup() {
  Serial.begin(115200);
  for (int x=0; x<=5; x++) {
    pinMode(led[x], OUTPUT);
  }
}

void loop() {
  int sensorInput = analogRead(analogPin);

  for (int n=0; n<=5; n++) {
    if (sensorInput/171 >= 1+n) {
      analogWrite(led[n], 255);
    } else if (sensorInput / 171 >= 0+n) {
      analogWrite(led[n], int(sensorInput%171/171.0*255));
    }
  }
}

KakaoTalk_20260321_234111460.mp4
2.52MB

 
 
빛 센서: 빛의 양이 적을수록(어두울수록) 저항값은 높아지고, 빛의 양이 많을수록 저항값은 낮아짐
 
빛 센서값 읽어보기 - 빛 센서를 손으로 가리면 값이 700 대까지도 나옴

const int ledPin = 10;   // 전구가 꽂힌 10번 핀
const int analogPin = A0;

void setup() {
  Serial.begin(115200);
  
  // [추가] 10번 핀을 전기를 내보내는 '출력' 모드로 설정합니다.
  pinMode(ledPin, OUTPUT); 
}

void loop() {
  int analogValue = analogRead(analogPin);
  Serial.println(analogValue);

  // [방법 1] 무조건 꽉 켜기
  digitalWrite(ledPin, HIGH); 
}

 
 
빛 센서 값에 따라 밝기 조절하기

const int ledPin = 10;   // 전구가 꽂힌 10번 핀
const int analogPin = A0;

void setup() {
  Serial.begin(9600);
}

void loop() {
  int sensorInput = analogRead(analogPin);
  Serial.println(sensorInput);
  analogWrite(ledPin, sensorInput/4);
}

KakaoTalk_20260322_000532353.mp4
2.21MB