Arduino 기본 프로그래밍 배우기 – 초보자를위한 튜토리얼

문제를 제거하기 위해 도구를 사용해보십시오





이 튜토리얼에서는 예제 코드와 샘플 프로그램을 통해 기본적인 Arduino 프로그래밍을 수행하는 방법을 배웁니다. 이 튜토리얼은 쉽고 이해하기 쉬운 언어를 통해 기초를 이해하고자하는 모든 초보자에게 매우 가치있는 과정이 될 수 있습니다.

소개

에 따르면 위키 백과 마이크로 컨트롤러는 자체 코어 프로세서, 프로그래밍 가능한 입력, 메모리 및 출력 주변 장치를 갖춘 단일 IC 칩 내부에 구축 된 미니 컴퓨터와 동일합니다.



마이크로 컨트롤러는 원하는 사양에 따라 사용자가 제어 할 수있는 내장 프로세서, 메모리 및 입 / 출력 포트 (GPIO 또는 범용 입 / 출력 핀이라고도 함)를 제공하므로 사용자에게 매우 유용합니다.

이 튜토리얼에서는 프로그램 학습 및 테스트를 위해 Arduino Uno 보드를 사용합니다. 하드웨어 어셈블리를 테스트하고 통합하기 위해 브레드 보드를 사용합니다.



이제 빠르게 이동하여 Arduino 프로그래밍을 시작하는 방법을 알아 보겠습니다.

1.2 소프트웨어 설치 (Windows)

이를 위해서는 분명히 인터넷에 액세스 할 수 있어야합니다. 다음 링크로 이동하여 IDE 소프트웨어를 다운로드하십시오.

비 관리자 설치용 Windows ZIP 파일

다운로드 후 다운로드 폴더에 다음과 같은 Arduino 설정 아이콘이 있습니다.

arduino 다운로드 아이콘

이것을 얻으면 간단히 두 번 클릭하고 Arduino 통합 개발 환경 (IDE)을 컴퓨터에 설치할 수 있습니다. 전체 프로세스는 다음 비디오에서 시각화 할 수 있습니다.

https://youtu.be/x7AMn1paCeU

1.4 첫 번째 회로부터 시작

실제 프로그래밍 기술을 배우기 전에 초보자에게는 LED와 같은 기본 구성 요소로 시작하여 Arduino와 연결하는 방법을 이해하는 것이 유용 할 것입니다.

우리가 알다시피 LED는 극성이있는 발광 다이오드이며 올바른 공급 극에 연결되지 않으면 켜지지 않습니다.

LED의 또 다른 측면은 이러한 장치가 낮은 전류로 작동하고 적절하게 계산 된 저항이 핀 중 하나와 직렬로 포함되지 않으면 즉시 손상 될 수 있다는 것입니다.

일반적으로 330ohm 1/4 와트는 전원 입력이 5V 상승 할 때마다 전류를 필요한 안전 수준으로 제한하는 데 매우 이상적입니다. 따라서 5V의 경우 330 옴, 10V의 경우 680 옴 등이 될 수 있습니다.

조립에 브레드 보드 사용

사용 방법을 알고 있는지 확인하십시오. 브레드 보드 여기에서 모든 실험에 브레드 보드를 사용할 것이기 때문에이 장에서 설명하는 자습서를 시도하기 전에.

기본 LED 연결 설정은 아래에서 확인할 수 있습니다.

Arduino와 LED

위의 3 가지 기본 구성 요소를 볼 수 있습니다.

  1. 5mm, 20mA LED
  2. 330ohm 1/4 와트 저항기
  3. Arduino 보드

다이어그램에 따라 시스템을 조립하십시오.

다음으로 컴퓨터 USB의 5V를 Arduino에 연결하십시오. 이렇게하면 LED가 켜지는 것을 볼 수 있습니다.

나는 그것이 매우 기본적이라는 것을 알고 있지만 항상 처음부터 시작하는 것이 좋습니다. 앞으로 나아갈수록 점점 더 흥미로워 질 것입니다.

1.5 Arduino로 LED 제어

이제 Arduino 프로그램으로 LED를 제어하는 ​​방법을 배웁니다.

프로그램을 작성하려면 각 프로그램에 적어도 2 개의 함수가 있어야합니다.

함수는 아래와 같이 이름이 할당 될 수있는 일련의 프로그래밍 문으로 이해 될 수 있습니다.

  1. 설정() 이것은 프로그램 시작 중에 호출되거나 실행됩니다.
  2. 고리() 이것은 Arduino의 전체 작동 기간 동안 반복적으로 호출되거나 실행됩니다.

따라서 실용적인 기능이 없더라도 기술적으로 가장 짧은 합법적 인 Arduino 프로그램은 다음과 같이 작성할 수 있습니다.

가장 간단한 프로그램

void setup()
{
}
void loop()
{
}

많은 프로그래밍 언어에서 시스템이 디스플레이 화면에 'Hello, World'라는 간단한 인쇄물을 표시하는 것으로 시작된다는 것을 눈치 채 셨을 것입니다.

마이크로 컨트롤러 해석에서이 문구에 해당하는 전자적 표현은 LED를 켜고 끄는 것입니다.

이것은 시스템의 올바른 기능을 나타 내기 위해 작성하고 구현할 수있는 가장 기본적인 프로그램입니다.

다음 코드를 통해 절차를 구현하고 이해하려고 노력할 것입니다.

목록 1.2 : led1 / led1.pde

const int kPinLed = 13
void setup()
{
pinMode(kPinLed, OUTPUT)
}
void loop()
{
digitalWrite(kPinLed, HIGH)
delay(500)
digitalWrite(kPinLed, LOW)
delay(500)
}

이제 코드의 각 줄이 의미하는 바와 함수를 실행하는 방법을 이해하겠습니다.

const int kPinLed = 13

이것은 설정된 실제 값을 사용할 필요없이 전체 프로그래밍 과정에서 사용할 수 있도록하는 상수처럼 작동합니다.

표준 규칙에 따라 이러한 상수는 시작 문자로 인식됩니다. ...에 . 필수는 아니지만 코드 세부 사항을 살펴보고 싶을 때마다 상황을 더 명확하고 쉽게 이해할 수 있습니다.

void setup()
{
pinMode(kPinLed, OUTPUT)
}

이 코드는 LED가 연결되는 특정 핀을 구성합니다. 즉, 코드는 Arduino에이 핀을 '읽는'대신 '쓰기'측면을 제어하도록 지시합니다.

void loop()
{
digitalWrite(kPinLed, HIGH)
delay(500)
digitalWrite(kPinLed, LOW)
delay(500)
}

위의 줄은 응용 프로그램의 실제 실행을 나타냅니다. 코드는 관련 LED 연결에 HIGH를 쓰고 렌더링하여 LED를 켜는 것으로 시작됩니다.

여기서 HIGH라는 용어는 단순히 Arduino의 관련 핀에서 + 5V를 얻는 것을 의미합니다. 보완 용어 LOW는 단순히 지정된 핀의 0 또는 0V를 나타냅니다.

다음으로 delay() 그 기능은 밀리 초 (1/1000 초)까지 지연을 생성하는 것입니다. 숫자 500이 입력되었으므로 구현 된 지연은 1/2 초 동안입니다.

이 1/2 초가지나 자마자 같은 핀의 LOW 항으로 LED를 끄는 다음 라인이 실행됩니다.

후속 라인은 LED가 1/2 초 동안 꺼진 상태로 유지되도록 1/2 초 지연을 다시 생성합니다.

그리고 Arduino에 전원이 공급되는 한 코드 줄을 실행하여 프로세스가 무한히 계속됩니다.

다음 단계로 진행하기 전에 위의 코드를 프로그래밍하고 LED ON / OF 시퀀스를 올바르게 구현할 수 있는지 확인하는 것이 좋습니다.

아두 이노의 기본 LED는 13 번 핀에 연결되어 있으므로 위의 프로그램에 즉시 응답하여 깜박이기 시작합니다. 그러나 외부 LED가 깜박이지 않는 경우 LED에 연결 오류가있을 수 있습니다. LED의 극성을 반대로 바꿔서 깜박이는 것을 볼 수 있습니다.

'500'수치를 다른 값으로 변경하고 명령을 '듣고있는'LED를 찾고 지정된 지연 값에 따라 깜박이도록하여 지연 시간을 재생할 수 있습니다.

그러나 지연 시간 변경에 관계없이 LED가 1 초의 속도로 계속 깜박이지 않는 경우에는 실수로 인해 코드가 작동하지 않는 것일 수 있습니다. 기본적으로 Arduino는 1 초 깜박임 속도로 프로그래밍됩니다. 따라서이 비율은 올바른 작동을 확인하기 위해 코드에 따라 달라져야합니다.

1.7 댓글

위에서 이해 한 코드 줄은 컴퓨터 소프트웨어 용으로 특별히 작성되었습니다.

그러나 사용자가 줄의 의미를 참조하고 이해할 수 있도록하기 위해 원하는 코드 줄 옆에 설명을 작성하는 것이 유용하고 현명 할 수 있습니다.

이것들은 코멘트 이는 사람 또는 사용자 참조 용으로 만 작성되었으며 컴퓨터가 안전하게 무시할 수 있도록 코딩되었습니다.

이 주석의 언어는 다음 두 가지 형식으로 작성됩니다.

  1. 주석의 블록 스타일. 주석 설명은 시작 기호 / * 및 종료 기호 * / 아래에 포함됩니다.
  2. 이것은 한 줄로 제한 할 필요가 없으며 다음 예제와 같이 주석의 길이 또는 설명에 따라 다음 후속 줄로 확장 될 수 있습니다.

