Arduino는 버튼 하나로 RGB LED를 부드럽게 켭니다. 전위차계를 이용한 LED 밝기 조절. Arduino용 프로그램 설명

이 실험에서는 버튼 하나를 사용하여 LED 밝기의 일부를 추가하고 다른 버튼을 사용하여 밝기를 줄입니다.

실험용 부품 목록

- Arduino Uno 보드 1개

- 납땜이 필요 없는 브레드보드 1개;

- 시계 버튼 2개;

- 공칭 값이 220Ω인 저항기 1개;

- LED 1개

- 7개의 수-수 전선.

회로도

브레드보드의 다이어그램

메모

  • 이전 실험의 회로를 재작업하는 경우 이번에는 LED를 PWM을 지원하는 포트에 연결해야 한다는 점에 유의하세요.

스케치

Arduino IDE용 스케치 다운로드
#define PLUS_BUTTON_PIN 2 #define MINUS_BUTTON_PIN 3 #define LED_PIN 9 int 밝기 = 100; 부울 plusUp = true; 부울 minusUp = true; void setup() ( pinMode(LED_PIN, OUTPUT); pinMode(PLUS_BUTTON_PIN, INPUT_PULLUP); pinMode(MINUS_BUTTON_PIN, INPUT_PULLUP); ) void loop() ( AnalogWrite(LED_PIN, 밝기); // 우리가 작성한 함수를 사용하여 클릭에 응답 plusUp = handlerClick(PLUS_BUTTON_PIN, plusUp, +35); minusUp = handlerClick(MINUS_BUTTON_PIN, minusUp, -35); ) // 3개의 매개변수가 있는 자체 함수: 버튼이 있는 핀 번호 //(buttonPin), 확인 전 상태(wasUp) ) 및 // 버튼을 클릭할 때의 밝기 그라데이션(델타). 함수는 // (English return) 버튼의 새로운 현재 상태를 반환합니다. boolean handlerClick(int ButtonPin, boolean wasUp, int delta) ( boolean isUp = digitalRead(buttonPin); if (wasUp && !isUp) ( Delay(10 ); isUp = digitalRead(buttonPin); // 클릭이 있었다면 밝기를 0에서 255로 변경합니다. if (!isUp) 밝기 = constrain(brightness + delta, 0, 255); ) return isUp; // 발신자 코드로 값을 다시 보냅니다)

코드에 대한 설명

  • 내장된 기능을 사용할 수 있을 뿐만 아니라 자체 기능을 만들 수도 있습니다. 이는 코드의 다른 위치에서 동일한 작업을 반복해야 하거나 예를 들어 이 경우와 같이 다른 데이터에 대해 동일한 작업을 수행해야 하는 경우에 정당화됩니다. 디지털 포트 2와 3의 신호를 처리합니다.
  • 다른 함수 코드 외부의 코드 어디에서나 자신만의 함수를 정의할 수 있습니다. 이 예에서는 다음과 같은 함수를 정의했습니다. 고리 .
  • 자체 기능을 정의하려면 다음이 필요합니다.
    • 반환할 데이터 유형을 선언합니다. 우리의 경우는 부울. 함수가 일부 작업만 수행하고 값을 반환하지 않는 경우 키워드를 사용하세요. 무효의
    • 함수에 이름(식별자)을 할당합니다. 변수와 상수의 이름을 지정할 때와 동일한 규칙이 여기에 적용됩니다. 함수 이름은 동일한 스타일로 지정됩니다. like변수 .
    • 괄호 안에 함수에 전달된 매개변수를 나열하여 각각의 유형을 나타냅니다. 이는 새로 생성된 함수 내에서만 볼 수 있는 변수 선언입니다. 예를 들어, 이 실험에서 우리가 였어또는 isUp~에서 고리()컴파일러로부터 오류 메시지를 받게 됩니다. 마찬가지로 선언된 변수는 고리, 다른 함수에는 표시되지 않지만 해당 값은 매개변수로 전달될 수 있습니다.
    • 중괄호 한 쌍 사이에 함수가 실행하는 코드를 작성하세요.
    • 함수가 어떤 값을 반환해야 하는 경우 키워드를 사용하세요. 반품반환할 값을 지정합니다. 이 값은 우리가 선언한 유형이어야 합니다.
  • 소위 전역 변수, 즉 모든 함수에서 접근할 수 있는 변수는 일반적으로 프로그램 시작 부분에 선언됩니다. 우리의 경우는 이렇습니다 명도 .
  • 우리가 만든 함수 내부 핸들클릭실험에서도 같은 일이 일어납니다.
  • 35의 밝기 증가 단계를 사용하면 버튼 중 하나를 8번 이상 연속으로 클릭하지 않으면 표현식의 값이 밝기 + 델타간격을 벗어나게 됩니다 . 기능 사용 억누르다변수에 허용되는 값을 제한합니다. 명도지정된 간격 경계.
  • 표현에 있어서 plusUp = 핸들클릭(PLUS_BUTTON_ , 플러스업, +35)우리는 변수에 접근합니다 플러스업두 배. 왜냐하면 = 오른쪽 피연산자의 값을 왼쪽 피연산자에 넣고 먼저 무엇을 반환할지 계산합니다. 핸들클릭. 그래서 우리가 그녀에게 줄 때 플러스업매개변수로서 마지막 호출 중에 계산된 이전 값을 여전히 갖고 있습니다. 핸들클릭 .
  • 내부에 핸들클릭새로운 LED 밝기 값을 계산하여 전역 변수에 씁니다. 명도, 각 반복마다 고리방금 지나갔어 아날로그쓰기 .

