3과: 조건문
이전 수업에서는 프로젝트에서 광학 센서의 데이터를 사용하여 디스크를 색상별로 정렬하는 방법을 알아보았습니다. 이 수업에서는 배운 내용을 바탕으로 광학 센서에서 감지된 색상에 관계없이 프로젝트에서 결정을 내릴 수 있도록 하는 VEXcode의 옵션을 살펴보겠습니다. 다음에 대해 배우게 됩니다:
- 산업 현장에서 의사결정을 최적화하는 것이 중요한 이유
- If then,If then else,Else if블록의 차이점입니다.
여러 조건 확인
이전 수업에서는 디스크를 색상에 따라 빨간색 팔레트나 녹색 팔레트로 정렬하는 프로젝트를 만들었습니다. 이 방법은 효과적이지만, 프로젝트에서는 한 번에 하나의 디스크만 정렬할 수 있습니다. 공장에서는 많은 물건을 반복적으로 분류하고 팔레트에 담아야 합니다. 이를 효과적으로 수행하려면 6축 암이 물체를 어떻게 움직일지 또는 인간의 개입이 필요한지 여부를 반복적으로 결정할 수 있어야 합니다. 6축 암 소개 과정에서 옮긴 큐브를 생각해 보세요.
만약 파란색 큐브가 로딩 구역에 있다면? 이전 수업의 프로젝트에서는 무슨 일이 일어날까요? 산업 현장에서는 가능한 모든 조건을 고려해야 합니다. 분류할 물건에 잘못된 물건이 섞여 있는 경우, 작업 셀과 주변 작업자의 안전을 보장하고 효과적으로 기능할 수 있도록 사람의 개입이 필요할 가능성이 높습니다.
순차이면블록
이전 수업에서는 두 개의If then블록을 순서대로 사용하여 두 개의 별도 조건을 차례로 확인하면서 본질적으로 프로젝트 내에서 두 가지 질문을 했습니다.

먼저, 물체가 빨간색인가요?, 그 다음, 물체가 초록색인가요?. 각 조건은 광학 센서에서 감지된 내용에 관계없이 프로젝트가 실행될 때마다 확인됩니다. 이 구조를 사용하면 한 번에 하나의 디스크를 효과적으로 정렬할 수 있지만 가장 효율적인 방법은 아닙니다. 빨간색 디스크는 분류할 수 있지만, 광학 센서는 주변 환경의 다른 것에서 녹색을 감지할 수도 있고, 그 반대의 경우도 가능합니다. 또한 안전 문제를 일으킬 수 있는 예상치 못한 물체처럼 빨간색도 초록색도 아닌 물체에 대한 고려도 없습니다.
프로젝트 흐름 이미지
이 수업에서는 VEXcode 프로젝트의 흐름을 설명하는 이미지가 공유됩니다. 수업을 진행하는 동안 엔지니어링 노트에 이러한 이미지를 다시 만들 수 있습니다.
Google Slides나 Microsoft PowerPoint에서 화살표, 상자, 흐름도와 같은 도구를 사용하여 노트북에서 가장 적합한 시각화를 만들 수 있습니다.

순차If then else블록
빨간색과 녹색 조건을 확인하고 다른 색상을 설명하는 데 사용할 수 있는 다른 블록이 있습니다. If then else블록은 보고된 부울 값에 따라if분기 또는else분기 내부의 블록을 실행하는 C 블록입니다.

if브랜치나 else브랜치를 실행한 후, 프로젝트는 스택의 다음 블록으로 이동합니다. If then else블록의 프로젝트 흐름을 표시하여 분기를 더 잘 보이게 할 수도 있습니다.

이 예에서 else분기는 객체가 빨간색도 아니고 녹색도 아닌 조건을 처리하는 데 사용되었습니다. 그런 경우에는 인간의 개입이 필요할 것입니다. 이전에 신호탑의 파란색 불빛은 인간의 개입이 필요하다는 것을 나타내는 데 사용된다는 것을 배웠습니다. 또한, 제어된 정지 기능은 사람과 기계의 안전을 위해 6축 암의 움직임을 멈춥니다. 세트 신호탑블록과세트 제어 정지블록을else분기에 추가하면 빨간색이나 녹색이 아닌 물체가 이러한 안전 기능을 작동시킬 수 있습니다.

지금까지의 이미지는 객체가 빨간색인 상태를 처리하는 방법만 보여주었습니다. 또 다른 If then else객체의 상태가 녹색인지 확인하는 데 필요합니다.

이런 구조를 가지고 프로젝트 흐름을 생각해 보겠습니다. 프로젝트가 실행될 때마다 광학 센서에서 감지된 색상에 관계없이 여러 개의 분기가 실행됩니다.