/ * 이것은 주석입니다 * /

/ * 이것도 * /

/ * 그리고
* 이
* 같이
* 잘 * /

주석에 대한 빠른 한 줄 설명을 작성하려면 시작 부분에 두 개의 슬래시 // 기호가 있으면 충분합니다. 이것은 컴퓨터에이 줄이 실제 코드와 관련이 없으며 무시해야 함을 알려줍니다. 예를 들면 :

// 이것은 컴퓨터가 무시할 주석입니다.

다음은 참고 용 예입니다.

/*
* Program Name: Blink
* Author: Alan Smith
* Description:
* Turns an LED on for one half second, then off for one half second repeatedly.
*/

/* Pin Definitions */
const int kPinLed = 13
/*
* Function Name: setup
* Purpose: Run once when the system powers up.
*/
void setup()
{
pinMode(kPinLed, OUTPUT)
}
/*
* Function name: loop
* Purpose: Runs over and over again, as long as the Arduino has power
*/
void loop()
{
digitalWrite(kPinLed, HIGH)
delay(500)
digitalWrite(kPinLed, LOW)
delay(500)
}

1.8 문제 해결

컴파일하는 동안 프로그램이 '오류'를 표시하거나 다른 문제를 발견하면 다음 팁이 코드를 다시 확인하여 장애물을 제거하는 데 도움이 될 것입니다.

  1. 프로그램 언어는 대소 문자를 구분합니다. 예를 들어 표현 myVar 다음과 같이 쓸 수 없습니다 MyVar.
  2. 키보드 입력에 의해 실행될 수있는 모든 종류의 공백은 궁극적으로 단일 공백으로 렌더링되며 사용자 만 보거나 이해할 수 있으며 컴퓨터는이를 고려하지 않습니다. 간단히 말해, 어떤 종류의 여유 공간도 코드 결과에 영향을주지 않습니다.
  3. 각 코드 블록은 왼쪽 및 오른쪽 중괄호로 묶어야합니다. '{''}'
  4. 숫자는 쉼표로 구분할 수 없습니다. 예를 들어 1000은 1,000으로 쓸 수 없습니다.
  5. 중괄호로 묶인 모든 코드 행은 세미콜론으로 끝나야합니다.

Arduino로 흥미로운 LED 조명 시퀀스 만들기

이전 장에서 우리는 일정한 지연 속도로 LED를 계속 켜고 끄는 방법을 배웠습니다.

이제 프로그램 코드를 업그레이드하여 동일한 LED에서 서로 다른 지연 패턴을 실행하는 방법을 알아 보겠습니다.

우리는 외부 LED를 사용하지 않고 핀 # 13에서 Arduino 보드에 내장 된 기본 LED를 사용합니다. 이 작은 SMD LED는 USB 커넥터 바로 뒤에 있습니다.

2.2 IF 문 이해

이 섹션에서는 제어 구조를 통해 어떻게 개별 코드를 실행할 수 있는지, 필요에 따라 반복적으로 실행하는 방법을 알아 봅니다.

진술 만약 첫 번째 제어 구조가됩니다. 다음 구현은 사용 방법을 보여줍니다.

const int kPinLed = 13
void setup()
{
pinMode(kPinLed, OUTPUT)
}
int delayTime = 1000
void loop()
{
delayTime = delayTime - 100
if(delayTime <= 0){ // If the delay time is zero or less, reset it.
delayTime = 1000
}
digitalWrite(kPinLed, HIGH)
delay(delayTime)
digitalWrite(kPinLed, LOW)
delay(delayTime)
}

위의 코드를 단계별로 이해하고 이것이 다른 유사한 실행에 어떻게 사용될 수 있는지 알아 보겠습니다.

첫 번째 줄과 일곱 번째 줄 사이의 코드는 초기 프로그램과 정확히 유사합니다.

첫 번째 수정은 실제로 8 번째 줄에서 발생합니다.

int delayTime = 1000

이 용어가 누락되었다는 사실을 제외하고는 첫 번째 줄의 코드와 유사하다는 것을 알 수 있습니다. const.

이것은 단순히이 코드가 상수가 아니기 때문입니다. 대신 이것은 변하기 쉬운 , 프로그래밍 과정에서 변수 값의 속성이 있습니다.

위의 예에서이 변수의 값이 1000이라는 것을 알 수 있습니다. 중괄호로 묶인 이러한 변수는 중괄호 쌍 내에서만 엄격하게 작성되어야하며 '로컬'변수라고합니다.

또는 우리가 지금 논의하고있는 것과 같이 중괄호 밖에 있어야하는 변수는 '전역'으로 인식되고 프로그램 코드 내에서 거의 모든 곳에서 실행될 수 있습니다.

계속해서 9 행과 11 행 사이의 코드도 첫 번째 프로그램과 유사하다는 것을 알 수 있습니다. 그럼에도 불구하고 11 행 이후에 흥미로운 일이 시작됩니다. 방법을 살펴 보겠습니다!

delayTime = delayTime - 100

이 코드에서 우리는 지연 시간 100을 빼서 수정됩니다.

의미 100은 초기 값 1000에서 공제되어 새 값 900을 제공합니다.

다음 이미지를 통해 Arduino 언어에서 사용되는 몇 가지 수학 연산자를 이해하려고합니다.

Arduino 수학 연산자 기호

이제 13 행과 15 행 사이의 코드를 평가 해 보겠습니다.

if(delayTime <= 0){ // If the delay time is zero or less, reset it.
delayTime = 1000
}

위 코드의 주요 목적은 LED가 중단없이 계속 깜박이도록하는 것입니다.

원본에서 100이 공제된다는 사실로 인해 지연 시간 , LED 점멸이 0이되는 것을 방지하고 점멸을 계속할 수 있습니다.

다음 이미지는 코드에서 사용할 몇 가지 비교 연산자를 보여줍니다.

arduino 코드에 대한 비교 연산자

위의 코드에서 코드를 if(delayTime == 0)로 테스트 할 수있었습니다.

그러나 음수 인 것도 똑같이 나쁠 수 있기 때문에 우리는 그렇게하지 않았으며 권장되는 방법입니다.

delayTime에서 100 대신 300을 빼려고했다면 어떤 결과가 나올 수 있었을까요?

이제 당신은 delayTime 0보다 작거나 같으면 지연 시간이 원래 숫자 1000으로 다시 설정됩니다.

digitalWrite(kPinLed, HIGH)
delay(delayTime)
digitalWrite(kPinLed, LOW)
delay(delayTime)

위와 같이 코드의 마지막 4 줄은 LED를 지속적으로 ON / OFF, ON / OFF하는 역할을합니다.

여기서는 많은 숫자를 사용하는 대신 지연 시간을 할당하는 변수를 사용하여 코드 작동 기간 동안 원하는대로 조정할 수 있음을 분명히 알 수 있습니다. 멋지죠?

2.3 ELSE 문

여기서 우리는 왜 그리고 어떻게 만약 용어에는 절이있을 수 있습니다. 그밖에 상황을 결정하도록 만약 진술은 거짓입니다.

너무 헷갈 리게 들리더라도 죄송합니다. 걱정하지 마세요. 다음 예제를 통해 이해하려고 노력하겠습니다.

const int kPinLed = 13
void setup()
{
pinMode(kPinLed, OUTPUT)
}
int delayTime = 1000
void loop()
{
if(delayTime <= 100){ // If it is less than or equal to 100, reset it
delayTime = 1000
}
else{
delayTime = delayTime - 100
}
digitalWrite(kPinLed, HIGH)
delay(delayTime)
digitalWrite(kPinLed, LOW)
delay(delayTime)
}

위의 10 번째 줄에서 코드는 delayTime 100보다 작거나 같으면 13 번째 줄의 코드가 실행되지만 둘 다 함께 발생하지 않으며 10 번째 줄 또는 13 번째 줄 코드가 구현되고 둘 다 구현되지 않습니다.

이전 섹션 2.2에서 수행 한 작업과 달리 여기서는 0과 비교하지 않고 100과 비교했습니다. 이는이 예에서 100을 빼기 전에 비교하고 2.2에서 반대로 비교했기 때문입니다. 빼기. 100이 아닌 0을 비교했다면 무슨 일이 일어 났는지 알 수 있습니까?

2.4 WHILE 문

동안 진술은 매우 유사합니다 만약 조건이 적용되는 동안 코드 블록 (중괄호 사이에있을 수 있음)이 반복적으로 실행된다는 사실을 제외하고는 그밖에 성명서.

다음 예는이를 더 잘 이해하는 데 도움이됩니다.

const int kPinLed = 13
void setup()
{
pinMode(kPinLed, OUTPUT)
}
int delayTime = 1000
void loop()
{
while(delayTime > 0){ // while delayTime is greater than 0
digitalWrite(kPinLed, HIGH)
delay(delayTime)
digitalWrite(kPinLed, LOW)
delay(delayTime)
delayTime = delayTime - 100
}
while(delayTime <1000){ // while delayTime is less than 1000
delayTime = delayTime + 100 // do this first so we don’t have a loop with delayTime = 0
digitalWrite(kPinLed, HIGH)
delay(delayTime)
digitalWrite(kPinLed, LOW)
delay(delayTime)
}
}

위의 코드가 무엇을하도록 프로그래밍되어 있는지 짐작할 수 있습니까? 글쎄, 그것은 LED를 더 빠르게 깜박이도록 설계되었습니다.

2.5 참과 거짓은 무엇입니까?

프로그래밍 언어에서 그릇된 영 (0)을 나타냅니다. 실제로 'true'는 사용되지 않고 대신 거짓이 아닌 경우 포함 된 모든 것이 참이라고 가정합니다.