자신을 테스트하기 위한 질문

  1. 키워드는 무엇을 의미하나요? 무효의 ?
  2. 할당 연산자의 다른 측면에서 하나의 변수가 언급될 때 프로그램이 작동하는 방식 = ?

독립적인 솔루션을 위한 과제

  1. 밝기 변경 단계를 한 곳에서 조정하도록 코드를 수정합니다.
  2. 다른 함수를 만들고 코드를 재작업하여 한 함수는 키 입력을 추적하고 다른 함수는 LED 밝기를 계산하여 이를 반환하는 역할을 합니다. 아날로그쓰기 .

이제 흔히 약어로 불리는 다색 LED를 살펴보겠습니다. RGB LED. RGB는 Red - red, Green - green, Blue - blue의 약자입니다. 즉, 이 장치 내부에는 세 개의 별도 LED가 배치됩니다. 유형에 따라 RGB LED는 공통 음극 또는 공통 양극을 가질 수 있습니다.

1. 색상 혼합

RGB LED가 세 가지 기존 LED보다 나은 이유는 무엇입니까? 서로 가까이 배치된 다양한 광원의 빛을 혼합하는 것은 우리 비전의 능력에 관한 것입니다. 예를 들어 파란색과 빨간색 LED를 서로 옆에 배치하면 몇 미터 거리에서 빛이 합쳐지고 눈에 보라색 점이 하나 표시됩니다. 그리고 녹색도 추가하면 점이 흰색으로 보입니다. 이것이 바로 컴퓨터 모니터, 텔레비전 및 실외 스크린이 작동하는 방식입니다. TV 매트릭스는 다양한 색상의 개별 점으로 구성됩니다. 전원이 켜진 모니터를 돋보기로 들여다보면 이 점들을 쉽게 볼 수 있습니다. 그러나 실외 스크린에서는 점들이 촘촘하게 배치되지 않아 육안으로 구별이 가능하다. 그러나 수십 미터 거리에서는 이러한 지점을 구별할 수 없습니다. 여러 색상의 점이 서로 가까울수록 눈이 이러한 색상을 혼합하는 데 필요한 거리가 줄어드는 것으로 나타났습니다. 따라서 결론은 세 개의 개별 LED와 달리 RGB LED의 색상 혼합은 이미 30-70cm 거리에서 눈에 띄는데, 무광택 렌즈가 있는 RGB LED의 성능이 훨씬 더 좋습니다.

2. RGB LED를 Arduino에 연결하기

