아두이노 switch 예제

`2`를 받으면 LED가 꺼진 것입니다. `3`은 스케치에서 사용할 수 있는 옵션 메뉴를 표시합니다. LED를 켜거나 끌 필요가 있는지 확인하려면 스위치 상태를 여전히 사용하고 있지만 이제 상태가 newSwitchState 변수에 저장됩니다. 버튼 스위치를 누를 때마다 상태 값이 1씩 증가합니다. 상태가 3보다 크면 0으로 재설정됩니다. 여기서 우리는 위와 같은 작업을 수행, 키 프레스를 감지한 다음 켜거나 끄기 위해 인터럽트를 사용합니다. 그러나 인터럽트에서 LED를 직접 변경하는 루틴을 호출한 예제 1과 달리 이번에는 인터럽트를 사용하여 플래그를 설정하여 키를 눌렀습니다. ISR을 사용하여 변수의 값을 변경하는 것이 항상 신뢰할 수있는 것은 아니며 때로는 Arduino가 시간에 업데이트되지 않으며 주 코드로 돌아갈 때 이전 값이 여전히 사용될 수 있습니다. Arduino (실제로 컴파일러)가 항상 변수를 휘발성으로 선언하는 최신 값을 사용하도록 합니다. 변수가 휘발성으로 선언되면 컴파일러는 항상 최신 값을 사용합니다. 인터럽트에는 여러 종류가 있으며이 게시물은 버튼 스위치로 물건을 켜고 끄는 것에 관한 것이기 때문에 핀 변경 인터럽트를 사용할 것입니다. 나는이 게시물에 인터럽트의 다른 유형을 다루지 않습니다. 다른 Arduinos 인터럽트에 대해 다른 핀을 사용할 수 있습니다.

나노와 같은 ATmega 328 기반 Arduinos는 핀 2 및 3만 사용할 수 있습니다. 메가핀 2, 3, 18, 19, 20, 21을 사용할 수 있습니다. 더 많은 LED를 사용하는 경우 핀 값을 배열에 넣은 다음 상태 변수를 배열 인덱스로 사용합니다. 아래 예제 4a를 참조하십시오. 스위치의 상태가 읽혀지고 newSwitchState에 배치된 값입니다. 그런 다음 이전스위치 상태와 비교됩니다. 그들이 동일하다면 우리는 변화가 일어나지 않았다는 것을 알고 있으며 우리는 아무것도 할 필요가 없습니다. 그러나 동일하지 않은 경우 스위치가 변경되었음을 알고 LED를 켜거나 끌 필요가 있습니다. 인터럽트 함수 또는 인터럽트 서비스 루틴(ISR)은 다른 Arduino 함수와 같지만 정확히 같지는 않습니다. ISR은 인수를 수락할 수 없으며 값을 반환할 수 없습니다. 즉, 전역 변수를 사용해야 하는 값을 전달해야 하는 경우(특별한 고려 사항이 필요합니다). 작동하지 않는 특정 사항이 있으며 ISR 내부에서 실제로하지 말아야 할 몇 가지 사항이 있습니다.

delay() 사용하지 마십시오(인터럽트를 사용하므로 ISR 내에서 작동하지 않음), 밀리())가 작동하지 않고 직렬 인쇄가 제대로 작동하지 않습니다. 핑백: 아두이노 키트는 무엇을 구입해야 하나요? 최고의 아두 이노 키트 2018 – 로봇 을 알아보기 당신은 „경우 (상태 = = 0)”문이 없다는 것을 알 수 있습니다. 어떤 LED가 켜져 있는지 변경하려면 먼저 현재 LED를 꺼야합니다. 디지털Write(핀, LOW) 문은 모두 „if” 문이지만 필수는 아닙니다. 우리는 우리가 단순히 그들 모두를 해제 할 때마다 LED를 해제 할 필요가 있다는 것을 알고 있기 때문에 (이미 LOW는 효과가 없으며 아두 이노를 다치게하지 않습니다 핀 LOW를 설정) 다음 새로운 LED를 켭니다. 다른 여러 구문 대신 스위치를 사용하면 읽기 쉽고 유연성이 향상됩니다. 스케치가 스위치를 지속적으로 확인하고 그에 따라 LED를 켜거나 끄는 것을 볼 수 있어야 합니다. 즉, 스위치 핀을 지속적으로 점검할 뿐만 아니라 LED가 지속적으로 켜지고 꺼지고 있습니다. 이 짧은 단순히 스케치이 잘 작동하지만 더 큰 더 복잡한 스케치에서 사용할 때 문제에 실행할 수 있습니다. 이 스케치는 첫 번째 스케치와 정확히 동일하게 나타납니다.

버튼 스위치를 누르면 LED가 켜진 다. 스위치를 놓아 LED가 꺼집니다. 차이점은 스위치 상태가 변경된 경우에만 LED 핀을 변경한다는 것입니다. 훌륭한 가이드. 나는 아두 이노에 새로운 이 가이드는 내가 필요한 모든 것을 다루었다.