조금 이상해 보이지만 꽤 잘 작동합니다.

다음 예제를 통해 상황을 파악해 보겠습니다.

때때로 아래와 같은 코드가 나타날 수 있습니다.

while (1){
digitalWrite(kPinLed, HIGH)
delay(100)
digitalWrite(kPinLed, LOW)
delay(100)
}

이것은 긴 전력을 사용할 수있는 한 LED 실행이 영원히 계속 순환하는 것처럼 코딩되어 있습니다.

그러나 이러한 유형의 코드의 한 가지 단점은 실수로 사용자가 == 대신 =를 적용 할 때 발생할 수 있습니다.

=는 할당을 의미합니다. 즉, 선택한 값을 변수에 지정하는 데 사용되는 반면 ==는 값이 같으면 테스트를 시행하는 데 사용됩니다.

예를 들어 LED가 순차적으로 속도를 내며 반복적으로 깜박이는 것이 필요했지만 == 대신 =를 잘못 사용했다고 가정합니다.

코드는 다음과 같이 나타납니다.

int delayTime = 1000
void loop()
{
if(delayTime = 0){ // WRONG!!! the = should have been ==
delayTime = 1000
}
digitalWrite(kPinLed, HIGH)
delay(delayTime)
digitalWrite(kPinLed, LOW)
delay(delayTime)
delayTime = delayTime - 100
}

실수는 delayTime에 0을 할당하고 만약 0이 참인지 아닌지 확인하는 문. 0은 거짓을 나타내므로 참이 아니라고 생각하고 delayTime = 1000의 시행을 중지하지만 대신 delayTime loop () 과정에서 0으로 유지됩니다.

이것은 매우 바람직하지 않은 것 같습니다 !!

따라서 항상 프로그램을 다시 확인하여 그러한 어리석은 실수를하지 않았는지 확인하십시오.

2.6 조합

때로는 여러 가지를 함께 테스트해야 할 필요성을 느낄 수 있습니다. 마찬가지로 변수가 두 숫자 사이에 있는지 조사 할 수 있습니다. 이것은 if 문을 여러 번 사용하여 구현할 수 있지만 더 쉽고 읽기 쉽게 논리 조합을 사용하는 것이 더 편리 할 수 ​​있습니다.

논리 용어에 대한 조합을 구현하려면 다음 표와 같이 3 가지 방법을 사용할 수 있습니다.

Arduino 조합 방법을 보여주는 표

NOT 연산자가 다음 중 하나로 지정 될 수있는 변수에 대한 스위처로 작동 할 수 있다는 것을 아는 것은 흥미로울 것입니다. 진실 또는 그릇된 (또는 LOW 또는 HIGH).

다음 예는 조건을 보여줍니다.

int ledState = LOW
void loop()
{
ledState = !ledState // toggle value of ledState
digitalWrite(kPinLed, ledState)
delay(1000)
}

여기에 ledState LOW가되고 ledState = !ledState가 되 자마자 HIGH가됩니다. 다음 루프는 ledState ledState = !ledState 일 때 HIGH가 됨 LOW입니다.

2.7 FOR 문

이제 우리는 다른 제어 구조에 대해 이해하려고 노력할 것입니다. ...에 대한 고리. 여러 번 구현하려는 경우 매우 편리 할 수 ​​있습니다.

다음 예제를 통해이를 이해해 보겠습니다.

const int kPinLed = 13
void setup()
{
pinMode(kPinLed, OUTPUT)
}
void loop()
{
for(int i = 0 i <4 i++){
digitalWrite(kPinLed, HIGH)
delay(200)
digitalWrite(kPinLed, LOW)
delay(200)
}
delay(1000) // 1 second
}

라인에서 독특한 것을 찾을 수 있습니다. 에 대한.

코드입니다 내가 ++? . 이것은 다소 게으르고 편리한 단축키를 통해 코딩을 구현하려는 프로그래머에게 유용합니다.

위의 용어는 하나의 할당 연산자와 다른 할당 연산자를 결합하는 작업을 수행하기 때문에 복합 연산자로 알려져 있습니다. 이들 중 가장 인기있는 것은 다음 표에서 시각화 할 수 있습니다.

arduino 복합 연산자

for 문에는 3 개의 하위 문이 있습니다. 다음과 같이 구성됩니다.

for (statement1conditionstatement2){
// statements
}

문 # 1은 처음부터 한 번만 발생합니다. 조건은 루프 과정에서 매번 테스트됩니다. 언제든 진실 중괄호 안에는 후속 문 # 2가 적용됩니다. 의 경우 그릇된, 시스템은 다음 코드 블록으로 이동합니다.

더 많은 LED 연결

이제 더 흥미로운 효과를 얻기 위해 더 많은 수의 LEd를 연결하는 방법을 살펴 보겠습니다.

아래 그림과 같이 LED와 Arduino를 연결하십시오. 빨간색 와이어는 실제로 필요하지 않지만 브레드 보드에 두 공급 레일을 모두 포함하는 것이 항상 좋은 생각이므로 설정이 합리적입니다.

Arduino 다중 LED 연결

이제 하드웨어가 올바르게 구성되었는지 여부를 확인할 수있는 프로그램을 수정하겠습니다.

각 하드웨어가 올바르게 연결되었는지 여부를 확인하기 위해 작은 프로그램을 단계별로 코딩하고 실행하는 것이 항상 권장됩니다.

이는 가능한 오류를 신속하게 해결하는 데 도움이됩니다.

아래 코드 예제는 LED 2 ~ 5를 주기적으로 하나씩 차례로 돌려 특정 패턴을 제공합니다.

const int kPinLed1 = 2
const int kPinLed2 = 3
const int kPinLed3 = 4
const int kPinLed4 = 5
void setup()
{
pinMode(kPinLed1, OUTPUT)
pinMode(kPinLed2, OUTPUT)
pinMode(kPinLed3, OUTPUT)
pinMode(kPinLed4, OUTPUT)
}
void loop()
{
// turn on each of the LEDs in order
digitalWrite(kPinLed1, HIGH)
delay(100)
digitalWrite(kPinLed2, HIGH)
delay(100)
digitalWrite(kPinLed3, HIGH)
delay(100)
digitalWrite(kPinLed4, HIGH)
delay(100)
// turn off each of the LEDs in order
digitalWrite(kPinLed1, LOW)
delay(100)
digitalWrite(kPinLed2, LOW)
delay(100)
digitalWrite(kPinLed3, LOW)
delay(100)
digitalWrite(kPinLed4, LOW)
}

아시다시피, 코드가 길어 보이므로 실수하기 쉽다는 점을 제외하고는 코드에 문제가 없습니다.

물론 위의 코드를 작성하는 더 좋은 방법이 있습니다. 다음 섹션에서 설명합니다.

2.9 어레이 소개

배열은 인덱스 번호로 인덱싱 할 수있는 변수 그룹 일 수 있습니다. 다음 예제는 우리가 그것을 더 잘 이해하는 데 도움이 될 것입니다.

const int k_numLEDs = 4
const int kPinLeds[k_numLEDs] = {2,3,4,5} // LEDs connected to pins 2-5
void setup()
{
for(int i = 0 i pinMode(kPinLeds[i], OUTPUT)
}
}
void loop()
{
for(int i = 0 i digitalWrite(kPinLeds[i], HIGH)
delay(100)
}
for(int i = k_numLEDs - 1 i >= 0 i--){
digitalWrite(kPinLeds[i], LOW)
delay(100)
}
}

이제 각 섹션을 살펴보고 실제로 작동하는 방식을 이해하겠습니다.

const int k_numLEDs = 4

위의 코드는 배열에 있어야하는 최대 요소 수를 정의합니다. 이 코드는 이후 섹션에서 모든 것이 배열 내에 작성되고 배열이 끝나면 아무것도 작성되지 않도록하는 데 도움이됩니다.

const int kPinLeds[k_numLEDs] = {2,3,4,5} // LEDs connected to pins 2-5

이 다음 줄에서는 배열 구조를 설정합니다. 대괄호 안의 숫자는 배열의 요소 수를 나타냅니다. 실제 수량이 작성되었을 수 있지만 상수로 작성하는 것이 더 효과적입니다. 값은 일반적으로 쉼표로 대괄호 안에 표시되며 배열에 값을 지정합니다.

숫자 0으로 인덱싱 된 배열을 찾으면 code: k_LEDPins is k_LEDPins[0]와 같이 배열의 첫 번째 요소를 나타냅니다.

마찬가지로 마지막 요소는 0에서 3까지의 개수가 4이므로 k_LEDPins[3]로 표시됩니다.

void setup()
{
for(int i = 0 i pinMode(kPinLeds[i], OUTPUT)
}
}

위의 코드는 각 배열 요소를 진행하고 OUTPUTS로 설정하기위한 루프 사용을 보여줍니다. 배열의 각 요소에 도달하기 위해 인덱스와 함께 대괄호를 구현합니다.

배열없이 pin # 2에서 pin # 5까지 사용할 수 있는지 궁금하다면 대답은 '예'입니다. 가능합니다. 그러나이 예에서는 우리가 그렇게하지 않았기 때문에 이루어지지 않았습니다. 다음 섹션에서는 선택한 출력 핀이 일직선이 아닌 경우 어레이 접근 방식을 제거 할 수 있습니다.

계속해서 다음 코드 블록이 수행하는 작업을 살펴 ​​보겠습니다.

for(int i = 0 i digitalWrite(kPinLeds[i], HIGH)
delay(100)
}

여기서 코드는 각 LED를 통과하여 100 밀리 초의 간격 또는 지연 시간을두고 순차적으로 켜집니다.

