LED 깜빡이기
1초 켜고 1초 끄기를 반복합니다. 모든 것의 출발점입니다.
예제
실제 오픈소스 프로젝트에서 흔한 조합으로 고른 아두이노 스케치입니다. 코드는 한 줄도 고치지 않고, 그대로 시뮬레이션하고 그대로 PCB 로 갑니다.
기초
5개1초 켜고 1초 끄기를 반복합니다. 모든 것의 출발점입니다.
2번 핀의 버튼 상태를 시리얼 모니터에 0 또는 1 로 계속 찍습니다.
A0 에 연결된 가변저항을 0~1023 사이 숫자로 읽어 찍습니다.
analogWrite 로 9번 핀 LED 를 밝아졌다 어두워졌다 반복합니다.
가변저항의 0~1023 값을 0~5 V 전압으로 환산해 찍습니다.
디지털 입출력
9개버튼이 눌린 동안에만 13번 핀 LED 를 켭니다.
저항을 따로 달지 않고 INPUT_PULLUP 으로 버튼을 읽습니다. 눌리면 0 입니다.
버튼은 누를 때 아주 짧게 여러 번 붙었다 떨어집니다. 50 ms 를 기다려 한 번으로 셉니다.
눌려 있는지가 아니라 '방금 눌렸는지'를 감지해 횟수를 셉니다.
delay 로 멈춰 서지 않고 시간을 재서 깜빡입니다. 다른 일을 동시에 하려면 이렇게 해야 합니다.
음 높이와 길이를 배열에 적어 두고 순서대로 연주합니다.
A0 값을 그대로 음 높이로 바꿔 소리를 냅니다.
센서 여러 개를 읽어 눌린 자리에 해당하는 음을 냅니다.
tone() 은 한 번에 하나만 낼 수 있습니다. noTone() 으로 끄고 다음 것을 켭니다.
아날로그
6개A0 값을 그대로 delay 로 써서, 돌리는 만큼 LED 가 빨리 또는 느리게 깜빡입니다.
0~1023 로 읽은 값을 0~255 로 줄여 LED 밝기로 씁니다. map() 을 배우는 예제입니다.
for 반복문 두 개로 밝아졌다 어두워졌다 합니다. 앞의 Fade 와 같은 결과를 다른 방식으로 씁니다.
최근 10개의 평균을 내서 값이 덜 튀게 만듭니다. 센서를 쓰면 반드시 만나는 문제입니다.
처음 5초 동안 본 최소·최대값을 기억해 두고, 그 범위를 기준으로 값을 환산합니다.
읽은 값이 클수록 더 많은 LED 를 켭니다. 값을 눈으로 보는 가장 쉬운 방법입니다.
제어문
6개읽은 값이 정해둔 기준을 넘을 때만 LED 를 켭니다. if 문의 가장 기본입니다.
for 문으로 여러 LED 를 순서대로 켰다 껐다 합니다. 반복문을 배우는 예제입니다.
버튼이 눌려 있는 동안 while 문 안에 머무르며 계속 무언가를 합니다.
읽은 값을 몇 개의 구간으로 나누고, 구간마다 다른 일을 합니다. if 를 여러 번 쓰는 것보다 깔끔합니다.
시리얼 모니터에서 a~e 를 보내면 그에 해당하는 LED 가 켜집니다.
LED 핀 번호들을 배열에 적어 두고 순서대로 씁니다. 번호를 일일이 쓰지 않아도 됩니다.
프로젝트
13개버튼을 누르는 동안 13번 핀의 LED가 켜집니다. 여기서 시작하세요.
가변저항을 돌리면 서보 혼이 같은 각도로 따라갑니다.
조도 센서가 어두울수록 LED 를 밝게 켭니다. 밝기는 analogWrite 의 듀티입니다.
PIR 센서가 움직임을 잡으면 불을 켜고, 마지막 움직임 뒤 3초 동안 유지합니다.
초음파로 거리를 재서 가까울수록 삐 소리 간격이 짧아지고, 30 cm 안이면 LED 도 켜집니다.
버튼을 누를 때마다 1 씩 올라가고, 4자리 7세그먼트에 표시됩니다.
버튼을 누르면 NeoPixel 링이 파랗게 켜지고 부저가 두 음을 냅니다.
BME280 센서가 읽은 값을 2초마다 시리얼과 OLED 에 뿌립니다.
가변저항을 돌린 만큼 서보가 움직이고, DHT22 습도가 LCD 에 표시됩니다.
리모컨 +/- 로 12 V 팬 속도를 조절하고, 어두워지면 자동으로 절반으로 낮춥니다.
DS3231 시계가 읽은 시각을 4 자리 표시기에 띄우되, 인체감지 센서가 사람을 볼 때만 켭니다.
가속도 센서 값을 microSD 의 motion.csv 에 계속 적고, LED 로 기록 중임을 알립니다.
DS18B20 온도가 28 °C 를 넘으면 릴레이를 켜고, 초음파로 거리도 함께 잽니다.
문자열
14개String 을 만드는 다양한 방법을 하나씩 시리얼에 찍어 보여줍니다.
숫자와 글자를 + 로 이어 하나의 문장으로 만듭니다.
+= 로 문자열 뒤에 계속 붙여 나갑니다.
문자열의 길이를 재고, 길어지면 앞을 잘라냅니다.
문자열 양 끝의 빈칸을 없애면 길이가 어떻게 줄어드는지 보여줍니다.
문자열 안에서 원하는 글자가 몇 번째에 있는지 찾습니다.
문자열에서 원하는 구간만 잘라 씁니다.
문자열 안의 특정 부분을 다른 것으로 바꿉니다.
문자열 전체를 대문자나 소문자로 한 번에 바꿉니다.
문자열을 ==, >, < 로 비교하면 어떻게 되는지 보여줍니다. 숫자와 다릅니다.
문자열이 특정 글자로 시작하거나 끝나는지 검사합니다.
문자 하나가 숫자인지 글자인지 빈칸인지 판별합니다.
시리얼로 받은 글자를 숫자로 바꿔 계산에 씁니다. 입력을 다룰 때 늘 필요합니다.
받은 글자가 숫자인지 알파벳인지 문장부호인지 시리얼로 알려줍니다.