제조공정
| × | 1 | ||||
| × | 1 | ||||
| × | 11 | ||||
| × | 3 | ||||
| × | 1 | ||||
| × | 4 |
|
이 프로젝트는 Arduino를 사용하여 LED(발광 다이오드)를 페이드하는 방법을 보여줍니다. 3개의 섹션으로 나뉩니다:
<울>
페이드 라이트:
이 섹션의 끝에서 프로젝트는 다음과 같아야 합니다.
보시다시피 신호등이 더 밝게 빛났다가 신호등의 순서로 점차 어두워집니다. 이제 시작하겠습니다.
설계도:
보시다시피 LED는 핀 3, 6, 9에 연결되어 있습니다. 원하는 핀에 LED를 연결할 수 있지만 나중에 코드에서 변경하는 것을 기억해야 합니다.
코드:
시작하려면 이것을 코드에 추가하십시오. 이것은 어떤 구성 요소(이 경우 어떤 LED가 어떤 핀에 연결되는지)를 나타냅니다.
int ledRed =9;int ledYellow =6;int ledGreen =3;
이제 void setup()에서 기능, 핀이 입력인지 출력인지 여부를 지정합니다.
void setup() { pinMode(ledRed, OUTPUT); 핀모드(LED노란색, 출력); pinMode(ledGreen, OUTPUT);}
마지막으로 void loop()에 다음을 추가합니다. 기능. MCU에게 무엇을 해야 하는지 알려줍니다.
void loop() { // 이것은 단지 빨간불을 흐리게 하는 것입니다 - ledRed //ledRed for (int i=0; i<=255; i++) { analogWrite(ledRed, i); 지연(30); } for (int i=255; i>=0; i--) { analogWrite(ledRed, i); 지연(30); }}
여기서 일어나는 일은 MCU가 정수 'i' 255 미만이거나 아닙니다. 그렇다면 'i'의 값 1씩 증가합니다. 프로세스가 30밀리초 지연된 다음 다시 시작됩니다. 'i' 값이 255 이상인 경우 확인할 때마다 1씩 뺍니다. 값이 0에 도달하면 프로세스가 다시 수행됩니다.
그러나 페이드하는 데 걸리는 시간을 변경하려면 모든 delay()를 변경해야 합니다. 원하는 양만큼 기능합니다. 그다지 효율적이지 않습니다. delay()를 변경하고 싶을 때 일을 더 쉽고 빠르게 하려면 번, 이것을 코드 시작 부분에 추가하십시오.
const int fade =30;
그것이 하는 일은 기본값을 설정하는 것입니다. 이 경우에는 기본 시간입니다. 이제 모든 delay()를 변경합니다. 값을 (페이드) . 원하는 경우 다른 이름을 지정할 수 있습니다. 결과적으로 delay() 기능은 다음과 같아야 합니다.
지연(페이드);
코드는 다음과 같아야 합니다.
int ledRed =9;int ledYellow =6;int ledGreen =3;const int fade =10;void setup() { pinMode(ledRed, OUTPUT); 핀모드(LED노란색, 출력); pinMode(ledGreen, OUTPUT);}void 루프() { //ledRed for (int i =0; i <=255; i++) { analogWrite(ledRed, i); 지연(페이드); } for (int i =255, i>=0, i--) { analogWrite(ledRed, i); 지연(페이드); } // ledYellow for (int i =0; i <=255; i++) { analogWrite(ledYellow, i); 지연(페이드); } for (int i =255; i>=0; i--) { analogWrite(ledYellow, i); 지연(페이드); } //ledGreen for (int i =0; i <=255; i++) { analogWrite(ledGreen, i); 지연(페이드); } for (int i =255, i>=0, i--) { analogWrite(ledGreen, i); 지연(페이드); } // ledYellow for (int i =0; i <=255; i++) { analogWrite(ledYellow, i); 지연(페이드); } for (int i =255; i>=0; i--) { analogWrite(ledYellow, i); 지연(페이드); }}
푸시 버튼으로 조명 페이드:
이 섹션이 끝나면 프로젝트에 버튼을 추가할 수 있습니다.
보시다시피 LED는 버튼을 누른 후에만 변경됩니다. 이제 시작하겠습니다.
설계도:
모든 LED가 같은 위치에 유지되지만 푸시 버튼이 추가된 것을 보셨을 것입니다.
코드:
먼저 MCU에 버튼이 연결된 핀을 알려야 합니다. 그렇게 하려면 코드 시작 부분에 이것을 추가하세요.
int 버튼 =7; 코드>
이제 무효 설정()에서 기능을 추가하여 버튼이 출력의 입력인지 MCU에 알려줍니다.
pinMode(버튼, 입력);
또한 이것을 함수에 추가하십시오.
<사전><코드> digitalWrite(ledRed, LOW); digitalWrite(led노란색, LOW); digitalWrite(ledGreen, HIGH);그것은 시작 빛을 설정합니다. 이번에는 시작 LED가 녹색이지만 원하는 경우 빨간색이나 노란색으로 변경할 수 있습니다.
이제 void loop()에 큰 변화가 있습니다. 기능. loop()에 있던 모든 것 이제 fadeLights()라는 함수로 대체되었습니다. (원하는 경우 이름이 다를 수 있음). 루프()에서 이제 다음과 같아야 합니다.
void loop() { if(digitalRead(button) ==HIGH) { delay(15); // 소프트웨어 디바운스 if(digitalRead(button) ==HIGH){ // 버튼을 누르면 함수 fadeLights(); // fadeLights가 호출됩니다 } } else { digitalWrite(ledRed, LOW); // 버튼을 누르지 않으면 녹색 LED는 digitalWrite(ledYellow, LOW); // 켜져 있고 나머지는 켜져 있지 않습니다. 디지털 쓰기(ledGreen, HIGH); }}
앞서 언급했듯이 void fadeLights() 함수는 루프에 있던 것을 갖게 됩니다.
void fadeLights(){ for (int i =255; i>=0; i--) { //녹색에서 시작하므로 녹색으로 페이드해야 합니다. analogWrite(ledGreen, i); 지연(페이드); } // ledYellow for (int i =0; i <=255; i++) { analogWrite(ledYellow, i); 지연(페이드); } for (int i =255; i>=0; i--) { analogWrite(ledYellow, i); 지연(페이드); } //ledRed for (int i =0; i <=255; i++) { analogWrite(ledRed, i); 지연(페이드); } for (int i =255, i>=0, i--) { analogWrite(ledRed, i); 지연(페이드); } // ledYellow for (int i =0; i <=255; i++) { analogWrite(ledYellow, i); 지연(페이드); } for (int i =255; i>=0; i--) { analogWrite(ledYellow, i); 지연(페이드); } //ledGreen for (int i =0; i <=255; i++) { analogWrite(ledGreen, i); 지연(페이드); } }코드>
프로젝트가 비디오에서와 같이 작동한다면 올바르게 수행한 것입니다. 순서가 올바르지 않으면 다음을 확인하십시오.
<울>조명이 켜지지 않으면 확인
<울>
버튼이 있는 페이드 라이트(지연에 대한 개선):
눈치채셨겠지만, 버튼에서 손을 떼면 조명이 계속 어두워집니다. 이 섹션 이후에는 버튼을 눌렀을 때만 LED가 희미해지도록 코드를 편집할 수 있습니다.
여기에서 볼 수 있듯이 버튼에서 손을 떼면 LED가 기본 순서로 돌아갑니다.
빨간색 - 꺼짐
노란색 - 꺼짐
녹색 - 켜짐
설계도:
더 이상 구성 요소를 추가하지 않거나 다른 작업을 수행하기를 원하기 때문에 회로도는 동일하게 유지됩니다. 여전히 LED가 흐려지기를 원합니다.
코드:
우리는 더 이상 항목을 추가하지 않으므로 처음에 아무것도 추가할 필요가 없습니다. 그러나 지연을 변경하므로 이를 삭제해야 합니다.
const int 페이드 =10; // 더 이상 필요하지 않습니다.
setup()에 대해 변경할 사항이 없습니다. 기능. void 루프()에서 , else를 추가해야 합니다. 성명서.
void loop() { if(digitalRead(button) ==HIGH) { delay(15); if(digitalRead(버튼) ==HIGH){ fadeLights(); } } else { // 여기에 추가 digitalWrite(ledRed, LOW); digitalWrite(led노란색, LOW); 디지털 쓰기(ledGreen, HIGH); }} 코드>
즉, 버튼을 누르지 않으면 프로그램이 fadeLights()를 종료합니다. 기타로 이동 기본 LED 순서가 있는 문. 이전과 달리 이전에는 fadeLights() 버튼이 확인되지 않았습니다. 호출되었습니다.
이제 모든 delay()를 변경합니다. 이에 대한 기능:
for( int y =0; y <1000; y++){ // 버튼을 놓으면 if (digitalRead(button) ==LOW) { return; }코드>
각 루프에서 마이크로프로세서는 버튼을 확인합니다. 출시되면 반환 fadeLights()를 중지하기 위해 명령이 호출됩니다. . 내 추정에 따르면 각 for 루프가 실행될 때 약 10마이크로초가 소요될 것입니다. 즉, 원하는 속도로 만들기 위해 많은 시간을 수행해야 함을 의미합니다.
이 튜토리얼이 도움이 되었기를 바라며 프로젝트에 행운을 빕니다.
섹션> <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">int ledRed =9;int ledYellow =6;int ledGreen =3;const int fade =10;void setup() { pinMode(ledRed, OUTPUT); 핀모드(LED노란색, 출력); pinMode(ledGreen, OUTPUT);}void 루프() { //ledRed for (int i =0; i <=255; i++) { analogWrite(ledRed, i); 지연(페이드); } for (int i =255, i>=0, i--) { analogWrite(ledRed, i); 지연(페이드); } // ledYellow for (int i =0; i <=255; i++) { analogWrite(ledYellow, i); 지연(페이드); } for (int i =255; i>=0; i--) { analogWrite(ledYellow, i); 지연(페이드); } //ledGreen for (int i =0; i <=255; i++) { analogWrite(ledGreen, i); 지연(페이드); } for (int i =255, i>=0, i--) { analogWrite(ledGreen, i); 지연(페이드); } // ledYellow for (int i =0; i <=255; i++) { analogWrite(ledYellow, i); 지연(페이드); } for (int i =255; i>=0; i--) { analogWrite(ledYellow, i); 지연(페이드); }}
int ledRed =9;int ledYellow =6;int ledGreen =3;int 버튼 =7;const int fade =10;void setup() { pinMode(ledRed, OUTPUT); 핀모드(LED노란색, 출력); 핀모드(LED녹색, 출력); 핀모드(버튼, 입력); 디지털 쓰기(ledRed, LOW); digitalWrite(led노란색, LOW); digitalWrite(ledGreen, HIGH);} 무효 루프() { if(digitalRead(버튼) ==HIGH) { 지연(15); if(digitalRead(버튼) ==HIGH){ fadeLights(); } } else { digitalWrite(ledRed, LOW); digitalWrite(led노란색, LOW); 디지털 쓰기(ledGreen, HIGH); }} 무효 fadeLights(){ for( int i=255; i>=0; i--) { analogWrite(ledGreen, i); for( int y =0; y <1000; y++){ // 버튼을 놓으면 if (digitalRead(button) ==LOW) { return; } } } // ledYellow for( int i=0; i<=255; i++) { analogWrite(ledYellow, i); for( int y =0; y <400; y++){ // 버튼을 놓으면 if (digitalRead(button) ==LOW) { return; } } } for( int i=255; i>=0; i--) { analogWrite(ledYellow, i); for( int y =0; y <400; y++){ // 버튼을 놓으면 if (digitalRead(button) ==LOW) { return; } } } //ledRed for( int i=0; i<=255; i++) { analogWrite(ledRed, i); for( int y =0; y <1000; y++){ // 버튼을 놓으면 if (digitalRead(button) ==LOW) { return; } } } for( int i=255; i>=0; i--) { analogWrite(ledRed, i); for( int y =0; y <1000; y++){ // 버튼을 놓으면 if (digitalRead(button) ==LOW) { return; } } } // ledYellow for( int i=0; i<=255; i++) { analogWrite(ledYellow, i); for( int y =0; y <400; y++){ // 버튼을 놓으면 if (digitalRead(button) ==LOW) { return; } } } for( int i=255; i>=0; i--) { analogWrite(ledYellow, i); for( int y =0; y <400; y++){ // 버튼을 놓으면 if (digitalRead(button) ==LOW) { return; } } } //ledGreen for( int i=0; i<=255; i++) { analogWrite(ledGreen, i); for( int y =0; y <1000; y++){ // 버튼을 놓으면 if (digitalRead(button) ==LOW) { return; } } }}섹션>
제조공정
구성품 및 소모품 Arduino Nano R3 × 1 Arduino UNO × 1 픽셀 스트립 60픽셀 x 미터 × 1 저항 470옴 × 1 5v, 40Am 전원 공급 장치 × 1 브레드보드(일반) × 1 듀폰 케이블 × 1 필요한 도구 및 기계 납땜 인두(일반) 주석 땜납 앱 및 온라인 서비스 Vixen 조명 Arduino I
구성품 및 소모품 닌텐도 쌍절곤 × 1 SparkFun 레벨 시프터 × 1 Arduino UNO × 1 이 프로젝트 정보 머리말 원래 이 게시물은 www.xarg.org에 게시되었습니다. Arduino와 함께 Wii Nunchuk 사용 우리는 모두 게임 패드를 손에 들고 성장했으며 문자 그대로 가능한 모든 응용 프로그램과 결합하는 데 이상적입니다. Nintendo의 위대한 발명품은 Wii U 리모컨의 저렴한 확장 기능인 Nunchuk입니다.