for(int i = k_numLEDs - 1 i >= 0 i--){
digitalWrite(kPinLeds[i], LOW)
delay(100)
}

위의 코드를 사용하면 for 루프 역순으로도 루프를 이동하는 데 사용할 수 있습니다.

k_numLEDs - 1부터 시작합니다. 배열은 인덱스가 0이기 때문입니다. k_LEDPins[4]에서 시작하지 않습니다. 그 결과 어레이의 마감을 가로 지르기 때문입니다.

이 코드는> = 0을 사용하여 색인 0의 첫 번째 요소가 누락되거나 무시되지 않았는지 확인합니다.

3 장

입력이란?

그래서 우리는 Arduino를 사용하여 작업하는 방법을 배웠습니다. 이 장에서는 외부 매개 변수의 입력을 인터페이스하여 실제 세계를 감지하는 방법에 대해 설명합니다.

3.1 푸시 버튼 사용

우리 모두는 누름 버튼이 무엇이며 어떻게 작동하는지 알고 있습니다. 눌린 상태에서 한 회로 단계에서 다른 단계로 신호를 일시적으로 연결하고 놓으면 신호를 차단하는 일종의 스위치 또는 버튼입니다.

3.1.1 하나의 버튼과 LED

Arduino와 인터페이스 푸시 버튼

위에 표시된 세부 정보에 따라 Arduino를 푸시 버튼과 Arduino와 연결하고 설정의 기본 작업 및 구현을 학습합니다.

마이크로 스위치 푸시 버튼이라고도하는 표시된 푸시 버튼에는 총 4 개의 핀이 있습니다 (양쪽에 2 쌍). 밀면 각 핀 쌍이 내부적으로 결합되어 연결 또는 전도가 가능합니다.

이 예에서는 이러한 핀 또는 접점 중 한 쌍만 사용하고 있으며 다른 쌍은 관련이 없으므로 무시됩니다.

계속해서 다음 코드를 적용하고 작동하는지 확인하십시오!

const int kPinButton1 = 2
const int kPinLed = 9
void setup()
{
pinMode(kPinButton1, INPUT)
digitalWrite(kPinButton1, HIGH) // turn on pull-up resistor
pinMode(kPinLed, OUTPUT)
}
void loop()
{
if(digitalRead(kPinButton1) == LOW){
digitalWrite(kPinLed, HIGH)
}
else{
digitalWrite(kPinLed, LOW)
}
}

여기서 특이하게 보이는 몇 가지를 찾을 수 있습니다. 그것들을 단계적으로 알아 봅시다.

void setup()
{
pinMode(kPinButton1, INPUT)
digitalWrite(kPinButton1, HIGH) // turn on pull-up resistor
pinMode(kPinLed, OUTPUT)
}

우리가하는 첫 번째 일은 buttonPin 입력. 그것은 아주 기본적인 것입니다.

다음으로 우리는 높은 ~로 입력 핀. 당신은 어떻게 입력에 무엇이든 쓸 수 있을지도 모릅니다. 물론 흥미로울 수 있습니다.

실제로 Arduino 입력에 HIGH를 할당하면 내부 20k Ohm 풀업 저항이 ON으로 전환됩니다 (이 핀의 LOW는 OFF로 전환됩니다).

또 다른 질문은 풀업 저항이 무엇인지입니다. 풀업 저항에 대한 포괄적 인 게시물을 다루었습니다. 여기서 배우세요 .

좋습니다. 계속해서 메인 루프 코드를 살펴 보겠습니다.

void loop()
{
if(digitalRead(kPinButton1) == LOW){
digitalWrite(kPinLed, HIGH)
}
else{
digitalWrite(kPinLed, LOW)
}
}

누름 버튼을 누르면 유선 핀이 접지에 연결되어 낮은 그 핀에. 그리고 누르지 않은 상태에서 동일한 핀이 높은 또는 20K 내부 풀업 저항을 통해 + 5V.

여기에서는 푸시 버튼을 눌렀을 때 (LOW) Arduino가 LED를 켜고 싶으므로 누름 버튼을 누르고있는 동안 LOW의 모든 응답에 대해 출력에 HIGH를 씁니다.

3.1.2 두 개의 버튼과 LED

글쎄, 위에 표시된 작업이 Arduino 없이도 수행 될 수 있었는지 궁금 할 것입니다. 그러나 이것은 푸시 버튼이 Arduno와 함께 어떻게 사용될 수 있는지를 배우기위한 가파른 돌입니다.

이 시점까지 우리는 LED 스위치 ON (HIGH) 또는 스위치 OFF (LOW)에 대한 코드 작성을 연구했습니다.

이제 Arduino로 LED의 밝기를 제어하는 ​​방법을 살펴 보겠습니다.

두 가지 방법을 사용하여 수행 할 수 있습니다.

  1. 전류량을 LED로 제한하여
  2. 사용하여 PWM 또는 펄스 폭 변조는 LED 로의 공급이 원하는 속도로 매우 빠르게 ON / OFF되어 PWM에 따라 달라지는 평균 조명을 생성합니다.

Arduino 보드에서 PWM 지원은 500Hz (초당 500 회)에서 물결표 (~)로 표시된 핀 (핀 3, 4,5,9,10 및 11)에서 사용할 수 있습니다. 사용자는 0에서 255 사이의 값을 제공 할 수 있습니다. 여기서 0은 HIGH가 없거나 + 5V가 없음을 나타내며 255는 Arduino에 항상 HIGH 또는 + 5V를 얻도록 지시합니다. 이러한 명령을 시작하려면 원하는 값으로 analogWrite ()에 액세스해야합니다.

PWM을 x / 255라고 가정 할 수 있습니다. 여기서 x는 analogWrite()를 통해 보내려는 원하는 값입니다.

Arduino PWM 제어

위와 같이 Arduino 및 기타 매개 변수를 설정합니다.

const int kPinButton1 = 2
const int kPinButton2 = 3
const int kPinLed = 9
void setup()
{
pinMode(kPinButton1, INPUT)
pinMode(kPinButton2, INPUT)
pinMode(kPinLed, OUTPUT)
digitalWrite(kPinButton1, HIGH) // turn on pullup resistor
digitalWrite(kPinButton2, HIGH) // turn on pullup resistor
}
int ledBrightness = 128
void loop()
{
if(digitalRead(kPinButton1) == LOW){
ledBrightness--
}
else if(digitalRead(kPinButton2) == LOW){
ledBrightness++
}
ledBrightness = constrain(ledBrightness, 0, 255)
analogWrite(kPinLed, ledBrightness)
delay(20)
}

여기에서 설명이 필요한 3 줄을 찾을 수 있습니다.

ledBrightness = constrain(ledBrightness, 0, 255)
25 analogWrite(kPinLed, ledBrightness)
26 delay(20)

줄 : ledBrightness = constrain(ledBrightness, 0, 255) constrain ()으로 알려진 Arduino 내부의 고유 한 함수를 보여줍니다.

이 내부 함수는 다음과 유사한 코드로 구성됩니다.

int 제약 (int 값, int min, int max)
{
if(value > max){
value = max
}
if(value value = min
}
return value
}

이 전에 논의 된 모든 코드는 , 이는 아무것도 반환하지 않음을 의미합니다 (무효). 위의 코드는 int , 정수를 반환 함을 나타냅니다. 우리는 이후 섹션에서 더 많은 것을 논의 할 것입니다. 지금은 정수에는 분수 부분이 없다는 것을 기억하십시오.

맞습니다. 이것은 코드를 의미합니다 : ledBrightness = constrain(ledBrightness, 0, 255) ledBrightness to be within the range of 0 and 255를 할당합니다.

다음 줄은 analogWrite Arduino에 원하는 값으로 선택한 핀에 PWM을 적용하도록 명령합니다.

다음 줄은 20 밀리 초의 지연을 생성합니다. 이것은 우리가 식사를 50Hz 또는 초당 50 회보다 빠르게 조정하지 않도록하기위한 것입니다. 인간은 Arduino보다 훨씬 느릴 수 있기 때문입니다. 따라서 지연이 발생하지 않으면 프로그램은 첫 번째 버튼을 누르면 LED가 꺼지고 두 번째 버튼을 누르면 켜진다 고 느낄 수 있습니다 (직접 확인).

3.2 전위차계

계속해서 사용 방법을 배우자 Arduino와 전위차계.

전위차계 또는 냄비가 어떻게 작동하는지 알아 보려면 다음을 읽을 수 있습니다. .

Arduino와 함께 전위차계 사용

위와 같이 표시된 매개 변수를 Arduino와 연결하십시오.

냄비에는 3 개의 단자가 있습니다. 중간 터미널은 Arduino의 ANALOG IN 0과 연결됩니다. 다른 두 개의 외부 단자는 + 5V 및 0V 공급 레일에 연결할 수 있습니다.

프로그램을 작성하고 결과를 확인해 보겠습니다.

const int kPinPot = A0
const int kPinLed = 9
void setup()
{
pinMode(kPinPot, INPUT)
pinMode(kPinLed, OUTPUT)
}
void loop()
{
int ledBrightness
int sensorValue = 0
sensorValue = analogRead(kPinPot)
ledBrightness = map(sensorValue, 0, 1023, 0, 255)
analogWrite(kPinLed, ledBrightness)
}