멀티컬러 LED는 일반 LED 3개로 구성되어 있으므로 별도로 연결해보겠습니다. 각 LED는 자체 핀에 연결되며 자체 저항이 있습니다. 이 튜토리얼에서는 공통 음극이 있는 RGB LED를 사용하므로 접지할 와이어가 하나만 있습니다. 개략도
레이아웃 모양

3. RGB LED 제어 프로그램

작곡하자 간단한 프로그램, 그러면 세 가지 색상이 차례로 켜집니다. const 바이트 rPin = 3; const 바이트 gPin = 5; const 바이트 bPin = 6; void setup() ( pinMode(rPin, OUTPUT); pinMode(gPin, OUTPUT); pinMode(bPin, OUTPUT); ) void loop() ( // 파란색을 끄고 빨간색을 켭니다 digitalWrite(bPin, LOW); digitalWrite( rPin, HIGH); 지연(500); // 빨간색을 끄고 녹색을 켜십시오 digitalWrite(rPin, LOW); digitalWrite(gPin, HIGH); 지연(500); // 녹색을 끄고 파란색을 켜십시오 digitalWrite(gPin , LOW); digitalWrite( bPin, HIGH); Delay(500); ) 프로그램을 Arduino에 로드하고 결과를 관찰합니다. 귀하의 브라우저 하지 않습니다비디오 태그를 지원합니다. 프로그램을 조금 최적화해 보겠습니다. 변수 rPin, gPin 및 bPin 대신 배열을 사용하겠습니다. 이는 다음 작업에 도움이 될 것입니다. const 바이트 rgbPins = (3,5,6); 무효 설정() ( for(byte i=0; i<3; i++) pinMode(rgbPins[i], OUTPUT); } void loop() { digitalWrite(rgbPins, LOW); digitalWrite(rgbPins, HIGH); delay(500); digitalWrite(rgbPins, LOW); digitalWrite(rgbPins, HIGH); delay(500); digitalWrite(rgbPins, LOW); digitalWrite(rgbPins, HIGH); delay(500); }

4. 무지개의 일곱 색깔

이제 두 가지 색상을 동시에 조명해 보겠습니다. 다음과 같은 색상 순서를 프로그래밍해 보겠습니다.
  • 빨간색
  • 빨간색 + 녹색 = 노란색
  • 녹색
  • 녹색 + 파란색 = 연한 파란색
  • 파란색
  • 파란색 + 빨간색 = 보라색
단순화를 위해 주황색을 생략했습니다. 그래서 무지개의 6가지 색깔이 나왔습니다 🙂 const byte rgbPins = (3,5,6); const 바이트 레인보우 = ( (1,0,0), // 빨간색 (1,1,0), // 노란색 (0,1,0), // 녹색 (0,1,1), // 파란색 ( 0,0,1), // 파란색 (1,0,1), // 보라색 ); 무효 설정() ( for(byte i=0; i<3; i++) pinMode(rgbPins[i], OUTPUT); } void loop() { // перебираем все шесть цветов for(int i=0; i<6; i++){ // перебираем три компоненты каждого из шести цветов for(int k=0; k<3; k++){ digitalWrite(rgbPins[k], rainbow[i][k]); } delay(1000); } } В результате работы программы получается: Your browser does not support the video tag.

5. 부드러운 색상 변화

RGB LED를 핀 3, 5, 6에 연결한 것은 아무것도 아닙니다. 아시다시피 이 핀을 사용하면 다양한 듀티 사이클의 PWM 신호를 생성할 수 있습니다. 즉, LED를 켜거나 끌 수 있을 뿐만 아니라 LED의 전압 레벨도 제어할 수 있습니다. 이 작업은 함수를 사용하여 수행됩니다. 아날로그쓰기. LED가 무지개 색상 사이를 갑작스럽지 않고 부드럽게 전환하는지 확인하겠습니다. const 바이트 rgbPins = (3,5,6); int 희미한 = 1; 무효 설정() ( for(byte i=0; i<3; i++){ pinMode(rgbPins[i], OUTPUT); } // начальное состояние - горит красный цвет analogWrite(rgbPins, 255); analogWrite(rgbPins, 0); analogWrite(rgbPins, 0); } void loop() { // гасим красный, параллельно разжигаем зеленый for(int i=255; i>=0; i--)( AnalogWrite(rgbPins, i/dim); AnalogWrite(rgbPins, (255-i)/dim); Delay(10); ) // 녹색을 끄고 파란색을 병렬로 켭니다 for(int i=255 ; i> =0; i--)( AnalogWrite(rgbPins, i/dim); AnalogWrite(rgbPins, (255-i)/dim); Delay(10); ) // 파란색을 끄고 빨간색을 병렬로 켜기 for(int i=255 ; i>=0; i--)( AnalogWrite(rgbPins, i/dim); AnalogWrite(rgbPins, (255-i)/dim); Delay(10); ) ) Dim 변수는 다음을 결정합니다. 빛의 밝기. 희미함 = 1에서 최대 밝기를 갖습니다. Arduino에 프로그램을 로드합니다. 귀하의 브라우저는 video 태그를 지원하지 않습니다.

작업

  1. 온도 표시기. 회로에 서미스터를 추가하고 이를 아날로그 입력에 연결해 보겠습니다. LED는 서미스터의 온도에 따라 색상이 변해야 합니다. 온도가 낮을수록 푸른색을 띠고, 온도가 높을수록 붉은색을 띠게 됩니다.
  2. 레귤레이터가 있는 RGB 램프. 세 개의 가변 저항을 회로에 추가하고 이를 아날로그 입력에 연결해 보겠습니다. 프로그램은 저항 값을 지속적으로 읽고 해당 RGB LED 구성 요소의 색상을 변경해야 합니다.

이 예에서는 저항이 다른 저항을 사용하여 LED의 밝기를 변경하는 방법을 배웁니다.

이 예에서는 다음이 필요합니다.

LED 1개(직경 5mm)

1 270Ω 저항기(빨간색, 보라색, 갈색)

1 470Ω 저항기(노란색, 보라색, 갈색)

2.2kΩ 저항기 1개(빨간색, 빨간색, 빨간색)

10kΩ 저항기 1개(갈색, 검정색, 주황색)

LED - 일반 정보

LED는 다양한 유형의 표시 장치에 적합합니다. 전기 소모가 적고 내구성이 뛰어납니다.

이 예에서는 직경 5mm의 가장 일반적인 LED를 사용합니다. 또한 직경 3mm의 LED와 직경 10mm의 대형 LED도 일반적입니다.

LED를 배터리나 전압 소스에 직접 연결하는 것은 권장되지 않습니다. 먼저, LED의 음극 다리와 양극 다리가 정확히 어디에 있는지 먼저 파악해야 합니다. 둘째, 전류 제한 저항을 사용해야합니다. 그렇지 않으면 LED가 매우 빨리 소진됩니다.

LED에 저항기를 사용하지 않으면 LED에 너무 많은 전류가 흐르기 때문에 LED가 매우 빨리 작동하지 않게 됩니다. 결과적으로 LED가 가열되고 빛을 생성하는 접점이 파괴됩니다.

LED의 양극 다리와 음극 다리를 구별하는 방법에는 두 가지가 있습니다.

첫 번째는 양극 다리가 더 길다는 것입니다.

두 번째는 다이오드 자체의 하우징에 들어갈 때 음극 레그 커넥터에 평평한 가장자리가 있다는 것입니다.

긴 다리의 가장자리가 평평한 LED를 발견하면 긴 다리가 여전히 양극입니다.

저항기 - 일반 정보

저항 - 저항 (영어)

이름에서 알 수 있듯이 저항은 전기 흐름에 저항합니다. 저항의 값(옴)이 높을수록 저항은 커지고 저항이 설치된 회로를 통해 흐르는 전류는 줄어듭니다. 우리는 저항의 이 속성을 사용하여 LED를 통과하는 전류와 밝기를 조절합니다.

하지만 먼저 저항에 대해 조금 이야기 해 봅시다.

저항이 측정되는 단위는 옴이며, 많은 소스에서 그리스 문자 Ω - 오메가로 표시됩니다. 옴은 작은 저항 값(회로에서는 거의 감지할 수 없음)이므로 kOhm - 킬로옴과 같은 단위로 작동하는 경우가 많습니다. (1000옴) 및 MOhm 메가옴(1,000,000옴).

이 예에서는 270Ω, 470Ω, 2.2kΩ 및 10kΩ의 네 가지 값을 갖는 저항기를 사용합니다. 이 저항의 크기는 동일합니다. 색상도. 그들을 구별하는 유일한 것은 컬러 줄무늬입니다. 저항의 값은 이 스트립에서 시각적으로 결정됩니다.

세 가지 색상의 줄무늬와 마지막 황금색 줄무늬가 있는 저항기의 경우 다음과 같이 대응됩니다.

브라운 1

레드 2

오렌지 3

그린 5

보라색 7

처음 두 줄은 처음 2개의 숫자 값을 나타내므로 빨간색, 보라색은 2, 7을 의미합니다. 다음 줄은 처음 두 자리 뒤에 배치되어야 하는 0의 개수입니다. 즉, 위 사진처럼 세 번째 스트립이 갈색이면 0이 하나 있고 저항 값은 270Ω입니다.

갈색, 검정색, 주황색 줄무늬가 있는 저항기: 10개와 3개의 0이므로 10000Ω입니다. 즉, 10kΩ입니다.

LED와 달리 저항에는 양극 및 음극 다리가 없습니다. 전원/접지에 연결하는 데 어느 다리를 사용하는지는 중요하지 않습니다.

연결 다이어그램

아래 다이어그램에 따라 연결하십시오.

Arduino에는 주변 장치에 전원을 공급하기 위한 5V 핀이 있습니다. 우리는 이를 LED와 저항에 전원을 공급하는 데 사용할 것입니다. 보드에는 다른 것이 필요하지 않으며 USB를 통해 컴퓨터에 연결하기만 하면 됩니다.

270Ω 저항을 사용하면 LED가 매우 밝게 켜집니다. 270Ω 저항기를 470Ω 저항기로 교체하면 LED가 밝게 빛나지 않습니다. 2.2kΩ 저항을 사용하면 LED가 조금 더 희미해집니다. 결국 10kΩ 저항을 사용하면 LED가 거의 보이지 않습니다. 마지막 단계에서 차이점을 확인하려면 빨간색 어댑터를 스위치로 사용하여 꺼내야 할 것입니다. 그러면 밝기의 차이를 볼 수 있습니다.

그런데 이 실험은 불을 끈 상태에서도 수행할 수 있습니다.

다양한 저항기 설치 옵션

저항의 한쪽 다리에 5V가 연결되는 순간 저항의 두 번째 다리는 LED의 양극 다리에 연결되고 LED의 두 번째 다리는 접지에 연결됩니다. 아래와 같이 저항을 LED 뒤쪽으로 이동하면 LED가 계속 켜집니다.

LED 깜박임

LED를 Arduino 출력에 연결할 수 있습니다. 아래와 같이 빨간색 선을 5V 전원 핀에서 D13으로 이동합니다.

이제 우리가 살펴본 "Blink" 예제를 다운로드하세요. 내장 LED와 설치한 외부 LED가 모두 깜박이기 시작했습니다.

Arduino에서 다른 핀을 사용해 보겠습니다. D7이라고 가정해 봅시다. 커넥터를 핀 D13에서 핀 D7로 이동하고 다음 코드 줄을 변경합니다.

수정된 스케치를 Arduino에 업로드합니다. LED는 계속 깜박이지만 이번에는 핀 D7의 전원을 사용합니다.

이전 수업에서 우리는 가장 간단한 회로인 조립과 회로에 대해 알게 되었습니다. 오늘 우리는 전위차계(가변 저항기)와 LED가 있는 모델을 조립하고 있습니다. 이러한 모델은 로봇을 제어하는 ​​데 사용될 수 있습니다.

전위차계변수이다 저항을 조절할 수 있는 저항기.전위차계는 로봇공학에서 음량, 전력, 전압 등 다양한 매개변수의 조절기로 사용됩니다. 우리 모델에서는전위차계 손잡이를 돌려서LED의 밝기는 달라집니다. 이것은 또한 기본 계획 중 하나입니다.

모델 조립에 대한 비디오 지침:

모델을 조립하려면 다음이 필요합니다.

  • Arduino 보드(또는 유사품);
  • 브레드보드;
  • 6개의 전선 및/또는 수-수 점퍼;
  • 발광 다이오드;
  • 전위차계(가변 저항기);
  • 220옴 저항;
  • Arduino IDE는 Arduino 웹사이트에서 다운로드할 수 있습니다.

Arduino에 전위차계와 LED를 연결하려면 무엇이 필요합니까?

전위차계와 LED가 있는 Arduino 모델의 연결 다이어그램:

전위차계와 LED가 있는 Arduino 모델의 연결 다이어그램

다음 프로그램은 이 모델이 작동하는 데 적합합니다(프로그램을 Arduino IDE에 복사하면 됩니다).

// LED로 핀 이름 지정
// 및 전위차계
#led 9 정의
#냄비 A0 정의
무효 설정()
{
// LED가 있는 핀 - 출력
pinMode(led, OUTPUT);
// 전위차계가 있는 핀 - 입력
pinMode(pot, INPUT);
}
무효 루프()
{
// 변수 x 선언
정수 x;
// 전위차계에서 전압을 읽습니다.
// 0부터 1023까지의 숫자를 얻습니다.
// 4로 나누면 범위 내의 숫자를 얻습니다.
// 0-255 (소수 부분은 버려집니다)
x = 아날로그읽기(pot) / 4;
//결과를 LED에 출력
아날로그쓰기(led, x);
}

LED가 있는 전위차계의 조립된 Arduino 모델은 다음과 같습니다.

전위차계와 LED가 조립된 Arduino 모델

이것으로 "초보자를 위한 Arduino" 세 번째 강의를 마치겠습니다. 계속됩니다!

강의 게시물:

  1. 첫 수업: .
  2. 두 번째 강의: .
  3. 세 번째 강의: .
  4. 네 번째 강의: .
  5. 다섯 번째 수업: .
  6. 6과: .
  7. 일곱 번째 수업: .
  8. 여덟 번째 수업: .
  9. 아홉 번째 교훈:

그리고 새로운 작업을 완료해 보겠습니다. LED가 부드럽게 깜박이는 새해 디스플레이 화환을 다들 본 것 같습니다. 우리가 이런 일을 하고 싶다고 가정해 봅시다.
우리는 이미 digitalWrite() 함수를 살펴봤고 그것이 쓰는 값이 높음 또는 낮음이라는 두 가지 옵션이 될 수 있다는 것을 알고 있습니다. 이런 경우에는 AnalogWrite() 함수가 도움이 될 것입니다. 함수의 "공식"은 초기 접두사만 다르므로 기억하기 쉽습니다.

digitalWrite()와 마찬가지로 AnalogWrite() 함수는 괄호 안에 두 개의 인수를 포함하며 "어디에서, 무엇을"이라는 동일한 언어 원칙에 따라 작동합니다. 가장 큰 차이점은 일반적인 LOW 또는 HIGH 대신 광범위한 값을 기록할 수 있다는 점입니다. 이를 통해 LED의 밝기를 조정할 수 있습니다. 명심해야 할 주요 사항은 이 기능이 특정 연락처에서만 작동한다는 것입니다. 이 핀에는 "~" 기호가 표시되어 있습니다. 이 기호는 이것이 PWM 접점임을 나타냅니다. PWM(펄스 폭 변조)은 러시아어의 PWM(펄스 폭 변조)과 비슷하게 들립니다. 작동 원리는 펄스 지속 시간 변경을 기반으로 합니다. 그래픽적으로 이것은 다음과 같이 묘사될 수 있습니다:

간단한 예를 보면서 이것이 어떻게 작동하는지 알아봅시다. 이렇게 하려면 150Ω 저항을 통해 LED를 PWM 접점에 연결하고 Arduino에 간단한 프로그램을 "하드와이어"해야 합니다. 연결 다이어그램과 스케치 코드는 다음과 같습니다.


무효 설정()
{
pinMode(led,OUTPUT);
}

무효 루프()
{
for(int i=0; i<=255; i++)
{
아날로그쓰기(led,i);
지연(10);
}
for(int i=255; i>=0; i--)
{
아날로그쓰기(led,i);
지연(10);
}
}


코드는 일반적으로 명확하다고 생각하지만 for() 루프에 약간 주의를 기울일 필요가 있습니다. 허가 같은 것이 있습니다. 8비트 해상도로 작업하고 있으므로(이에 대해서는 나중에 설명) 최소값은 0, 최대값은 255입니다. 각 반복이 끝날 때마다 시간 지연을 10ms로 설정합니다.

이전 강의의 다이어그램으로 돌아가서 AnalogWrite() 함수를 사용하여 비슷한 화환을 만들어 보겠습니다.


int 버튼핀 = 2;
정수 핀 = (3,5,6,9,10,11);

부울 lastButton = LOW;
부울 전류 버튼 = LOW;
부울 활성화 = false;

무효 설정()
{
pinMode(buttonPin, INPUT);
for(int 모드 = 0; 모드<= 5; mode++) pinMode(pins, OUTPUT);
}

부울 디바운스(부울 마지막)
{
부울 전류 = digitalRead(buttonPin);
if(마지막 != 현재)
{
지연(5);
current = digitalRead(buttonPin);
}
반환 전류;
}

무효 루프()
{
currentButton = 디바운스(lastButton);
if(lastButton == LOW && currentButton == HIGH)
{
활성화 = !활성화;
}

If(활성화 == true)
{
for (int i=0; i<=5; i++)
{
for (int 밝기 = 0; 밝기<= 255; brightness++)
{
지연(1);
}
지연(40);
}
for (int i=0; i<=5; i++)
{
for (int 밝기 = 255; 밝기 >= 0; 밝기--)
{
AnalogWrite(핀[i], 밝기);
지연(1);
}
지연(40);
}
}

If(활성화 == false)
{
for(int i = 0; 나는<= 5; i++) digitalWrite(pins[i], LOW);
}

LastButton = 현재버튼;
}


시각적으로 스케치는 좀 더 복잡해졌습니다. 사실 여기에서는 모든 것이 간단하므로 알아 봅시다. 연결된 모든 LED를 식별해야 하지만 일반적인 int LED 대신 각 요소가 Arduino의 PWM 핀인 배열을 사용합니다. void setup() 함수의 본문에서도 우리는 교활한 방식으로 행동했습니다. 우리는 모든 연락처의 "목록"을 for() 루프에 맡겼으며 각 반복마다 해당 연락처가 OUTPUT에 구성되었습니다. void loop() 함수로 넘어가겠습니다. debounce() 함수와 초기 if() 조건은 변경되지 않습니다. 우리는 이전 값(초기에는 LOW)과 버튼의 현재 상태라는 두 가지 변수의 수준을 계속 확인하고 있습니다. 이러한 조건이 충족되면 활성화 변수의 값이 반전됩니다. 이를 염두에 두고 두 가지 간단한 if() 조건을 더 추가했습니다. 활성화 = true이면 화환이 켜지고 "흐르는" 부드러움은 for() 루프에 의해 제어됩니다. 활성화 = 거짓이면 모든 LED가 꺼집니다. 조건 끝에서 lastButton 변수는 버튼의 현재 상태를 가져옵니다.
프로그램을 테스트하는 동안 모든 것이 예상대로 작동하지 않는다는 사실을 발견했습니다. 지난 강의에서 시간 지연이 길면 버튼이 만료된 후에 실행되도록 수정했다는 사실을 기억하시나요? 이전 예에서 화환이 켜졌을 때 void loop() 함수 본문의 총 지연은 85ms였습니다. 이는 우리에게 일정 기간 내에 "그 곳에 도달"할 수 있는 기회를 제공했습니다. 이 스케치에서는 동일한 조건에서 지연이 여러 번 다릅니다. 아마도 화환을 끄고 싶다면 "중단"이라는 단어가 나올 것입니다. 이것이 이 문제의 해결책이 될 것입니다!

이 기사가 도움이 되었기를 바랍니다. 다음 튜토리얼에서는 Arduino의 인터럽트를 살펴보고 원하는 결과를 얻을 것입니다.




맨 위