예를 들어 빨간색 디스크를 생각해 보겠습니다. 광학 센서가 빨간색을 감지하면 첫 번째If then else블록의 조건이 참으로 보고됩니다. if브랜치 내부의 블록이 실행되어 6축 암이 빨간색 팔레트 위로 이동합니다. 그러나 두 번째If then else블록 내부의 조건은 거짓으로 보고됩니다. 즉,else분기 내부의 블록이 실행되어 6축 암이 제어된 정지 상태에 들어가고 신호 타워에서 파란색으로 깜박입니다. 6축 암이 제어된 정지 상태에 있기 때문에 프로젝트의 다른 블록은 실행될 수 없으며, 문제가 해결될 때까지 모든 작업이 중단됩니다.

이제 예상치 못한 물체(예: 파란색 큐브)를 처리할 수 있지만, 6축 암은 디스크를 팔레트 위로 올려놓는 프로젝트 지점에 결코 도달하지 못할 것입니다. 빨간색과 초록색 조건을 차례로 확인하는 대신, 객체가 초록색인지 확인하는 방법이 있습니다. 객체가 빨간색이, 객체가 초록색이 아니면.
중첩된If then else블록
If then else블록의 각 분기는 그 안에 있는 다른 C 블록을 허용할 수 있습니다. 이것을 '중첩'이라고 합니다. 즉, 두 번째If then else블록은 이와 같이 첫 번째 블록의else분기 내에 중첩될 수 있습니다.
이제 광학 센서가 녹색을 감지하는 조건은 이전 조건(광학 센서가 빨간색을 감지)이 거짓으로 보고될 때만 확인됩니다. 따라서 광학 센서가 빨간색을 감지하면 첫 번째또는분기만 실행되어 디스크가 빨간색 팔레트 위로 이동합니다.

광학 센서가 녹색을 감지하면 첫 번째if분기(광학 센서가 빨간색을 감지)의 조건이 거짓으로 보고되므로else분기가 실행됩니다. 중첩된 If then else블록의 조건을 검사하여 광학 센서가 녹색을 감지하는지 확인합니다. 해당 조건은 참으로 보고되므로 두 번째if분기 내부의 블록이 실행되어 디스크가 녹색 팔레트 위로 이동합니다.
광학 센서가 빨간색이나 초록색을 감지하지 못하면(파란색 큐브를 집어 올린 경우처럼) 두 조건 모두 거짓으로 보고되고, 중첩된If then else블록의else분기가 실행되어 제어된 정지가 발생하고 작업자에게 인간의 개입이 필요함을 알립니다. 이러한 프로젝트 흐름은 여기에서 볼 수 있는 것과 같은 흐름도로도 시각화할 수 있습니다.

중첩된If then else블록은 계단식 질문 목록으로 볼 수 있습니다. 질문은 다음과 같습니다.
- 그 물체는 빨간색인가요?
- 예? 붉은 팔레트를 넘어 더 이상 질문을 하지 마세요.
- 아니요? 다른 질문을 해보세요.
- 그 물체가 녹색인가요?
- 예? 녹색 팔레트를 넘어서서 더 이상 질문을 하지 마세요.
- 아니요? 그러면 그 물체는 빨간색도 아니고 초록색도 아니다. 신호탑 색상을 변경하고 통제된 정지를 실행합니다.
- 그 물체가 녹색인가요?
이전 질문에 부정적으로 답한 경우에만 질문이 나온다는 점에 유의하세요.
이 블록은 우리가 확인하고자 하는 모든 조건을 처리하지만, 같은 방식으로 조건을 확인하는 또 다른 블록이 있는데, 이는 중첩 블록을 만드는 것보다 만들기 쉽습니다.
그렇지 않으면블록
Else if 블록을 사용하면 동일한 블록 내에서 여러 조건을 확인할 수 있습니다. 이 블록의 각 조건은 이전 조건이 거짓으로 보고되는 경우에만 순차적으로 확인됩니다. else if 분기의 모든 부울 조건이 거짓이면 else 섹션 내부의 블록이 실행됩니다.

이 블록은 중첩된If then else블록과 동일한 프로젝트 흐름을 가지고 있지만, 블록을 중첩할 필요가 없기 때문에 빌드하기가 더 쉽습니다. 다음 수업에서는 Else if블록을 사용하여 코딩하는 방법에 대해 자세히 알아보겠습니다.
이해도 확인
다음 수업으로 넘어가기 전에 엔지니어링 노트에 있는 다음 질문에 답하여 이 수업의 개념을 이해했는지 확인하세요.
이해도 확인 질문 > (Google Doc/ .docx / .pdf)
프로젝트에 Else if블록을 적용하려면다음 >선택하세요.