완전히 새롭고 이전 코드에 포함되지 않은 몇 가지 사항을 찾을 수 있습니다.

  1. 상수 kPinPot A는 아날로그 핀 중 하나를 설명하는 단축키입니다. 그러나 A0은 또한 핀 # 14, A1 ~ 핀 # 15 등을 나타내며 실험을 위해 핀이 부족한 경우 디지털 입력 / 출력으로 사용할 수 있습니다. 그러나 디지털 핀은 아날로그 핀으로 사용할 수 없습니다.
  2. 줄 : ledBrightness = map(sensorValue, 0, 1023, 0, 255) Arduino의 새로운 내부 기능을 제공합니다. 지도(). 이 기능은 주어진 범위에서 다른 범위로 다시 보정합니다. 맵 (값, fromLow, fromHigh, toLow, toHigh). 이것은 analogueRead 이후로 중요해질 수 있습니다. 0-1023 범위 내의 값을 제공하지만 analogWrite는 0-255 범위의 값을 허용 할 수 있습니다.

저항 변화를 통해 LED의 밝기를 제어 할 수 있기 때문에 단순히 냄비만으로도 충분할 수 있었는데, 아두 이노를 사용하는 이유는 무엇일까요? 음, 다시 말하지만 아두 이노로 냄비를 구성하는 방법을 보여주는 것은 기초 일뿐입니다.

문제 없음, 이제 우리는 Arduino 없이는 할 수없는 일을 할 것입니다.

이 실험에서 우리는 LED의 깜박임 속도 또는 속도를 제어하기 위해 냄비의 다양한 저항이 어떻게 사용될 수 있는지 볼 것입니다.

프로그램은 다음과 같습니다.

const int kPinPot = A0
const int kPinLed = 9
void setup()
{
pinMode(kPinLed, OUTPUT)
}
void loop()
{
int sensorValue
sensorValue = analogRead(kPinPot)
digitalWrite(kPinLed, HIGH)
delay(sensorValue)
digitalWrite(kPinLed, LOW)
delay(sensorValue)
}

3.2.3 delay () 피하기

위의 코드는 괜찮아 보이지만 LED는 각 전체 사이클을 통과 할 때까지 pot 값을 확인할 수 없습니다. 더 긴 지연의 경우이 프로세스는 더 길어집니다. 사용자는 이동하는 동안 팟 응답을보기 위해 기다려야합니다. 이 지연은 일부 지능형 프로그래밍으로 피할 수 있으므로 사용자가 최소 지연없이 값을 확인할 수 있습니다. 여기에 코드가 있습니다.

const int kPinPot = A0
const int kPinLed = 9
void setup()
{
pinMode(kPinLed, OUTPUT)
}
long lastTime = 0
int ledValue = LOW
void loop()
{
int sensorValue
sensorValue = analogRead(kPinPot)
if(millis() > lastTime + sensorValue){
if(ledValue == LOW){
ledValue = HIGH
}
else{
ledValue = LOW
}
lastTime = millis()
digitalWrite(kPinLed, ledValue)
}
}

그렇다면 위 코드에서 무엇이 다른가요? 차이를 만드는 것은 다음 줄입니다.

long lastTime = 0

이 섹션까지 int 변수에 대해 논의했습니다. 그러나 액세스 할 수있는 더 많은 유형 변수가있을 수 있습니다. 목록은 아래에서 읽을 수 있습니다.

Arduino 변수 유형

현재로서는 상대적으로 많은 수를 저장하는 것이 중요 할 수 있습니다. int 변수, 당신은 용어를 사용할 수 있습니다 또는 long int.

여기에서 또 다른 흥미로운 함수를 볼 수 있습니다. 밀리 ().

이것은 Arduino가 처음부터 작동 과정에서 작동 한 시간 범위를 밀리 초 단위로 생성합니다 (50 일마다 0으로 재설정 됨). 여기서는 long을 반환합니다. int , 장기간 계산이 불가능할 수 있습니다. 정확히 얼마 동안 대답 해 주시겠습니까? 답은 32.767 초입니다.

따라서 delay ()를 사용하는 대신 millis ()를 확인하고 특정 밀리 초가 경과하자마자 LED를 변경합니다. 따라서 마지막으로 변경 한 시간을 저장합니다. 마지막으로 변수이므로 원할 때마다 다시 확인할 수 있습니다.

3.3 RGB LED

지금까지 우리는 단색 LED를 가지고 놀았습니다. LED를 다른 색상으로 교체하여 LED 색상을 변경할 수 있지만 RGB LED를 사용하는 것은 어떻습니까? LED 색상 변경 LED를 바꾸지 않고?

RGB LED는 기본적으로 빨간색, 녹색 및 파란색 LED가 내장되어 단일 LED로 병합 된 LED입니다. 접지 또는 0V 공급 레일로 연결되는 하나의 공통 리드가 있고 다른 3 개의 리드에는 의도 된 구현을 위해 다양한 PWM 포지티브 신호가 공급됩니다. 색상 혼합 .

아래와 같이 설정을 연결할 수 있습니다.

Arduino로 RGB 제어

약간 복잡해 보일 수 있지만 실제로는 PWM을 사용하는 이전 LED 제어 설계의 복제품입니다.

다음은 연습 프로그램 코드입니다.

const int kPinPot1 = A0
const int kPinPot2 = A1
const int kPinPot3 = A2
const int kPinLed_R = 6
const int kPinLed_G = 10
const int kPinLed_B = 11
void setup()
{
pinMode(kPinLed_R, OUTPUT)
pinMode(kPinLed_G, OUTPUT)
pinMode(kPinLed_B, OUTPUT)
}
void loop()
{
int potValue
int ledValue
potValue = analogRead(kPinPot1)
ledValue = map(potValue, 0, 1023, 0, 255)
analogWrite(kPinLed_R, ledValue)
potValue = analogRead(kPinPot2)
ledValue = map(potValue, 0, 1023, 0, 255)
analogWrite(kPinLed_G, ledValue)
potValue = analogRead(kPinPot3)
ledValue = map(potValue, 0, 1023, 0, 255)
analogWrite(kPinLed_B, ledValue)
}

이 코드를 업로드 한 후 냄비 조정이 RGB에서 흥미로운 조명 효과를 만드는 방법을 확인하십시오. 정말 재미있을 수 있습니다.

3 개의 냄비가 모두 최대 위치로 이동하면 흰색 대신 빨간색으로 표시됩니다. 이는 3 가지 색상 중 빨간색이 가장 두드러져이 상황에서 우세하기 때문입니다. 그러나 기능을 실험 할 수 있습니다. 지도() , 더 합리적인 균형을 만들기 위해 LED의 빨간색 부분에 실행하기 전에.

Arduino를 사용한 오디오

이 섹션에서는 Arduino 설정에 기본 사운드와 음악을 추가하는 방법을 배웁니다.

원하는 주파수로 연결된 스피커로 신호를 전환하는 방법을 살펴 보겠습니다.

더 정확하게 말하면 440Hz 주파수 음표 인 중간 A 음표가 시도됩니다.

이를 위해 중간 A 음을 연주하고 사각 파로 사인파 신호를 최적화합니다.

또한 다음 공식을 사용하여 라우드 스피커가 켜져있을 수있는 시간을 계산합니다.

timeDelay = 1 초 / 2 x toneFrequency.

timeDelay = 1 초 / 2 x 440

timeDelay = 1136 마이크로 초

4.1 아두 이노 보드 연결

Arduino에서 음향 효과 사용

4.2 간단한 메모 추가

우리는 이미 기능에 대해 논의했습니다. 지연() 단위는 밀리 초 (초 / 1000)이지만 다른 기능을 찾을 수 있습니다. delayMicroseconds() 단위는 마이크로 초 (밀리 초 / 1000)입니다.

현재 설정에서는 스피커와 연결된 선택된 핀에서 초당 440 펄스의 속도로 + 5V ON / OFF를 전환하는 코드를 프로그래밍합니다.

마지막 논의에서 의도 한 오디오 노트에 대해 1136 마이크로 초 값을 결정했습니다.

여기에 프로그램이 있습니다. 스피커가 연결된 상태에서 arduino를 프로그래밍하자마자 440Hz의 오디오 노트를들을 수 있습니다.

const int kPinSpeaker = 9
const int k_timeDelay = 1136
void setup()
{
pinMode(kPinSpeaker, OUTPUT)
}
void loop()
{
digitalWrite(kPinSpeaker, HIGH)
delayMicroseconds(k_timeDelay)
digitalWrite(kPinSpeaker, LOW)
delayMicroseconds(k_timeDelay)
}

위의 응용 프로그램을 사용하면 오디오 노트를 만들 수 있으며 이는 또한 우리가 선택한대로 음악을 만들 수 있음을 의미합니다.

코드에서 Arduino에는 음악 제작에 추가로 기여하는 몇 가지 통합 기능이 포함되어 있음을 알 수 있습니다.

첫 번째는 음정() 두 가지 요소와 함께 작동하는 세 번째 선택적 요소는 다음과 같이 지정됩니다. 톤 (핀, 주파수, 지속 시간). 또는 톤 (핀, 주파수)

둘 다 귀하가 할당 한 각 기간을 실행하도록 지정됩니다.

시간이 없으면 통화가 끝날 때까지 음악이 계속 재생됩니다. 음정() 다시 실행되거나 실행될 때까지 notone ().

이것은 음악 재생이 구현하는 유일한 기본 인 경우 지연 기능을 사용하여 수행해야합니다.

음악이 재생되는 시간을 제공하므로 시간이 중요 할 수 있으므로 다른 작업을 자유롭게 수행 할 수 있습니다. 시간이지나 자마자 음악이 멈 춥니 다.

다음 기능 noTone () 단일 매개 변수를 처리하고 지정된 특정 핀에서 선택한 톤을 중지합니다.

특이한 경고 : 언제라도 음정() 기능이 구현되면 핀 3 및 11의 PWM 기능이 작동을 중지합니다.

따라서 프로그램에서 스피커 부착물을 사용할 때마다 언급 된 핀을 스피커 용으로 사용하지 말고 대신 스피커 부착용으로 다른 핀을 사용해보십시오.

좋습니다. 여기에 스피커에서 음악을 구현하는 프로그램이 있습니다. 비록 실제 음악이 아니라 기본 음계 C 음표입니다.

#define NOTE_C4 262
#define NOTE_D4 294
#define NOTE_E4 330
#define NOTE_F4 349
#define NOTE_G4 392
#define NOTE_A4 440
#define NOTE_B4 494
#define NOTE_C5 523
const int kPinSpeaker = 9
void setup()
{
pinMode(kPinSpeaker, OUTPUT)
}
void loop()
{
tone(kPinSpeaker, NOTE_C4, 500)
delay(500)
tone(kPinSpeaker, NOTE_D4, 500)
delay(500)
tone(kPinSpeaker, NOTE_E4, 500)
delay(500)
tone(kPinSpeaker, NOTE_F4, 500)
delay(500)
tone(kPinSpeaker, NOTE_G4, 500)
delay(500)
tone(kPinSpeaker, NOTE_A4, 500)
delay(500)
tone(kPinSpeaker, NOTE_B4, 500)
delay(500)
tone(kPinSpeaker, NOTE_C5, 500)
delay(500)
noTone(kPinSpeaker)
delay(2000)
}

위의 코드에서 새로운 것을 발견했을 수도 있습니다. #밝히다 .

이 용어는 컴파일이 수행되는 동안 컴퓨터에 대한 검색 및 바꾸기 명령처럼 작동합니다.

공백 앞에있는 첫 번째 항목을 찾을 때마다 줄의 나머지 부분 (매크로라고 함)으로 바꿉니다.

따라서이 예에서 컴퓨터가 NOTE_E4 수량 330으로 빠르게 대체됩니다.

더 많은 메모와 사용자 정의를 위해 USB 스틱에있는 파일을 참조하십시오. pitches.h , 대부분의 주파수를 원하는대로 찾을 수 있습니다.

4.4 기능이있는 음악

위의 코드는 괜찮아 보이지만 반복 횟수가 많은 것 같습니다. 이러한 반복 횟수를 줄일 수있는 방법이 있어야합니다.

지금까지 Arduino에 포함 된 두 가지 필수 기능을 사용했습니다. 이제 우리 자신의 함수를 만들 때가 될 것입니다.

각 함수는 연관 될 수있는 변수 유형으로 시작해야합니다. 예를 들어 함수 아무것도 반환하지 않는 유형을 나타내므로 이름이 void입니다. 이전 섹션에서 변수 목록을 이미 논의 했으므로 참조 할 수 있습니다.

결과적으로 특정 함수 이름은 여는 괄호를 얻습니다. '(' 쉼표로 구분 된 매개 변수 목록이 뒤 따릅니다.

각 매개 변수는 이름과 함께 유형을 획득하고 마지막으로 닫기 ')' 괄호.

이러한 매개 변수는 변수 형태로 함수 내에서 적용 할 수 있습니다.

다음과 같은 함수를 개발하는 예를 살펴 보겠습니다. ourTone () 병합하도록 설계 음정()지연() 음의 연주가 끝날 때까지 기능이 반환을 중지하는 방식으로.

이전 코드에서 이러한 함수를 구현하고 아래 프로그램을 가져옵니다. 마지막 줄을 참조하십시오.

#define NOTE_C4 262
#define NOTE_D4 294
#define NOTE_E4 330
#define NOTE_F4 349
#define NOTE_G4 392
#define NOTE_A4 440
#define NOTE_B4 494
#define NOTE_C5 523
const int kPinSpeaker = 9
void setup()
{
pinMode(kPinSpeaker, OUTPUT)
}
void loop()
{
tone(kPinSpeaker, NOTE_C4, 500)
delay(500)
tone(kPinSpeaker, NOTE_D4, 500)
delay(500)
tone(kPinSpeaker, NOTE_E4, 500)
delay(500)
tone(kPinSpeaker, NOTE_F4, 500)
delay(500)
tone(kPinSpeaker, NOTE_G4, 500)
delay(500)
tone(kPinSpeaker, NOTE_A4, 500)
delay(500)
tone(kPinSpeaker, NOTE_B4, 500)
delay(500)
tone(kPinSpeaker, NOTE_C5, 500)
delay(500)
noTone(kPinSpeaker)
delay(2000)
}
void ourTone(int freq, int duration)
{
tone(kPinSpeaker, freq, duration)
delay(duration)
}

함수는 프로그램을 이해하기 쉽게 만드는 데 매우 유용 할 수 있습니다.

다음은 두 개의 배열을 사용하여 연주하고자하는 톤의 선택을 지정할 수있는 예입니다. 하나는 음표를 유지하기위한 것이고 다른 하나는 비트를 유지하기위한 것입니다.

#include 'pitches.h'
int kPinSpeaker = 9
#define NUM_NOTES 15
const int notes[NUM_NOTES] = // a 0 represents a rest
{
NOTE_C4, NOTE_C4, NOTE_G4, NOTE_G4,
NOTE_A4, NOTE_A4, NOTE_G4, NOTE_F4,
NOTE_F4, NOTE_E4, NOTE_E4, NOTE_D4,
NOTE_D4, NOTE_C4, 0
}
const int beats[NUM_NOTES] = {
1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 4 }
const int beat_length = 300
void setup()
{
pinMode(kPinSpeaker, OUTPUT)
}
void loop()
{
for (int i = 0 i if (notes[i] == 0) {
delay(beats[i] * beat_length) // rest
}
else {
ourTone(notes[i], beats[i] * beat_length)
}
// pause between notes
noTone(kPinSpeaker)
delay(beat_length / 2)
}
}
void ourTone(int freq, int duration)
{
tone(kPinSpeaker, freq, duration)
delay(duration)
}

첫 번째 줄에서 소개를 명확하게 볼 수 있습니다. #포함 성명서. 이 명령문의 역할은 따옴표 사이에있는 전체 파일을 선택하여 파일의 위치에 배치하는 것입니다. #포함 성명서. 표준 규칙에 따라 이들은 엄격하게 프로그램 시작에 배치됩니다.

5 장

온도 측정

기억하자면, 큰 프로그램을 모두 작성하는 대신 코드의 작은 부분을 작성하고 분석하는 것이 항상 현명합니다. 이렇게하면 실수를 빠르게 추적하는 데 도움이됩니다.

5.1 직렬 모니터

지금까지 우리가 논의한 코드는 빠른 문제 해결을 가능하게하는 것보다 쉽지 않았습니다. 여기서는 가능한 문제를보다 쉽게 ​​모니터링하고 해결하기 위해 노력할 것입니다.

Arduino에는 컴퓨터와 '대화'할 수있는 기능이 있습니다. pin0과 pin1이 서로 옆에 TX와 RX로 표시되어있는 것을 볼 수 있습니다. 이 핀은 실제로 Arduino 내의 별도 IC에 의해 추적되어 PC에 연결되어있는 동안 USB 케이블을 통해 읽을 수 있도록 업그레이드합니다.

아래 섹션은 본격적인 프로그램을 보여줍니다. 그래도 가십시오. 이후 코드의 새 항목에 대해 배울 것입니다. 이 코드는 코드화 대상을 식별 할 수 있도록 추가 데이터가 포함되어 있다는 점을 제외하면 표현 된 섹션 2.2와 동일합니다.

const int kPinLed = 13
void setup()
{
pinMode(kPinLed, OUTPUT)
Serial.begin(9600)
}
int delayTime = 1000
void loop()
{
delayTime = delayTime - 100
if(delayTime <= 0){ // If it would have been zero or less, reset it.
delayTime = 1000
}
Serial.print('delayTime = ')
Serial.println(delayTime)
digitalWrite(kPinLed, HIGH)
delay(delayTime)
digitalWrite(kPinLed, LOW)
delay(delayTime)
}

여기에서 두 가지 새로운 것을 확인할 수 있습니다. 설정() 함수.

Serial.begin(9600)

이 선은 단순히 사용의 필요성을 표현합니다. 직렬 1 9600 보드로 강제하는 코드. (여기서 직렬은 비트 차례로 전송되며 전송 속도는 전송 속도를 의미합니다). 이 보오 값과 직렬 모니터 내부의 값 (나중에 배울 것임)은 같아야합니다. 그렇지 않으면 직렬 모니터의 데이터에 쓰레기가 표시됩니다. 9600이 표준이되어 사용이 더욱 편리해졌습니다.

두 번째 새 항목은 다음과 같습니다.

Serial.print('delayTime = ')
Serial.println(delayTime)

여기서 두 번째 줄은 직렬 포트에서 나오는 후속 작업이 다음 줄에서 시작됨을 나타냅니다. 이것이 두 번째 줄이 첫 번째 줄과 다른 점입니다.

한 가지 더 볼 수있는 것은 따옴표 ( ')입니다. 이 주제에 대한 추가 논의는 너무 정교하고 범위를 벗어날 수 있기 때문에 여기에서는 상수처럼 만 사용되는 문자열이라고합니다.

이제 Arduino에 위 코드를 업로드하고 어떤 일이 발생하는지 볼 수 있습니다.

죄송합니다. 아무 일도 일어나지 않은 것 같습니다. Arduino 핀 # 13 LED가 깜박이고 멈췄지만 Tx LED는 계속 깜박입니다.

글쎄, 그것은 직렬 모니터 창이 아직 고정되지 않았기 때문입니다.

위와 같이 IDE에서 직렬 모니터 상자를 클릭해야합니다. 오른쪽 하단에있는 전송 속도를 확인하는 것을 잊지 마십시오. 기본적으로 9600이어야하며 코드와 일치해야합니다. 그렇지 않은 경우 9600을 선택하십시오.

다음 비디오 클립은 그 방법을 설명합니다.

https://youtu.be/ENg8CUyXm10

이제 계속해서 위의 직렬 모니터 기능이 Arduino를 사용한 온도 측정

온도 센서로 섭씨 -40 ~ 150도 범위의 IC TMP36을 사용합니다.

설정은 아래에서 볼 수 있습니다.

온도 측정을위한 Arduino 포함 TMP36

다음 코드는 TMP36 센서의 출력을 읽고이를 ID의 직렬 모니터로 전송하여 온도 측정을 시작합니다.

const int kPinTemp = A0
void setup()
{
Serial.begin(9600)
}
void loop()
{
float temperatureC = getTemperatureC()
Serial.print(temperatureC)
Serial.println(' degrees C')
// now convert to Fahrenheit
float temperatureF = convertToF(temperatureC)
Serial.print(temperatureF)
Serial.println(' degrees F')
delay(500)
}
float getTemperatureC()
{
int reading = analogRead(kPinTemp)
float voltage = (reading * 5.0) / 1024
// convert from 10 mv per degree with 500mV offset
// to degrees ((voltage - 500mV) * 100)
return (voltage - 0.5) * 100
}
float convertToF(float temperatureC)
{
return (temperatureC * 9.0 / 5.0) + 32.0
}

위에서부터 코드를 이해합시다.

float temperatureC = getTemperatureC()

여기에 변수 유형이 포함되어 있음을 알 수 있습니다. 흙손.

이것은 정수 (소수 또는 소수 부분이없는 숫자)를 제외한 모든 것을 저장하는 유일한 변수 유형입니다.

부동 변수의 정확도는 6 ~ 7 자리까지 가능합니다.

인접한 코드 getTemperatureC() TMP36 센서에서 감지 된 전압 차이를 섭씨 온도로 수학적으로 계산하고 변환하는 자체 기능입니다.

float getTemperatureC()
{
int reading = analogRead(kPinTemp)
float voltage = (reading * 5.0) / 1024
// convert from 10 mv per degree with 500mV offset
// to degrees ((voltage - 500mV) * 100)
return (voltage - 0.5) * 100
}

코드의 다음 섹션에서 analogIn() 1에서 1023 사이의 숫자를 반환하도록 할당되면 판독 값에 5를 곱한 다음 1024로 나누어 센서의 전압을 평가할 수 있습니다.

센서 TMP36은 섭씨 0도에서 0.5V를 생성하고 섭씨가 상승 할 때마다 10mV를 생성하도록 지정되어 있습니다.

다음은 계산을 통해 생성 할 수있는 근사치입니다.

Arduino 온도 교정

일부 값을 반환하는 첫 번째 함수로 간주 할 수 있습니다 (지금까지 나머지 모든 함수는 해당 유형이므로 값을 반환하지 않았습니다. ).

함수에서 값을 얻으려면 간단히 추가하면된다는 것을 이해할 수 있습니다. 반환 반환 할 원하는 번호가 뒤 따릅니다.

우리가 말할 때 반환 이는 함수가 호출 될 때마다 응답 또는 응답을 반환한다는 것을 의미하며, 이는 변수에 적용될 수 있습니다.

이것이 시리얼 모니터로 전송 될 때, 판독 값은 다음을 통해 화씨로 변환됩니다. convertToF ().

float convertToF(float temperatureC)
{
return (temperatureC * 9.0 / 5.0) + 32.0
}

이 기능은 섭씨 범위를 선택하여 화씨로 변환합니다.

화씨를 섭씨로 변환하기 위해 공식을 구현합니다. 화씨 = 9 / 5 (섭씨) + 32.

5.3 LCD 인터페이스

이제 인터페이스 또는 연결 방법을 공부하겠습니다. LCD 디스플레이 필요한 출력에 대한 시각적 디스플레이를 얻기 위해 Arduino와 함께.

우리의 응용 프로그램에서 우리는 84x48 그래픽 LCD, 수평으로 84 픽셀 또는 도트와 48 픽셀 수직 해상도를 사용할 것입니다. 전용 컨트롤러가 모든 LCD에 필수가 되었기 때문에 현재 장치는 PCD8544 컨트롤러 형태로 하나를 통합합니다.

이 튜토리얼에서는 위에서 지정한 LCD 모듈을 Arduino와 연결하고 특정 루틴을 적용하여 디스플레이에 텍스트 메시지를 생성합니다.

다음 그림에서 LCD 인터페이스에 대한 세부 정보와 함께 3.3V 전압 조정기 . 이 레귤레이터는 LCD가 3.3V 전원에서 작동하도록 지정되어 있기 때문에 필요합니다.

LCD 모듈에서 8 개의 핀아웃을 볼 수도 있습니다. 핀아웃 사양은 다음 표에서 확인할 수 있습니다.

LCD 핀아웃 세부 정보

이제 LCD와 관련 매개 변수를 Arduino와 연결하는 방법을 살펴 보겠습니다. 세부 사항은 아래 표시된 그림에서 시각화 할 수 있습니다.

Arduino 기본 학습

5.4 LCD와 통신

Arduino에서 LCD와 상호 작용하기위한 정교한 코드를 작성할 수 있지만 라이브러리를 사용하여 동일한 작업을 수행하는 방법을 배우겠습니다.

라이브러리는 선택한 Arduino 프로그램에 빠르게 적용 할 수있는 코드 모음으로 구성됩니다.

이를 통해 사용자는 복잡한 코딩 작업을 거치지 않고도 손쉽게 함수를 호출 할 수 있습니다.

5.4.1 라이브러리 설치 방법

이를 위해 컴퓨터 Arduino IDE에 라이브러리라는 디렉토리를 생성해야합니다. 여기

5.4.2 LCD 작업 구현

이전 접근 방식과 마찬가지로 먼저 전체 코드를 확인한 다음 개별 줄의 세부 사항을 이해하려고합니다.

#include
const int kPin_CLK = 5
const int kPin_DIN = 6
const int kPin_DC = 7
const int kPin_RESET = 8
PCD8544 lcd(kPin_CLK, kPin_DIN, kPin_DC, kPin_RESET)
void setup()
{
lcd.init()
lcd.setCursor(0,0)
lcd.print('Hello, World!')
}
void loop()
{
lcd.setCursor(0,1)
lcd.print(millis())
}

줄에 코드 #include 포함

#include 코드는 PC에 언급 된 파일을 선택하고 프로그램 컴파일 과정에서 #include 요소를 파일 내용으로 대체하도록 지시합니다.

#include 요소는 라이브러리 디렉토리에서 검색을 나타내는 꺾쇠 괄호를 가질 수 있습니다. 또는 프로그램이 위치한 동일한 디렉토리 내에서 검색을 나타내는 따옴표를 가질 수도 있습니다.

다음 코드 줄은 LCD 핀아웃을 표현한 다음 새로운 형태의 변수를 작성합니다.

PCD8544 lcd(kPin_CLK, kPin_DIN, kPin_DC, kPin_RESET)

여기서 우리는 유형이 PCD8544 인 lcd라는 이름의 변수를 표현하고 PC가 Arduino와 관련된 핀아웃을 재 그레이드하도록 지시합니다.

이 과정에서 우리는 핀 clk, din, dc 및 reset이 Arduino와 인터페이스되는 방법을 지시하여 PC에 대한 변수를 설명합니다.

void setup()
{
lcd.init()
lcd.setCursor(0,0)
lcd.print('Hello, World!')
}

라인 lcd.init() LCD 작동을 초기화합니다. 이것이 실행되면 다음 줄은 커서를 디스플레이의 왼쪽 상단에 강제합니다. 그리고 다음 행에서는 'Hello, World'메시지를 인쇄하려고합니다.

이것은 우리가 직렬 모니터를 통해 메시지를 보냈던 기술과 매우 동일 해 보입니다. 유일한 차이점은 코드 사용입니다. lcd.print serial.print 대신.

다음 코드 블록은 실제로 반복적으로 호출됩니다.

void loop()
{
lcd.setCursor(0,1)
lcd.print(millis())
}

이 줄 사용 lcd.setCursor(0,1) 커서를 LCD 디스플레이 위의 첫 번째 행 맨 왼쪽에있는 0 번째 열에 고정합니다.

다음 줄은 바로 가기를 사용합니다. lcd.print(millis())

우리가 함께 일한 것을 기억한다면 millis() 이전 코드에서 코드를 통해 여기에도 동일하게 적용 할 수있었습니다.

long numMillis = millis()
lcd.print(numMillis)

그러나 여기에는 밀리 초 단위의 기간이 포함되어 있지 않기 때문에 millis() lcd.print()에 직접 기능 .

5.5 모든 것을 결합

이제 LCD 온도 회로를 만들기 위해 위에서 배운 모든 코드를 결합하고 어떻게 보이는지 보겠습니다.

#include
const int kPin_CLK = 5
const int kPin_DIN = 6
const int kPin_DC = 7
const int kPin_RESET = 8
const int kPin_Temp = A0
PCD8544 lcd(kPin_CLK, kPin_DIN, kPin_DC, kPin_RESET)
void setup()
{
lcd.init()
lcd.setCursor(10,0)
lcd.print('Temperature:')
}
void loop()
{
float temperatureC = getTemperatureC()
// now convert to Fahrenheit
float temperatureF = convertToF(temperatureC)
lcd.setCursor(21,1)
lcd.print(temperatureC)
lcd.print(' C')
lcd.setCursor(21,2)
lcd.print(temperatureF)
lcd.print(' F')
delay(100)
}
float getTemperatureC()
{
int reading = analogRead(kPin_Temp)
float voltage = (reading * 5.0) / 1024
// convert from 10 mv per degree with 500mV offset
// to degrees ((voltage - 500mV) * 100)
return (voltage - 0.5) * 100
}
float convertToF(float temperatureC)
{
return (temperatureC * 9.0 / 5.0) + 32.0
}

위의 프로그램에서 기능 사용을 제외하고 모든 것이 표준으로 보입니다. setCursor () . 이것은 디스플레이 중앙 주위로 가능한 한 텍스트를 정렬하는 데 사용됩니다.

큰! 축하합니다. 이제 Arduino를 사용하여 작은 LCD 온도 표시기를 프로그래밍했습니다.

실용적인 Arduino 애플리케이션

이 시점에서 우리는 다양한 프로그래밍 기술을 포괄적으로 다루었으므로 몇 가지 유용한 실제 구현에 적용하여 살펴볼 시간입니다.

센서부터 시작하여 몇 가지 샘플 코드를 실행하여 센서 장치를 Arduino와 함께 사용할 수있는 방법을 알아 봅니다.

7.1 센서 소개

이 튜토리얼에서는 Arduino와 함께 사용할 수있는 다양한 센서에 대해 학습합니다. 여기에는 광 센서 LDR, 자기 홀 효과 센서, 기울기 센서, 진동 센서, 압력 센서 등과 같은 장치가 포함될 수 있습니다.

인터페이싱부터 시작하겠습니다. 광 센서 LDR 다음 다이어그램과 같이 Arduino와 함께 :

Arduino와 함께 LDR 사용

우리 모두 알다시피 LDR은 저항이 표면에 입사되는 주변의 강도에 따라 달라지는 광 의존 저항 장치입니다.

빛의 강도는 LDR의 저항 판독 값에 반비례합니다.

여기서 우리는 유용한 애플리케이션을 실행하기 위해이 속성을 Arduino와 통합하는 방법을 배웁니다.

전체 프로그램 코드는 다음과 같이 시각화 할 수 있습니다.

const int kPin_Photocell = A0
void setup()
{
Serial.begin(9600)
}
void loop()
{
int value = analogRead(kPin_Photocell)
Serial.print('Analog Reading = ')
Serial.print(value)
if(value <200){
Serial.println(' - Dark')
}else if(value <400){
Serial.println(' - Dim')
}
else if(value <600){
Serial.println(' - Light')
}
else if(value <800){
Serial.println(' - Bright')
}
else{
Serial.println(' - Very Bright')
}
delay(1000)
}

코드에 사용 된 모든 매개 변수는 지금까지 배운 우리 과정에서 이미 논의되었습니다. 관련 섹션을 참조하여 라인을 확인할 수 있습니다.

값은 무작위로 선택되었으며 자신의 선호도에 따라 쉽게 변경할 수 있습니다.

기울기 센서

기울기 센서는 설치된 모든 물체에 대한 기울기 동작을 감지하는 데 사용할 수있는 간단한 장치입니다. 이 장치는 기본적으로 내부에 금속 볼이 있으며, 기울어지면 한 쌍의 접점 위로 롤링되어 해당 접점에서 전도가 발생합니다. 틸트 스위치의 리드로 종단되는 이러한 접점은 틸팅 동작으로 인한 전도를 감지하고 원하는 출력 애플리케이션을 활성화하기 위해 외부 회로와 함께 사용됩니다.

이제 어떻게 기울기 센서 장치가 연결될 수 있습니다. 아래 이미지는 전체 구성에 대한 아이디어를 제공합니다.

Arduino와 틸트 센서 인터페이스

const int kPin_Tilt = 3
const int kPin_LED = 13
void setup()
{
pinMode(kPin_Tilt, INPUT)
digitalWrite(kPin_Tilt, HIGH) // turn on built-in pull-up resistor
pinMode(kPin_LED, OUTPUT)
}
void loop()
{
if(digitalRead(kPin_Tilt) == HIGH){
digitalWrite(kPin_LED, LOW)
}
else{
digitalWrite(kPin_LED, HIGH)
}
}

이 예에서는 기본 핀 # 13 LED가 기울기 표시기로 사용됩니다.

3.1 절에서했던 것과 매우 유사한 풀업 저항이 여기에 포함되어 있음을 분명히 볼 수 있습니다. 따라서 LOW라는 용어는 틸트 기능이 트리거되지 않음을 나타냅니다.

7.4 리드 스위치 릴레이 (미니어처 자석 활성화 릴레이)

이제 Arduino에 릴레이 스위치 또는 자기장 센서를 연결하는 방법을 살펴 보겠습니다. 리드 릴레이는 자기장이나 자석이 가까이에있을 때 활성화되거나 전도되는 일종의 스위치입니다. 기본적으로 미니어처 유리 인클로저 내부에 한 쌍의 강자성 접점이있어 자석이 가까이있을 때마다 자석이 당겨서 연결되거나 접촉합니다. 이 경우 접점의 단자가 접점 폐쇄로 인해 전도를 나타냅니다.

여기서도 응답을 표시하기 위해 핀 # 13 LED를 사용합니다. 이전 설명에 따라 필요한 경우이 핀에서 외부 LED를 연결할 수 있습니다.

const int kPinReedSwitch = 2
const int kPinLed = 13
void setup()
pinMode(kPinReedSwitch, INPUT)
digitalWrite(kPinReedSwitch, HIGH) // turn on pullup resistor
pinMode(kPinLed, OUTPUT)
}
void loop()
{
if(digitalRead(kPinReedSwitch) == LOW){
digitalWrite(kPinLed, HIGH)
}
else{
digitalWrite(kPinLed, LOW)
}
}

코드 용어는 익숙하고 자명해야합니다.

7.5 피에조 변환기를 사용하는 진동 센서

다음 샘플 프로그램에서 우리는 피에조 변환기 Arduino를 통해 LED를 비추는 진동 센서로 사용할 수 있습니다.

피에조 소자는 실제로 주파수가 단자에 적용될 때 진동 또는 진동을 생성하는 장치입니다. 그러나 동일한 피에조를 반대 과정에서 사용할 수 있습니다. 전기 펄스 생성 몸에 가해지는 진동에 반응합니다. 이 진동은 피에조 표면에 부딪 치거나 두드리는 형태 일 수 있습니다.

다음 그림과 같이 Arduino 및 피에조 요소를 설정하십시오.

Arduino와 함께 피에조를 진동 센서로 사용

const int kPinSensor = A5
const int kPinLed = 13
const int k_threshold = 100
int ledState = LOW // variable used to store the last LED status, to toggle the light
void setup()
{
pinMode(kPinLed, OUTPUT) // declare the ledPin as as OUTPUT
}
void loop()
{
int val = analogRead(kPinSensor)
if (val >= k_threshold) {
ledState = !ledState // toggle the value of ledState
digitalWrite(kPinLed, ledState)
delay(20) // for debouncing
}
}

임계 값 (100)은 Arduino가 노크를 통해 실제 진동에만 응답하고 큰 소리 나 경적과 같은 다른 작은 진동에는 응답하지 않도록하기 위해 도입되었습니다.

A5 핀의 선택은 필수가 아니며, 선호하는대로 프로그램 코드에서 일치시켜 다른 아날로그 입력을 선택할 수 있습니다.

Arduino와 함께 서보 모터 사용

서보 모터는 특정 응용 분야의 요구에 따라 정확한 각도로 회전 할 수있는 DC 모터 유형입니다. 계산 된 명령을 모터의 관련 입력에 적용하여 모터에서 180도 범위 내에서 정확한 회전 또는 회전 각도를 생성 할 수 있습니다.

일반적으로 서보 모터에는 3 개의 와이어 또는 입력이 있습니다. 양극선은 일반적으로 빨간색이고 음극선 또는 접지선은 검정색이며 명령 선 또는 신호선은 일반적으로 흰색 또는 노란색입니다.

Arduino는 내장 된 지원 언어를 통해 서보 모터 제어를 용이하게하여 제어가 매우 편리하고 서보 모터에 이상적입니다.

다음 예제는 Arduino를 통해 서보 모터 제어를 구현하기위한 기본 설정 프로그램을 보여줍니다.

Arduino 서보 모터 제어

코드는 다음과 같습니다.

#include
Servo servo1
const int kPinPot = A0
const int kPinServo1 = 9
void setup()
{
servo1.attach(kPinServo1)
}
void loop()
{
int val = analogRead(kPinPot)
val = map(val, 0, 1023, 0, 180)
servo1.write(val)
delay(15)
}

여기에서 몇 가지 새로운 항목을 볼 수 있습니다. 서보의 부착 된 와이어에 할당 된 핀을 알려주는 것. 다른 하나는 서보의 회전 각도를 결정하기 위해 핀에 0에서 180 사이의 값을 제공하는 코드입니다.

결론

Arduino 주제는 무한히 길 수 있으므로이 기사의 범위를 벗어납니다. 그러나 위의 튜토리얼이 Arduino의 기본 사항을 배우고 다양한 예제 애플리케이션 코드를 통해 중요한 매개 변수를 이해하는 데 확실히 도움이 되었기를 바랍니다.

더 많은 정보가 사용 가능할 때마다 여기에서 수시로 업데이트 될 수 있기를 바랍니다.

그동안 프로그래밍 과정을 즐기십시오. Happy Arduinoing !!




이전 : MQ-3 센서 모듈을 사용하는 알코올 검출기 측정기 회로 다음 : 핸드폰 제어 개 피더 회로